{"version":3,"file":"index.cjs","sources":["../src/runner/openscad-runner.ts","../node_modules/monaco-editor/esm/vs/base/common/arrays.js","../node_modules/monaco-editor/esm/vs/base/common/types.js","../node_modules/monaco-editor/esm/vs/base/common/objects.js","../node_modules/monaco-editor/esm/vs/nls.messages.js","../node_modules/monaco-editor/esm/vs/nls.js","../node_modules/monaco-editor/esm/vs/base/common/platform.js","../node_modules/monaco-editor/esm/vs/editor/common/core/textModelDefaults.js","../node_modules/monaco-editor/esm/vs/base/common/iterator.js","../node_modules/monaco-editor/esm/vs/base/common/linkedList.js","../node_modules/monaco-editor/esm/vs/editor/common/core/wordHelper.js","../node_modules/monaco-editor/esm/vs/editor/common/config/editorOptions.js","../node_modules/monaco-editor/esm/vs/base/common/errors.js","../node_modules/monaco-editor/esm/vs/base/common/functional.js","../node_modules/monaco-editor/esm/vs/base/common/lifecycle.js","../node_modules/monaco-editor/esm/vs/base/common/stopwatch.js","../node_modules/monaco-editor/esm/vs/base/common/event.js","../node_modules/monaco-editor/esm/vs/base/common/cancellation.js","../node_modules/monaco-editor/esm/vs/base/common/keyCodes.js","../node_modules/monaco-editor/esm/vs/base/common/process.js","../node_modules/monaco-editor/esm/vs/base/common/path.js","../node_modules/monaco-editor/esm/vs/base/common/uri.js","../node_modules/monaco-editor/esm/vs/editor/common/core/position.js","../node_modules/monaco-editor/esm/vs/editor/common/core/range.js","../node_modules/monaco-editor/esm/vs/editor/common/core/selection.js","../node_modules/monaco-editor/esm/vs/base/common/codiconsUtil.js","../node_modules/monaco-editor/esm/vs/base/common/codiconsLibrary.js","../node_modules/monaco-editor/esm/vs/base/common/codicons.js","../node_modules/monaco-editor/esm/vs/editor/common/tokenizationRegistry.js","../node_modules/monaco-editor/esm/vs/editor/common/languages.js","../node_modules/monaco-editor/esm/vs/editor/common/standalone/standaloneEnums.js","../node_modules/monaco-editor/esm/vs/editor/common/services/editorBaseApi.js","../node_modules/monaco-editor/esm/vs/base/browser/window.js","../node_modules/monaco-editor/esm/vs/base/common/cache.js","../node_modules/monaco-editor/esm/vs/base/common/lazy.js","../node_modules/monaco-editor/esm/vs/base/common/strings.js","../node_modules/monaco-editor/esm/vs/base/browser/browser.js","../node_modules/monaco-editor/esm/vs/base/browser/canIUse.js","../node_modules/monaco-editor/esm/vs/base/common/keybindings.js","../node_modules/monaco-editor/esm/vs/base/browser/keyboardEvent.js","../node_modules/monaco-editor/esm/vs/base/browser/iframe.js","../node_modules/monaco-editor/esm/vs/base/browser/mouseEvent.js","../node_modules/monaco-editor/esm/vs/base/common/symbols.js","../node_modules/monaco-editor/esm/vs/base/common/async.js","../node_modules/monaco-editor/esm/vs/base/browser/dompurify/dompurify.js","../node_modules/monaco-editor/esm/vs/base/common/network.js","../node_modules/monaco-editor/esm/vs/base/common/hash.js","../node_modules/monaco-editor/esm/vs/base/browser/dom.js","../node_modules/monaco-editor/esm/vs/base/browser/pixelRatio.js","../node_modules/monaco-editor/esm/vs/base/browser/fastDomNode.js","../node_modules/monaco-editor/esm/vs/editor/browser/config/domFontInfo.js","../node_modules/monaco-editor/esm/vs/editor/browser/config/charWidthReader.js","../node_modules/monaco-editor/esm/vs/editor/common/config/editorZoom.js","../node_modules/monaco-editor/esm/vs/editor/common/config/fontInfo.js","../node_modules/monaco-editor/esm/vs/editor/browser/config/fontMeasurements.js","../node_modules/monaco-editor/esm/vs/platform/instantiation/common/instantiation.js","../node_modules/monaco-editor/esm/vs/editor/browser/services/codeEditorService.js","../node_modules/monaco-editor/esm/vs/editor/common/services/model.js","../node_modules/monaco-editor/esm/vs/editor/common/services/resolverService.js","../node_modules/monaco-editor/esm/vs/base/common/actions.js","../node_modules/monaco-editor/esm/vs/base/common/themables.js","../node_modules/monaco-editor/esm/vs/platform/commands/common/commands.js","../node_modules/monaco-editor/esm/vs/platform/contextkey/common/scanner.js","../node_modules/monaco-editor/esm/vs/platform/contextkey/common/contextkey.js","../node_modules/monaco-editor/esm/vs/base/common/assert.js","../node_modules/monaco-editor/esm/vs/platform/registry/common/platform.js","../node_modules/monaco-editor/esm/vs/platform/keybinding/common/keybindingsRegistry.js","../node_modules/monaco-editor/esm/vs/platform/actions/common/actions.js","../node_modules/monaco-editor/esm/vs/platform/telemetry/common/telemetry.js","../node_modules/monaco-editor/esm/vs/platform/log/common/log.js","../node_modules/monaco-editor/esm/vs/editor/browser/editorExtensions.js","../node_modules/monaco-editor/esm/vs/base/common/worker/simpleWorker.js","../node_modules/monaco-editor/esm/vs/base/browser/trustedTypes.js","../node_modules/monaco-editor/esm/vs/base/browser/defaultWorkerFactory.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/languageConfiguration.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/supports/characterPair.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/supports.js","../node_modules/monaco-editor/esm/vs/base/common/buffer.js","../node_modules/monaco-editor/esm/vs/editor/common/core/stringBuilder.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/supports/richEditBrackets.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/supports/electricCharacter.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/supports/indentRules.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/supports/onEnter.js","../node_modules/monaco-editor/esm/vs/platform/configuration/common/configuration.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/language.js","../node_modules/monaco-editor/esm/vs/platform/instantiation/common/descriptors.js","../node_modules/monaco-editor/esm/vs/platform/instantiation/common/extensions.js","../node_modules/monaco-editor/esm/vs/base/common/mime.js","../node_modules/monaco-editor/esm/vs/platform/jsonschemas/common/jsonContributionRegistry.js","../node_modules/monaco-editor/esm/vs/platform/configuration/common/configurationRegistry.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/modesRegistry.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/supports/languageBracketsConfiguration.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/languageConfigurationRegistry.js","../node_modules/monaco-editor/esm/vs/base/common/diff/diffChange.js","../node_modules/monaco-editor/esm/vs/base/common/diff/diff.js","../node_modules/monaco-editor/esm/vs/base/common/uint.js","../node_modules/monaco-editor/esm/vs/editor/common/core/characterClassifier.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/linkComputer.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/supports/inplaceReplaceSupport.js","../node_modules/monaco-editor/esm/vs/editor/common/services/editorWorkerHost.js","../node_modules/monaco-editor/esm/vs/base/common/map.js","../node_modules/monaco-editor/esm/vs/editor/common/core/wordCharacterClassifier.js","../node_modules/monaco-editor/esm/vs/editor/common/model.js","../node_modules/monaco-editor/esm/vs/editor/common/model/textModelSearch.js","../node_modules/monaco-editor/esm/vs/editor/common/services/unicodeTextModelHighlighter.js","../node_modules/monaco-editor/esm/vs/editor/common/diff/linesDiffComputer.js","../node_modules/monaco-editor/esm/vs/editor/common/core/offsetRange.js","../node_modules/monaco-editor/esm/vs/base/common/arraysFind.js","../node_modules/monaco-editor/esm/vs/editor/common/core/lineRange.js","../node_modules/monaco-editor/esm/vs/editor/common/core/textLength.js","../node_modules/monaco-editor/esm/vs/editor/common/core/positionToOffset.js","../node_modules/monaco-editor/esm/vs/editor/common/core/textEdit.js","../node_modules/monaco-editor/esm/vs/editor/common/diff/rangeMapping.js","../node_modules/monaco-editor/esm/vs/editor/common/diff/legacyLinesDiffComputer.js","../node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/diffAlgorithm.js","../node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/utils.js","../node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/dynamicProgrammingDiffing.js","../node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/algorithms/myersDiffAlgorithm.js","../node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/linesSliceCharSequence.js","../node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/computeMovedLines.js","../node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations.js","../node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/lineSequence.js","../node_modules/monaco-editor/esm/vs/editor/common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.js","../node_modules/monaco-editor/esm/vs/editor/common/diff/linesDiffComputers.js","../node_modules/monaco-editor/esm/vs/base/common/color.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/defaultDocumentColorsComputer.js","../node_modules/monaco-editor/esm/vs/editor/common/services/findSectionHeaders.js","../node_modules/monaco-editor/esm/vs/editor/common/model/prefixSumComputer.js","../node_modules/monaco-editor/esm/vs/editor/common/model/mirrorTextModel.js","../node_modules/monaco-editor/esm/vs/editor/common/services/textModelSync/textModelSync.impl.js","../node_modules/monaco-editor/esm/vs/editor/common/services/editorSimpleWorker.js","../node_modules/monaco-editor/esm/vs/editor/common/services/textResourceConfiguration.js","../node_modules/monaco-editor/esm/vs/editor/common/services/languageFeatures.js","../node_modules/monaco-editor/esm/vs/editor/browser/services/editorWorkerService.js","../node_modules/monaco-editor/esm/vs/platform/theme/common/theme.js","../node_modules/monaco-editor/esm/vs/platform/theme/common/themeService.js","../node_modules/monaco-editor/esm/vs/editor/browser/services/abstractCodeEditorService.js","../node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneCodeEditorService.js","../node_modules/monaco-editor/esm/vs/platform/layout/browser/layoutService.js","../node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneLayoutService.js","../node_modules/monaco-editor/esm/vs/base/common/severity.js","../node_modules/monaco-editor/esm/vs/platform/dialogs/common/dialogs.js","../node_modules/monaco-editor/esm/vs/platform/notification/common/notification.js","../node_modules/monaco-editor/esm/vs/platform/undoRedo/common/undoRedo.js","../node_modules/monaco-editor/esm/vs/platform/undoRedo/common/undoRedoService.js","../node_modules/monaco-editor/esm/vs/base/common/numbers.js","../node_modules/monaco-editor/esm/vs/platform/environment/common/environment.js","../node_modules/monaco-editor/esm/vs/editor/common/services/languageFeatureDebounce.js","../node_modules/monaco-editor/esm/vs/editor/common/encodedTokenAttributes.js","../node_modules/monaco-editor/esm/vs/editor/common/core/eolCounter.js","../node_modules/monaco-editor/esm/vs/editor/common/services/semanticTokensProviderStyling.js","../node_modules/monaco-editor/esm/vs/editor/common/services/semanticTokensStyling.js","../node_modules/monaco-editor/esm/vs/editor/common/services/semanticTokensStylingService.js","../node_modules/monaco-editor/esm/vs/base/common/extpath.js","../node_modules/monaco-editor/esm/vs/base/common/glob.js","../node_modules/monaco-editor/esm/vs/editor/common/languageSelector.js","../node_modules/monaco-editor/esm/vs/editor/common/languageFeatureRegistry.js","../node_modules/monaco-editor/esm/vs/editor/common/services/languageFeaturesService.js","../node_modules/monaco-editor/esm/vs/platform/theme/common/colorUtils.js","../node_modules/monaco-editor/esm/vs/platform/theme/common/colors/baseColors.js","../node_modules/monaco-editor/esm/vs/platform/theme/common/colors/miscColors.js","../node_modules/monaco-editor/esm/vs/platform/theme/common/colors/editorColors.js","../node_modules/monaco-editor/esm/vs/platform/theme/common/colors/minimapColors.js","../node_modules/monaco-editor/esm/vs/platform/theme/common/colors/chartsColors.js","../node_modules/monaco-editor/esm/vs/platform/theme/common/colors/inputColors.js","../node_modules/monaco-editor/esm/vs/platform/theme/common/colors/listColors.js","../node_modules/monaco-editor/esm/vs/platform/theme/common/colors/menuColors.js","../node_modules/monaco-editor/esm/vs/platform/theme/common/colors/quickpickColors.js","../node_modules/monaco-editor/esm/vs/platform/theme/common/colors/searchColors.js","../node_modules/monaco-editor/esm/vs/platform/hover/browser/hover.js","../node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextView.js","../node_modules/monaco-editor/esm/vs/platform/keybinding/common/keybinding.js","../node_modules/monaco-editor/esm/vs/base/browser/globalPointerMoveMonitor.js","../node_modules/monaco-editor/esm/vs/base/common/decorators.js","../node_modules/monaco-editor/esm/vs/base/browser/touch.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/widget.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollbarArrow.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/abstractScrollbar.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollbarState.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/horizontalScrollbar.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/verticalScrollbar.js","../node_modules/monaco-editor/esm/vs/base/common/scrollable.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/scrollbar/scrollableElement.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/hover/hoverWidget.js","../node_modules/monaco-editor/esm/vs/platform/opener/common/opener.js","../node_modules/monaco-editor/esm/vs/base/browser/event.js","../node_modules/monaco-editor/esm/vs/base/browser/formattedTextRenderer.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/iconLabel/iconLabels.js","../node_modules/monaco-editor/esm/vs/base/common/filters.js","../node_modules/monaco-editor/esm/vs/base/common/iconLabels.js","../node_modules/monaco-editor/esm/vs/base/common/resources.js","../node_modules/monaco-editor/esm/vs/base/common/htmlContent.js","../node_modules/monaco-editor/esm/vs/base/common/idGenerator.js","../node_modules/monaco-editor/esm/vs/base/common/marked/marked.js","../node_modules/monaco-editor/esm/vs/base/common/marshalling.js","../node_modules/monaco-editor/esm/vs/base/browser/markdownRenderer.js","../node_modules/monaco-editor/esm/vs/editor/common/tokens/lineTokens.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/nullTokenize.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/textToHtmlTokenizer.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/markdownRenderer/browser/markdownRenderer.js","../node_modules/monaco-editor/esm/vs/platform/accessibility/common/accessibility.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/aria/aria.js","../node_modules/monaco-editor/esm/vs/editor/browser/services/hoverService/hoverWidget.js","../node_modules/monaco-editor/esm/vs/base/common/range.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/contextview/contextview.js","../node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextViewService.js","../node_modules/monaco-editor/esm/vs/editor/browser/services/hoverService/updatableHoverWidget.js","../node_modules/monaco-editor/esm/vs/editor/browser/services/hoverService/hoverService.js","../node_modules/monaco-editor/esm/vs/editor/browser/services/bulkEditService.js","../node_modules/monaco-editor/esm/vs/editor/common/config/diffEditor.js","../node_modules/monaco-editor/esm/vs/editor/common/config/editorConfigurationSchema.js","../node_modules/monaco-editor/esm/vs/editor/common/core/editOperation.js","../node_modules/monaco-editor/esm/vs/platform/configuration/common/configurationModels.js","../node_modules/monaco-editor/esm/vs/base/common/ime.js","../node_modules/monaco-editor/esm/vs/platform/keybinding/common/keybindingResolver.js","../node_modules/monaco-editor/esm/vs/platform/keybinding/common/abstractKeybindingService.js","../node_modules/monaco-editor/esm/vs/platform/keybinding/common/resolvedKeybindingItem.js","../node_modules/monaco-editor/esm/vs/base/common/keybindingLabels.js","../node_modules/monaco-editor/esm/vs/platform/keybinding/common/baseResolvedKeybinding.js","../node_modules/monaco-editor/esm/vs/platform/keybinding/common/usLayoutResolvedKeybinding.js","../node_modules/monaco-editor/esm/vs/platform/label/common/label.js","../node_modules/monaco-editor/esm/vs/platform/progress/common/progress.js","../node_modules/monaco-editor/esm/vs/base/common/ternarySearchTree.js","../node_modules/monaco-editor/esm/vs/platform/workspace/common/workspace.js","../node_modules/monaco-editor/esm/vs/editor/common/standaloneStrings.js","../node_modules/monaco-editor/esm/vs/platform/workspace/common/workspaceTrust.js","../node_modules/monaco-editor/esm/vs/editor/common/services/languagesAssociations.js","../node_modules/monaco-editor/esm/vs/editor/common/services/languagesRegistry.js","../node_modules/monaco-editor/esm/vs/base/common/equals.js","../node_modules/monaco-editor/esm/vs/base/common/observableInternal/debugName.js","../node_modules/monaco-editor/esm/vs/base/common/observableInternal/logging.js","../node_modules/monaco-editor/esm/vs/base/common/observableInternal/base.js","../node_modules/monaco-editor/esm/vs/base/common/observableInternal/derived.js","../node_modules/monaco-editor/esm/vs/base/common/observableInternal/autorun.js","../node_modules/monaco-editor/esm/vs/base/common/observableInternal/utils.js","../node_modules/monaco-editor/esm/vs/base/common/observableInternal/promise.js","../node_modules/monaco-editor/esm/vs/base/common/observableInternal/lazyObservableValue.js","../node_modules/monaco-editor/esm/vs/base/common/observableInternal/api.js","../node_modules/monaco-editor/esm/vs/editor/common/services/languageService.js","../node_modules/monaco-editor/esm/vs/base/browser/dnd.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/hover/hoverDelegateFactory.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/hover/hoverDelegate2.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/list/splice.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/list/list.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/list/rangeMap.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/list/rowCache.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/list/listView.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/list/listWidget.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/selectBox/selectBoxCustom.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/selectBox/selectBoxNative.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/selectBox/selectBox.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/actionbar/actionViewItems.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/dropdown/dropdown.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/dropdown/dropdownActionViewItem.js","../node_modules/monaco-editor/esm/vs/platform/action/common/action.js","../node_modules/monaco-editor/esm/vs/base/parts/storage/common/storage.js","../node_modules/monaco-editor/esm/vs/platform/storage/common/storage.js","../node_modules/monaco-editor/esm/vs/platform/theme/browser/defaultStyles.js","../node_modules/monaco-editor/esm/vs/platform/actions/browser/menuEntryActionViewItem.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/actionbar/actionbar.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/menu/menu.js","../node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextMenuHandler.js","../node_modules/monaco-editor/esm/vs/platform/contextview/browser/contextMenuService.js","../node_modules/monaco-editor/esm/vs/platform/editor/common/editor.js","../node_modules/monaco-editor/esm/vs/editor/browser/services/openerService.js","../node_modules/monaco-editor/esm/vs/editor/common/services/editorWorker.js","../node_modules/monaco-editor/esm/vs/platform/markers/common/markers.js","../node_modules/monaco-editor/esm/vs/editor/common/core/editorColorRegistry.js","../node_modules/monaco-editor/esm/vs/base/common/collections.js","../node_modules/monaco-editor/esm/vs/editor/common/services/markerDecorationsService.js","../node_modules/monaco-editor/esm/vs/editor/common/services/markerDecorations.js","../node_modules/monaco-editor/esm/vs/editor/common/core/cursorColumns.js","../node_modules/monaco-editor/esm/vs/editor/common/core/indentation.js","../node_modules/monaco-editor/esm/vs/editor/common/textModelBracketPairs.js","../node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.js","../node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper.js","../node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet.js","../node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/ast.js","../node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/tokenizer.js","../node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/brackets.js","../node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/concat23Trees.js","../node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/nodeReader.js","../node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/parser.js","../node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/combineTextEditInfos.js","../node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/bracketPairsTree.js","../node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsImpl.js","../node_modules/monaco-editor/esm/vs/editor/common/model/bracketPairsTextModelPart/colorizedBracketPairsDecorationProvider.js","../node_modules/monaco-editor/esm/vs/editor/common/core/textChange.js","../node_modules/monaco-editor/esm/vs/editor/common/model/editStack.js","../node_modules/monaco-editor/esm/vs/editor/common/model/textModelPart.js","../node_modules/monaco-editor/esm/vs/editor/common/model/utils.js","../node_modules/monaco-editor/esm/vs/editor/common/textModelGuides.js","../node_modules/monaco-editor/esm/vs/editor/common/model/guidesTextModelPart.js","../node_modules/monaco-editor/esm/vs/editor/common/model/indentationGuesser.js","../node_modules/monaco-editor/esm/vs/editor/common/model/intervalTree.js","../node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/rbTreeBase.js","../node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeBase.js","../node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBuffer.js","../node_modules/monaco-editor/esm/vs/editor/common/model/pieceTreeTextBuffer/pieceTreeTextBufferBuilder.js","../node_modules/monaco-editor/esm/vs/editor/common/model/fixedArray.js","../node_modules/monaco-editor/esm/vs/editor/common/tokens/contiguousMultilineTokens.js","../node_modules/monaco-editor/esm/vs/editor/common/tokens/contiguousMultilineTokensBuilder.js","../node_modules/monaco-editor/esm/vs/editor/common/model/textModelTokens.js","../node_modules/monaco-editor/esm/vs/editor/common/model/tokens.js","../node_modules/monaco-editor/esm/vs/editor/common/model/treeSitterTokens.js","../node_modules/monaco-editor/esm/vs/editor/common/services/treeSitterParserService.js","../node_modules/monaco-editor/esm/vs/editor/common/tokens/contiguousTokensEditing.js","../node_modules/monaco-editor/esm/vs/editor/common/tokens/contiguousTokensStore.js","../node_modules/monaco-editor/esm/vs/editor/common/tokens/sparseTokensStore.js","../node_modules/monaco-editor/esm/vs/editor/common/model/tokenizationTextModelPart.js","../node_modules/monaco-editor/esm/vs/editor/common/textModelEvents.js","../node_modules/monaco-editor/esm/vs/editor/common/model/textModel.js","../node_modules/monaco-editor/esm/vs/editor/common/services/modelService.js","../node_modules/monaco-editor/esm/vs/platform/quickinput/common/quickAccess.js","../node_modules/monaco-editor/esm/vs/platform/quickinput/common/quickInput.js","../node_modules/monaco-editor/esm/vs/platform/quickinput/browser/quickAccess.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/toggle/toggle.js","../node_modules/monaco-editor/esm/vs/base/common/linkedText.js","../node_modules/monaco-editor/esm/vs/platform/quickinput/browser/quickInputUtils.js","../node_modules/monaco-editor/esm/vs/platform/quickinput/browser/quickInput.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/button/button.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/countBadge/countBadge.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/progressbar/progressbar.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/findinput/findInputToggles.js","../node_modules/monaco-editor/esm/vs/base/common/navigator.js","../node_modules/monaco-editor/esm/vs/base/common/history.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/inputbox/inputBox.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/findinput/findInput.js","../node_modules/monaco-editor/esm/vs/platform/quickinput/browser/quickInputBox.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/list/listPaging.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/sash/sash.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/splitview/splitview.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/table/tableWidget.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/tree/tree.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/tree/indexTreeModel.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/tree/abstractTree.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/tree/objectTreeModel.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/tree/compressedObjectTreeModel.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/tree/objectTree.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/tree/asyncDataTree.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/tree/dataTree.js","../node_modules/monaco-editor/esm/vs/platform/contextkey/common/contextkeys.js","../node_modules/monaco-editor/esm/vs/platform/list/browser/listService.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/highlightedlabel/highlightedLabel.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/iconLabel/iconLabel.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/keybindingLabel/keybindingLabel.js","../node_modules/monaco-editor/esm/vs/base/common/comparers.js","../node_modules/monaco-editor/esm/vs/platform/quickinput/browser/quickInputTree.js","../node_modules/monaco-editor/esm/vs/platform/quickinput/browser/quickInputActions.js","../node_modules/monaco-editor/esm/vs/platform/quickinput/browser/quickInputController.js","../node_modules/monaco-editor/esm/vs/platform/quickinput/browser/quickInputService.js","../node_modules/monaco-editor/esm/vs/editor/standalone/browser/quickInput/standaloneQuickInputService.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/supports/tokenization.js","../node_modules/monaco-editor/esm/vs/editor/standalone/common/themes.js","../node_modules/monaco-editor/esm/vs/platform/theme/common/iconRegistry.js","../node_modules/monaco-editor/esm/vs/platform/theme/browser/iconsStyleSheet.js","../node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneThemeService.js","../node_modules/monaco-editor/esm/vs/editor/standalone/common/standaloneTheme.js","../node_modules/monaco-editor/esm/vs/platform/accessibility/browser/accessibilityService.js","../node_modules/monaco-editor/esm/vs/platform/actions/common/menuService.js","../node_modules/monaco-editor/esm/vs/platform/clipboard/browser/clipboardService.js","../node_modules/monaco-editor/esm/vs/platform/clipboard/common/clipboardService.js","../node_modules/monaco-editor/esm/vs/platform/contextkey/browser/contextKeyService.js","../node_modules/monaco-editor/esm/vs/platform/instantiation/common/graph.js","../node_modules/monaco-editor/esm/vs/platform/instantiation/common/serviceCollection.js","../node_modules/monaco-editor/esm/vs/platform/instantiation/common/instantiationService.js","../node_modules/monaco-editor/esm/vs/platform/markers/common/markerService.js","../node_modules/monaco-editor/esm/vs/platform/configuration/common/configurations.js","../node_modules/monaco-editor/esm/vs/platform/accessibilitySignal/browser/accessibilitySignalService.js","../node_modules/monaco-editor/esm/vs/platform/log/common/logService.js","../node_modules/monaco-editor/esm/vs/editor/common/editorFeatures.js","../node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneTreeSitterService.js","../node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneServices.js","../node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneWebWorker.js","../node_modules/monaco-editor/esm/vs/editor/common/editorCommon.js","../node_modules/monaco-editor/esm/vs/editor/common/viewLayout/lineDecorations.js","../node_modules/monaco-editor/esm/vs/editor/common/viewLayout/linePart.js","../node_modules/monaco-editor/esm/vs/editor/common/viewLayout/viewLineRenderer.js","../node_modules/monaco-editor/esm/vs/editor/common/viewModel.js","../node_modules/monaco-editor/esm/vs/editor/standalone/common/monarch/monarchCommon.js","../node_modules/monaco-editor/esm/vs/editor/standalone/common/monarch/monarchLexer.js","../node_modules/monaco-editor/esm/vs/editor/standalone/browser/colorizer.js","../node_modules/monaco-editor/esm/vs/editor/browser/services/markerDecorations.js","../node_modules/monaco-editor/esm/vs/editor/browser/config/elementSizeObserver.js","../node_modules/monaco-editor/esm/vs/editor/browser/config/migrateOptions.js","../node_modules/monaco-editor/esm/vs/editor/browser/config/tabFocus.js","../node_modules/monaco-editor/esm/vs/editor/browser/config/editorConfiguration.js","../node_modules/monaco-editor/esm/vs/base/browser/performance.js","../node_modules/monaco-editor/esm/vs/editor/browser/editorDom.js","../node_modules/monaco-editor/esm/vs/editor/common/viewEventHandler.js","../node_modules/monaco-editor/esm/vs/editor/browser/view/viewPart.js","../node_modules/monaco-editor/esm/vs/editor/browser/view/renderingContext.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lines/rangeUtil.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lines/viewLine.js","../node_modules/monaco-editor/esm/vs/editor/common/cursor/cursorAtomicMoveOperations.js","../node_modules/monaco-editor/esm/vs/editor/browser/controller/mouseTarget.js","../node_modules/monaco-editor/esm/vs/editor/browser/controller/mouseHandler.js","../node_modules/monaco-editor/esm/vs/editor/browser/controller/textAreaState.js","../node_modules/monaco-editor/esm/vs/editor/browser/controller/textAreaInput.js","../node_modules/monaco-editor/esm/vs/editor/browser/controller/pointerHandler.js","../node_modules/monaco-editor/esm/vs/editor/browser/view/dynamicViewOverlay.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lineNumbers/lineNumbers.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/margin/margin.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/mouseCursor/mouseCursor.js","../node_modules/monaco-editor/esm/vs/editor/browser/controller/textAreaHandler.js","../node_modules/monaco-editor/esm/vs/editor/common/cursorCommon.js","../node_modules/monaco-editor/esm/vs/editor/common/cursor/cursorColumnSelection.js","../node_modules/monaco-editor/esm/vs/editor/common/commands/replaceCommand.js","../node_modules/monaco-editor/esm/vs/editor/common/cursor/cursorMoveOperations.js","../node_modules/monaco-editor/esm/vs/editor/common/cursor/cursorDeleteOperations.js","../node_modules/monaco-editor/esm/vs/editor/common/cursor/cursorWordOperations.js","../node_modules/monaco-editor/esm/vs/editor/common/cursor/cursorMoveCommands.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/supports/indentationLineProcessor.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/enterAction.js","../node_modules/monaco-editor/esm/vs/editor/common/commands/shiftCommand.js","../node_modules/monaco-editor/esm/vs/editor/common/commands/surroundSelectionCommand.js","../node_modules/monaco-editor/esm/vs/editor/common/languages/autoIndent.js","../node_modules/monaco-editor/esm/vs/editor/common/cursor/cursorTypeEditOperations.js","../node_modules/monaco-editor/esm/vs/editor/common/cursor/cursorTypeOperations.js","../node_modules/monaco-editor/esm/vs/editor/common/editorContextKeys.js","../node_modules/monaco-editor/esm/vs/editor/browser/coreCommands.js","../node_modules/monaco-editor/esm/vs/editor/browser/view/viewController.js","../node_modules/monaco-editor/esm/vs/editor/browser/view/viewLayer.js","../node_modules/monaco-editor/esm/vs/editor/browser/view/viewOverlays.js","../node_modules/monaco-editor/esm/vs/editor/browser/view/viewUserInputEvents.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/blockDecorations/blockDecorations.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/currentLineHighlight/currentLineHighlight.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/decorations/decorations.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/editorScrollbar/editorScrollbar.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/glyphMargin/glyphMargin.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/indentGuides/indentGuides.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lines/domReadingContext.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/lines/viewLines.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/linesDecorations/linesDecorations.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/marginDecorations/marginDecorations.js","../node_modules/monaco-editor/esm/vs/editor/common/core/rgba.js","../node_modules/monaco-editor/esm/vs/editor/common/viewModel/minimapTokensColorTracker.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapCharSheet.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapCharRenderer.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapPreBaked.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimapCharRendererFactory.js","../node_modules/monaco-editor/esm/vs/base/browser/fonts.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/minimap/minimap.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/overlayWidgets/overlayWidgets.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/overviewRuler/decorationsOverviewRuler.js","../node_modules/monaco-editor/esm/vs/editor/common/viewModel/overviewZoneManager.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/overviewRuler/overviewRuler.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/rulers/rulers.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/scrollDecoration/scrollDecoration.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/selections/selections.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/viewCursors/viewCursor.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/viewCursors/viewCursors.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/viewZones/viewZones.js","../node_modules/monaco-editor/esm/vs/editor/browser/viewParts/whitespace/whitespace.js","../node_modules/monaco-editor/esm/vs/editor/common/viewLayout/viewLinesViewportData.js","../node_modules/monaco-editor/esm/vs/editor/common/editorTheme.js","../node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewContext.js","../node_modules/monaco-editor/esm/vs/editor/browser/view.js","../node_modules/monaco-editor/esm/vs/editor/common/modelLineProjectionData.js","../node_modules/monaco-editor/esm/vs/editor/browser/view/domLineBreaksComputer.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/codeEditor/codeEditorContributions.js","../node_modules/monaco-editor/esm/vs/editor/common/editorAction.js","../node_modules/monaco-editor/esm/vs/editor/common/viewModel/monospaceLineBreaksComputer.js","../node_modules/monaco-editor/esm/vs/editor/common/cursor/oneCursor.js","../node_modules/monaco-editor/esm/vs/editor/common/cursor/cursorCollection.js","../node_modules/monaco-editor/esm/vs/editor/common/cursor/cursorContext.js","../node_modules/monaco-editor/esm/vs/editor/common/viewEvents.js","../node_modules/monaco-editor/esm/vs/editor/common/viewModelEventDispatcher.js","../node_modules/monaco-editor/esm/vs/editor/common/cursor/cursor.js","../node_modules/monaco-editor/esm/vs/editor/common/viewLayout/linesLayout.js","../node_modules/monaco-editor/esm/vs/editor/common/viewLayout/viewLayout.js","../node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModelDecorations.js","../node_modules/monaco-editor/esm/vs/editor/common/viewModel/modelLineProjection.js","../node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModelLines.js","../node_modules/monaco-editor/esm/vs/editor/common/viewModel/glyphLanesModel.js","../node_modules/monaco-editor/esm/vs/editor/common/viewModel/viewModelImpl.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js","../node_modules/monaco-editor/esm/vs/editor/browser/stableEditorScroll.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/utils.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/registrations.contribution.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/diffProviderFactoryService.js","../node_modules/monaco-editor/esm/vs/base/common/hotReload.js","../node_modules/monaco-editor/esm/vs/base/common/hotReloadHelpers.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/diffEditorViewModel.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/renderLines.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/diffEditorViewZones.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/components/diffEditorDecorations.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/components/diffEditorSash.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/utils/editorGutter.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/multiDiffEditor/utils.js","../node_modules/monaco-editor/esm/vs/editor/common/model/textModelText.js","../node_modules/monaco-editor/esm/vs/base/browser/ui/toolbar/toolbar.js","../node_modules/monaco-editor/esm/vs/platform/actions/browser/toolbar.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/features/gutterFeature.js","../node_modules/monaco-editor/esm/vs/editor/browser/observableCodeEditor.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/features/overviewRulerFeature.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/features/revertButtonsFeature.js","../node_modules/monaco-editor/esm/vs/platform/observable/common/platformObservableUtils.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/delegatingEditorImpl.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/diffEditorOptions.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/diffEditor/diffEditorWidget.js","../node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneCodeEditor.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/multiDiffEditor/objectPool.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidgetImpl.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/multiDiffEditor/colors.js","../node_modules/monaco-editor/esm/vs/editor/browser/widget/multiDiffEditor/multiDiffEditorWidget.js","../node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneEditor.js","../node_modules/monaco-editor/esm/vs/editor/standalone/common/monarch/monarchCompile.js","../node_modules/monaco-editor/esm/vs/editor/standalone/browser/standaloneLanguages.js","../node_modules/monaco-editor/esm/vs/editor/contrib/editorState/browser/keybindingCancellation.js","../node_modules/monaco-editor/esm/vs/platform/extensions/common/extensions.js","../node_modules/monaco-editor/esm/vs/editor/contrib/format/browser/format.js","../node_modules/monaco-editor/esm/vs/editor/editor.api.js","../src/runner/output-parser.ts","../src/runner/actions.ts","../src/state/deep-mutate.ts","../node_modules/jszip/dist/jszip.min.js","../src/state/formats.ts","../src/io/common.ts","../src/io/import_off.ts","../node_modules/property-graph/dist/property-graph.modern.js","../node_modules/@gltf-transform/core/dist/index.modern.js","../node_modules/ktx-parse/dist/ktx-parse.modern.js","../node_modules/@gltf-transform/extensions/dist/index.modern.js","../src/io/export_glb.ts","../node_modules/uzip/UZIP.js","../node_modules/uuid/dist/stringify.js","../node_modules/uuid/dist/rng.js","../node_modules/uuid/dist/native.js","../node_modules/uuid/dist/v4.js","../node_modules/chroma-js/src/utils/limit.js","../node_modules/chroma-js/src/utils/clip_rgb.js","../node_modules/chroma-js/src/utils/type.js","../node_modules/chroma-js/src/utils/unpack.js","../node_modules/chroma-js/src/utils/last.js","../node_modules/chroma-js/src/utils/index.js","../node_modules/chroma-js/src/io/input.js","../node_modules/chroma-js/src/Color.js","../node_modules/chroma-js/src/version.js","../node_modules/chroma-js/src/chroma.js","../node_modules/chroma-js/src/colors/w3cx11.js","../node_modules/chroma-js/src/io/hex/hex2rgb.js","../node_modules/chroma-js/src/io/hex/rgb2hex.js","../node_modules/chroma-js/src/io/named/index.js","../node_modules/chroma-js/src/ops/alpha.js","../node_modules/chroma-js/src/ops/clipped.js","../node_modules/chroma-js/src/io/lab/lab-constants.js","../node_modules/chroma-js/src/io/lab/lab2rgb.js","../node_modules/chroma-js/src/io/lab/rgb2lab.js","../node_modules/chroma-js/src/io/lab/index.js","../node_modules/chroma-js/src/ops/darken.js","../node_modules/chroma-js/src/ops/get.js","../node_modules/chroma-js/src/ops/luminance.js","../node_modules/chroma-js/src/interpolator/index.js","../node_modules/chroma-js/src/generator/mix.js","../node_modules/chroma-js/src/ops/mix.js","../node_modules/chroma-js/src/ops/premultiply.js","../node_modules/chroma-js/src/io/lch/lch2lab.js","../node_modules/chroma-js/src/io/lch/lch2rgb.js","../node_modules/chroma-js/src/io/lch/hcl2rgb.js","../node_modules/chroma-js/src/io/lch/lab2lch.js","../node_modules/chroma-js/src/io/lch/rgb2lch.js","../node_modules/chroma-js/src/io/lch/index.js","../node_modules/chroma-js/src/ops/saturate.js","../node_modules/chroma-js/src/ops/set.js","../node_modules/chroma-js/src/ops/shade.js","../node_modules/chroma-js/src/interpolator/rgb.js","../node_modules/chroma-js/src/interpolator/lrgb.js","../node_modules/chroma-js/src/interpolator/lab.js","../node_modules/chroma-js/src/interpolator/_hsx.js","../node_modules/chroma-js/src/interpolator/lch.js","../node_modules/chroma-js/src/io/num/num2rgb.js","../node_modules/chroma-js/src/io/num/rgb2num.js","../node_modules/chroma-js/src/io/num/index.js","../node_modules/chroma-js/src/interpolator/num.js","../node_modules/chroma-js/src/io/hcg/hcg2rgb.js","../node_modules/chroma-js/src/io/hcg/rgb2hcg.js","../node_modules/chroma-js/src/io/hcg/index.js","../node_modules/chroma-js/src/interpolator/hcg.js","../node_modules/chroma-js/src/io/hsi/hsi2rgb.js","../node_modules/chroma-js/src/io/hsi/rgb2hsi.js","../node_modules/chroma-js/src/io/hsi/index.js","../node_modules/chroma-js/src/interpolator/hsi.js","../node_modules/chroma-js/src/io/hsl/hsl2rgb.js","../node_modules/chroma-js/src/io/hsl/rgb2hsl.js","../node_modules/chroma-js/src/io/hsl/index.js","../node_modules/chroma-js/src/interpolator/hsl.js","../node_modules/chroma-js/src/io/hsv/hsv2rgb.js","../node_modules/chroma-js/src/io/hsv/rgb2hsv.js","../node_modules/chroma-js/src/io/hsv/index.js","../node_modules/chroma-js/src/interpolator/hsv.js","../node_modules/chroma-js/src/utils/multiply-matrices.js","../node_modules/chroma-js/src/io/oklab/oklab2rgb.js","../node_modules/chroma-js/src/io/oklab/rgb2oklab.js","../node_modules/chroma-js/src/io/oklab/index.js","../node_modules/chroma-js/src/interpolator/oklab.js","../node_modules/chroma-js/src/interpolator/oklch.js","../node_modules/chroma-js/src/generator/average.js","../node_modules/chroma-js/src/generator/scale.js","../node_modules/chroma-js/src/generator/bezier.js","../node_modules/chroma-js/src/io/rgb/index.js","../node_modules/chroma-js/src/generator/blend.js","../node_modules/chroma-js/src/generator/cubehelix.js","../node_modules/chroma-js/src/generator/random.js","../node_modules/chroma-js/src/utils/analyze.js","../node_modules/chroma-js/src/utils/contrast.js","../node_modules/chroma-js/src/utils/contrastAPCA.js","../node_modules/chroma-js/src/utils/delta-e.js","../node_modules/chroma-js/src/utils/distance.js","../node_modules/chroma-js/src/utils/valid.js","../node_modules/chroma-js/src/utils/scales.js","../node_modules/chroma-js/src/colors/colorbrewer.js","../node_modules/chroma-js/src/io/cmyk/cmyk2rgb.js","../node_modules/chroma-js/src/io/cmyk/rgb2cmyk.js","../node_modules/chroma-js/src/io/cmyk/index.js","../node_modules/chroma-js/src/io/css/hsl2css.js","../node_modules/chroma-js/src/io/css/lab2css.js","../node_modules/chroma-js/src/io/css/lch2css.js","../node_modules/chroma-js/src/io/css/oklab2css.js","../node_modules/chroma-js/src/io/oklch/rgb2oklch.js","../node_modules/chroma-js/src/io/css/oklch2css.js","../node_modules/chroma-js/src/io/css/rgb2css.js","../node_modules/chroma-js/src/io/oklch/oklch2rgb.js","../node_modules/chroma-js/src/io/css/css2rgb.js","../node_modules/chroma-js/src/io/css/index.js","../node_modules/chroma-js/src/io/gl/index.js","../node_modules/chroma-js/src/io/hex/index.js","../node_modules/chroma-js/src/io/temp/temperature2rgb.js","../node_modules/chroma-js/src/io/temp/rgb2temperature.js","../node_modules/chroma-js/src/io/temp/index.js","../node_modules/chroma-js/src/io/oklch/index.js","../node_modules/chroma-js/index.js","../src/io/export_3mf.ts","../src/state/model.ts","../node_modules/@monaco-editor/loader/lib/es/_virtual/_rollupPluginBabelHelpers.js","../node_modules/state-local/lib/es/state-local.js","../node_modules/@monaco-editor/loader/lib/es/config/index.js","../node_modules/@monaco-editor/loader/lib/es/utils/curry.js","../node_modules/@monaco-editor/loader/lib/es/utils/isObject.js","../node_modules/@monaco-editor/loader/lib/es/validators/index.js","../node_modules/@monaco-editor/loader/lib/es/utils/compose.js","../node_modules/@monaco-editor/loader/lib/es/utils/deepMerge.js","../node_modules/@monaco-editor/loader/lib/es/utils/makeCancelable.js","../node_modules/@monaco-editor/loader/lib/es/loader/index.js","../node_modules/@monaco-editor/react/dist/index.mjs","../src/language/openscad-editor-options.ts","../node_modules/@mui/material/esm/colors/common.js","../node_modules/@mui/material/esm/colors/red.js","../node_modules/@mui/material/esm/colors/purple.js","../node_modules/@mui/material/esm/colors/blue.js","../node_modules/@mui/material/esm/colors/lightBlue.js","../node_modules/@mui/material/esm/colors/green.js","../node_modules/@mui/material/esm/colors/orange.js","../node_modules/@mui/material/esm/colors/grey.js","../node_modules/@mui/utils/esm/formatMuiErrorMessage/formatMuiErrorMessage.js","../node_modules/@mui/material/esm/styles/identifier.js","../node_modules/@babel/runtime/helpers/esm/extends.js","../node_modules/@emotion/sheet/dist/emotion-sheet.esm.js","../node_modules/stylis/src/Enum.js","../node_modules/stylis/src/Utility.js","../node_modules/stylis/src/Tokenizer.js","../node_modules/stylis/src/Parser.js","../node_modules/stylis/src/Serializer.js","../node_modules/stylis/src/Middleware.js","../node_modules/@emotion/memoize/dist/emotion-memoize.esm.js","../node_modules/@emotion/cache/dist/emotion-cache.browser.esm.js","../node_modules/react-is/cjs/react-is.production.min.js","../node_modules/react-is/cjs/react-is.development.js","../node_modules/react-is/index.js","../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../node_modules/@emotion/utils/dist/emotion-utils.browser.esm.js","../node_modules/@emotion/hash/dist/emotion-hash.esm.js","../node_modules/@emotion/unitless/dist/emotion-unitless.esm.js","../node_modules/@emotion/serialize/dist/emotion-serialize.esm.js","../node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.browser.esm.js","../node_modules/@emotion/react/dist/emotion-element-f0de968e.browser.esm.js","../node_modules/@emotion/react/dist/emotion-react.browser.esm.js","../node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js","../node_modules/@emotion/styled/base/dist/emotion-styled-base.browser.esm.js","../node_modules/@emotion/styled/dist/emotion-styled.browser.esm.js","../node_modules/object-assign/index.js","../node_modules/prop-types/lib/ReactPropTypesSecret.js","../node_modules/prop-types/lib/has.js","../node_modules/prop-types/checkPropTypes.js","../node_modules/prop-types/factoryWithTypeCheckers.js","../node_modules/prop-types/factoryWithThrowingShims.js","../node_modules/prop-types/index.js","../node_modules/@mui/styled-engine/esm/GlobalStyles/GlobalStyles.js","../node_modules/@mui/styled-engine/esm/index.js","../node_modules/@mui/utils/node_modules/react-is/cjs/react-is.production.js","../node_modules/@mui/utils/node_modules/react-is/cjs/react-is.development.js","../node_modules/@mui/utils/node_modules/react-is/index.js","../node_modules/@mui/utils/esm/deepmerge/deepmerge.js","../node_modules/@mui/system/esm/createBreakpoints/createBreakpoints.js","../node_modules/@mui/system/esm/cssContainerQueries/cssContainerQueries.js","../node_modules/@mui/system/esm/createTheme/shape.js","../node_modules/@mui/system/esm/responsivePropType/responsivePropType.js","../node_modules/@mui/system/esm/merge/merge.js","../node_modules/@mui/system/esm/breakpoints/breakpoints.js","../node_modules/@mui/utils/esm/capitalize/capitalize.js","../node_modules/@mui/system/esm/style/style.js","../node_modules/@mui/system/esm/memoize/memoize.js","../node_modules/@mui/system/esm/spacing/spacing.js","../node_modules/@mui/system/esm/createTheme/createSpacing.js","../node_modules/@mui/system/esm/compose/compose.js","../node_modules/@mui/system/esm/borders/borders.js","../node_modules/@mui/system/esm/cssGrid/cssGrid.js","../node_modules/@mui/system/esm/palette/palette.js","../node_modules/@mui/system/esm/sizing/sizing.js","../node_modules/@mui/system/esm/styleFunctionSx/defaultSxConfig.js","../node_modules/@mui/system/esm/styleFunctionSx/styleFunctionSx.js","../node_modules/@mui/system/esm/createTheme/applyStyles.js","../node_modules/@mui/system/esm/createTheme/createTheme.js","../node_modules/@mui/system/esm/useThemeWithoutDefault/useThemeWithoutDefault.js","../node_modules/@mui/system/esm/useTheme/useTheme.js","../node_modules/@mui/system/esm/GlobalStyles/GlobalStyles.js","../node_modules/@mui/system/esm/styleFunctionSx/extendSxProp.js","../node_modules/@mui/utils/esm/ClassNameGenerator/ClassNameGenerator.js","../node_modules/clsx/dist/clsx.mjs","../node_modules/@mui/system/esm/createBox/createBox.js","../node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js","../node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js","../node_modules/@mui/utils/esm/getDisplayName/getDisplayName.js","../node_modules/@mui/system/esm/preprocessStyles.js","../node_modules/@mui/system/esm/createStyled/createStyled.js","../node_modules/@mui/utils/esm/resolveProps/resolveProps.js","../node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js","../node_modules/@mui/utils/esm/clamp/clamp.js","../node_modules/@mui/system/esm/colorManipulator/colorManipulator.js","../node_modules/@mui/utils/esm/exactProp/exactProp.js","../node_modules/@mui/private-theming/esm/useTheme/ThemeContext.js","../node_modules/@mui/private-theming/esm/useTheme/useTheme.js","../node_modules/@mui/private-theming/esm/ThemeProvider/nested.js","../node_modules/@mui/private-theming/esm/ThemeProvider/ThemeProvider.js","../node_modules/@mui/system/esm/RtlProvider/index.js","../node_modules/@mui/system/esm/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/utils/esm/useId/useId.js","../node_modules/@mui/system/esm/ThemeProvider/useLayerOrder.js","../node_modules/@mui/system/esm/ThemeProvider/ThemeProvider.js","../node_modules/@mui/system/esm/memoTheme.js","../node_modules/@mui/system/esm/InitColorSchemeScript/InitColorSchemeScript.js","../node_modules/@mui/system/esm/cssVars/localStorageManager.js","../node_modules/@mui/system/esm/cssVars/useCurrentColorScheme.js","../node_modules/@mui/system/esm/cssVars/createCssVarsProvider.js","../node_modules/@mui/system/esm/cssVars/createGetCssVar.js","../node_modules/@mui/system/esm/cssVars/cssVarsParser.js","../node_modules/@mui/system/esm/cssVars/prepareCssVars.js","../node_modules/@mui/system/esm/cssVars/getColorSchemeSelector.js","../node_modules/@mui/utils/esm/composeClasses/composeClasses.js","../node_modules/@mui/utils/esm/isMuiElement/isMuiElement.js","../node_modules/@mui/material/esm/styles/createPalette.js","../node_modules/@mui/system/esm/cssVars/prepareTypographyVars.js","../node_modules/@mui/material/esm/styles/createMixins.js","../node_modules/@mui/material/esm/styles/createTypography.js","../node_modules/@mui/material/esm/styles/shadows.js","../node_modules/@mui/material/esm/styles/createTransitions.js","../node_modules/@mui/material/esm/styles/zIndex.js","../node_modules/@mui/material/esm/styles/stringifyTheme.js","../node_modules/@mui/material/esm/styles/createThemeNoVars.js","../node_modules/@mui/material/esm/styles/getOverlayAlpha.js","../node_modules/@mui/material/esm/styles/createColorScheme.js","../node_modules/@mui/material/esm/styles/shouldSkipGeneratingVar.js","../node_modules/@mui/material/esm/styles/excludeVariablesFromRoot.js","../node_modules/@mui/material/esm/styles/createGetSelector.js","../node_modules/@mui/material/esm/styles/createThemeWithVars.js","../node_modules/@mui/material/esm/styles/createTheme.js","../node_modules/@mui/material/esm/styles/defaultTheme.js","../node_modules/@mui/material/esm/styles/useTheme.js","../node_modules/@mui/material/esm/styles/slotShouldForwardProp.js","../node_modules/@mui/material/esm/styles/rootShouldForwardProp.js","../node_modules/@mui/material/esm/styles/styled.js","../node_modules/@mui/material/esm/styles/ThemeProviderNoVars.js","../node_modules/@mui/material/esm/InitColorSchemeScript/InitColorSchemeScript.js","../node_modules/@mui/material/esm/styles/ThemeProviderWithVars.js","../node_modules/@mui/material/esm/styles/ThemeProvider.js","../node_modules/@mui/utils/esm/createChainedFunction/createChainedFunction.js","../node_modules/@mui/material/esm/GlobalStyles/GlobalStyles.js","../node_modules/@mui/material/esm/zero-styled/index.js","../node_modules/@mui/material/esm/utils/memoTheme.js","../node_modules/@mui/material/esm/DefaultPropsProvider/DefaultPropsProvider.js","../node_modules/@mui/material/esm/SvgIcon/svgIconClasses.js","../node_modules/@mui/material/esm/SvgIcon/SvgIcon.js","../node_modules/@mui/material/esm/utils/createSvgIcon.js","../node_modules/@mui/utils/esm/debounce/debounce.js","../node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js","../node_modules/@mui/utils/esm/ownerWindow/ownerWindow.js","../node_modules/@mui/utils/esm/setRef/setRef.js","../node_modules/@mui/utils/esm/unsupportedProp/unsupportedProp.js","../node_modules/@mui/utils/esm/useControlled/useControlled.js","../node_modules/@mui/utils/esm/useEventCallback/useEventCallback.js","../node_modules/@mui/utils/esm/useForkRef/useForkRef.js","../node_modules/@mui/material/esm/utils/mergeSlotProps.js","../node_modules/@mui/material/node_modules/react-is/cjs/react-is.production.js","../node_modules/@mui/material/node_modules/react-is/cjs/react-is.development.js","../node_modules/@mui/material/node_modules/react-is/index.js","../node_modules/@mui/utils/esm/chainPropTypes/chainPropTypes.js","../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","../node_modules/react-transition-group/esm/config.js","../node_modules/react-transition-group/esm/utils/PropTypes.js","../node_modules/react-transition-group/esm/TransitionGroupContext.js","../node_modules/react-transition-group/esm/utils/reflow.js","../node_modules/react-transition-group/esm/Transition.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/react-transition-group/esm/utils/ChildMapping.js","../node_modules/react-transition-group/esm/TransitionGroup.js","../node_modules/@mui/utils/esm/useLazyRef/useLazyRef.js","../node_modules/@mui/utils/esm/useOnMount/useOnMount.js","../node_modules/@mui/utils/esm/useTimeout/useTimeout.js","../node_modules/@mui/utils/esm/elementTypeAcceptingRef/elementTypeAcceptingRef.js","../node_modules/@mui/material/esm/transitions/utils.js","../node_modules/@mui/utils/esm/isHostComponent/isHostComponent.js","../node_modules/@mui/utils/esm/appendOwnerState/appendOwnerState.js","../node_modules/@mui/utils/esm/resolveComponentProps/resolveComponentProps.js","../node_modules/@mui/utils/esm/extractEventHandlers/extractEventHandlers.js","../node_modules/@mui/utils/esm/omitEventHandlers/omitEventHandlers.js","../node_modules/@mui/utils/esm/mergeSlotProps/mergeSlotProps.js","../node_modules/@mui/material/esm/utils/useSlot.js","../node_modules/@mui/material/esm/Collapse/collapseClasses.js","../node_modules/@mui/material/esm/Collapse/Collapse.js","../node_modules/@mui/utils/esm/integerPropType/integerPropType.js","../node_modules/@mui/material/esm/Paper/paperClasses.js","../node_modules/@mui/material/esm/Paper/Paper.js","../node_modules/@mui/material/esm/Accordion/AccordionContext.js","../node_modules/@mui/material/esm/Accordion/accordionClasses.js","../node_modules/@mui/material/esm/Accordion/Accordion.js","../node_modules/@mui/material/esm/AccordionDetails/accordionDetailsClasses.js","../node_modules/@mui/material/esm/AccordionDetails/AccordionDetails.js","../node_modules/@mui/utils/esm/refType/refType.js","../node_modules/@mui/utils/esm/isFocusVisible/isFocusVisible.js","../node_modules/@mui/material/esm/useLazyRipple/useLazyRipple.js","../node_modules/@mui/material/esm/ButtonBase/Ripple.js","../node_modules/@mui/material/esm/ButtonBase/touchRippleClasses.js","../node_modules/@mui/material/esm/ButtonBase/TouchRipple.js","../node_modules/@mui/material/esm/ButtonBase/buttonBaseClasses.js","../node_modules/@mui/material/esm/ButtonBase/ButtonBase.js","../node_modules/@mui/material/esm/AccordionSummary/accordionSummaryClasses.js","../node_modules/@mui/material/esm/AccordionSummary/AccordionSummary.js","../node_modules/@mui/material/esm/utils/createSimplePaletteValueFilter.js","../node_modules/@mui/material/esm/CircularProgress/circularProgressClasses.js","../node_modules/@mui/material/esm/CircularProgress/CircularProgress.js","../node_modules/@mui/material/esm/IconButton/iconButtonClasses.js","../node_modules/@mui/material/esm/IconButton/IconButton.js","../node_modules/@mui/material/esm/Typography/typographyClasses.js","../node_modules/@mui/material/esm/Typography/Typography.js","../node_modules/@mui/utils/esm/usePreviousProps/usePreviousProps.js","../node_modules/@mui/utils/esm/HTMLElementType/HTMLElementType.js","../node_modules/@mui/utils/esm/useSlotProps/useSlotProps.js","../node_modules/@mui/utils/esm/getReactElementRef/getReactElementRef.js","../node_modules/@mui/material/esm/Portal/Portal.js","../node_modules/@mui/material/esm/TextareaAutosize/TextareaAutosize.js","../node_modules/@mui/material/esm/FormControl/formControlState.js","../node_modules/@mui/material/esm/FormControl/FormControlContext.js","../node_modules/@mui/material/esm/FormControl/useFormControl.js","../node_modules/@mui/material/esm/InputBase/utils.js","../node_modules/@mui/material/esm/InputBase/inputBaseClasses.js","../node_modules/@mui/material/esm/InputBase/InputBase.js","../node_modules/@mui/material/esm/Input/inputClasses.js","../node_modules/@mui/material/esm/OutlinedInput/outlinedInputClasses.js","../node_modules/@mui/material/esm/FilledInput/filledInputClasses.js","../node_modules/@mui/material/esm/internal/svg-icons/ArrowDropDown.js","../node_modules/@mui/utils/esm/elementAcceptingRef/elementAcceptingRef.js","../node_modules/@mui/material/esm/Fade/Fade.js","../node_modules/@mui/material/esm/Backdrop/backdropClasses.js","../node_modules/@mui/material/esm/Backdrop/Backdrop.js","../node_modules/@mui/material/esm/Badge/useBadge.js","../node_modules/@mui/material/esm/Badge/badgeClasses.js","../node_modules/@mui/material/esm/Badge/Badge.js","../node_modules/@mui/material/esm/Box/boxClasses.js","../node_modules/@mui/material/esm/Box/Box.js","../node_modules/@mui/material/esm/Button/buttonClasses.js","../node_modules/@mui/material/esm/ButtonGroup/ButtonGroupContext.js","../node_modules/@mui/material/esm/ButtonGroup/ButtonGroupButtonContext.js","../node_modules/@mui/material/esm/Button/Button.js","../node_modules/@mui/utils/esm/getValidReactChildren/getValidReactChildren.js","../node_modules/@mui/material/esm/ButtonGroup/buttonGroupClasses.js","../node_modules/@mui/material/esm/ButtonGroup/ButtonGroup.js","../node_modules/@mui/material/esm/internal/switchBaseClasses.js","../node_modules/@mui/material/esm/internal/SwitchBase.js","../node_modules/@mui/material/esm/internal/svg-icons/CheckBoxOutlineBlank.js","../node_modules/@mui/material/esm/internal/svg-icons/CheckBox.js","../node_modules/@mui/material/esm/internal/svg-icons/IndeterminateCheckBox.js","../node_modules/@mui/material/esm/Checkbox/checkboxClasses.js","../node_modules/@mui/material/esm/Checkbox/Checkbox.js","../node_modules/@mui/material/esm/ClickAwayListener/ClickAwayListener.js","../node_modules/@mui/material/esm/CssBaseline/CssBaseline.js","../node_modules/@mui/utils/esm/getScrollbarSize/getScrollbarSize.js","../node_modules/@mui/material/esm/Modal/ModalManager.js","../node_modules/@mui/material/esm/Unstable_TrapFocus/FocusTrap.js","../node_modules/@mui/material/esm/Modal/useModal.js","../node_modules/@mui/material/esm/Modal/modalClasses.js","../node_modules/@mui/material/esm/Modal/Modal.js","../node_modules/@mui/material/esm/Dialog/dialogClasses.js","../node_modules/@mui/material/esm/Dialog/DialogContext.js","../node_modules/@mui/material/esm/Dialog/Dialog.js","../node_modules/@mui/material/esm/DialogActions/dialogActionsClasses.js","../node_modules/@mui/material/esm/DialogActions/DialogActions.js","../node_modules/@mui/material/esm/DialogContent/dialogContentClasses.js","../node_modules/@mui/material/esm/DialogTitle/dialogTitleClasses.js","../node_modules/@mui/material/esm/DialogContent/DialogContent.js","../node_modules/@mui/material/esm/DialogContentText/dialogContentTextClasses.js","../node_modules/@mui/material/esm/DialogContentText/DialogContentText.js","../node_modules/@mui/material/esm/DialogTitle/DialogTitle.js","../node_modules/@mui/material/esm/Divider/dividerClasses.js","../node_modules/@mui/material/esm/Divider/Divider.js","../node_modules/@mui/material/esm/FilledInput/FilledInput.js","../node_modules/@mui/material/esm/FormControl/formControlClasses.js","../node_modules/@mui/material/esm/FormControl/FormControl.js","../node_modules/@mui/material/esm/FormControlLabel/formControlLabelClasses.js","../node_modules/@mui/material/esm/FormControlLabel/FormControlLabel.js","../node_modules/@mui/material/esm/FormHelperText/formHelperTextClasses.js","../node_modules/@mui/material/esm/FormHelperText/FormHelperText.js","../node_modules/@mui/material/esm/FormLabel/formLabelClasses.js","../node_modules/@mui/material/esm/FormLabel/FormLabel.js","../node_modules/@mui/material/esm/Grow/Grow.js","../node_modules/@mui/material/esm/Input/Input.js","../node_modules/@mui/material/esm/InputLabel/inputLabelClasses.js","../node_modules/@mui/material/esm/InputLabel/InputLabel.js","../node_modules/@mui/material/esm/LinearProgress/linearProgressClasses.js","../node_modules/@mui/material/esm/LinearProgress/LinearProgress.js","../node_modules/@mui/material/esm/List/ListContext.js","../node_modules/@mui/material/esm/List/listClasses.js","../node_modules/@mui/material/esm/List/List.js","../node_modules/@mui/material/esm/ListItemIcon/listItemIconClasses.js","../node_modules/@mui/material/esm/ListItemText/listItemTextClasses.js","../node_modules/@mui/material/esm/MenuList/MenuList.js","../node_modules/@mui/material/esm/Popover/popoverClasses.js","../node_modules/@mui/material/esm/Popover/Popover.js","../node_modules/@mui/material/esm/Menu/menuClasses.js","../node_modules/@mui/material/esm/Menu/Menu.js","../node_modules/@mui/material/esm/MenuItem/menuItemClasses.js","../node_modules/@mui/material/esm/MenuItem/MenuItem.js","../node_modules/@mui/material/esm/NativeSelect/nativeSelectClasses.js","../node_modules/@mui/material/esm/NativeSelect/NativeSelectInput.js","../node_modules/@mui/material/esm/OutlinedInput/NotchedOutline.js","../node_modules/@mui/material/esm/OutlinedInput/OutlinedInput.js","../node_modules/@mui/utils/esm/visuallyHidden/visuallyHidden.js","../node_modules/@mui/material/esm/Select/selectClasses.js","../node_modules/@mui/material/esm/Select/SelectInput.js","../node_modules/@mui/material/esm/Select/Select.js","../node_modules/@mui/material/esm/utils/areArraysEqual.js","../node_modules/@mui/material/esm/Slider/useSlider.js","../node_modules/@mui/material/esm/utils/shouldSpreadAdditionalProps.js","../node_modules/@mui/material/esm/Slider/sliderClasses.js","../node_modules/@mui/material/esm/Slider/SliderValueLabel.js","../node_modules/@mui/material/esm/Slider/Slider.js","../node_modules/@mui/material/esm/Snackbar/useSnackbar.js","../node_modules/@mui/material/esm/SnackbarContent/snackbarContentClasses.js","../node_modules/@mui/material/esm/SnackbarContent/SnackbarContent.js","../node_modules/@mui/material/esm/Snackbar/snackbarClasses.js","../node_modules/@mui/material/esm/Snackbar/Snackbar.js","../node_modules/@mui/material/esm/Tab/tabClasses.js","../node_modules/@mui/material/esm/Tab/Tab.js","../node_modules/@mui/material/esm/internal/svg-icons/KeyboardArrowLeft.js","../node_modules/@mui/material/esm/internal/svg-icons/KeyboardArrowRight.js","../node_modules/@mui/material/esm/internal/animate.js","../node_modules/@mui/material/esm/Tabs/ScrollbarSize.js","../node_modules/@mui/material/esm/TabScrollButton/tabScrollButtonClasses.js","../node_modules/@mui/material/esm/TabScrollButton/TabScrollButton.js","../node_modules/@mui/material/esm/Tabs/tabsClasses.js","../node_modules/@mui/material/esm/Tabs/Tabs.js","../node_modules/@mui/material/esm/TextField/textFieldClasses.js","../node_modules/@mui/material/esm/TextField/TextField.js","../node_modules/@mui/material/esm/ToggleButton/toggleButtonClasses.js","../node_modules/@mui/material/esm/ToggleButtonGroup/ToggleButtonGroupContext.js","../node_modules/@mui/material/esm/ToggleButtonGroup/ToggleButtonGroupButtonContext.js","../node_modules/@mui/material/esm/ToggleButtonGroup/isValueSelected.js","../node_modules/@mui/material/esm/ToggleButton/ToggleButton.js","../node_modules/@mui/material/esm/ToggleButtonGroup/toggleButtonGroupClasses.js","../node_modules/@mui/material/esm/ToggleButtonGroup/ToggleButtonGroup.js","../node_modules/@mui/icons-material/esm/Add.js","../node_modules/@mui/icons-material/esm/ArrowDropDown.js","../node_modules/@mui/icons-material/esm/ChevronLeft.js","../node_modules/@mui/icons-material/esm/Delete.js","../node_modules/@mui/icons-material/esm/Download.js","../node_modules/@mui/icons-material/esm/Edit.js","../node_modules/@mui/icons-material/esm/ExpandMore.js","../node_modules/@mui/icons-material/esm/FlashOn.js","../node_modules/@mui/icons-material/esm/FormatAlignLeft.js","../node_modules/@mui/icons-material/esm/HelpOutline.js","../node_modules/@mui/icons-material/esm/MoreHoriz.js","../node_modules/@mui/icons-material/esm/Refresh.js","../node_modules/@mui/icons-material/esm/Settings.js","../node_modules/@mui/icons-material/esm/Tune.js","../node_modules/@mui/icons-material/esm/ViewInAr.js","../src/state/default-scad.ts","../src/state/initial-state.ts","../src/state/fragment-state.ts","../src/components/contexts.ts","../src/components/FilePicker.tsx","../src/components/EditorPanel.tsx","../node_modules/thumbhash/thumbhash.js","../node_modules/blurhash/dist/esm/index.js","../src/io/image_hashes.ts","../src/components/ViewerPanel.tsx","../src/components/HelpMenu.tsx","../src/components/ExportButton.tsx","../src/components/SettingsMenu.tsx","../src/components/MultimaterialColorsDialog.tsx","../src/components/Footer.tsx","../src/components/PanelSwitcher.tsx","../src/components/CustomizerPanel.tsx","../src/theme.ts","../src/components/App.tsx","../src/language/openscad-pseudoparser.ts","../src/language/openscad-builtins.ts","../src/language/openscad-language.ts","../src/language/openscad-completions.ts","../src/language/openscad-register-language.ts","../src/hooks/useOpenSCAD.ts","../src/OpenSCADPlayground.tsx"],"sourcesContent":["// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport { AbortablePromise } from \"../utils.ts\";\nimport { Source } from \"../state/app-state.ts\";\nimport { MergedOutputs } from \"./openscad-worker.ts\";\n\nexport type { MergedOutputs };\n\nexport type OpenSCADWorkerConfig = {\n  wasmUrl?: string;\n  wasmJsUrl?: string;\n};\n\nexport type OpenSCADInvocation = {\n  mountArchives: boolean;\n  inputs?: Source[];\n  args: string[];\n  outputPaths?: string[];\n  config?: OpenSCADWorkerConfig;\n};\n\nexport type OpenSCADInvocationResults = {\n  exitCode?: number,\n  error?: string,\n  outputs?: [string, string][],\n  mergedOutputs: MergedOutputs,\n  elapsedMillis: number,\n};\n\nexport type ProcessStreams = {stderr: string} | {stdout: string}\nexport type OpenSCADInvocationCallback = {result: OpenSCADInvocationResults} | ProcessStreams;\n\nexport function spawnOpenSCAD(\n  invocation: OpenSCADInvocation,\n  streamsCallback: (ps: ProcessStreams) => void\n): AbortablePromise<OpenSCADInvocationResults> {\n  let worker: Worker | null;\n  let rejection: (err: any) => void;\n\n  function terminate() {\n    if (!worker) {\n      return;\n    }\n    worker.terminate();\n    worker = null;\n  }\n    \n  return AbortablePromise<OpenSCADInvocationResults>((resolve: (result: OpenSCADInvocationResults) => void, reject: (error: any) => void) => {\n    // Load worker as ES module (our built worker uses ES module syntax)\n    worker = new Worker('./openscad-worker.js', { type: 'module' });\n    rejection = reject;\n    worker.onmessage = (e: MessageEvent<OpenSCADInvocationCallback>) => {\n      if ('result' in e.data) {\n        resolve(e.data.result);\n        terminate();\n      } else {\n        streamsCallback(e.data);\n      }\n    }\n    \n    worker.postMessage(invocation);\n\n    return () => {\n      terminate();\n    };\n  });\n}\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}\n/**\n * Remove the element at `index` by replacing it with the last element. This is faster than `splice`\n * but changes the order of the array\n */\nexport function removeFastWithoutKeepingOrder(array, index) {\n    const last = array.length - 1;\n    if (index < last) {\n        array[index] = array[last];\n    }\n    array.pop();\n}\n/**\n * Performs a binary search algorithm over a sorted array.\n *\n * @param array The array being searched.\n * @param key The value we search for.\n * @param comparator A function that takes two array elements and returns zero\n *   if they are equal, a negative number if the first element precedes the\n *   second one in the sorting order, or a positive number if the second element\n *   precedes the first one.\n * @return See {@link binarySearch2}\n */\nexport function binarySearch(array, key, comparator) {\n    return binarySearch2(array.length, i => comparator(array[i], key));\n}\n/**\n * Performs a binary search algorithm over a sorted collection. Useful for cases\n * when we need to perform a binary search over something that isn't actually an\n * array, and converting data to an array would defeat the use of binary search\n * in the first place.\n *\n * @param length The collection length.\n * @param compareToKey A function that takes an index of an element in the\n *   collection and returns zero if the value at this index is equal to the\n *   search key, a negative number if the value precedes the search key in the\n *   sorting order, or a positive number if the search key precedes the value.\n * @return A non-negative index of an element, if found. If not found, the\n *   result is -(n+1) (or ~n, using bitwise notation), where n is the index\n *   where the key should be inserted to maintain the sorting order.\n */\nexport function binarySearch2(length, compareToKey) {\n    let low = 0, high = length - 1;\n    while (low <= high) {\n        const mid = ((low + high) / 2) | 0;\n        const comp = compareToKey(mid);\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}\nexport function quickSelect(nth, data, compare) {\n    nth = nth | 0;\n    if (nth >= data.length) {\n        throw new TypeError('invalid index');\n    }\n    const pivotValue = data[Math.floor(data.length * Math.random())];\n    const lower = [];\n    const higher = [];\n    const pivots = [];\n    for (const 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 * Splits the given items into a list of (non-empty) groups.\n * `shouldBeGrouped` is used to decide if two consecutive items should be in the same group.\n * The order of the items is preserved.\n */\nexport function* groupAdjacentBy(items, shouldBeGrouped) {\n    let currentGroup;\n    let last;\n    for (const item of items) {\n        if (last !== undefined && shouldBeGrouped(last, item)) {\n            currentGroup.push(item);\n        }\n        else {\n            if (currentGroup) {\n                yield currentGroup;\n            }\n            currentGroup = [item];\n        }\n        last = item;\n    }\n    if (currentGroup) {\n        yield currentGroup;\n    }\n}\nexport function forEachAdjacent(arr, f) {\n    for (let i = 0; i <= arr.length; i++) {\n        f(i === 0 ? undefined : arr[i - 1], i === arr.length ? undefined : arr[i]);\n    }\n}\nexport function forEachWithNeighbors(arr, f) {\n    for (let i = 0; i < arr.length; i++) {\n        f(i === 0 ? undefined : arr[i - 1], arr[i], i + 1 === arr.length ? undefined : arr[i + 1]);\n    }\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 * Remove all falsy values from `array`. The original array IS modified.\n */\nexport function coalesceInPlace(array) {\n    let to = 0;\n    for (let i = 0; i < array.length; i++) {\n        if (!!array[i]) {\n            array[to] = array[i];\n            to += 1;\n        }\n    }\n    array.length = to;\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 equality by returning an alternate value for each.\n */\nexport function distinct(array, keyFn = value => value) {\n    const seen = new Set();\n    return array.filter(element => {\n        const key = keyFn(element);\n        if (seen.has(key)) {\n            return false;\n        }\n        seen.add(key);\n        return true;\n    });\n}\nexport function firstOrDefault(array, notFoundValue) {\n    return array.length > 0 ? array[0] : notFoundValue;\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 pushMany(arr, items) {\n    for (const item of items) {\n        arr.push(item);\n    }\n}\nexport function asArray(x) {\n    return Array.isArray(x) ? x : [x];\n}\n/**\n * Insert the new items in the array.\n * @param array The original array.\n * @param start The zero-based location in the array from which to start inserting elements.\n * @param newItems The items to be inserted\n */\nexport function insertInto(array, start, newItems) {\n    const startIdx = getActualStartIndex(array, start);\n    const originalLength = array.length;\n    const newItemsLength = newItems.length;\n    array.length = originalLength + newItemsLength;\n    // Move the items after the start index, start from the end so that we don't overwrite any value.\n    for (let i = originalLength - 1; i >= startIdx; i--) {\n        array[i + newItemsLength] = array[i];\n    }\n    for (let i = 0; i < newItemsLength; i++) {\n        array[i + startIdx] = newItems[i];\n    }\n}\n/**\n * Removes elements from an array and inserts new elements in their place, returning the deleted elements. Alternative to the native Array.splice method, it\n * can only support limited number of items due to the maximum call stack size limit.\n * @param array The original array.\n * @param start The zero-based location in the array from which to start removing elements.\n * @param deleteCount The number of elements to remove.\n * @returns An array containing the elements that were deleted.\n */\nexport function splice(array, start, deleteCount, newItems) {\n    const index = getActualStartIndex(array, start);\n    let result = array.splice(index, deleteCount);\n    if (result === undefined) {\n        // see https://bugs.webkit.org/show_bug.cgi?id=261140\n        result = [];\n    }\n    insertInto(array, index, newItems);\n    return result;\n}\n/**\n * Determine the actual start index (same logic as the native splice() or slice())\n * If greater than the length of the array, start will be set to the length of the array. In this case, no element will be deleted but the method will behave as an adding function, adding as many element as item[n*] provided.\n * If negative, it will begin that many elements from the end of the array. (In this case, the origin -1, meaning -n is the index of the nth last element, and is therefore equivalent to the index of array.length - n.) If array.length + start is less than 0, it will begin from index 0.\n * @param array The target array.\n * @param start The operation index.\n */\nfunction getActualStartIndex(array, start) {\n    return start < 0 ? Math.max(start + array.length, 0) : Math.min(start, array.length);\n}\nexport var CompareResult;\n(function (CompareResult) {\n    function isLessThan(result) {\n        return result < 0;\n    }\n    CompareResult.isLessThan = isLessThan;\n    function isLessThanOrEqual(result) {\n        return result <= 0;\n    }\n    CompareResult.isLessThanOrEqual = isLessThanOrEqual;\n    function isGreaterThan(result) {\n        return result > 0;\n    }\n    CompareResult.isGreaterThan = isGreaterThan;\n    function isNeitherLessOrGreaterThan(result) {\n        return result === 0;\n    }\n    CompareResult.isNeitherLessOrGreaterThan = isNeitherLessOrGreaterThan;\n    CompareResult.greaterThan = 1;\n    CompareResult.lessThan = -1;\n    CompareResult.neitherLessOrGreaterThan = 0;\n})(CompareResult || (CompareResult = {}));\nexport function compareBy(selector, comparator) {\n    return (a, b) => comparator(selector(a), selector(b));\n}\nexport function tieBreakComparators(...comparators) {\n    return (item1, item2) => {\n        for (const comparator of comparators) {\n            const result = comparator(item1, item2);\n            if (!CompareResult.isNeitherLessOrGreaterThan(result)) {\n                return result;\n            }\n        }\n        return CompareResult.neitherLessOrGreaterThan;\n    };\n}\n/**\n * The natural order on numbers.\n*/\nexport const numberComparator = (a, b) => a - b;\nexport const booleanComparator = (a, b) => numberComparator(a ? 1 : 0, b ? 1 : 0);\nexport function reverseOrder(comparator) {\n    return (a, b) => -comparator(a, b);\n}\nexport class ArrayQueue {\n    /**\n     * Constructs a queue that is backed by the given array. Runtime is O(1).\n    */\n    constructor(items) {\n        this.items = items;\n        this.firstIdx = 0;\n        this.lastIdx = this.items.length - 1;\n    }\n    get length() {\n        return this.lastIdx - this.firstIdx + 1;\n    }\n    /**\n     * Consumes elements from the beginning of the queue as long as the predicate returns true.\n     * If no elements were consumed, `null` is returned. Has a runtime of O(result.length).\n    */\n    takeWhile(predicate) {\n        // P(k) := k <= this.lastIdx && predicate(this.items[k])\n        // Find s := min { k | k >= this.firstIdx && !P(k) } and return this.data[this.firstIdx...s)\n        let startIdx = this.firstIdx;\n        while (startIdx < this.items.length && predicate(this.items[startIdx])) {\n            startIdx++;\n        }\n        const result = startIdx === this.firstIdx ? null : this.items.slice(this.firstIdx, startIdx);\n        this.firstIdx = startIdx;\n        return result;\n    }\n    /**\n     * Consumes elements from the end of the queue as long as the predicate returns true.\n     * If no elements were consumed, `null` is returned.\n     * The result has the same order as the underlying array!\n    */\n    takeFromEndWhile(predicate) {\n        // P(k) := this.firstIdx >= k && predicate(this.items[k])\n        // Find s := max { k | k <= this.lastIdx && !P(k) } and return this.data(s...this.lastIdx]\n        let endIdx = this.lastIdx;\n        while (endIdx >= 0 && predicate(this.items[endIdx])) {\n            endIdx--;\n        }\n        const result = endIdx === this.lastIdx ? null : this.items.slice(endIdx + 1, this.lastIdx + 1);\n        this.lastIdx = endIdx;\n        return result;\n    }\n    peek() {\n        if (this.length === 0) {\n            return undefined;\n        }\n        return this.items[this.firstIdx];\n    }\n    dequeue() {\n        const result = this.items[this.firstIdx];\n        this.firstIdx++;\n        return result;\n    }\n    takeCount(count) {\n        const result = this.items.slice(this.firstIdx, this.firstIdx + count);\n        this.firstIdx += count;\n        return result;\n    }\n}\n/**\n * This class is faster than an iterator and array for lazy computed data.\n*/\nexport class CallbackIterable {\n    static { this.empty = new CallbackIterable(_callback => { }); }\n    constructor(\n    /**\n     * Calls the callback for every item.\n     * Stops when the callback returns false.\n    */\n    iterate) {\n        this.iterate = iterate;\n    }\n    toArray() {\n        const result = [];\n        this.iterate(item => { result.push(item); return true; });\n        return result;\n    }\n    filter(predicate) {\n        return new CallbackIterable(cb => this.iterate(item => predicate(item) ? cb(item) : true));\n    }\n    map(mapFn) {\n        return new CallbackIterable(cb => this.iterate(item => cb(mapFn(item))));\n    }\n    findLast(predicate) {\n        let result;\n        this.iterate(item => {\n            if (predicate(item)) {\n                result = item;\n            }\n            return true;\n        });\n        return result;\n    }\n    findLastMaxBy(comparator) {\n        let result;\n        let first = true;\n        this.iterate(item => {\n            if (first || CompareResult.isGreaterThan(comparator(item, result))) {\n                first = false;\n                result = item;\n            }\n            return true;\n        });\n        return result;\n    }\n}\n/**\n * Represents a re-arrangement of items in an array.\n */\nexport class Permutation {\n    constructor(_indexMap) {\n        this._indexMap = _indexMap;\n    }\n    /**\n     * Returns a permutation that sorts the given array according to the given compare function.\n     */\n    static createSortPermutation(arr, compareFn) {\n        const sortIndices = Array.from(arr.keys()).sort((index1, index2) => compareFn(arr[index1], arr[index2]));\n        return new Permutation(sortIndices);\n    }\n    /**\n     * Returns a new array with the elements of the given array re-arranged according to this permutation.\n     */\n    apply(arr) {\n        return arr.map((_, index) => arr[this._indexMap[index]]);\n    }\n    /**\n     * Returns a new permutation that undoes the re-arrangement of this permutation.\n    */\n    inverse() {\n        const inverseIndexMap = this._indexMap.slice();\n        for (let i = 0; i < this._indexMap.length; i++) {\n            inverseIndexMap[this._indexMap[i]] = i;\n        }\n        return new Permutation(inverseIndexMap);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 * @returns whether the provided parameter is a JavaScript String or not.\n */\nexport function isString(str) {\n    return (typeof str === 'string');\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 * @returns whether the provided parameter is of type `Buffer` or Uint8Array dervived type\n */\nexport function isTypedArray(obj) {\n    const TypedArray = Object.getPrototypeOf(Uint8Array);\n    return typeof obj === 'object'\n        && obj instanceof TypedArray;\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 an Iterable, casting to the given generic\n */\nexport function isIterable(obj) {\n    return !!obj && typeof obj[Symbol.iterator] === 'function';\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 defined.\n */\nexport function isDefined(arg) {\n    return !isUndefinedOrNull(arg);\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 {\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}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { isTypedArray, isObject, isUndefinedOrNull } from './types.js';\nexport function deepClone(obj) {\n    if (!obj || typeof obj !== 'object') {\n        return obj;\n    }\n    if (obj instanceof RegExp) {\n        return obj;\n    }\n    const result = Array.isArray(obj) ? [] : {};\n    Object.entries(obj).forEach(([key, value]) => {\n        result[key] = value && typeof value === 'object' ? deepClone(value) : value;\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) && !isTypedArray(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 (Array.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 (const 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 getAllPropertyNames(obj) {\n    let res = [];\n    while (Object.prototype !== obj) {\n        res = res.concat(Object.getOwnPropertyNames(obj));\n        obj = Object.getPrototypeOf(obj);\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    const result = {};\n    for (const methodName of methodNames) {\n        result[methodName] = createProxyMethod(methodName);\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 *--------------------------------------------------------------------------------------------*/\n/*\n * This module exists so that the AMD build of the monaco editor can replace this with an async loader plugin.\n * If you add new functions to this module make sure that they are also provided in the AMD build of the monaco editor.\n */\nexport function getNLSMessages() {\n    return globalThis._VSCODE_NLS_MESSAGES;\n}\nexport function getNLSLanguage() {\n    return globalThis._VSCODE_NLS_LANGUAGE;\n}\n","/*---------------------------------------------------------------------------------------------\n *  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// eslint-disable-next-line local/code-import-patterns\nimport { getNLSLanguage, getNLSMessages } from './nls.messages.js';\n// eslint-disable-next-line local/code-import-patterns\nexport { getNLSLanguage, getNLSMessages } from './nls.messages.js';\nconst isPseudo = getNLSLanguage() === 'pseudo' || (typeof document !== 'undefined' && document.location && document.location.hash.indexOf('pseudo=true') >= 0);\nfunction _format(message, args) {\n    let result;\n    if (args.length === 0) {\n        result = message;\n    }\n    else {\n        result = message.replace(/\\{(\\d+)\\}/g, (match, rest) => {\n            const index = rest[0];\n            const arg = args[index];\n            let result = match;\n            if (typeof arg === 'string') {\n                result = arg;\n            }\n            else if (typeof arg === 'number' || typeof arg === 'boolean' || arg === void 0 || arg === null) {\n                result = String(arg);\n            }\n            return result;\n        });\n    }\n    if (isPseudo) {\n        // FF3B and FF3D is the Unicode zenkaku representation for [ and ]\n        result = '\\uFF3B' + result.replace(/[aouei]/g, '$&$&') + '\\uFF3D';\n    }\n    return result;\n}\n/**\n * @skipMangle\n */\nexport function localize(data /* | number when built */, message /* | null when built */, ...args) {\n    if (typeof data === 'number') {\n        return _format(lookupMessage(data, message), args);\n    }\n    return _format(message, args);\n}\n/**\n * Only used when built: Looks up the message in the global NLS table.\n * This table is being made available as a global through bootstrapping\n * depending on the target context.\n */\nfunction lookupMessage(index, fallback) {\n    const message = getNLSMessages()?.[index];\n    if (typeof message !== 'string') {\n        if (typeof fallback === 'string') {\n            return fallback;\n        }\n        throw new Error(`!!! NLS MISSING: ${index} !!!`);\n    }\n    return message;\n}\n/**\n * @skipMangle\n */\nexport function localize2(data /* | number when built */, originalMessage, ...args) {\n    let message;\n    if (typeof data === 'number') {\n        message = lookupMessage(data, originalMessage);\n    }\n    else {\n        message = originalMessage;\n    }\n    const value = _format(message, args);\n    return {\n        value,\n        original: originalMessage === message ? value : _format(originalMessage, 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 * as nls from '../../nls.js';\nexport const LANGUAGE_DEFAULT = 'en';\nlet _isWindows = false;\nlet _isMacintosh = false;\nlet _isLinux = false;\nlet _isLinuxSnap = false;\nlet _isNative = false;\nlet _isWeb = false;\nlet _isElectron = false;\nlet _isIOS = false;\nlet _isCI = false;\nlet _isMobile = false;\nlet _locale = undefined;\nlet _language = LANGUAGE_DEFAULT;\nlet _platformLocale = LANGUAGE_DEFAULT;\nlet _translationsConfigFile = undefined;\nlet _userAgent = undefined;\nconst $globalThis = globalThis;\nlet nodeProcess = undefined;\nif (typeof $globalThis.vscode !== 'undefined' && typeof $globalThis.vscode.process !== 'undefined') {\n    // Native environment (sandboxed)\n    nodeProcess = $globalThis.vscode.process;\n}\nelse if (typeof process !== 'undefined' && typeof process?.versions?.node === 'string') {\n    // Native environment (non-sandboxed)\n    nodeProcess = process;\n}\nconst isElectronProcess = typeof nodeProcess?.versions?.electron === 'string';\nconst isElectronRenderer = isElectronProcess && nodeProcess?.type === 'renderer';\n// Native environment\nif (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    _isElectron = isElectronProcess;\n    _isCI = !!nodeProcess.env['CI'] || !!nodeProcess.env['BUILD_ARTIFACTSTAGINGDIRECTORY'];\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            _locale = nlsConfig.userLocale;\n            _platformLocale = nlsConfig.osLocale;\n            _language = nlsConfig.resolvedLanguage || LANGUAGE_DEFAULT;\n            _translationsConfigFile = nlsConfig.languagePack?.translationsConfigFile;\n        }\n        catch (e) {\n        }\n    }\n    _isNative = true;\n}\n// Web environment\nelse if (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    _isMobile = _userAgent?.indexOf('Mobi') >= 0;\n    _isWeb = true;\n    _language = nls.getNLSLanguage() || LANGUAGE_DEFAULT;\n    _locale = navigator.language.toLowerCase();\n    _platformLocale = _locale;\n}\n// Unknown environment\nelse {\n    console.error('Unable to resolve platform.');\n}\nlet _platform = 0 /* Platform.Web */;\nif (_isMacintosh) {\n    _platform = 1 /* Platform.Mac */;\n}\nelse if (_isWindows) {\n    _platform = 3 /* Platform.Windows */;\n}\nelse if (_isLinux) {\n    _platform = 2 /* Platform.Linux */;\n}\nexport const isWindows = _isWindows;\nexport const isMacintosh = _isMacintosh;\nexport const isLinux = _isLinux;\nexport const isNative = _isNative;\nexport const isWeb = _isWeb;\nexport const isWebWorker = (_isWeb && typeof $globalThis.importScripts === 'function');\nexport const webWorkerOrigin = isWebWorker ? $globalThis.origin : undefined;\nexport const isIOS = _isIOS;\nexport const isMobile = _isMobile;\nexport const userAgent = _userAgent;\n/**\n * The language used for the user interface. The format of\n * the string is all lower case (e.g. zh-tw for Traditional\n * Chinese or de for German)\n */\nexport const language = _language;\nexport const setTimeout0IsFaster = (typeof $globalThis.postMessage === 'function' && !$globalThis.importScripts);\n/**\n * See https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#:~:text=than%204%2C%20then-,set%20timeout%20to%204,-.\n *\n * Works similarly to `setTimeout(0)` but doesn't suffer from the 4ms artificial delay\n * that browsers set when the nesting level is > 5.\n */\nexport const setTimeout0 = (() => {\n    if (setTimeout0IsFaster) {\n        const pending = [];\n        $globalThis.addEventListener('message', (e) => {\n            if (e.data && e.data.vscodeScheduleAsyncWork) {\n                for (let i = 0, len = pending.length; i < len; i++) {\n                    const candidate = pending[i];\n                    if (candidate.id === e.data.vscodeScheduleAsyncWork) {\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            $globalThis.postMessage({ vscodeScheduleAsyncWork: myId }, '*');\n        };\n    }\n    return (callback) => setTimeout(callback);\n})();\nexport const OS = (_isMacintosh || _isIOS ? 2 /* OperatingSystem.Macintosh */ : (_isWindows ? 1 /* OperatingSystem.Windows */ : 3 /* OperatingSystem.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}\nexport const isChrome = !!(userAgent && userAgent.indexOf('Chrome') >= 0);\nexport const isFirefox = !!(userAgent && userAgent.indexOf('Firefox') >= 0);\nexport const isSafari = !!(!isChrome && (userAgent && userAgent.indexOf('Safari') >= 0));\nexport const isEdge = !!(userAgent && userAgent.indexOf('Edg/') >= 0);\nexport const isAndroid = !!(userAgent && userAgent.indexOf('Android') >= 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 *--------------------------------------------------------------------------------------------*/\nexport const EDITOR_MODEL_DEFAULTS = {\n    tabSize: 4,\n    indentSize: 4,\n    insertSpaces: true,\n    detectIndentation: true,\n    trimAutoWhitespace: true,\n    largeFileOptimizations: true,\n    bracketPairColorizationOptions: {\n        enabled: true,\n        independentColorPoolPerBracketType: 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 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 wrap(iterableOrElement) {\n        if (is(iterableOrElement)) {\n            return iterableOrElement;\n        }\n        else {\n            return single(iterableOrElement);\n        }\n    }\n    Iterable.wrap = wrap;\n    function from(iterable) {\n        return iterable || _empty;\n    }\n    Iterable.from = from;\n    function* reverse(array) {\n        for (let i = array.length - 1; i >= 0; i--) {\n            yield array[i];\n        }\n    }\n    Iterable.reverse = reverse;\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        let i = 0;\n        for (const element of iterable) {\n            if (predicate(element, i++)) {\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        let index = 0;\n        for (const element of iterable) {\n            yield fn(element, index++);\n        }\n    }\n    Iterable.map = map;\n    function* flatMap(iterable, fn) {\n        let index = 0;\n        for (const element of iterable) {\n            yield* fn(element, index++);\n        }\n    }\n    Iterable.flatMap = flatMap;\n    function* concat(...iterables) {\n        for (const iterable of iterables) {\n            yield* iterable;\n        }\n    }\n    Iterable.concat = concat;\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    async function asyncToArray(iterable) {\n        const result = [];\n        for await (const item of iterable) {\n            result.push(item);\n        }\n        return Promise.resolve(result);\n    }\n    Iterable.asyncToArray = asyncToArray;\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 *--------------------------------------------------------------------------------------------*/\nclass Node {\n    static { this.Undefined = new Node(undefined); }\n    constructor(element) {\n        this.element = element;\n        this.next = Node.Undefined;\n        this.prev = Node.Undefined;\n    }\n}\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        let node = this._first;\n        while (node !== Node.Undefined) {\n            const next = node.next;\n            node.prev = Node.Undefined;\n            node.next = Node.Undefined;\n            node = next;\n        }\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 *--------------------------------------------------------------------------------------------*/\nimport { Iterable } from '../../../base/common/iterator.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\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 = new LinkedList();\n_defaultConfig.unshift({\n    maxLen: 1000,\n    windowSize: 15,\n    timeBudget: 150\n});\nexport function getWordAtText(column, wordDefinition, text, textOffset, config) {\n    // Ensure the regex has the 'g' flag, otherwise this will loop forever\n    wordDefinition = ensureValidWordDefinition(wordDefinition);\n    if (!config) {\n        config = Iterable.first(_defaultConfig);\n    }\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        const 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 * as arrays from '../../../base/common/arrays.js';\nimport * as objects from '../../../base/common/objects.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { EDITOR_MODEL_DEFAULTS } from '../core/textModelDefaults.js';\nimport { USUAL_WORD_SEPARATORS } from '../core/wordHelper.js';\nimport * as nls from '../../../nls.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 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    applyUpdate(value, update) {\n        return applyUpdate(value, update);\n    }\n    compute(env, options, value) {\n        return value;\n    }\n}\nexport class ApplyUpdateResult {\n    constructor(newValue, didChange) {\n        this.newValue = newValue;\n        this.didChange = didChange;\n    }\n}\nfunction applyUpdate(value, update) {\n    if (typeof value !== 'object' || typeof update !== 'object' || !value || !update) {\n        return new ApplyUpdateResult(update, value !== update);\n    }\n    if (Array.isArray(value) || Array.isArray(update)) {\n        const arrayEquals = Array.isArray(value) && Array.isArray(update) && arrays.equals(value, update);\n        return new ApplyUpdateResult(update, !arrayEquals);\n    }\n    let didChange = false;\n    for (const key in update) {\n        if (update.hasOwnProperty(key)) {\n            const result = applyUpdate(value[key], update[key]);\n            if (result.didChange) {\n                value[key] = result.newValue;\n                didChange = true;\n            }\n        }\n    }\n    return new ApplyUpdateResult(value, didChange);\n}\n/**\n * @internal\n */\nclass ComputedEditorOption {\n    constructor(id) {\n        this.schema = undefined;\n        this.id = id;\n        this.name = '_never_';\n        this.defaultValue = undefined;\n    }\n    applyUpdate(value, update) {\n        return applyUpdate(value, update);\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    applyUpdate(value, update) {\n        return applyUpdate(value, update);\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}\n/**\n * @internal\n */\nexport function 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}\nclass EditorIntOption extends SimpleEditorOption {\n    static clampedInt(value, defaultValue, minimum, maximum) {\n        return clampedInt(value, defaultValue, minimum, maximum);\n    }\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    validate(input) {\n        return EditorIntOption.clampedInt(input, this.defaultValue, this.minimum, this.maximum);\n    }\n}\n/**\n * @internal\n */\nexport function clampedFloat(value, defaultValue, minimum, maximum) {\n    if (typeof value === 'undefined') {\n        return defaultValue;\n    }\n    const r = EditorFloatOption.float(value, defaultValue);\n    return EditorFloatOption.clamp(r, minimum, maximum);\n}\nclass EditorFloatOption extends SimpleEditorOption {\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    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    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, renamedValues) {\n    if (typeof value !== 'string') {\n        return defaultValue;\n    }\n    if (renamedValues && value in renamedValues) {\n        return renamedValues[value];\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 /* EditorAutoIndentStrategy.None */;\n        case 'keep': return 1 /* EditorAutoIndentStrategy.Keep */;\n        case 'brackets': return 2 /* EditorAutoIndentStrategy.Brackets */;\n        case 'advanced': return 3 /* EditorAutoIndentStrategy.Advanced */;\n        case 'full': return 4 /* EditorAutoIndentStrategy.Full */;\n    }\n}\n//#endregion\n//#region accessibilitySupport\nclass EditorAccessibilitySupport extends BaseEditorOption {\n    constructor() {\n        super(2 /* EditorOption.accessibilitySupport */, 'accessibilitySupport', 0 /* AccessibilitySupport.Unknown */, {\n            type: 'string',\n            enum: ['auto', 'on', 'off'],\n            enumDescriptions: [\n                nls.localize('accessibilitySupport.auto', \"Use platform APIs to detect when a Screen Reader is attached.\"),\n                nls.localize('accessibilitySupport.on', \"Optimize for usage with a Screen Reader.\"),\n                nls.localize('accessibilitySupport.off', \"Assume a screen reader is not attached.\"),\n            ],\n            default: 'auto',\n            tags: ['accessibility'],\n            description: nls.localize('accessibilitySupport', \"Controls if the UI should run in a mode where it is optimized for screen readers.\")\n        });\n    }\n    validate(input) {\n        switch (input) {\n            case 'auto': return 0 /* AccessibilitySupport.Unknown */;\n            case 'off': return 1 /* AccessibilitySupport.Disabled */;\n            case 'on': return 2 /* AccessibilitySupport.Enabled */;\n        }\n        return this.defaultValue;\n    }\n    compute(env, options, value) {\n        if (value === 0 /* AccessibilitySupport.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(23 /* EditorOption.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 /* TextEditorCursorBlinkingStyle.Blink */;\n        case 'smooth': return 2 /* TextEditorCursorBlinkingStyle.Smooth */;\n        case 'phase': return 3 /* TextEditorCursorBlinkingStyle.Phase */;\n        case 'expand': return 4 /* TextEditorCursorBlinkingStyle.Expand */;\n        case 'solid': return 5 /* TextEditorCursorBlinkingStyle.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(143 /* EditorOption.editorClassName */);\n    }\n    compute(env, options, _) {\n        const classNames = ['monaco-editor'];\n        if (options.get(39 /* EditorOption.extraEditorClassName */)) {\n            classNames.push(options.get(39 /* EditorOption.extraEditorClassName */));\n        }\n        if (env.extraEditorClassName) {\n            classNames.push(env.extraEditorClassName);\n        }\n        if (options.get(74 /* EditorOption.mouseStyle */) === 'default') {\n            classNames.push('mouse-default');\n        }\n        else if (options.get(74 /* EditorOption.mouseStyle */) === 'copy') {\n            classNames.push('mouse-copy');\n        }\n        if (options.get(112 /* EditorOption.showUnused */)) {\n            classNames.push('showUnused');\n        }\n        if (options.get(141 /* EditorOption.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(37 /* EditorOption.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: 'always',\n            autoFindInSelection: 'never',\n            globalFindClipboard: false,\n            addExtraSpaceOnTop: true,\n            loop: true\n        };\n        super(41 /* EditorOption.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: 'string',\n                enum: ['never', 'always', 'selection'],\n                default: defaults.seedSearchStringFromSelection,\n                enumDescriptions: [\n                    nls.localize('editor.find.seedSearchStringFromSelection.never', 'Never seed search string from the editor selection.'),\n                    nls.localize('editor.find.seedSearchStringFromSelection.always', 'Always seed search string from the editor selection, including word at cursor position.'),\n                    nls.localize('editor.find.seedSearchStringFromSelection.selection', 'Only seed search string from the editor selection.')\n                ],\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: typeof _input.seedSearchStringFromSelection === 'boolean'\n                ? (_input.seedSearchStringFromSelection ? 'always' : 'never')\n                : stringSet(input.seedSearchStringFromSelection, this.defaultValue.seedSearchStringFromSelection, ['never', 'always', 'selection']),\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    static { this.OFF = '\"liga\" off, \"calt\" off'; }\n    static { this.ON = '\"liga\" on, \"calt\" on'; }\n    constructor() {\n        super(51 /* EditorOption.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' || input.length === 0) {\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}\n//#endregion\n//#region fontVariations\n/**\n * @internal\n */\nexport class EditorFontVariations extends BaseEditorOption {\n    // Text is laid out using default settings.\n    static { this.OFF = 'normal'; }\n    // Translate `fontWeight` config to the `font-variation-settings` CSS property.\n    static { this.TRANSLATE = 'translate'; }\n    constructor() {\n        super(54 /* EditorOption.fontVariations */, 'fontVariations', EditorFontVariations.OFF, {\n            anyOf: [\n                {\n                    type: 'boolean',\n                    description: nls.localize('fontVariations', \"Enables/Disables the translation from font-weight to font-variation-settings. Change this to a string for fine-grained control of the 'font-variation-settings' CSS property.\"),\n                },\n                {\n                    type: 'string',\n                    description: nls.localize('fontVariationSettings', \"Explicit 'font-variation-settings' CSS property. A boolean can be passed instead if one only needs to translate font-weight to font-variation-settings.\")\n                }\n            ],\n            description: nls.localize('fontVariationsGeneral', \"Configures font variations. Can be either a boolean to enable/disable the translation from font-weight to font-variation-settings or a string for the value of the CSS 'font-variation-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 EditorFontVariations.OFF;\n            }\n            if (input === 'true') {\n                return EditorFontVariations.TRANSLATE;\n            }\n            return input;\n        }\n        if (Boolean(input)) {\n            return EditorFontVariations.TRANSLATE;\n        }\n        return EditorFontVariations.OFF;\n    }\n    compute(env, options, value) {\n        // The value is computed from the fontWeight if it is true.\n        // So take the result from env.fontInfo\n        return env.fontInfo.fontVariationSettings;\n    }\n}\n//#endregion\n//#region fontInfo\nclass EditorFontInfo extends ComputedEditorOption {\n    constructor() {\n        super(50 /* EditorOption.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(52 /* EditorOption.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        const 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    static { this.SUGGESTION_VALUES = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900']; }\n    static { this.MINIMUM_VALUE = 1; }\n    static { this.MAXIMUM_VALUE = 1000; }\n    constructor() {\n        super(53 /* EditorOption.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}\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            multipleTests: 'peek',\n            alternativeDefinitionCommand: 'editor.action.goToReferences',\n            alternativeTypeDefinitionCommand: 'editor.action.goToReferences',\n            alternativeDeclarationCommand: 'editor.action.goToReferences',\n            alternativeImplementationCommand: '',\n            alternativeReferenceCommand: '',\n            alternativeTestsCommand: '',\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(58 /* EditorOption.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': {\n                description: nls.localize('editor.editor.gotoLocation.multipleDefinitions', \"Controls the behavior the 'Go to Definition'-command when multiple target locations exist.\"),\n                ...jsonSubset,\n            },\n            'editor.gotoLocation.multipleTypeDefinitions': {\n                description: nls.localize('editor.editor.gotoLocation.multipleTypeDefinitions', \"Controls the behavior the 'Go to Type Definition'-command when multiple target locations exist.\"),\n                ...jsonSubset,\n            },\n            'editor.gotoLocation.multipleDeclarations': {\n                description: nls.localize('editor.editor.gotoLocation.multipleDeclarations', \"Controls the behavior the 'Go to Declaration'-command when multiple target locations exist.\"),\n                ...jsonSubset,\n            },\n            'editor.gotoLocation.multipleImplementations': {\n                description: nls.localize('editor.editor.gotoLocation.multipleImplemenattions', \"Controls the behavior the 'Go to Implementations'-command when multiple target locations exist.\"),\n                ...jsonSubset,\n            },\n            'editor.gotoLocation.multipleReferences': {\n                description: nls.localize('editor.editor.gotoLocation.multipleReferences', \"Controls the behavior the 'Go to References'-command when multiple target locations exist.\"),\n                ...jsonSubset,\n            },\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        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: input.multipleDefinitions ?? stringSet(input.multipleDefinitions, 'peek', ['peek', 'gotoAndPeek', 'goto']),\n            multipleTypeDefinitions: input.multipleTypeDefinitions ?? stringSet(input.multipleTypeDefinitions, 'peek', ['peek', 'gotoAndPeek', 'goto']),\n            multipleDeclarations: input.multipleDeclarations ?? stringSet(input.multipleDeclarations, 'peek', ['peek', 'gotoAndPeek', 'goto']),\n            multipleImplementations: input.multipleImplementations ?? stringSet(input.multipleImplementations, 'peek', ['peek', 'gotoAndPeek', 'goto']),\n            multipleReferences: input.multipleReferences ?? stringSet(input.multipleReferences, 'peek', ['peek', 'gotoAndPeek', 'goto']),\n            multipleTests: input.multipleTests ?? stringSet(input.multipleTests, '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            alternativeTestsCommand: EditorStringOption.string(input.alternativeTestsCommand, this.defaultValue.alternativeTestsCommand),\n        };\n    }\n}\nclass EditorHover extends BaseEditorOption {\n    constructor() {\n        const defaults = {\n            enabled: true,\n            delay: 300,\n            hidingDelay: 300,\n            sticky: true,\n            above: true,\n        };\n        super(60 /* EditorOption.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                minimum: 0,\n                maximum: 10000,\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            'editor.hover.hidingDelay': {\n                type: 'integer',\n                minimum: 0,\n                default: defaults.hidingDelay,\n                description: nls.localize('hover.hidingDelay', \"Controls the delay in milliseconds after which the hover is hidden. Requires `editor.hover.sticky` to be enabled.\")\n            },\n            'editor.hover.above': {\n                type: 'boolean',\n                default: defaults.above,\n                description: nls.localize('hover.above', \"Prefer showing hovers above the line, if there's space.\")\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            hidingDelay: EditorIntOption.clampedInt(input.hidingDelay, this.defaultValue.hidingDelay, 0, 600000),\n            above: boolean(input.above, this.defaultValue.above),\n        };\n    }\n}\n/**\n * @internal\n */\nexport class EditorLayoutInfoComputer extends ComputedEditorOption {\n    constructor() {\n        super(146 /* EditorOption.layoutInfo */);\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            glyphMarginDecorationLaneCount: env.glyphMarginDecorationLaneCount\n        });\n    }\n    static computeContainedMinimapLineCount(input) {\n        const typicalViewportLineCount = input.height / input.lineHeight;\n        const extraLinesBeforeFirstLine = Math.floor(input.paddingTop / input.lineHeight);\n        let extraLinesBeyondLastLine = Math.floor(input.paddingBottom / input.lineHeight);\n        if (input.scrollBeyondLastLine) {\n            extraLinesBeyondLastLine = Math.max(extraLinesBeyondLastLine, typicalViewportLineCount - 1);\n        }\n        const desiredRatio = (extraLinesBeforeFirstLine + input.viewLineCount + extraLinesBeyondLastLine) / (input.pixelRatio * input.height);\n        const minimapLineCount = Math.floor(input.viewLineCount / desiredRatio);\n        return { typicalViewportLineCount, extraLinesBeforeFirstLine, 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 /* RenderMinimap.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.paddingTop === stableMinimapLayoutInput.paddingTop\n            && input.paddingBottom === stableMinimapLayoutInput.paddingBottom\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, extraLinesBeforeFirstLine, extraLinesBeyondLastLine, desiredRatio, minimapLineCount } = EditorLayoutInfoComputer.computeContainedMinimapLineCount({\n                viewLineCount: viewLineCount,\n                scrollBeyondLastLine: scrollBeyondLastLine,\n                paddingTop: input.paddingTop,\n                paddingBottom: input.paddingBottom,\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((extraLinesBeforeFirstLine + 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                    }\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                    if (isViewportWrapping && couldUseMemory && remainingWidth <= memory.stableFitRemainingWidth) {\n                        // There is a loop when using `fill` 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                        maxMinimapScale = memory.stableFitMaxMinimapScale;\n                    }\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, extraLinesBeforeFirstLine + viewLineCount + extraLinesBeyondLastLine)) * minimapLineHeight);\n                    if (isViewportWrapping) {\n                        // remember for next time\n                        memory.stableMinimapLayoutInput = input;\n                        memory.stableFitRemainingWidth = remainingWidth;\n                        memory.stableFitMaxMinimapScale = minimapScale;\n                    }\n                    else {\n                        memory.stableMinimapLayoutInput = null;\n                        memory.stableFitRemainingWidth = 0;\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 /* RenderMinimap.Text */ : 2 /* RenderMinimap.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(138 /* EditorOption.wordWrapOverride2 */);\n        const wordWrapOverride1 = (wordWrapOverride2 === 'inherit' ? options.get(137 /* EditorOption.wordWrapOverride1 */) : wordWrapOverride2);\n        const wordWrap = (wordWrapOverride1 === 'inherit' ? options.get(133 /* EditorOption.wordWrap */) : wordWrapOverride1);\n        const wordWrapColumn = options.get(136 /* EditorOption.wordWrapColumn */);\n        const isDominatedByLongLines = env.isDominatedByLongLines;\n        const showGlyphMargin = options.get(57 /* EditorOption.glyphMargin */);\n        const showLineNumbers = (options.get(68 /* EditorOption.lineNumbers */).renderType !== 0 /* RenderLineNumbersType.Off */);\n        const lineNumbersMinChars = options.get(69 /* EditorOption.lineNumbersMinChars */);\n        const scrollBeyondLastLine = options.get(106 /* EditorOption.scrollBeyondLastLine */);\n        const padding = options.get(84 /* EditorOption.padding */);\n        const minimap = options.get(73 /* EditorOption.minimap */);\n        const scrollbar = options.get(104 /* EditorOption.scrollbar */);\n        const verticalScrollbarWidth = scrollbar.verticalScrollbarSize;\n        const verticalScrollbarHasArrows = scrollbar.verticalHasArrows;\n        const scrollbarArrowSize = scrollbar.arrowSize;\n        const horizontalScrollbarHeight = scrollbar.horizontalScrollbarSize;\n        const folding = options.get(43 /* EditorOption.folding */);\n        const showFoldingDecoration = options.get(111 /* EditorOption.showFoldingControls */) !== 'never';\n        let lineDecorationsWidth = options.get(66 /* EditorOption.lineDecorationsWidth */);\n        if (folding && showFoldingDecoration) {\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 * env.glyphMarginDecorationLaneCount;\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 (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        const minimapLayout = EditorLayoutInfoComputer._computeMinimapLayout({\n            outerWidth: outerWidth,\n            outerHeight: outerHeight,\n            lineHeight: lineHeight,\n            typicalHalfwidthCharacterWidth: typicalHalfwidthCharacterWidth,\n            pixelRatio: pixelRatio,\n            scrollBeyondLastLine: scrollBeyondLastLine,\n            paddingTop: padding.top,\n            paddingBottom: padding.bottom,\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 /* RenderMinimap.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            glyphMarginDecorationLaneCount: env.glyphMarginDecorationLaneCount,\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}\n//#endregion\n//#region WrappingStrategy\nclass WrappingStrategy extends BaseEditorOption {\n    constructor() {\n        super(140 /* EditorOption.wrappingStrategy */, 'wrappingStrategy', 'simple', {\n            'editor.wrappingStrategy': {\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                type: 'string',\n                enum: ['simple', 'advanced'],\n                default: 'simple',\n                description: nls.localize('wrappingStrategy', \"Controls the algorithm that computes wrapping points. Note that when in accessibility mode, advanced will be used for the best experience.\")\n            }\n        });\n    }\n    validate(input) {\n        return stringSet(input, 'simple', ['simple', 'advanced']);\n    }\n    compute(env, options, value) {\n        const accessibilitySupport = options.get(2 /* EditorOption.accessibilitySupport */);\n        if (accessibilitySupport === 2 /* AccessibilitySupport.Enabled */) {\n            // if we know for a fact that a screen reader is attached, we switch our strategy to advanced to\n            // help that the editor's wrapping points match the textarea's wrapping points\n            return 'advanced';\n        }\n        return value;\n    }\n}\n//#endregion\n//#region lightbulb\nexport var ShowLightbulbIconMode;\n(function (ShowLightbulbIconMode) {\n    ShowLightbulbIconMode[\"Off\"] = \"off\";\n    ShowLightbulbIconMode[\"OnCode\"] = \"onCode\";\n    ShowLightbulbIconMode[\"On\"] = \"on\";\n})(ShowLightbulbIconMode || (ShowLightbulbIconMode = {}));\nclass EditorLightbulb extends BaseEditorOption {\n    constructor() {\n        const defaults = { enabled: ShowLightbulbIconMode.OnCode };\n        super(65 /* EditorOption.lightbulb */, 'lightbulb', defaults, {\n            'editor.lightbulb.enabled': {\n                type: 'string',\n                tags: ['experimental'],\n                enum: [ShowLightbulbIconMode.Off, ShowLightbulbIconMode.OnCode, ShowLightbulbIconMode.On],\n                default: defaults.enabled,\n                enumDescriptions: [\n                    nls.localize('editor.lightbulb.enabled.off', 'Disable the code action menu.'),\n                    nls.localize('editor.lightbulb.enabled.onCode', 'Show the code action menu when the cursor is on lines with code.'),\n                    nls.localize('editor.lightbulb.enabled.on', 'Show the code action menu when the cursor is on lines with code or on empty lines.'),\n                ],\n                description: nls.localize('enabled', \"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: stringSet(input.enabled, this.defaultValue.enabled, [ShowLightbulbIconMode.Off, ShowLightbulbIconMode.OnCode, ShowLightbulbIconMode.On])\n        };\n    }\n}\nclass EditorStickyScroll extends BaseEditorOption {\n    constructor() {\n        const defaults = { enabled: true, maxLineCount: 5, defaultModel: 'outlineModel', scrollWithEditor: true };\n        super(116 /* EditorOption.stickyScroll */, 'stickyScroll', defaults, {\n            'editor.stickyScroll.enabled': {\n                type: 'boolean',\n                default: defaults.enabled,\n                description: nls.localize('editor.stickyScroll.enabled', \"Shows the nested current scopes during the scroll at the top of the editor.\"),\n                tags: ['experimental']\n            },\n            'editor.stickyScroll.maxLineCount': {\n                type: 'number',\n                default: defaults.maxLineCount,\n                minimum: 1,\n                maximum: 20,\n                description: nls.localize('editor.stickyScroll.maxLineCount', \"Defines the maximum number of sticky lines to show.\")\n            },\n            'editor.stickyScroll.defaultModel': {\n                type: 'string',\n                enum: ['outlineModel', 'foldingProviderModel', 'indentationModel'],\n                default: defaults.defaultModel,\n                description: nls.localize('editor.stickyScroll.defaultModel', \"Defines the model to use for determining which lines to stick. If the outline model does not exist, it will fall back on the folding provider model which falls back on the indentation model. This order is respected in all three cases.\")\n            },\n            'editor.stickyScroll.scrollWithEditor': {\n                type: 'boolean',\n                default: defaults.scrollWithEditor,\n                description: nls.localize('editor.stickyScroll.scrollWithEditor', \"Enable scrolling of Sticky Scroll with the editor's horizontal scrollbar.\")\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            maxLineCount: EditorIntOption.clampedInt(input.maxLineCount, this.defaultValue.maxLineCount, 1, 20),\n            defaultModel: stringSet(input.defaultModel, this.defaultValue.defaultModel, ['outlineModel', 'foldingProviderModel', 'indentationModel']),\n            scrollWithEditor: boolean(input.scrollWithEditor, this.defaultValue.scrollWithEditor)\n        };\n    }\n}\nclass EditorInlayHints extends BaseEditorOption {\n    constructor() {\n        const defaults = { enabled: 'on', fontSize: 0, fontFamily: '', padding: false };\n        super(142 /* EditorOption.inlayHints */, 'inlayHints', defaults, {\n            'editor.inlayHints.enabled': {\n                type: 'string',\n                default: defaults.enabled,\n                description: nls.localize('inlayHints.enable', \"Enables the inlay hints in the editor.\"),\n                enum: ['on', 'onUnlessPressed', 'offUnlessPressed', 'off'],\n                markdownEnumDescriptions: [\n                    nls.localize('editor.inlayHints.on', \"Inlay hints are enabled\"),\n                    nls.localize('editor.inlayHints.onUnlessPressed', \"Inlay hints are showing by default and hide when holding {0}\", platform.isMacintosh ? `Ctrl+Option` : `Ctrl+Alt`),\n                    nls.localize('editor.inlayHints.offUnlessPressed', \"Inlay hints are hidden by default and show when holding {0}\", platform.isMacintosh ? `Ctrl+Option` : `Ctrl+Alt`),\n                    nls.localize('editor.inlayHints.off', \"Inlay hints are disabled\"),\n                ],\n            },\n            'editor.inlayHints.fontSize': {\n                type: 'number',\n                default: defaults.fontSize,\n                markdownDescription: nls.localize('inlayHints.fontSize', \"Controls font size of inlay hints in the editor. As default the {0} is used when the configured value is less than {1} or greater than the editor font size.\", '`#editor.fontSize#`', '`5`')\n            },\n            'editor.inlayHints.fontFamily': {\n                type: 'string',\n                default: defaults.fontFamily,\n                markdownDescription: nls.localize('inlayHints.fontFamily', \"Controls font family of inlay hints in the editor. When set to empty, the {0} is used.\", '`#editor.fontFamily#`')\n            },\n            'editor.inlayHints.padding': {\n                type: 'boolean',\n                default: defaults.padding,\n                description: nls.localize('inlayHints.padding', \"Enables the padding around the inlay 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        if (typeof input.enabled === 'boolean') {\n            input.enabled = input.enabled ? 'on' : 'off';\n        }\n        return {\n            enabled: stringSet(input.enabled, this.defaultValue.enabled, ['on', 'off', 'offUnlessPressed', 'onUnlessPressed']),\n            fontSize: EditorIntOption.clampedInt(input.fontSize, this.defaultValue.fontSize, 0, 100),\n            fontFamily: EditorStringOption.string(input.fontFamily, this.defaultValue.fontFamily),\n            padding: boolean(input.padding, this.defaultValue.padding)\n        };\n    }\n}\n//#endregion\n//#region lineDecorationsWidth\nclass EditorLineDecorationsWidth extends BaseEditorOption {\n    constructor() {\n        super(66 /* EditorOption.lineDecorationsWidth */, 'lineDecorationsWidth', 10);\n    }\n    validate(input) {\n        if (typeof input === 'string' && /^\\d+(\\.\\d+)?ch$/.test(input)) {\n            const multiple = parseFloat(input.substring(0, input.length - 2));\n            return -multiple; // negative numbers signal a multiple\n        }\n        else {\n            return EditorIntOption.clampedInt(input, this.defaultValue, 0, 1000);\n        }\n    }\n    compute(env, options, value) {\n        if (value < 0) {\n            // negative numbers signal a multiple\n            return EditorIntOption.clampedInt(-value * env.fontInfo.typicalHalfwidthCharacterWidth, this.defaultValue, 0, 1000);\n        }\n        else {\n            return value;\n        }\n    }\n}\n//#endregion\n//#region lineHeight\nclass EditorLineHeight extends EditorFloatOption {\n    constructor() {\n        super(67 /* EditorOption.lineHeight */, 'lineHeight', EDITOR_FONT_DEFAULTS.lineHeight, x => EditorFloatOption.clamp(x, 0, 150), { markdownDescription: nls.localize('lineHeight', \"Controls the line height. \\n - Use 0 to automatically compute the line height from the font size.\\n - Values between 0 and 8 will be used as a multiplier with the font size.\\n - Values greater than or equal to 8 will be used as effective values.\") });\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            autohide: false,\n            renderCharacters: true,\n            maxColumn: 120,\n            scale: 1,\n            showRegionSectionHeaders: true,\n            showMarkSectionHeaders: true,\n            sectionHeaderFontSize: 9,\n            sectionHeaderLetterSpacing: 1,\n        };\n        super(73 /* EditorOption.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.autohide': {\n                type: 'boolean',\n                default: defaults.autohide,\n                description: nls.localize('minimap.autohide', \"Controls whether the minimap is hidden automatically.\")\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            'editor.minimap.showRegionSectionHeaders': {\n                type: 'boolean',\n                default: defaults.showRegionSectionHeaders,\n                description: nls.localize('minimap.showRegionSectionHeaders', \"Controls whether named regions are shown as section headers in the minimap.\")\n            },\n            'editor.minimap.showMarkSectionHeaders': {\n                type: 'boolean',\n                default: defaults.showMarkSectionHeaders,\n                description: nls.localize('minimap.showMarkSectionHeaders', \"Controls whether MARK: comments are shown as section headers in the minimap.\")\n            },\n            'editor.minimap.sectionHeaderFontSize': {\n                type: 'number',\n                default: defaults.sectionHeaderFontSize,\n                description: nls.localize('minimap.sectionHeaderFontSize', \"Controls the font size of section headers in the minimap.\")\n            },\n            'editor.minimap.sectionHeaderLetterSpacing': {\n                type: 'number',\n                default: defaults.sectionHeaderLetterSpacing,\n                description: nls.localize('minimap.sectionHeaderLetterSpacing', \"Controls the amount of space (in pixels) between characters of section header. This helps the readability of the header in small font sizes.\")\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            autohide: boolean(input.autohide, this.defaultValue.autohide),\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            showRegionSectionHeaders: boolean(input.showRegionSectionHeaders, this.defaultValue.showRegionSectionHeaders),\n            showMarkSectionHeaders: boolean(input.showMarkSectionHeaders, this.defaultValue.showMarkSectionHeaders),\n            sectionHeaderFontSize: EditorFloatOption.clamp(input.sectionHeaderFontSize ?? this.defaultValue.sectionHeaderFontSize, 4, 32),\n            sectionHeaderLetterSpacing: EditorFloatOption.clamp(input.sectionHeaderLetterSpacing ?? this.defaultValue.sectionHeaderLetterSpacing, 0, 5),\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(84 /* EditorOption.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: true\n        };\n        super(86 /* EditorOption.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(144 /* EditorOption.pixelRatio */);\n    }\n    compute(env, options, _) {\n        return env.pixelRatio;\n    }\n}\n//#endregion\n//#region\nclass PlaceholderOption extends BaseEditorOption {\n    constructor() {\n        super(88 /* EditorOption.placeholder */, 'placeholder', undefined);\n    }\n    validate(input) {\n        if (typeof input === 'undefined') {\n            return this.defaultValue;\n        }\n        if (typeof input === 'string') {\n            return input;\n        }\n        return this.defaultValue;\n    }\n}\nclass EditorQuickSuggestions extends BaseEditorOption {\n    constructor() {\n        const defaults = {\n            other: 'on',\n            comments: 'off',\n            strings: 'off'\n        };\n        const types = [\n            { type: 'boolean' },\n            {\n                type: 'string',\n                enum: ['on', 'inline', 'off'],\n                enumDescriptions: [nls.localize('on', \"Quick suggestions show inside the suggest widget\"), nls.localize('inline', \"Quick suggestions show as ghost text\"), nls.localize('off', \"Quick suggestions are disabled\")]\n            }\n        ];\n        super(90 /* EditorOption.quickSuggestions */, 'quickSuggestions', defaults, {\n            type: 'object',\n            additionalProperties: false,\n            properties: {\n                strings: {\n                    anyOf: types,\n                    default: defaults.strings,\n                    description: nls.localize('quickSuggestions.strings', \"Enable quick suggestions inside strings.\")\n                },\n                comments: {\n                    anyOf: types,\n                    default: defaults.comments,\n                    description: nls.localize('quickSuggestions.comments', \"Enable quick suggestions inside comments.\")\n                },\n                other: {\n                    anyOf: types,\n                    default: defaults.other,\n                    description: nls.localize('quickSuggestions.other', \"Enable quick suggestions outside of strings and comments.\")\n                },\n            },\n            default: defaults,\n            markdownDescription: nls.localize('quickSuggestions', \"Controls whether suggestions should automatically show up while typing. This can be controlled for typing in comments, strings, and other code. Quick suggestion can be configured to show as ghost text or with the suggest widget. Also be aware of the {0}-setting which controls if suggestions are triggered by special characters.\", '`#editor.suggestOnTriggerCharacters#`')\n        });\n        this.defaultValue = defaults;\n    }\n    validate(input) {\n        if (typeof input === 'boolean') {\n            // boolean -> all on/off\n            const value = input ? 'on' : 'off';\n            return { comments: value, strings: value, other: value };\n        }\n        if (!input || typeof input !== 'object') {\n            // invalid object\n            return this.defaultValue;\n        }\n        const { other, comments, strings } = input;\n        const allowedValues = ['on', 'inline', 'off'];\n        let validatedOther;\n        let validatedComments;\n        let validatedStrings;\n        if (typeof other === 'boolean') {\n            validatedOther = other ? 'on' : 'off';\n        }\n        else {\n            validatedOther = stringSet(other, this.defaultValue.other, allowedValues);\n        }\n        if (typeof comments === 'boolean') {\n            validatedComments = comments ? 'on' : 'off';\n        }\n        else {\n            validatedComments = stringSet(comments, this.defaultValue.comments, allowedValues);\n        }\n        if (typeof strings === 'boolean') {\n            validatedStrings = strings ? 'on' : 'off';\n        }\n        else {\n            validatedStrings = stringSet(strings, this.defaultValue.strings, allowedValues);\n        }\n        return {\n            other: validatedOther,\n            comments: validatedComments,\n            strings: validatedStrings\n        };\n    }\n}\nclass EditorRenderLineNumbersOption extends BaseEditorOption {\n    constructor() {\n        super(68 /* EditorOption.lineNumbers */, 'lineNumbers', { renderType: 1 /* RenderLineNumbersType.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 /* RenderLineNumbersType.Custom */;\n                renderFn = lineNumbers;\n            }\n            else if (lineNumbers === 'interval') {\n                renderType = 3 /* RenderLineNumbersType.Interval */;\n            }\n            else if (lineNumbers === 'relative') {\n                renderType = 2 /* RenderLineNumbersType.Relative */;\n            }\n            else if (lineNumbers === 'on') {\n                renderType = 1 /* RenderLineNumbersType.On */;\n            }\n            else {\n                renderType = 0 /* RenderLineNumbersType.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(99 /* EditorOption.renderValidationDecorations */);\n    if (renderValidationDecorations === 'editable') {\n        return options.get(92 /* EditorOption.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(103 /* EditorOption.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            const rulers = [];\n            for (const _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}\n//#endregion\n//#region readonly\n/**\n * Configuration options for readonly message\n */\nclass ReadonlyMessage extends BaseEditorOption {\n    constructor() {\n        const defaults = undefined;\n        super(93 /* EditorOption.readOnlyMessage */, 'readOnlyMessage', defaults);\n    }\n    validate(_input) {\n        if (!_input || typeof _input !== 'object') {\n            return this.defaultValue;\n        }\n        return _input;\n    }\n}\nfunction _scrollbarVisibilityFromString(visibility, defaultValue) {\n    if (typeof visibility !== 'string') {\n        return defaultValue;\n    }\n    switch (visibility) {\n        case 'hidden': return 2 /* ScrollbarVisibility.Hidden */;\n        case 'visible': return 3 /* ScrollbarVisibility.Visible */;\n        default: return 1 /* ScrollbarVisibility.Auto */;\n    }\n}\nclass EditorScrollbar extends BaseEditorOption {\n    constructor() {\n        const defaults = {\n            vertical: 1 /* ScrollbarVisibility.Auto */,\n            horizontal: 1 /* ScrollbarVisibility.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            ignoreHorizontalScrollbarInContentHeight: false,\n        };\n        super(104 /* EditorOption.scrollbar */, 'scrollbar', defaults, {\n            'editor.scrollbar.vertical': {\n                type: 'string',\n                enum: ['auto', 'visible', 'hidden'],\n                enumDescriptions: [\n                    nls.localize('scrollbar.vertical.auto', \"The vertical scrollbar will be visible only when necessary.\"),\n                    nls.localize('scrollbar.vertical.visible', \"The vertical scrollbar will always be visible.\"),\n                    nls.localize('scrollbar.vertical.fit', \"The vertical scrollbar will always be hidden.\"),\n                ],\n                default: 'auto',\n                description: nls.localize('scrollbar.vertical', \"Controls the visibility of the vertical scrollbar.\")\n            },\n            'editor.scrollbar.horizontal': {\n                type: 'string',\n                enum: ['auto', 'visible', 'hidden'],\n                enumDescriptions: [\n                    nls.localize('scrollbar.horizontal.auto', \"The horizontal scrollbar will be visible only when necessary.\"),\n                    nls.localize('scrollbar.horizontal.visible', \"The horizontal scrollbar will always be visible.\"),\n                    nls.localize('scrollbar.horizontal.fit', \"The horizontal scrollbar will always be hidden.\"),\n                ],\n                default: 'auto',\n                description: nls.localize('scrollbar.horizontal', \"Controls the visibility of the horizontal scrollbar.\")\n            },\n            'editor.scrollbar.verticalScrollbarSize': {\n                type: 'number',\n                default: defaults.verticalScrollbarSize,\n                description: nls.localize('scrollbar.verticalScrollbarSize', \"The width of the vertical scrollbar.\")\n            },\n            'editor.scrollbar.horizontalScrollbarSize': {\n                type: 'number',\n                default: defaults.horizontalScrollbarSize,\n                description: nls.localize('scrollbar.horizontalScrollbarSize', \"The height of the horizontal scrollbar.\")\n            },\n            'editor.scrollbar.scrollByPage': {\n                type: 'boolean',\n                default: defaults.scrollByPage,\n                description: nls.localize('scrollbar.scrollByPage', \"Controls whether clicks scroll by page or jump to click position.\")\n            },\n            'editor.scrollbar.ignoreHorizontalScrollbarInContentHeight': {\n                type: 'boolean',\n                default: defaults.ignoreHorizontalScrollbarInContentHeight,\n                description: nls.localize('scrollbar.ignoreHorizontalScrollbarInContentHeight', \"When set, the horizontal scrollbar will not increase the size of the editor's content.\")\n            }\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            ignoreHorizontalScrollbarInContentHeight: boolean(input.ignoreHorizontalScrollbarInContentHeight, this.defaultValue.ignoreHorizontalScrollbarInContentHeight),\n        };\n    }\n}\n/**\n * @internal\n*/\nexport const inUntrustedWorkspace = 'inUntrustedWorkspace';\n/**\n * @internal\n */\nexport const unicodeHighlightConfigKeys = {\n    allowedCharacters: 'editor.unicodeHighlight.allowedCharacters',\n    invisibleCharacters: 'editor.unicodeHighlight.invisibleCharacters',\n    nonBasicASCII: 'editor.unicodeHighlight.nonBasicASCII',\n    ambiguousCharacters: 'editor.unicodeHighlight.ambiguousCharacters',\n    includeComments: 'editor.unicodeHighlight.includeComments',\n    includeStrings: 'editor.unicodeHighlight.includeStrings',\n    allowedLocales: 'editor.unicodeHighlight.allowedLocales',\n};\nclass UnicodeHighlight extends BaseEditorOption {\n    constructor() {\n        const defaults = {\n            nonBasicASCII: inUntrustedWorkspace,\n            invisibleCharacters: true,\n            ambiguousCharacters: true,\n            includeComments: inUntrustedWorkspace,\n            includeStrings: true,\n            allowedCharacters: {},\n            allowedLocales: { _os: true, _vscode: true },\n        };\n        super(126 /* EditorOption.unicodeHighlighting */, 'unicodeHighlight', defaults, {\n            [unicodeHighlightConfigKeys.nonBasicASCII]: {\n                restricted: true,\n                type: ['boolean', 'string'],\n                enum: [true, false, inUntrustedWorkspace],\n                default: defaults.nonBasicASCII,\n                description: nls.localize('unicodeHighlight.nonBasicASCII', \"Controls whether all non-basic ASCII characters are highlighted. Only characters between U+0020 and U+007E, tab, line-feed and carriage-return are considered basic ASCII.\")\n            },\n            [unicodeHighlightConfigKeys.invisibleCharacters]: {\n                restricted: true,\n                type: 'boolean',\n                default: defaults.invisibleCharacters,\n                description: nls.localize('unicodeHighlight.invisibleCharacters', \"Controls whether characters that just reserve space or have no width at all are highlighted.\")\n            },\n            [unicodeHighlightConfigKeys.ambiguousCharacters]: {\n                restricted: true,\n                type: 'boolean',\n                default: defaults.ambiguousCharacters,\n                description: nls.localize('unicodeHighlight.ambiguousCharacters', \"Controls whether characters are highlighted that can be confused with basic ASCII characters, except those that are common in the current user locale.\")\n            },\n            [unicodeHighlightConfigKeys.includeComments]: {\n                restricted: true,\n                type: ['boolean', 'string'],\n                enum: [true, false, inUntrustedWorkspace],\n                default: defaults.includeComments,\n                description: nls.localize('unicodeHighlight.includeComments', \"Controls whether characters in comments should also be subject to Unicode highlighting.\")\n            },\n            [unicodeHighlightConfigKeys.includeStrings]: {\n                restricted: true,\n                type: ['boolean', 'string'],\n                enum: [true, false, inUntrustedWorkspace],\n                default: defaults.includeStrings,\n                description: nls.localize('unicodeHighlight.includeStrings', \"Controls whether characters in strings should also be subject to Unicode highlighting.\")\n            },\n            [unicodeHighlightConfigKeys.allowedCharacters]: {\n                restricted: true,\n                type: 'object',\n                default: defaults.allowedCharacters,\n                description: nls.localize('unicodeHighlight.allowedCharacters', \"Defines allowed characters that are not being highlighted.\"),\n                additionalProperties: {\n                    type: 'boolean'\n                }\n            },\n            [unicodeHighlightConfigKeys.allowedLocales]: {\n                restricted: true,\n                type: 'object',\n                additionalProperties: {\n                    type: 'boolean'\n                },\n                default: defaults.allowedLocales,\n                description: nls.localize('unicodeHighlight.allowedLocales', \"Unicode characters that are common in allowed locales are not being highlighted.\")\n            },\n        });\n    }\n    applyUpdate(value, update) {\n        let didChange = false;\n        if (update.allowedCharacters && value) {\n            // Treat allowedCharacters atomically\n            if (!objects.equals(value.allowedCharacters, update.allowedCharacters)) {\n                value = { ...value, allowedCharacters: update.allowedCharacters };\n                didChange = true;\n            }\n        }\n        if (update.allowedLocales && value) {\n            // Treat allowedLocales atomically\n            if (!objects.equals(value.allowedLocales, update.allowedLocales)) {\n                value = { ...value, allowedLocales: update.allowedLocales };\n                didChange = true;\n            }\n        }\n        const result = super.applyUpdate(value, update);\n        if (didChange) {\n            return new ApplyUpdateResult(result.newValue, true);\n        }\n        return result;\n    }\n    validate(_input) {\n        if (!_input || typeof _input !== 'object') {\n            return this.defaultValue;\n        }\n        const input = _input;\n        return {\n            nonBasicASCII: primitiveSet(input.nonBasicASCII, inUntrustedWorkspace, [true, false, inUntrustedWorkspace]),\n            invisibleCharacters: boolean(input.invisibleCharacters, this.defaultValue.invisibleCharacters),\n            ambiguousCharacters: boolean(input.ambiguousCharacters, this.defaultValue.ambiguousCharacters),\n            includeComments: primitiveSet(input.includeComments, inUntrustedWorkspace, [true, false, inUntrustedWorkspace]),\n            includeStrings: primitiveSet(input.includeStrings, inUntrustedWorkspace, [true, false, inUntrustedWorkspace]),\n            allowedCharacters: this.validateBooleanMap(_input.allowedCharacters, this.defaultValue.allowedCharacters),\n            allowedLocales: this.validateBooleanMap(_input.allowedLocales, this.defaultValue.allowedLocales),\n        };\n    }\n    validateBooleanMap(map, defaultValue) {\n        if ((typeof map !== 'object') || !map) {\n            return defaultValue;\n        }\n        const result = {};\n        for (const [key, value] of Object.entries(map)) {\n            if (value === true) {\n                result[key] = true;\n            }\n        }\n        return result;\n    }\n}\n/**\n * Configuration options for inline suggestions\n */\nclass InlineEditorSuggest extends BaseEditorOption {\n    constructor() {\n        const defaults = {\n            enabled: true,\n            mode: 'subwordSmart',\n            showToolbar: 'onHover',\n            suppressSuggestions: false,\n            keepOnBlur: false,\n            fontFamily: 'default'\n        };\n        super(62 /* EditorOption.inlineSuggest */, 'inlineSuggest', defaults, {\n            'editor.inlineSuggest.enabled': {\n                type: 'boolean',\n                default: defaults.enabled,\n                description: nls.localize('inlineSuggest.enabled', \"Controls whether to automatically show inline suggestions in the editor.\")\n            },\n            'editor.inlineSuggest.showToolbar': {\n                type: 'string',\n                default: defaults.showToolbar,\n                enum: ['always', 'onHover', 'never'],\n                enumDescriptions: [\n                    nls.localize('inlineSuggest.showToolbar.always', \"Show the inline suggestion toolbar whenever an inline suggestion is shown.\"),\n                    nls.localize('inlineSuggest.showToolbar.onHover', \"Show the inline suggestion toolbar when hovering over an inline suggestion.\"),\n                    nls.localize('inlineSuggest.showToolbar.never', \"Never show the inline suggestion toolbar.\"),\n                ],\n                description: nls.localize('inlineSuggest.showToolbar', \"Controls when to show the inline suggestion toolbar.\"),\n            },\n            'editor.inlineSuggest.suppressSuggestions': {\n                type: 'boolean',\n                default: defaults.suppressSuggestions,\n                description: nls.localize('inlineSuggest.suppressSuggestions', \"Controls how inline suggestions interact with the suggest widget. If enabled, the suggest widget is not shown automatically when inline suggestions are available.\")\n            },\n            'editor.inlineSuggest.fontFamily': {\n                type: 'string',\n                default: defaults.fontFamily,\n                description: nls.localize('inlineSuggest.fontFamily', \"Controls the font family of the inline 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            enabled: boolean(input.enabled, this.defaultValue.enabled),\n            mode: stringSet(input.mode, this.defaultValue.mode, ['prefix', 'subword', 'subwordSmart']),\n            showToolbar: stringSet(input.showToolbar, this.defaultValue.showToolbar, ['always', 'onHover', 'never']),\n            suppressSuggestions: boolean(input.suppressSuggestions, this.defaultValue.suppressSuggestions),\n            keepOnBlur: boolean(input.keepOnBlur, this.defaultValue.keepOnBlur),\n            fontFamily: EditorStringOption.string(input.fontFamily, this.defaultValue.fontFamily)\n        };\n    }\n}\nclass InlineEditorEdit extends BaseEditorOption {\n    constructor() {\n        const defaults = {\n            enabled: false,\n            showToolbar: 'onHover',\n            fontFamily: 'default',\n            keepOnBlur: false,\n        };\n        super(63 /* EditorOption.inlineEdit */, 'experimentalInlineEdit', defaults, {\n            'editor.experimentalInlineEdit.enabled': {\n                type: 'boolean',\n                default: defaults.enabled,\n                description: nls.localize('inlineEdit.enabled', \"Controls whether to show inline edits in the editor.\")\n            },\n            'editor.experimentalInlineEdit.showToolbar': {\n                type: 'string',\n                default: defaults.showToolbar,\n                enum: ['always', 'onHover', 'never'],\n                enumDescriptions: [\n                    nls.localize('inlineEdit.showToolbar.always', \"Show the inline edit toolbar whenever an inline suggestion is shown.\"),\n                    nls.localize('inlineEdit.showToolbar.onHover', \"Show the inline edit toolbar when hovering over an inline suggestion.\"),\n                    nls.localize('inlineEdit.showToolbar.never', \"Never show the inline edit toolbar.\"),\n                ],\n                description: nls.localize('inlineEdit.showToolbar', \"Controls when to show the inline edit toolbar.\"),\n            },\n            'editor.experimentalInlineEdit.fontFamily': {\n                type: 'string',\n                default: defaults.fontFamily,\n                description: nls.localize('inlineEdit.fontFamily', \"Controls the font family of the inline edit.\")\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            showToolbar: stringSet(input.showToolbar, this.defaultValue.showToolbar, ['always', 'onHover', 'never']),\n            fontFamily: EditorStringOption.string(input.fontFamily, this.defaultValue.fontFamily),\n            keepOnBlur: boolean(input.keepOnBlur, this.defaultValue.keepOnBlur),\n        };\n    }\n}\n/**\n * Configuration options for inline suggestions\n */\nclass BracketPairColorization extends BaseEditorOption {\n    constructor() {\n        const defaults = {\n            enabled: EDITOR_MODEL_DEFAULTS.bracketPairColorizationOptions.enabled,\n            independentColorPoolPerBracketType: EDITOR_MODEL_DEFAULTS.bracketPairColorizationOptions.independentColorPoolPerBracketType,\n        };\n        super(15 /* EditorOption.bracketPairColorization */, 'bracketPairColorization', defaults, {\n            'editor.bracketPairColorization.enabled': {\n                type: 'boolean',\n                default: defaults.enabled,\n                markdownDescription: nls.localize('bracketPairColorization.enabled', \"Controls whether bracket pair colorization is enabled or not. Use {0} to override the bracket highlight colors.\", '`#workbench.colorCustomizations#`')\n            },\n            'editor.bracketPairColorization.independentColorPoolPerBracketType': {\n                type: 'boolean',\n                default: defaults.independentColorPoolPerBracketType,\n                description: nls.localize('bracketPairColorization.independentColorPoolPerBracketType', \"Controls whether each bracket type has its own independent color pool.\")\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            independentColorPoolPerBracketType: boolean(input.independentColorPoolPerBracketType, this.defaultValue.independentColorPoolPerBracketType),\n        };\n    }\n}\n/**\n * Configuration options for inline suggestions\n */\nclass GuideOptions extends BaseEditorOption {\n    constructor() {\n        const defaults = {\n            bracketPairs: false,\n            bracketPairsHorizontal: 'active',\n            highlightActiveBracketPair: true,\n            indentation: true,\n            highlightActiveIndentation: true\n        };\n        super(16 /* EditorOption.guides */, 'guides', defaults, {\n            'editor.guides.bracketPairs': {\n                type: ['boolean', 'string'],\n                enum: [true, 'active', false],\n                enumDescriptions: [\n                    nls.localize('editor.guides.bracketPairs.true', \"Enables bracket pair guides.\"),\n                    nls.localize('editor.guides.bracketPairs.active', \"Enables bracket pair guides only for the active bracket pair.\"),\n                    nls.localize('editor.guides.bracketPairs.false', \"Disables bracket pair guides.\"),\n                ],\n                default: defaults.bracketPairs,\n                description: nls.localize('editor.guides.bracketPairs', \"Controls whether bracket pair guides are enabled or not.\")\n            },\n            'editor.guides.bracketPairsHorizontal': {\n                type: ['boolean', 'string'],\n                enum: [true, 'active', false],\n                enumDescriptions: [\n                    nls.localize('editor.guides.bracketPairsHorizontal.true', \"Enables horizontal guides as addition to vertical bracket pair guides.\"),\n                    nls.localize('editor.guides.bracketPairsHorizontal.active', \"Enables horizontal guides only for the active bracket pair.\"),\n                    nls.localize('editor.guides.bracketPairsHorizontal.false', \"Disables horizontal bracket pair guides.\"),\n                ],\n                default: defaults.bracketPairsHorizontal,\n                description: nls.localize('editor.guides.bracketPairsHorizontal', \"Controls whether horizontal bracket pair guides are enabled or not.\")\n            },\n            'editor.guides.highlightActiveBracketPair': {\n                type: 'boolean',\n                default: defaults.highlightActiveBracketPair,\n                description: nls.localize('editor.guides.highlightActiveBracketPair', \"Controls whether the editor should highlight the active bracket pair.\")\n            },\n            'editor.guides.indentation': {\n                type: 'boolean',\n                default: defaults.indentation,\n                description: nls.localize('editor.guides.indentation', \"Controls whether the editor should render indent guides.\")\n            },\n            'editor.guides.highlightActiveIndentation': {\n                type: ['boolean', 'string'],\n                enum: [true, 'always', false],\n                enumDescriptions: [\n                    nls.localize('editor.guides.highlightActiveIndentation.true', \"Highlights the active indent guide.\"),\n                    nls.localize('editor.guides.highlightActiveIndentation.always', \"Highlights the active indent guide even if bracket guides are highlighted.\"),\n                    nls.localize('editor.guides.highlightActiveIndentation.false', \"Do not highlight the active indent guide.\"),\n                ],\n                default: defaults.highlightActiveIndentation,\n                description: nls.localize('editor.guides.highlightActiveIndentation', \"Controls whether the editor should highlight the active indent guide.\")\n            }\n        });\n    }\n    validate(_input) {\n        if (!_input || typeof _input !== 'object') {\n            return this.defaultValue;\n        }\n        const input = _input;\n        return {\n            bracketPairs: primitiveSet(input.bracketPairs, this.defaultValue.bracketPairs, [true, false, 'active']),\n            bracketPairsHorizontal: primitiveSet(input.bracketPairsHorizontal, this.defaultValue.bracketPairsHorizontal, [true, false, 'active']),\n            highlightActiveBracketPair: boolean(input.highlightActiveBracketPair, this.defaultValue.highlightActiveBracketPair),\n            indentation: boolean(input.indentation, this.defaultValue.indentation),\n            highlightActiveIndentation: primitiveSet(input.highlightActiveIndentation, this.defaultValue.highlightActiveIndentation, [true, false, 'always']),\n        };\n    }\n}\nfunction primitiveSet(value, defaultValue, allowedValues) {\n    const idx = allowedValues.indexOf(value);\n    if (idx === -1) {\n        return defaultValue;\n    }\n    return allowedValues[idx];\n}\nclass EditorSuggest extends BaseEditorOption {\n    constructor() {\n        const defaults = {\n            insertMode: 'insert',\n            filterGraceful: true,\n            snippetsPreventQuickSuggestions: false,\n            localityBonus: false,\n            shareSuggestSelections: false,\n            selectionMode: 'always',\n            showIcons: true,\n            showStatusBar: false,\n            preview: false,\n            previewMode: 'subwordSmart',\n            showInlineDetails: true,\n            showMethods: true,\n            showFunctions: true,\n            showConstructors: true,\n            showDeprecated: true,\n            matchOnWordStartOnly: 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(119 /* EditorOption.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.selectionMode': {\n                type: 'string',\n                enum: ['always', 'never', 'whenTriggerCharacter', 'whenQuickSuggestion'],\n                enumDescriptions: [\n                    nls.localize('suggest.insertMode.always', \"Always select a suggestion when automatically triggering IntelliSense.\"),\n                    nls.localize('suggest.insertMode.never', \"Never select a suggestion when automatically triggering IntelliSense.\"),\n                    nls.localize('suggest.insertMode.whenTriggerCharacter', \"Select a suggestion only when triggering IntelliSense from a trigger character.\"),\n                    nls.localize('suggest.insertMode.whenQuickSuggestion', \"Select a suggestion only when triggering IntelliSense as you type.\"),\n                ],\n                default: defaults.selectionMode,\n                markdownDescription: nls.localize('suggest.selectionMode', \"Controls whether a suggestion is selected when the widget shows. Note that this only applies to automatically triggered suggestions ({0} and {1}) and that a suggestion is always selected when explicitly invoked, e.g via `Ctrl+Space`.\", '`#editor.quickSuggestions#`', '`#editor.suggestOnTriggerCharacters#`')\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.preview': {\n                type: 'boolean',\n                default: defaults.preview,\n                description: nls.localize('suggest.preview', \"Controls whether to preview the suggestion outcome in the editor.\")\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.showDeprecated': {\n                type: 'boolean',\n                default: true,\n                markdownDescription: nls.localize('editor.suggest.showDeprecated', \"When enabled IntelliSense shows `deprecated`-suggestions.\")\n            },\n            'editor.suggest.matchOnWordStartOnly': {\n                type: 'boolean',\n                default: true,\n                markdownDescription: nls.localize('editor.suggest.matchOnWordStartOnly', \"When enabled IntelliSense filtering requires that the first character matches on a word start. For example, `c` on `Console` or `WebContext` but _not_ on `description`. When disabled IntelliSense will show more results but still sorts them by match quality.\")\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            selectionMode: stringSet(input.selectionMode, this.defaultValue.selectionMode, ['always', 'never', 'whenQuickSuggestion', 'whenTriggerCharacter']),\n            showIcons: boolean(input.showIcons, this.defaultValue.showIcons),\n            showStatusBar: boolean(input.showStatusBar, this.defaultValue.showStatusBar),\n            preview: boolean(input.preview, this.defaultValue.preview),\n            previewMode: stringSet(input.previewMode, this.defaultValue.previewMode, ['prefix', 'subword', 'subwordSmart']),\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            showDeprecated: boolean(input.showDeprecated, this.defaultValue.showDeprecated),\n            matchOnWordStartOnly: boolean(input.matchOnWordStartOnly, this.defaultValue.matchOnWordStartOnly),\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(114 /* EditorOption.smartSelect */, 'smartSelect', {\n            selectLeadingAndTrailingWhitespace: true,\n            selectSubwords: 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            'editor.smartSelect.selectSubwords': {\n                description: nls.localize('selectSubwords', \"Whether subwords (like 'foo' in 'fooBar' or 'foo_bar') should 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            selectSubwords: boolean(input.selectSubwords, this.defaultValue.selectSubwords),\n        };\n    }\n}\n//#endregion\n//#region wordSegmenterLocales\n/**\n * Locales used for segmenting lines into words when doing word related navigations or operations.\n *\n * Specify the BCP 47 language tag of the word you wish to recognize (e.g., ja, zh-CN, zh-Hant-TW, etc.).\n */\nclass WordSegmenterLocales extends BaseEditorOption {\n    constructor() {\n        const defaults = [];\n        super(131 /* EditorOption.wordSegmenterLocales */, 'wordSegmenterLocales', defaults, {\n            anyOf: [\n                {\n                    description: nls.localize('wordSegmenterLocales', \"Locales to be used for word segmentation when doing word related navigations or operations. Specify the BCP 47 language tag of the word you wish to recognize (e.g., ja, zh-CN, zh-Hant-TW, etc.).\"),\n                    type: 'string',\n                }, {\n                    description: nls.localize('wordSegmenterLocales', \"Locales to be used for word segmentation when doing word related navigations or operations. Specify the BCP 47 language tag of the word you wish to recognize (e.g., ja, zh-CN, zh-Hant-TW, etc.).\"),\n                    type: 'array',\n                    items: {\n                        type: 'string'\n                    }\n                }\n            ]\n        });\n    }\n    validate(input) {\n        if (typeof input === 'string') {\n            input = [input];\n        }\n        if (Array.isArray(input)) {\n            const validLocales = [];\n            for (const locale of input) {\n                if (typeof locale === 'string') {\n                    try {\n                        if (Intl.Segmenter.supportedLocalesOf(locale).length > 0) {\n                            validLocales.push(locale);\n                        }\n                    }\n                    catch {\n                        // ignore invalid locales\n                    }\n                }\n            }\n            return validLocales;\n        }\n        return this.defaultValue;\n    }\n}\nclass WrappingIndentOption extends BaseEditorOption {\n    constructor() {\n        super(139 /* EditorOption.wrappingIndent */, 'wrappingIndent', 1 /* WrappingIndent.Same */, {\n            'editor.wrappingIndent': {\n                type: 'string',\n                enum: ['none', 'same', 'indent', 'deepIndent'],\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                default: 'same'\n            }\n        });\n    }\n    validate(input) {\n        switch (input) {\n            case 'none': return 0 /* WrappingIndent.None */;\n            case 'same': return 1 /* WrappingIndent.Same */;\n            case 'indent': return 2 /* WrappingIndent.Indent */;\n            case 'deepIndent': return 3 /* WrappingIndent.DeepIndent */;\n        }\n        return 1 /* WrappingIndent.Same */;\n    }\n    compute(env, options, value) {\n        const accessibilitySupport = options.get(2 /* EditorOption.accessibilitySupport */);\n        if (accessibilitySupport === 2 /* AccessibilitySupport.Enabled */) {\n            // if we know for a fact that a screen reader is attached, we use no indent wrapping to\n            // help that the editor's wrapping points match the textarea's wrapping points\n            return 0 /* WrappingIndent.None */;\n        }\n        return value;\n    }\n}\nclass EditorWrappingInfoComputer extends ComputedEditorOption {\n    constructor() {\n        super(147 /* EditorOption.wrappingInfo */);\n    }\n    compute(env, options, _) {\n        const layoutInfo = options.get(146 /* EditorOption.layoutInfo */);\n        return {\n            isDominatedByLongLines: env.isDominatedByLongLines,\n            isWordWrapMinified: layoutInfo.isWordWrapMinified,\n            isViewportWrapping: layoutInfo.isViewportWrapping,\n            wrappingColumn: layoutInfo.wrappingColumn,\n        };\n    }\n}\nclass EditorDropIntoEditor extends BaseEditorOption {\n    constructor() {\n        const defaults = { enabled: true, showDropSelector: 'afterDrop' };\n        super(36 /* EditorOption.dropIntoEditor */, 'dropIntoEditor', defaults, {\n            'editor.dropIntoEditor.enabled': {\n                type: 'boolean',\n                default: defaults.enabled,\n                markdownDescription: nls.localize('dropIntoEditor.enabled', \"Controls whether you can drag and drop a file into a text editor by holding down the `Shift` key (instead of opening the file in an editor).\"),\n            },\n            'editor.dropIntoEditor.showDropSelector': {\n                type: 'string',\n                markdownDescription: nls.localize('dropIntoEditor.showDropSelector', \"Controls if a widget is shown when dropping files into the editor. This widget lets you control how the file is dropped.\"),\n                enum: [\n                    'afterDrop',\n                    'never'\n                ],\n                enumDescriptions: [\n                    nls.localize('dropIntoEditor.showDropSelector.afterDrop', \"Show the drop selector widget after a file is dropped into the editor.\"),\n                    nls.localize('dropIntoEditor.showDropSelector.never', \"Never show the drop selector widget. Instead the default drop provider is always used.\"),\n                ],\n                default: 'afterDrop',\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            showDropSelector: stringSet(input.showDropSelector, this.defaultValue.showDropSelector, ['afterDrop', 'never']),\n        };\n    }\n}\nclass EditorPasteAs extends BaseEditorOption {\n    constructor() {\n        const defaults = { enabled: true, showPasteSelector: 'afterPaste' };\n        super(85 /* EditorOption.pasteAs */, 'pasteAs', defaults, {\n            'editor.pasteAs.enabled': {\n                type: 'boolean',\n                default: defaults.enabled,\n                markdownDescription: nls.localize('pasteAs.enabled', \"Controls whether you can paste content in different ways.\"),\n            },\n            'editor.pasteAs.showPasteSelector': {\n                type: 'string',\n                markdownDescription: nls.localize('pasteAs.showPasteSelector', \"Controls if a widget is shown when pasting content in to the editor. This widget lets you control how the file is pasted.\"),\n                enum: [\n                    'afterPaste',\n                    'never'\n                ],\n                enumDescriptions: [\n                    nls.localize('pasteAs.showPasteSelector.afterPaste', \"Show the paste selector widget after content is pasted into the editor.\"),\n                    nls.localize('pasteAs.showPasteSelector.never', \"Never show the paste selector widget. Instead the default pasting behavior is always used.\"),\n                ],\n                default: 'afterPaste',\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            showPasteSelector: stringSet(input.showPasteSelector, this.defaultValue.showPasteSelector, ['afterPaste', 'never']),\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';\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 editorOptionsRegistry = [];\nfunction register(option) {\n    editorOptionsRegistry[option.id] = option;\n    return option;\n}\nexport const EditorOptions = {\n    acceptSuggestionOnCommitCharacter: register(new EditorBooleanOption(0 /* EditorOption.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 /* EditorOption.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 /* EditorOption.accessibilityPageSize */, 'accessibilityPageSize', 10, 1, 1073741824 /* Constants.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        tags: ['accessibility']\n    })),\n    ariaLabel: register(new EditorStringOption(4 /* EditorOption.ariaLabel */, 'ariaLabel', nls.localize('editorViewAccessibleLabel', \"Editor content\"))),\n    ariaRequired: register(new EditorBooleanOption(5 /* EditorOption.ariaRequired */, 'ariaRequired', false, undefined)),\n    screenReaderAnnounceInlineSuggestion: register(new EditorBooleanOption(8 /* EditorOption.screenReaderAnnounceInlineSuggestion */, 'screenReaderAnnounceInlineSuggestion', true, {\n        description: nls.localize('screenReaderAnnounceInlineSuggestion', \"Control whether inline suggestions are announced by a screen reader.\"),\n        tags: ['accessibility']\n    })),\n    autoClosingBrackets: register(new EditorStringEnumOption(6 /* EditorOption.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    autoClosingComments: register(new EditorStringEnumOption(7 /* EditorOption.autoClosingComments */, 'autoClosingComments', 'languageDefined', ['always', 'languageDefined', 'beforeWhitespace', 'never'], {\n        enumDescriptions: [\n            '',\n            nls.localize('editor.autoClosingComments.languageDefined', \"Use language configurations to determine when to autoclose comments.\"),\n            nls.localize('editor.autoClosingComments.beforeWhitespace', \"Autoclose comments only when the cursor is to the left of whitespace.\"),\n            '',\n        ],\n        description: nls.localize('autoClosingComments', \"Controls whether the editor should automatically close comments after the user adds an opening comment.\")\n    })),\n    autoClosingDelete: register(new EditorStringEnumOption(9 /* EditorOption.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(10 /* EditorOption.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(11 /* EditorOption.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(12 /* EditorOption.autoIndent */, 'autoIndent', 4 /* EditorAutoIndentStrategy.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(13 /* EditorOption.automaticLayout */, 'automaticLayout', false)),\n    autoSurround: register(new EditorStringEnumOption(14 /* EditorOption.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    bracketPairColorization: register(new BracketPairColorization()),\n    bracketPairGuides: register(new GuideOptions()),\n    stickyTabStops: register(new EditorBooleanOption(117 /* EditorOption.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(17 /* EditorOption.codeLens */, 'codeLens', true, { description: nls.localize('codeLens', \"Controls whether the editor shows CodeLens.\") })),\n    codeLensFontFamily: register(new EditorStringOption(18 /* EditorOption.codeLensFontFamily */, 'codeLensFontFamily', '', { description: nls.localize('codeLensFontFamily', \"Controls the font family for CodeLens.\") })),\n    codeLensFontSize: register(new EditorIntOption(19 /* EditorOption.codeLensFontSize */, 'codeLensFontSize', 0, 0, 100, {\n        type: 'number',\n        default: 0,\n        minimum: 0,\n        maximum: 100,\n        markdownDescription: nls.localize('codeLensFontSize', \"Controls the font size in pixels for CodeLens. When set to 0, 90% of `#editor.fontSize#` is used.\")\n    })),\n    colorDecorators: register(new EditorBooleanOption(20 /* EditorOption.colorDecorators */, 'colorDecorators', true, { description: nls.localize('colorDecorators', \"Controls whether the editor should render the inline color decorators and color picker.\") })),\n    colorDecoratorActivatedOn: register(new EditorStringEnumOption(149 /* EditorOption.colorDecoratorsActivatedOn */, 'colorDecoratorsActivatedOn', 'clickAndHover', ['clickAndHover', 'hover', 'click'], {\n        enumDescriptions: [\n            nls.localize('editor.colorDecoratorActivatedOn.clickAndHover', \"Make the color picker appear both on click and hover of the color decorator\"),\n            nls.localize('editor.colorDecoratorActivatedOn.hover', \"Make the color picker appear on hover of the color decorator\"),\n            nls.localize('editor.colorDecoratorActivatedOn.click', \"Make the color picker appear on click of the color decorator\")\n        ],\n        description: nls.localize('colorDecoratorActivatedOn', \"Controls the condition to make a color picker appear from a color decorator\")\n    })),\n    colorDecoratorsLimit: register(new EditorIntOption(21 /* EditorOption.colorDecoratorsLimit */, 'colorDecoratorsLimit', 500, 1, 1000000, {\n        markdownDescription: nls.localize('colorDecoratorsLimit', \"Controls the max number of color decorators that can be rendered in an editor at once.\")\n    })),\n    columnSelection: register(new EditorBooleanOption(22 /* EditorOption.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(24 /* EditorOption.contextmenu */, 'contextmenu', true)),\n    copyWithSyntaxHighlighting: register(new EditorBooleanOption(25 /* EditorOption.copyWithSyntaxHighlighting */, 'copyWithSyntaxHighlighting', true, { description: nls.localize('copyWithSyntaxHighlighting', \"Controls whether syntax highlighting should be copied into the clipboard.\") })),\n    cursorBlinking: register(new EditorEnumOption(26 /* EditorOption.cursorBlinking */, 'cursorBlinking', 1 /* TextEditorCursorBlinkingStyle.Blink */, 'blink', ['blink', 'smooth', 'phase', 'expand', 'solid'], _cursorBlinkingStyleFromString, { description: nls.localize('cursorBlinking', \"Control the cursor animation style.\") })),\n    cursorSmoothCaretAnimation: register(new EditorStringEnumOption(27 /* EditorOption.cursorSmoothCaretAnimation */, 'cursorSmoothCaretAnimation', 'off', ['off', 'explicit', 'on'], {\n        enumDescriptions: [\n            nls.localize('cursorSmoothCaretAnimation.off', \"Smooth caret animation is disabled.\"),\n            nls.localize('cursorSmoothCaretAnimation.explicit', \"Smooth caret animation is enabled only when the user moves the cursor with an explicit gesture.\"),\n            nls.localize('cursorSmoothCaretAnimation.on', \"Smooth caret animation is always enabled.\")\n        ],\n        description: nls.localize('cursorSmoothCaretAnimation', \"Controls whether the smooth caret animation should be enabled.\")\n    })),\n    cursorStyle: register(new EditorEnumOption(28 /* EditorOption.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(29 /* EditorOption.cursorSurroundingLines */, 'cursorSurroundingLines', 0, 0, 1073741824 /* Constants.MAX_SAFE_SMALL_INTEGER */, { description: nls.localize('cursorSurroundingLines', \"Controls the minimal number of visible leading lines (minimum 0) and trailing lines (minimum 1) surrounding the cursor. Known as 'scrollOff' or 'scrollOffset' in some other editors.\") })),\n    cursorSurroundingLinesStyle: register(new EditorStringEnumOption(30 /* EditorOption.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        markdownDescription: nls.localize('cursorSurroundingLinesStyle', \"Controls when `#editor.cursorSurroundingLines#` should be enforced.\")\n    })),\n    cursorWidth: register(new EditorIntOption(31 /* EditorOption.cursorWidth */, 'cursorWidth', 0, 0, 1073741824 /* Constants.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(32 /* EditorOption.disableLayerHinting */, 'disableLayerHinting', false)),\n    disableMonospaceOptimizations: register(new EditorBooleanOption(33 /* EditorOption.disableMonospaceOptimizations */, 'disableMonospaceOptimizations', false)),\n    domReadOnly: register(new EditorBooleanOption(34 /* EditorOption.domReadOnly */, 'domReadOnly', false)),\n    dragAndDrop: register(new EditorBooleanOption(35 /* EditorOption.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    dropIntoEditor: register(new EditorDropIntoEditor()),\n    stickyScroll: register(new EditorStickyScroll()),\n    experimentalWhitespaceRendering: register(new EditorStringEnumOption(38 /* EditorOption.experimentalWhitespaceRendering */, 'experimentalWhitespaceRendering', 'svg', ['svg', 'font', 'off'], {\n        enumDescriptions: [\n            nls.localize('experimentalWhitespaceRendering.svg', \"Use a new rendering method with svgs.\"),\n            nls.localize('experimentalWhitespaceRendering.font', \"Use a new rendering method with font characters.\"),\n            nls.localize('experimentalWhitespaceRendering.off', \"Use the stable rendering method.\"),\n        ],\n        description: nls.localize('experimentalWhitespaceRendering', \"Controls whether whitespace is rendered with a new, experimental method.\")\n    })),\n    extraEditorClassName: register(new EditorStringOption(39 /* EditorOption.extraEditorClassName */, 'extraEditorClassName', '')),\n    fastScrollSensitivity: register(new EditorFloatOption(40 /* EditorOption.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(42 /* EditorOption.fixedOverflowWidgets */, 'fixedOverflowWidgets', false)),\n    folding: register(new EditorBooleanOption(43 /* EditorOption.folding */, 'folding', true, { description: nls.localize('folding', \"Controls whether the editor has code folding enabled.\") })),\n    foldingStrategy: register(new EditorStringEnumOption(44 /* EditorOption.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(45 /* EditorOption.foldingHighlight */, 'foldingHighlight', true, { description: nls.localize('foldingHighlight', \"Controls whether the editor should highlight folded ranges.\") })),\n    foldingImportsByDefault: register(new EditorBooleanOption(46 /* EditorOption.foldingImportsByDefault */, 'foldingImportsByDefault', false, { description: nls.localize('foldingImportsByDefault', \"Controls whether the editor automatically collapses import ranges.\") })),\n    foldingMaximumRegions: register(new EditorIntOption(47 /* EditorOption.foldingMaximumRegions */, 'foldingMaximumRegions', 5000, 10, 65000, // limit must be less than foldingRanges MAX_FOLDING_REGIONS\n    { description: nls.localize('foldingMaximumRegions', \"The maximum number of foldable regions. Increasing this value may result in the editor becoming less responsive when the current source has a large number of foldable regions.\") })),\n    unfoldOnClickAfterEndOfLine: register(new EditorBooleanOption(48 /* EditorOption.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(49 /* EditorOption.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    fontVariations: register(new EditorFontVariations()),\n    formatOnPaste: register(new EditorBooleanOption(55 /* EditorOption.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(56 /* EditorOption.formatOnType */, 'formatOnType', false, { description: nls.localize('formatOnType', \"Controls whether the editor should automatically format the line after typing.\") })),\n    glyphMargin: register(new EditorBooleanOption(57 /* EditorOption.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(59 /* EditorOption.hideCursorInOverviewRuler */, 'hideCursorInOverviewRuler', false, { description: nls.localize('hideCursorInOverviewRuler', \"Controls whether the cursor should be hidden in the overview ruler.\") })),\n    hover: register(new EditorHover()),\n    inDiffEditor: register(new EditorBooleanOption(61 /* EditorOption.inDiffEditor */, 'inDiffEditor', false)),\n    letterSpacing: register(new EditorFloatOption(64 /* EditorOption.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 EditorLineDecorationsWidth()),\n    lineHeight: register(new EditorLineHeight()),\n    lineNumbers: register(new EditorRenderLineNumbersOption()),\n    lineNumbersMinChars: register(new EditorIntOption(69 /* EditorOption.lineNumbersMinChars */, 'lineNumbersMinChars', 5, 1, 300)),\n    linkedEditing: register(new EditorBooleanOption(70 /* EditorOption.linkedEditing */, 'linkedEditing', false, { description: nls.localize('linkedEditing', \"Controls whether the editor has linked editing enabled. Depending on the language, related symbols such as HTML tags, are updated while editing.\") })),\n    links: register(new EditorBooleanOption(71 /* EditorOption.links */, 'links', true, { description: nls.localize('links', \"Controls whether the editor should detect links and make them clickable.\") })),\n    matchBrackets: register(new EditorStringEnumOption(72 /* EditorOption.matchBrackets */, 'matchBrackets', 'always', ['always', 'near', 'never'], { description: nls.localize('matchBrackets', \"Highlight matching brackets.\") })),\n    minimap: register(new EditorMinimap()),\n    mouseStyle: register(new EditorStringEnumOption(74 /* EditorOption.mouseStyle */, 'mouseStyle', 'text', ['text', 'default', 'copy'])),\n    mouseWheelScrollSensitivity: register(new EditorFloatOption(75 /* EditorOption.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(76 /* EditorOption.mouseWheelZoom */, 'mouseWheelZoom', false, {\n        markdownDescription: platform.isMacintosh\n            ? nls.localize('mouseWheelZoom.mac', \"Zoom the font of the editor when using mouse wheel and holding `Cmd`.\")\n            : nls.localize('mouseWheelZoom', \"Zoom the font of the editor when using mouse wheel and holding `Ctrl`.\")\n    })),\n    multiCursorMergeOverlapping: register(new EditorBooleanOption(77 /* EditorOption.multiCursorMergeOverlapping */, 'multiCursorMergeOverlapping', true, { description: nls.localize('multiCursorMergeOverlapping', \"Merge multiple cursors when they are overlapping.\") })),\n    multiCursorModifier: register(new EditorEnumOption(78 /* EditorOption.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](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier).\")\n    })),\n    multiCursorPaste: register(new EditorStringEnumOption(79 /* EditorOption.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    multiCursorLimit: register(new EditorIntOption(80 /* EditorOption.multiCursorLimit */, 'multiCursorLimit', 10000, 1, 100000, {\n        markdownDescription: nls.localize('multiCursorLimit', \"Controls the max number of cursors that can be in an active editor at once.\")\n    })),\n    occurrencesHighlight: register(new EditorStringEnumOption(81 /* EditorOption.occurrencesHighlight */, 'occurrencesHighlight', 'singleFile', ['off', 'singleFile', 'multiFile'], {\n        markdownEnumDescriptions: [\n            nls.localize('occurrencesHighlight.off', \"Does not highlight occurrences.\"),\n            nls.localize('occurrencesHighlight.singleFile', \"Highlights occurrences only in the current file.\"),\n            nls.localize('occurrencesHighlight.multiFile', \"Experimental: Highlights occurrences across all valid open files.\")\n        ],\n        markdownDescription: nls.localize('occurrencesHighlight', \"Controls whether occurrences should be highlighted across open files.\")\n    })),\n    overviewRulerBorder: register(new EditorBooleanOption(82 /* EditorOption.overviewRulerBorder */, 'overviewRulerBorder', true, { description: nls.localize('overviewRulerBorder', \"Controls whether a border should be drawn around the overview ruler.\") })),\n    overviewRulerLanes: register(new EditorIntOption(83 /* EditorOption.overviewRulerLanes */, 'overviewRulerLanes', 3, 0, 3)),\n    padding: register(new EditorPadding()),\n    pasteAs: register(new EditorPasteAs()),\n    parameterHints: register(new EditorParameterHints()),\n    peekWidgetDefaultFocus: register(new EditorStringEnumOption(87 /* EditorOption.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    placeholder: register(new PlaceholderOption()),\n    definitionLinkOpensInPeek: register(new EditorBooleanOption(89 /* EditorOption.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(91 /* EditorOption.quickSuggestionsDelay */, 'quickSuggestionsDelay', 10, 0, 1073741824 /* Constants.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(92 /* EditorOption.readOnly */, 'readOnly', false)),\n    readOnlyMessage: register(new ReadonlyMessage()),\n    renameOnType: register(new EditorBooleanOption(94 /* EditorOption.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(95 /* EditorOption.renderControlCharacters */, 'renderControlCharacters', true, { description: nls.localize('renderControlCharacters', \"Controls whether the editor should render control characters.\"), restricted: true })),\n    renderFinalNewline: register(new EditorStringEnumOption(96 /* EditorOption.renderFinalNewline */, 'renderFinalNewline', (platform.isLinux ? 'dimmed' : 'on'), ['off', 'on', 'dimmed'], { description: nls.localize('renderFinalNewline', \"Render last line number when the file ends with a newline.\") })),\n    renderLineHighlight: register(new EditorStringEnumOption(97 /* EditorOption.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(98 /* EditorOption.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(99 /* EditorOption.renderValidationDecorations */, 'renderValidationDecorations', 'editable', ['editable', 'on', 'off'])),\n    renderWhitespace: register(new EditorStringEnumOption(100 /* EditorOption.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(101 /* EditorOption.revealHorizontalRightPadding */, 'revealHorizontalRightPadding', 15, 0, 1000)),\n    roundedSelection: register(new EditorBooleanOption(102 /* EditorOption.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(105 /* EditorOption.scrollBeyondLastColumn */, 'scrollBeyondLastColumn', 4, 0, 1073741824 /* Constants.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(106 /* EditorOption.scrollBeyondLastLine */, 'scrollBeyondLastLine', true, { description: nls.localize('scrollBeyondLastLine', \"Controls whether the editor will scroll beyond the last line.\") })),\n    scrollPredominantAxis: register(new EditorBooleanOption(107 /* EditorOption.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(108 /* EditorOption.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(109 /* EditorOption.selectionHighlight */, 'selectionHighlight', true, { description: nls.localize('selectionHighlight', \"Controls whether the editor should highlight matches similar to the selection.\") })),\n    selectOnLineNumbers: register(new EditorBooleanOption(110 /* EditorOption.selectOnLineNumbers */, 'selectOnLineNumbers', true)),\n    showFoldingControls: register(new EditorStringEnumOption(111 /* EditorOption.showFoldingControls */, 'showFoldingControls', 'mouseover', ['always', 'never', 'mouseover'], {\n        enumDescriptions: [\n            nls.localize('showFoldingControls.always', \"Always show the folding controls.\"),\n            nls.localize('showFoldingControls.never', \"Never show the folding controls and reduce the gutter size.\"),\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(112 /* EditorOption.showUnused */, 'showUnused', true, { description: nls.localize('showUnused', \"Controls fading out of unused code.\") })),\n    showDeprecated: register(new EditorBooleanOption(141 /* EditorOption.showDeprecated */, 'showDeprecated', true, { description: nls.localize('showDeprecated', \"Controls strikethrough deprecated variables.\") })),\n    inlayHints: register(new EditorInlayHints()),\n    snippetSuggestions: register(new EditorStringEnumOption(113 /* EditorOption.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(115 /* EditorOption.smoothScrolling */, 'smoothScrolling', false, { description: nls.localize('smoothScrolling', \"Controls whether the editor will scroll using an animation.\") })),\n    stopRenderingLineAfter: register(new EditorIntOption(118 /* EditorOption.stopRenderingLineAfter */, 'stopRenderingLineAfter', 10000, -1, 1073741824 /* Constants.MAX_SAFE_SMALL_INTEGER */)),\n    suggest: register(new EditorSuggest()),\n    inlineSuggest: register(new InlineEditorSuggest()),\n    inlineEdit: register(new InlineEditorEdit()),\n    inlineCompletionsAccessibilityVerbose: register(new EditorBooleanOption(150 /* EditorOption.inlineCompletionsAccessibilityVerbose */, 'inlineCompletionsAccessibilityVerbose', false, { description: nls.localize('inlineCompletionsAccessibilityVerbose', \"Controls whether the accessibility hint should be provided to screen reader users when an inline completion is shown.\") })),\n    suggestFontSize: register(new EditorIntOption(120 /* EditorOption.suggestFontSize */, 'suggestFontSize', 0, 0, 1000, { markdownDescription: nls.localize('suggestFontSize', \"Font size for the suggest widget. When set to {0}, the value of {1} is used.\", '`0`', '`#editor.fontSize#`') })),\n    suggestLineHeight: register(new EditorIntOption(121 /* EditorOption.suggestLineHeight */, 'suggestLineHeight', 0, 0, 1000, { markdownDescription: nls.localize('suggestLineHeight', \"Line height for the suggest widget. When set to {0}, the value of {1} is used. The minimum value is 8.\", '`0`', '`#editor.lineHeight#`') })),\n    suggestOnTriggerCharacters: register(new EditorBooleanOption(122 /* EditorOption.suggestOnTriggerCharacters */, 'suggestOnTriggerCharacters', true, { description: nls.localize('suggestOnTriggerCharacters', \"Controls whether suggestions should automatically show up when typing trigger characters.\") })),\n    suggestSelection: register(new EditorStringEnumOption(123 /* EditorOption.suggestSelection */, 'suggestSelection', 'first', ['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(124 /* EditorOption.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(125 /* EditorOption.tabIndex */, 'tabIndex', 0, -1, 1073741824 /* Constants.MAX_SAFE_SMALL_INTEGER */)),\n    unicodeHighlight: register(new UnicodeHighlight()),\n    unusualLineTerminators: register(new EditorStringEnumOption(127 /* EditorOption.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(128 /* EditorOption.useShadowDOM */, 'useShadowDOM', true)),\n    useTabStops: register(new EditorBooleanOption(129 /* EditorOption.useTabStops */, 'useTabStops', true, { description: nls.localize('useTabStops', \"Spaces and tabs are inserted and deleted in alignment with tab stops.\") })),\n    wordBreak: register(new EditorStringEnumOption(130 /* EditorOption.wordBreak */, 'wordBreak', 'normal', ['normal', 'keepAll'], {\n        markdownEnumDescriptions: [\n            nls.localize('wordBreak.normal', \"Use the default line break rule.\"),\n            nls.localize('wordBreak.keepAll', \"Word breaks should not be used for Chinese/Japanese/Korean (CJK) text. Non-CJK text behavior is the same as for normal.\"),\n        ],\n        description: nls.localize('wordBreak', \"Controls the word break rules used for Chinese/Japanese/Korean (CJK) text.\")\n    })),\n    wordSegmenterLocales: register(new WordSegmenterLocales()),\n    wordSeparators: register(new EditorStringOption(132 /* EditorOption.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(133 /* EditorOption.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(134 /* EditorOption.wordWrapBreakAfterCharacters */, 'wordWrapBreakAfterCharacters', \n    // allow-any-unicode-next-line\n    ' \\t})]?|/&.,;¢°′″‰℃、。｡､￠，．：；？！％・･ゝゞヽヾーァィゥェォッャュョヮヵヶぁぃぅぇぉっゃゅょゎゕゖㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ々〻ｧｨｩｪｫｬｭｮｯｰ”〉》」』】〕）］｝｣')),\n    wordWrapBreakBeforeCharacters: register(new EditorStringOption(135 /* EditorOption.wordWrapBreakBeforeCharacters */, 'wordWrapBreakBeforeCharacters', \n    // allow-any-unicode-next-line\n    '([{‘“〈《「『【〔（［｛｢£¥＄￡￥+＋')),\n    wordWrapColumn: register(new EditorIntOption(136 /* EditorOption.wordWrapColumn */, 'wordWrapColumn', 80, 1, 1073741824 /* Constants.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(137 /* EditorOption.wordWrapOverride1 */, 'wordWrapOverride1', 'inherit', ['off', 'on', 'inherit'])),\n    wordWrapOverride2: register(new EditorStringEnumOption(138 /* EditorOption.wordWrapOverride2 */, 'wordWrapOverride2', 'inherit', ['off', 'on', 'inherit'])),\n    // Leave these at the end (because they have dependencies!)\n    editorClassName: register(new EditorClassName()),\n    defaultColorDecorators: register(new EditorBooleanOption(148 /* EditorOption.defaultColorDecorators */, 'defaultColorDecorators', false, { markdownDescription: nls.localize('defaultColorDecorators', \"Controls whether inline color decorations should be shown using the default document color provider\") })),\n    pixelRatio: register(new EditorPixelRatio()),\n    tabFocusMode: register(new EditorBooleanOption(145 /* EditorOption.tabFocusMode */, 'tabFocusMode', false, { markdownDescription: nls.localize('tabFocusMode', \"Controls whether the editor receives tabs or defers them to the workbench for navigation.\") })),\n    layoutInfo: register(new EditorLayoutInfoComputer()),\n    wrappingInfo: register(new EditorWrappingInfoComputer()),\n    wrappingIndent: register(new WrappingIndentOption()),\n    wrappingStrategy: register(new WrappingStrategy())\n};\n","/*---------------------------------------------------------------------------------------------\n *  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// 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                    if (ErrorNoTelemetry.isErrorNoTelemetry(e)) {\n                        throw new ErrorNoTelemetry(e.message + '\\n\\n' + e.stack);\n                    }\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 (!isCancellationError(e)) {\n        errorHandler.onUnexpectedError(e);\n    }\n    return undefined;\n}\nexport function onUnexpectedExternalError(e) {\n    // ignore errors from cancelled promises\n    if (!isCancellationError(e)) {\n        errorHandler.onUnexpectedExternalError(e);\n    }\n    return undefined;\n}\nexport function transformErrorForSerialization(error) {\n    if (error instanceof Error) {\n        const { name, message } = error;\n        const stack = error.stacktrace || error.stack;\n        return {\n            $isError: true,\n            name,\n            message,\n            stack,\n            noTelemetry: ErrorNoTelemetry.isErrorNoTelemetry(error)\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 isCancellationError(error) {\n    if (error instanceof CancellationError) {\n        return true;\n    }\n    return error instanceof Error && error.name === canceledName && error.message === canceledName;\n}\n// !!!IMPORTANT!!!\n// Do NOT change this class because it is also used as an API-type.\nexport class CancellationError extends Error {\n    constructor() {\n        super(canceledName);\n        this.name = this.message;\n    }\n}\n/**\n * @deprecated use {@link CancellationError `new CancellationError()`} instead\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}\nexport class NotSupportedError extends Error {\n    constructor(message) {\n        super('NotSupported');\n        if (message) {\n            this.message = message;\n        }\n    }\n}\n/**\n * Error that when thrown won't be logged in telemetry as an unhandled error.\n */\nexport class ErrorNoTelemetry extends Error {\n    constructor(msg) {\n        super(msg);\n        this.name = 'CodeExpectedError';\n    }\n    static fromError(err) {\n        if (err instanceof ErrorNoTelemetry) {\n            return err;\n        }\n        const result = new ErrorNoTelemetry();\n        result.message = err.message;\n        result.stack = err.stack;\n        return result;\n    }\n    static isErrorNoTelemetry(err) {\n        return err.name === 'CodeExpectedError';\n    }\n}\n/**\n * This error indicates a bug.\n * Do not throw this for invalid user input.\n * Only catch this error to recover gracefully from bugs.\n */\nexport class BugIndicatingError extends Error {\n    constructor(message) {\n        super(message || 'An unexpected bug occurred.');\n        Object.setPrototypeOf(this, BugIndicatingError.prototype);\n        // Because we know for sure only buggy code throws this,\n        // we definitely want to break here and fix the bug.\n        // eslint-disable-next-line no-debugger\n        // debugger;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 * Given a function, returns a function that is only calling that function once.\n */\nexport function createSingleCallFunction(fn, fnDidRunCallback) {\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        if (fnDidRunCallback) {\n            try {\n                result = fn.apply(_this, arguments);\n            }\n            finally {\n                fnDidRunCallback();\n            }\n        }\n        else {\n            result = fn.apply(_this, arguments);\n        }\n        return result;\n    };\n}\n","import { createSingleCallFunction } from './functional.js';\nimport { Iterable } from './iterator.js';\n// #region Disposable Tracking\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;\nexport function setDisposableTracker(tracker) {\n    disposableTracker = tracker;\n}\nif (TRACK_DISPOSABLES) {\n    const __is_disposable_tracked__ = '__is_disposable_tracked__';\n    setDisposableTracker(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        setParent(child, parent) {\n            if (child && child !== Disposable.None) {\n                try {\n                    child[__is_disposable_tracked__] = true;\n                }\n                catch {\n                    // noop\n                }\n            }\n        }\n        markAsDisposed(disposable) {\n            if (disposable && disposable !== Disposable.None) {\n                try {\n                    disposable[__is_disposable_tracked__] = true;\n                }\n                catch {\n                    // noop\n                }\n            }\n        }\n        markAsSingleton(disposable) { }\n    });\n}\nexport function trackDisposable(x) {\n    disposableTracker?.trackDisposable(x);\n    return x;\n}\nexport function markAsDisposed(disposable) {\n    disposableTracker?.markAsDisposed(disposable);\n}\nfunction setParentOfDisposable(child, parent) {\n    disposableTracker?.setParent(child, parent);\n}\nfunction setParentOfDisposables(children, parent) {\n    if (!disposableTracker) {\n        return;\n    }\n    for (const child of children) {\n        disposableTracker.setParent(child, parent);\n    }\n}\n/**\n * Indicates that the given object is a singleton which does not need to be disposed.\n*/\nexport function markAsSingleton(singleton) {\n    disposableTracker?.markAsSingleton(singleton);\n    return singleton;\n}\n/**\n * Check if `thing` is {@link IDisposable disposable}.\n */\nexport function isDisposable(thing) {\n    return typeof thing === 'object' && thing !== null && typeof thing.dispose === 'function' && thing.dispose.length === 0;\n}\nexport function dispose(arg) {\n    if (Iterable.is(arg)) {\n        const errors = [];\n        for (const d of arg) {\n            if (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 AggregateError(errors, 'Encountered errors while disposing of store');\n        }\n        return Array.isArray(arg) ? [] : arg;\n    }\n    else if (arg) {\n        arg.dispose();\n        return arg;\n    }\n}\n/**\n * Combine multiple disposable values into a single {@link IDisposable}.\n */\nexport function combinedDisposable(...disposables) {\n    const parent = toDisposable(() => dispose(disposables));\n    setParentOfDisposables(disposables, parent);\n    return parent;\n}\n/**\n * Turn a function that implements dispose into an {@link IDisposable}.\n *\n * @param fn Clean up function, guaranteed to be called only **once**.\n */\nexport function toDisposable(fn) {\n    const self = trackDisposable({\n        dispose: createSingleCallFunction(() => {\n            markAsDisposed(self);\n            fn();\n        })\n    });\n    return self;\n}\n/**\n * Manages a collection of disposable values.\n *\n * This is the preferred way to manage multiple disposables. A `DisposableStore` is safer to work with than an\n * `IDisposable[]` as it considers edge cases, such as registering the same value multiple times or adding an item to a\n * store that has already been disposed of.\n */\nexport class DisposableStore {\n    static { this.DISABLE_DISPOSED_WARNING = false; }\n    constructor() {\n        this._toDispose = new Set();\n        this._isDisposed = false;\n        trackDisposable(this);\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        markAsDisposed(this);\n        this._isDisposed = true;\n        this.clear();\n    }\n    /**\n     * @return `true` if this object has been disposed of.\n     */\n    get isDisposed() {\n        return this._isDisposed;\n    }\n    /**\n     * Dispose of all registered disposables but do not mark this object as disposed.\n     */\n    clear() {\n        if (this._toDispose.size === 0) {\n            return;\n        }\n        try {\n            dispose(this._toDispose);\n        }\n        finally {\n            this._toDispose.clear();\n        }\n    }\n    /**\n     * Add a new {@link IDisposable disposable} to the collection.\n     */\n    add(o) {\n        if (!o) {\n            return o;\n        }\n        if (o === this) {\n            throw new Error('Cannot register a disposable on itself!');\n        }\n        setParentOfDisposable(o, this);\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(o);\n        }\n        return o;\n    }\n    /**\n     * Deletes the value from the store, but does not dispose it.\n     */\n    deleteAndLeak(o) {\n        if (!o) {\n            return;\n        }\n        if (this._toDispose.has(o)) {\n            this._toDispose.delete(o);\n            setParentOfDisposable(o, null);\n        }\n    }\n}\n/**\n * Abstract base class for a {@link IDisposable disposable} object.\n *\n * Subclasses can {@linkcode _register} disposables that will be automatically cleaned up when this object is disposed of.\n */\nexport class Disposable {\n    /**\n     * A disposable that does nothing when it is disposed of.\n     *\n     * TODO: This should not be a static property.\n     */\n    static { this.None = Object.freeze({ dispose() { } }); }\n    constructor() {\n        this._store = new DisposableStore();\n        trackDisposable(this);\n        setParentOfDisposable(this._store, this);\n    }\n    dispose() {\n        markAsDisposed(this);\n        this._store.dispose();\n    }\n    /**\n     * Adds `o` to the collection of disposables managed by this object.\n     */\n    _register(o) {\n        if (o === this) {\n            throw new Error('Cannot register a disposable on itself!');\n        }\n        return this._store.add(o);\n    }\n}\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        if (this._isDisposed || value === this._value) {\n            return;\n        }\n        this._value?.dispose();\n        if (value) {\n            setParentOfDisposable(value, this);\n        }\n        this._value = value;\n    }\n    /**\n     * Resets the stored value and disposed of the previously stored value.\n     */\n    clear() {\n        this.value = undefined;\n    }\n    dispose() {\n        this._isDisposed = true;\n        markAsDisposed(this);\n        this._value?.dispose();\n        this._value = undefined;\n    }\n}\nexport class RefCountedDisposable {\n    constructor(_disposable) {\n        this._disposable = _disposable;\n        this._counter = 1;\n    }\n    acquire() {\n        this._counter++;\n        return this;\n    }\n    release() {\n        if (--this._counter === 0) {\n            this._disposable.dispose();\n        }\n        return this;\n    }\n}\nexport class ImmortalReference {\n    constructor(object) {\n        this.object = object;\n    }\n    dispose() { }\n}\n/**\n * A map the manages the lifecycle of the values that it stores.\n */\nexport class DisposableMap {\n    constructor() {\n        this._store = new Map();\n        this._isDisposed = false;\n        trackDisposable(this);\n    }\n    /**\n     * Disposes of all stored values and mark this object as disposed.\n     *\n     * Trying to use this object after it has been disposed of is an error.\n     */\n    dispose() {\n        markAsDisposed(this);\n        this._isDisposed = true;\n        this.clearAndDisposeAll();\n    }\n    /**\n     * Disposes of all stored values and clear the map, but DO NOT mark this object as disposed.\n     */\n    clearAndDisposeAll() {\n        if (!this._store.size) {\n            return;\n        }\n        try {\n            dispose(this._store.values());\n        }\n        finally {\n            this._store.clear();\n        }\n    }\n    get(key) {\n        return this._store.get(key);\n    }\n    set(key, value, skipDisposeOnOverwrite = false) {\n        if (this._isDisposed) {\n            console.warn(new Error('Trying to add a disposable to a DisposableMap that has already been disposed of. The added object will be leaked!').stack);\n        }\n        if (!skipDisposeOnOverwrite) {\n            this._store.get(key)?.dispose();\n        }\n        this._store.set(key, value);\n    }\n    /**\n     * Delete the value stored for `key` from this map and also dispose of it.\n     */\n    deleteAndDispose(key) {\n        this._store.get(key)?.dispose();\n        this._store.delete(key);\n    }\n    [Symbol.iterator]() {\n        return this._store[Symbol.iterator]();\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 hasPerformanceNow = (globalThis.performance && typeof globalThis.performance.now === 'function');\nexport class StopWatch {\n    static create(highResolution) {\n        return new StopWatch(highResolution);\n    }\n    constructor(highResolution) {\n        this._now = hasPerformanceNow && highResolution === false ? Date.now : globalThis.performance.now.bind(globalThis.performance);\n        this._startTime = this._now();\n        this._stopTime = -1;\n    }\n    stop() {\n        this._stopTime = this._now();\n    }\n    reset() {\n        this._startTime = this._now();\n        this._stopTime = -1;\n    }\n    elapsed() {\n        if (this._stopTime !== -1) {\n            return this._stopTime - this._startTime;\n        }\n        return this._now() - this._startTime;\n    }\n}\n","import { onUnexpectedError } from './errors.js';\nimport { createSingleCallFunction } from './functional.js';\nimport { combinedDisposable, Disposable, DisposableStore, toDisposable } from './lifecycle.js';\nimport { LinkedList } from './linkedList.js';\nimport { StopWatch } from './stopwatch.js';\n// -----------------------------------------------------------------------------------------------------------------------\n// Uncomment the next line to print warnings whenever a listener is GC'ed without having been disposed. This is a LEAK.\n// -----------------------------------------------------------------------------------------------------------------------\nconst _enableListenerGCedWarning = false;\n// -----------------------------------------------------------------------------------------------------------------------\n// Uncomment the next line to print warnings whenever an emitter with listeners is disposed. That is a sign of code smell.\n// -----------------------------------------------------------------------------------------------------------------------\nconst _enableDisposeWithListenerWarning = false;\n// -----------------------------------------------------------------------------------------------------------------------\n// Uncomment the next line to print warnings whenever a snapshotted event is used repeatedly without cleanup.\n// See https://github.com/microsoft/vscode/issues/142851\n// -----------------------------------------------------------------------------------------------------------------------\nconst _enableSnapshotPotentialLeakWarning = false;\nexport var Event;\n(function (Event) {\n    Event.None = () => Disposable.None;\n    function _addLeakageTraceLogic(options) {\n        if (_enableSnapshotPotentialLeakWarning) {\n            const { onDidAddListener: origListenerDidAdd } = options;\n            const stack = Stacktrace.create();\n            let count = 0;\n            options.onDidAddListener = () => {\n                if (++count === 2) {\n                    console.warn('snapshotted emitter LIKELY used public and SHOULD HAVE BEEN created with DisposableStore. snapshotted here');\n                    stack.print();\n                }\n                origListenerDidAdd?.();\n            };\n        }\n    }\n    /**\n     * Given an event, returns another event which debounces calls and defers the listeners to a later task via a shared\n     * `setTimeout`. The event is converted into a signal (`Event<void>`) to avoid additional object creation as a\n     * result of merging events and to try prevent race conditions that could arise when using related deferred and\n     * non-deferred events.\n     *\n     * This is useful for deferring non-critical work (eg. general UI updates) to ensure it does not block critical work\n     * (eg. latency of keypress to text rendered).\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @param event The event source for the new event.\n     * @param disposable A disposable store to add the new EventEmitter to.\n     */\n    function defer(event, disposable) {\n        return debounce(event, () => void 0, 0, undefined, true, undefined, disposable);\n    }\n    Event.defer = defer;\n    /**\n     * Given an event, returns another event which only fires once.\n     *\n     * @param event The event source for the new event.\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 = undefined;\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, returns another event which only fires once, and only when the condition is met.\n     *\n     * @param event The event source for the new event.\n     */\n    function onceIf(event, condition) {\n        return Event.once(Event.filter(event, condition));\n    }\n    Event.onceIf = onceIf;\n    /**\n     * Maps an event of one type into an event of another type using a mapping function, similar to how\n     * `Array.prototype.map` works.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @param event The event source for the new event.\n     * @param map The mapping function.\n     * @param disposable A disposable store to add the new EventEmitter to.\n     */\n    function map(event, map, disposable) {\n        return snapshot((listener, thisArgs = null, disposables) => event(i => listener.call(thisArgs, map(i)), null, disposables), disposable);\n    }\n    Event.map = map;\n    /**\n     * Wraps an event in another event that performs some function on the event object before firing.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @param event The event source for the new event.\n     * @param each The function to perform on the event object.\n     * @param disposable A disposable store to add the new EventEmitter to.\n     */\n    function forEach(event, each, disposable) {\n        return snapshot((listener, thisArgs = null, disposables) => event(i => { each(i); listener.call(thisArgs, i); }, null, disposables), disposable);\n    }\n    Event.forEach = forEach;\n    function filter(event, filter, disposable) {\n        return snapshot((listener, thisArgs = null, disposables) => event(e => filter(e) && listener.call(thisArgs, e), null, disposables), disposable);\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) => {\n            const disposable = combinedDisposable(...events.map(event => event(e => listener.call(thisArgs, e))));\n            return addAndReturnDisposable(disposable, disposables);\n        };\n    }\n    Event.any = any;\n    /**\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     */\n    function reduce(event, merge, initial, disposable) {\n        let output = initial;\n        return map(event, e => {\n            output = merge(output, e);\n            return output;\n        }, disposable);\n    }\n    Event.reduce = reduce;\n    function snapshot(event, disposable) {\n        let listener;\n        const options = {\n            onWillAddFirstListener() {\n                listener = event(emitter.fire, emitter);\n            },\n            onDidRemoveLastListener() {\n                listener?.dispose();\n            }\n        };\n        if (!disposable) {\n            _addLeakageTraceLogic(options);\n        }\n        const emitter = new Emitter(options);\n        disposable?.add(emitter);\n        return emitter.event;\n    }\n    /**\n     * Adds the IDisposable to the store if it's set, and returns it. Useful to\n     * Event function implementation.\n     */\n    function addAndReturnDisposable(d, store) {\n        if (store instanceof Array) {\n            store.push(d);\n        }\n        else if (store) {\n            store.add(d);\n        }\n        return d;\n    }\n    function debounce(event, merge, delay = 100, leading = false, flushOnListenerRemove = false, leakWarningThreshold, disposable) {\n        let subscription;\n        let output = undefined;\n        let handle = undefined;\n        let numDebouncedCalls = 0;\n        let doFire;\n        const options = {\n            leakWarningThreshold,\n            onWillAddFirstListener() {\n                subscription = event(cur => {\n                    numDebouncedCalls++;\n                    output = merge(output, cur);\n                    if (leading && !handle) {\n                        emitter.fire(output);\n                        output = undefined;\n                    }\n                    doFire = () => {\n                        const _output = output;\n                        output = undefined;\n                        handle = undefined;\n                        if (!leading || numDebouncedCalls > 1) {\n                            emitter.fire(_output);\n                        }\n                        numDebouncedCalls = 0;\n                    };\n                    if (typeof delay === 'number') {\n                        clearTimeout(handle);\n                        handle = setTimeout(doFire, delay);\n                    }\n                    else {\n                        if (handle === undefined) {\n                            handle = 0;\n                            queueMicrotask(doFire);\n                        }\n                    }\n                });\n            },\n            onWillRemoveListener() {\n                if (flushOnListenerRemove && numDebouncedCalls > 0) {\n                    doFire?.();\n                }\n            },\n            onDidRemoveLastListener() {\n                doFire = undefined;\n                subscription.dispose();\n            }\n        };\n        if (!disposable) {\n            _addLeakageTraceLogic(options);\n        }\n        const emitter = new Emitter(options);\n        disposable?.add(emitter);\n        return emitter.event;\n    }\n    Event.debounce = debounce;\n    /**\n     * Debounces an event, firing after some delay (default=0) with an array of all event original objects.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     */\n    function accumulate(event, delay = 0, disposable) {\n        return Event.debounce(event, (last, e) => {\n            if (!last) {\n                return [e];\n            }\n            last.push(e);\n            return last;\n        }, delay, undefined, true, undefined, disposable);\n    }\n    Event.accumulate = accumulate;\n    /**\n     * Filters an event such that some condition is _not_ met more than once in a row, effectively ensuring duplicate\n     * event objects from different sources do not fire the same event object.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @param event The event source for the new event.\n     * @param equals The equality condition.\n     * @param disposable A disposable store to add the new EventEmitter to.\n     *\n     * @example\n     * ```\n     * // Fire only one time when a single window is opened or focused\n     * Event.latch(Event.any(onDidOpenWindow, onDidFocusWindow))\n     * ```\n     */\n    function latch(event, equals = (a, b) => a === b, disposable) {\n        let firstCall = true;\n        let cache;\n        return filter(event, value => {\n            const shouldEmit = firstCall || !equals(value, cache);\n            firstCall = false;\n            cache = value;\n            return shouldEmit;\n        }, disposable);\n    }\n    Event.latch = latch;\n    /**\n     * Splits an event whose parameter is a union type into 2 separate events for each type in the union.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @example\n     * ```\n     * const event = new EventEmitter<number | undefined>().event;\n     * const [numberEvent, undefinedEvent] = Event.split(event, isUndefined);\n     * ```\n     *\n     * @param event The event source for the new event.\n     * @param isT A function that determines what event is of the first type.\n     * @param disposable A disposable store to add the new EventEmitter to.\n     */\n    function split(event, isT, disposable) {\n        return [\n            Event.filter(event, isT, disposable),\n            Event.filter(event, e => !isT(e), disposable),\n        ];\n    }\n    Event.split = split;\n    /**\n     * Buffers an event until it has a listener attached.\n     *\n     * *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned\n     * event is accessible to \"third parties\", e.g the event is a public property. Otherwise a leaked listener on the\n     * returned event causes this utility to leak a listener on the original event.\n     *\n     * @param event The event source for the new event.\n     * @param flushAfterTimeout Determines whether to flush the buffer after a timeout immediately or after a\n     * `setTimeout` when the first event listener is added.\n     * @param _buffer Internal: A source event array used for tests.\n     *\n     * @example\n     * ```\n     * // Start accumulating events, when the first listener is attached, flush\n     * // the event after a timeout such that multiple listeners attached before\n     * // the timeout would receive the event\n     * this.onInstallExtension = Event.buffer(service.onInstallExtension, true);\n     * ```\n     */\n    function buffer(event, flushAfterTimeout = false, _buffer = [], disposable) {\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        if (disposable) {\n            disposable.add(listener);\n        }\n        const flush = () => {\n            buffer?.forEach(e => emitter.fire(e));\n            buffer = null;\n        };\n        const emitter = new Emitter({\n            onWillAddFirstListener() {\n                if (!listener) {\n                    listener = event(e => emitter.fire(e));\n                    if (disposable) {\n                        disposable.add(listener);\n                    }\n                }\n            },\n            onDidAddFirstListener() {\n                if (buffer) {\n                    if (flushAfterTimeout) {\n                        setTimeout(flush);\n                    }\n                    else {\n                        flush();\n                    }\n                }\n            },\n            onDidRemoveLastListener() {\n                if (listener) {\n                    listener.dispose();\n                }\n                listener = null;\n            }\n        });\n        if (disposable) {\n            disposable.add(emitter);\n        }\n        return emitter.event;\n    }\n    Event.buffer = buffer;\n    /**\n     * Wraps the event in an {@link IChainableEvent}, allowing a more functional programming style.\n     *\n     * @example\n     * ```\n     * // Normal\n     * const onEnterPressNormal = Event.filter(\n     *   Event.map(onKeyPress.event, e => new StandardKeyboardEvent(e)),\n     *   e.keyCode === KeyCode.Enter\n     * ).event;\n     *\n     * // Using chain\n     * const onEnterPressChain = Event.chain(onKeyPress.event, $ => $\n     *   .map(e => new StandardKeyboardEvent(e))\n     *   .filter(e => e.keyCode === KeyCode.Enter)\n     * );\n     * ```\n     */\n    function chain(event, sythensize) {\n        const fn = (listener, thisArgs, disposables) => {\n            const cs = sythensize(new ChainableSynthesis());\n            return event(function (value) {\n                const result = cs.evaluate(value);\n                if (result !== HaltChainable) {\n                    listener.call(thisArgs, result);\n                }\n            }, undefined, disposables);\n        };\n        return fn;\n    }\n    Event.chain = chain;\n    const HaltChainable = Symbol('HaltChainable');\n    class ChainableSynthesis {\n        constructor() {\n            this.steps = [];\n        }\n        map(fn) {\n            this.steps.push(fn);\n            return this;\n        }\n        forEach(fn) {\n            this.steps.push(v => {\n                fn(v);\n                return v;\n            });\n            return this;\n        }\n        filter(fn) {\n            this.steps.push(v => fn(v) ? v : HaltChainable);\n            return this;\n        }\n        reduce(merge, initial) {\n            let last = initial;\n            this.steps.push(v => {\n                last = merge(last, v);\n                return last;\n            });\n            return this;\n        }\n        latch(equals = (a, b) => a === b) {\n            let firstCall = true;\n            let cache;\n            this.steps.push(value => {\n                const shouldEmit = firstCall || !equals(value, cache);\n                firstCall = false;\n                cache = value;\n                return shouldEmit ? value : HaltChainable;\n            });\n            return this;\n        }\n        evaluate(value) {\n            for (const step of this.steps) {\n                value = step(value);\n                if (value === HaltChainable) {\n                    break;\n                }\n            }\n            return value;\n        }\n    }\n    /**\n     * Creates an {@link Event} from a node event emitter.\n     */\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({ onWillAddFirstListener: onFirstListenerAdd, onDidRemoveLastListener: onLastListenerRemove });\n        return result.event;\n    }\n    Event.fromNodeEventEmitter = fromNodeEventEmitter;\n    /**\n     * Creates an {@link Event} from a DOM event emitter.\n     */\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({ onWillAddFirstListener: onFirstListenerAdd, onDidRemoveLastListener: onLastListenerRemove });\n        return result.event;\n    }\n    Event.fromDOMEventEmitter = fromDOMEventEmitter;\n    /**\n     * Creates a promise out of an event, using the {@link Event.once} helper.\n     */\n    function toPromise(event) {\n        return new Promise(resolve => once(event)(resolve));\n    }\n    Event.toPromise = toPromise;\n    /**\n     * Creates an event out of a promise that fires once when the promise is\n     * resolved with the result of the promise or `undefined`.\n     */\n    function fromPromise(promise) {\n        const result = new Emitter();\n        promise.then(res => {\n            result.fire(res);\n        }, () => {\n            result.fire(undefined);\n        }).finally(() => {\n            result.dispose();\n        });\n        return result.event;\n    }\n    Event.fromPromise = fromPromise;\n    /**\n     * A convenience function for forwarding an event to another emitter which\n     * improves readability.\n     *\n     * This is similar to {@link Relay} but allows instantiating and forwarding\n     * on a single line and also allows for multiple source events.\n     * @param from The event to forward.\n     * @param to The emitter to forward the event to.\n     * @example\n     * Event.forward(event, emitter);\n     * // equivalent to\n     * event(e => emitter.fire(e));\n     * // equivalent to\n     * event(emitter.fire, emitter);\n     */\n    function forward(from, to) {\n        return from(e => to.fire(e));\n    }\n    Event.forward = forward;\n    function runAndSubscribe(event, handler, initial) {\n        handler(initial);\n        return event(e => handler(e));\n    }\n    Event.runAndSubscribe = runAndSubscribe;\n    class EmitterObserver {\n        constructor(_observable, store) {\n            this._observable = _observable;\n            this._counter = 0;\n            this._hasChanged = false;\n            const options = {\n                onWillAddFirstListener: () => {\n                    _observable.addObserver(this);\n                    // Communicate to the observable that we received its current value and would like to be notified about future changes.\n                    this._observable.reportChanges();\n                },\n                onDidRemoveLastListener: () => {\n                    _observable.removeObserver(this);\n                }\n            };\n            if (!store) {\n                _addLeakageTraceLogic(options);\n            }\n            this.emitter = new Emitter(options);\n            if (store) {\n                store.add(this.emitter);\n            }\n        }\n        beginUpdate(_observable) {\n            // assert(_observable === this.obs);\n            this._counter++;\n        }\n        handlePossibleChange(_observable) {\n            // assert(_observable === this.obs);\n        }\n        handleChange(_observable, _change) {\n            // assert(_observable === this.obs);\n            this._hasChanged = true;\n        }\n        endUpdate(_observable) {\n            // assert(_observable === this.obs);\n            this._counter--;\n            if (this._counter === 0) {\n                this._observable.reportChanges();\n                if (this._hasChanged) {\n                    this._hasChanged = false;\n                    this.emitter.fire(this._observable.get());\n                }\n            }\n        }\n    }\n    /**\n     * Creates an event emitter that is fired when the observable changes.\n     * Each listeners subscribes to the emitter.\n     */\n    function fromObservable(obs, store) {\n        const observer = new EmitterObserver(obs, store);\n        return observer.emitter.event;\n    }\n    Event.fromObservable = fromObservable;\n    /**\n     * Each listener is attached to the observable directly.\n     */\n    function fromObservableLight(observable) {\n        return (listener, thisArgs, disposables) => {\n            let count = 0;\n            let didChange = false;\n            const observer = {\n                beginUpdate() {\n                    count++;\n                },\n                endUpdate() {\n                    count--;\n                    if (count === 0) {\n                        observable.reportChanges();\n                        if (didChange) {\n                            didChange = false;\n                            listener.call(thisArgs);\n                        }\n                    }\n                },\n                handlePossibleChange() {\n                    // noop\n                },\n                handleChange() {\n                    didChange = true;\n                }\n            };\n            observable.addObserver(observer);\n            observable.reportChanges();\n            const disposable = {\n                dispose() {\n                    observable.removeObserver(observer);\n                }\n            };\n            if (disposables instanceof DisposableStore) {\n                disposables.add(disposable);\n            }\n            else if (Array.isArray(disposables)) {\n                disposables.push(disposable);\n            }\n            return disposable;\n        };\n    }\n    Event.fromObservableLight = fromObservableLight;\n})(Event || (Event = {}));\nexport class EventProfiling {\n    static { this.all = new Set(); }\n    static { this._idPool = 0; }\n    constructor(name) {\n        this.listenerCount = 0;\n        this.invocationCount = 0;\n        this.elapsedOverall = 0;\n        this.durations = [];\n        this.name = `${name}_${EventProfiling._idPool++}`;\n        EventProfiling.all.add(this);\n    }\n    start(listenerCount) {\n        this._stopWatch = new StopWatch();\n        this.listenerCount = listenerCount;\n    }\n    stop() {\n        if (this._stopWatch) {\n            const elapsed = this._stopWatch.elapsed();\n            this.durations.push(elapsed);\n            this.elapsedOverall += elapsed;\n            this.invocationCount += 1;\n            this._stopWatch = undefined;\n        }\n    }\n}\nlet _globalLeakWarningThreshold = -1;\nclass LeakageMonitor {\n    static { this._idPool = 1; }\n    constructor(_errorHandler, threshold, name = (LeakageMonitor._idPool++).toString(16).padStart(3, '0')) {\n        this._errorHandler = _errorHandler;\n        this.threshold = threshold;\n        this.name = name;\n        this._warnCountdown = 0;\n    }\n    dispose() {\n        this._stacks?.clear();\n    }\n    check(stack, listenerCount) {\n        const threshold = this.threshold;\n        if (threshold <= 0 || listenerCount < threshold) {\n            return undefined;\n        }\n        if (!this._stacks) {\n            this._stacks = new Map();\n        }\n        const count = (this._stacks.get(stack.value) || 0);\n        this._stacks.set(stack.value, 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            const [topStack, topCount] = this.getMostFrequentStack();\n            const message = `[${this.name}] potential listener LEAK detected, having ${listenerCount} listeners already. MOST frequent listener (${topCount}):`;\n            console.warn(message);\n            console.warn(topStack);\n            const error = new ListenerLeakError(message, topStack);\n            this._errorHandler(error);\n        }\n        return () => {\n            const count = (this._stacks.get(stack.value) || 0);\n            this._stacks.set(stack.value, count - 1);\n        };\n    }\n    getMostFrequentStack() {\n        if (!this._stacks) {\n            return undefined;\n        }\n        let topStack;\n        let topCount = 0;\n        for (const [stack, count] of this._stacks) {\n            if (!topStack || topCount < count) {\n                topStack = [stack, count];\n                topCount = count;\n            }\n        }\n        return topStack;\n    }\n}\nclass Stacktrace {\n    static create() {\n        const err = new Error();\n        return new Stacktrace(err.stack ?? '');\n    }\n    constructor(value) {\n        this.value = value;\n    }\n    print() {\n        console.warn(this.value.split('\\n').slice(2).join('\\n'));\n    }\n}\n// error that is logged when going over the configured listener threshold\nexport class ListenerLeakError extends Error {\n    constructor(message, stack) {\n        super(message);\n        this.name = 'ListenerLeakError';\n        this.stack = stack;\n    }\n}\n// SEVERE error that is logged when having gone way over the configured listener\n// threshold so that the emitter refuses to accept more listeners\nexport class ListenerRefusalError extends Error {\n    constructor(message, stack) {\n        super(message);\n        this.name = 'ListenerRefusalError';\n        this.stack = stack;\n    }\n}\nclass UniqueContainer {\n    constructor(value) {\n        this.value = value;\n    }\n}\nconst compactionThreshold = 2;\nconst forEachListener = (listeners, fn) => {\n    if (listeners instanceof UniqueContainer) {\n        fn(listeners);\n    }\n    else {\n        for (let i = 0; i < listeners.length; i++) {\n            const l = listeners[i];\n            if (l) {\n                fn(l);\n            }\n        }\n    }\n};\nlet _listenerFinalizers;\nif (_enableListenerGCedWarning) {\n    const leaks = [];\n    setInterval(() => {\n        if (leaks.length === 0) {\n            return;\n        }\n        console.warn('[LEAKING LISTENERS] GC\\'ed these listeners that were NOT yet disposed:');\n        console.warn(leaks.join('\\n'));\n        leaks.length = 0;\n    }, 3000);\n    _listenerFinalizers = new FinalizationRegistry(heldValue => {\n        if (typeof heldValue === 'string') {\n            leaks.push(heldValue);\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        this._size = 0;\n        this._options = options;\n        this._leakageMon = (_globalLeakWarningThreshold > 0 || this._options?.leakWarningThreshold)\n            ? new LeakageMonitor(options?.onListenerError ?? onUnexpectedError, this._options?.leakWarningThreshold ?? _globalLeakWarningThreshold) :\n            undefined;\n        this._perfMon = this._options?._profName ? new EventProfiling(this._options._profName) : undefined;\n        this._deliveryQueue = this._options?.deliveryQueue;\n    }\n    dispose() {\n        if (!this._disposed) {\n            this._disposed = true;\n            // It is bad to have listeners at the time of disposing an emitter, it is worst to have listeners keep the emitter\n            // alive via the reference that's embedded in their disposables. Therefore we loop over all remaining listeners and\n            // unset their subscriptions/disposables. Looping and blaming remaining listeners is done on next tick because the\n            // the following programming pattern is very popular:\n            //\n            // const someModel = this._disposables.add(new ModelObject()); // (1) create and register model\n            // this._disposables.add(someModel.onDidChange(() => { ... }); // (2) subscribe and register model-event listener\n            // ...later...\n            // this._disposables.dispose(); disposes (1) then (2): don't warn after (1) but after the \"overall dispose\" is done\n            if (this._deliveryQueue?.current === this) {\n                this._deliveryQueue.reset();\n            }\n            if (this._listeners) {\n                if (_enableDisposeWithListenerWarning) {\n                    const listeners = this._listeners;\n                    queueMicrotask(() => {\n                        forEachListener(listeners, l => l.stack?.print());\n                    });\n                }\n                this._listeners = undefined;\n                this._size = 0;\n            }\n            this._options?.onDidRemoveLastListener?.();\n            this._leakageMon?.dispose();\n        }\n    }\n    /**\n     * For the public to allow to subscribe\n     * to events from this Emitter\n     */\n    get event() {\n        this._event ??= (callback, thisArgs, disposables) => {\n            if (this._leakageMon && this._size > this._leakageMon.threshold ** 2) {\n                const message = `[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`;\n                console.warn(message);\n                const tuple = this._leakageMon.getMostFrequentStack() ?? ['UNKNOWN stack', -1];\n                const error = new ListenerRefusalError(`${message}. HINT: Stack shows most frequent listener (${tuple[1]}-times)`, tuple[0]);\n                const errorHandler = this._options?.onListenerError || onUnexpectedError;\n                errorHandler(error);\n                return Disposable.None;\n            }\n            if (this._disposed) {\n                // todo: should we warn if a listener is added to a disposed emitter? This happens often\n                return Disposable.None;\n            }\n            if (thisArgs) {\n                callback = callback.bind(thisArgs);\n            }\n            const contained = new UniqueContainer(callback);\n            let removeMonitor;\n            let stack;\n            if (this._leakageMon && this._size >= Math.ceil(this._leakageMon.threshold * 0.2)) {\n                // check and record this emitter for potential leakage\n                contained.stack = Stacktrace.create();\n                removeMonitor = this._leakageMon.check(contained.stack, this._size + 1);\n            }\n            if (_enableDisposeWithListenerWarning) {\n                contained.stack = stack ?? Stacktrace.create();\n            }\n            if (!this._listeners) {\n                this._options?.onWillAddFirstListener?.(this);\n                this._listeners = contained;\n                this._options?.onDidAddFirstListener?.(this);\n            }\n            else if (this._listeners instanceof UniqueContainer) {\n                this._deliveryQueue ??= new EventDeliveryQueuePrivate();\n                this._listeners = [this._listeners, contained];\n            }\n            else {\n                this._listeners.push(contained);\n            }\n            this._size++;\n            const result = toDisposable(() => {\n                _listenerFinalizers?.unregister(result);\n                removeMonitor?.();\n                this._removeListener(contained);\n            });\n            if (disposables instanceof DisposableStore) {\n                disposables.add(result);\n            }\n            else if (Array.isArray(disposables)) {\n                disposables.push(result);\n            }\n            if (_listenerFinalizers) {\n                const stack = new Error().stack.split('\\n').slice(2, 3).join('\\n').trim();\n                const match = /(file:|vscode-file:\\/\\/vscode-app)?(\\/[^:]*:\\d+:\\d+)/.exec(stack);\n                _listenerFinalizers.register(result, match?.[2] ?? stack, result);\n            }\n            return result;\n        };\n        return this._event;\n    }\n    _removeListener(listener) {\n        this._options?.onWillRemoveListener?.(this);\n        if (!this._listeners) {\n            return; // expected if a listener gets disposed\n        }\n        if (this._size === 1) {\n            this._listeners = undefined;\n            this._options?.onDidRemoveLastListener?.(this);\n            this._size = 0;\n            return;\n        }\n        // size > 1 which requires that listeners be a list:\n        const listeners = this._listeners;\n        const index = listeners.indexOf(listener);\n        if (index === -1) {\n            console.log('disposed?', this._disposed);\n            console.log('size?', this._size);\n            console.log('arr?', JSON.stringify(this._listeners));\n            throw new Error('Attempted to dispose unknown listener');\n        }\n        this._size--;\n        listeners[index] = undefined;\n        const adjustDeliveryQueue = this._deliveryQueue.current === this;\n        if (this._size * compactionThreshold <= listeners.length) {\n            let n = 0;\n            for (let i = 0; i < listeners.length; i++) {\n                if (listeners[i]) {\n                    listeners[n++] = listeners[i];\n                }\n                else if (adjustDeliveryQueue) {\n                    this._deliveryQueue.end--;\n                    if (n < this._deliveryQueue.i) {\n                        this._deliveryQueue.i--;\n                    }\n                }\n            }\n            listeners.length = n;\n        }\n    }\n    _deliver(listener, value) {\n        if (!listener) {\n            return;\n        }\n        const errorHandler = this._options?.onListenerError || onUnexpectedError;\n        if (!errorHandler) {\n            listener.value(value);\n            return;\n        }\n        try {\n            listener.value(value);\n        }\n        catch (e) {\n            errorHandler(e);\n        }\n    }\n    /** Delivers items in the queue. Assumes the queue is ready to go. */\n    _deliverQueue(dq) {\n        const listeners = dq.current._listeners;\n        while (dq.i < dq.end) {\n            // important: dq.i is incremented before calling deliver() because it might reenter deliverQueue()\n            this._deliver(listeners[dq.i++], dq.value);\n        }\n        dq.reset();\n    }\n    /**\n     * To be kept private to fire an event to\n     * subscribers\n     */\n    fire(event) {\n        if (this._deliveryQueue?.current) {\n            this._deliverQueue(this._deliveryQueue);\n            this._perfMon?.stop(); // last fire() will have starting perfmon, stop it before starting the next dispatch\n        }\n        this._perfMon?.start(this._size);\n        if (!this._listeners) {\n            // no-op\n        }\n        else if (this._listeners instanceof UniqueContainer) {\n            this._deliver(this._listeners, event);\n        }\n        else {\n            const dq = this._deliveryQueue;\n            dq.enqueue(this, event, this._listeners.length);\n            this._deliverQueue(dq);\n        }\n        this._perfMon?.stop();\n    }\n    hasListeners() {\n        return this._size > 0;\n    }\n}\nexport const createEventDeliveryQueue = () => new EventDeliveryQueuePrivate();\nclass EventDeliveryQueuePrivate {\n    constructor() {\n        /**\n         * Index in current's listener list.\n         */\n        this.i = -1;\n        /**\n         * The last index in the listener's list to deliver.\n         */\n        this.end = 0;\n    }\n    enqueue(emitter, value, end) {\n        this.i = 0;\n        this.end = end;\n        this.current = emitter;\n        this.value = value;\n    }\n    reset() {\n        this.i = this.end; // force any current emission loop to stop, mainly for during dispose\n        this.current = undefined;\n        this.value = undefined;\n    }\n}\nexport class PauseableEmitter extends Emitter {\n    constructor(options) {\n        super(options);\n        this._isPaused = 0;\n        this._eventQueue = new LinkedList();\n        this._mergeFn = 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                if (this._eventQueue.size > 0) {\n                    const events = Array.from(this._eventQueue);\n                    this._eventQueue.clear();\n                    super.fire(this._mergeFn(events));\n                }\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._size) {\n            if (this._isPaused !== 0) {\n                this._eventQueue.push(event);\n            }\n            else {\n                super.fire(event);\n            }\n        }\n    }\n}\nexport class DebounceEmitter extends PauseableEmitter {\n    constructor(options) {\n        super(options);\n        this._delay = options.delay ?? 100;\n    }\n    fire(event) {\n        if (!this._handle) {\n            this.pause();\n            this._handle = setTimeout(() => {\n                this._handle = undefined;\n                this.resume();\n            }, this._delay);\n        }\n        super.fire(event);\n    }\n}\n/**\n * An emitter which queue all events and then process them at the\n * end of the event loop.\n */\nexport class MicrotaskEmitter extends Emitter {\n    constructor(options) {\n        super(options);\n        this._queuedEvents = [];\n        this._mergeFn = options?.merge;\n    }\n    fire(event) {\n        if (!this.hasListeners()) {\n            return;\n        }\n        this._queuedEvents.push(event);\n        if (this._queuedEvents.length === 1) {\n            queueMicrotask(() => {\n                if (this._mergeFn) {\n                    super.fire(this._mergeFn(this._queuedEvents));\n                }\n                else {\n                    this._queuedEvents.forEach(e => super.fire(e));\n                }\n                this._queuedEvents = [];\n            });\n        }\n    }\n}\n/**\n * An event emitter that multiplexes many events into a single event.\n *\n * @example Listen to the `onData` event of all `Thing`s, dynamically adding and removing `Thing`s\n * to the multiplexer as needed.\n *\n * ```typescript\n * const anythingDataMultiplexer = new EventMultiplexer<{ data: string }>();\n *\n * const thingListeners = DisposableMap<Thing, IDisposable>();\n *\n * thingService.onDidAddThing(thing => {\n *   thingListeners.set(thing, anythingDataMultiplexer.add(thing.onData);\n * });\n * thingService.onDidRemoveThing(thing => {\n *   thingListeners.deleteAndDispose(thing);\n * });\n *\n * anythingDataMultiplexer.event(e => {\n *   console.log('Something fired data ' + e.data)\n * });\n * ```\n */\nexport class EventMultiplexer {\n    constructor() {\n        this.hasListeners = false;\n        this.events = [];\n        this.emitter = new Emitter({\n            onWillAddFirstListener: () => this.onFirstListenerAdd(),\n            onDidRemoveLastListener: () => this.onLastListenerRemove()\n        });\n    }\n    get event() {\n        return this.emitter.event;\n    }\n    add(event) {\n        const e = { event: event, listener: null };\n        this.events.push(e);\n        if (this.hasListeners) {\n            this.hook(e);\n        }\n        const dispose = () => {\n            if (this.hasListeners) {\n                this.unhook(e);\n            }\n            const idx = this.events.indexOf(e);\n            this.events.splice(idx, 1);\n        };\n        return toDisposable(createSingleCallFunction(dispose));\n    }\n    onFirstListenerAdd() {\n        this.hasListeners = true;\n        this.events.forEach(e => this.hook(e));\n    }\n    onLastListenerRemove() {\n        this.hasListeners = false;\n        this.events.forEach(e => this.unhook(e));\n    }\n    hook(e) {\n        e.listener = e.event(r => this.emitter.fire(r));\n    }\n    unhook(e) {\n        e.listener?.dispose();\n        e.listener = null;\n    }\n    dispose() {\n        this.emitter.dispose();\n        for (const e of this.events) {\n            e.listener?.dispose();\n        }\n        this.events = [];\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.data = [];\n    }\n    wrapEvent(event, reduce, initial) {\n        return (listener, thisArgs, disposables) => {\n            return event(i => {\n                const data = this.data[this.data.length - 1];\n                // Non-reduce scenario\n                if (!reduce) {\n                    // Buffering case\n                    if (data) {\n                        data.buffers.push(() => listener.call(thisArgs, i));\n                    }\n                    else {\n                        // Not buffering case\n                        listener.call(thisArgs, i);\n                    }\n                    return;\n                }\n                // Reduce scenario\n                const reduceData = data;\n                // Not buffering case\n                if (!reduceData) {\n                    // TODO: Is there a way to cache this reduce call for all listeners?\n                    listener.call(thisArgs, reduce(initial, i));\n                    return;\n                }\n                // Buffering case\n                reduceData.items ??= [];\n                reduceData.items.push(i);\n                if (reduceData.buffers.length === 0) {\n                    // Include a single buffered function that will reduce all events when we're done buffering events\n                    data.buffers.push(() => {\n                        // cache the reduced result so that the value can be shared across all listeners\n                        reduceData.reducedResult ??= initial\n                            ? reduceData.items.reduce(reduce, initial)\n                            : reduceData.items.reduce(reduce);\n                        listener.call(thisArgs, reduceData.reducedResult);\n                    });\n                }\n            }, undefined, disposables);\n        };\n    }\n    bufferEvents(fn) {\n        const data = { buffers: new Array() };\n        this.data.push(data);\n        const r = fn();\n        this.data.pop();\n        data.buffers.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            onDidAddFirstListener: () => {\n                this.listening = true;\n                this.inputEventListener = this.inputEvent(this.emitter.fire, this.emitter);\n            },\n            onDidRemoveLastListener: () => {\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 { 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        this._parentListener?.dispose();\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}\nexport function cancelOnDispose(store) {\n    const source = new CancellationTokenSource();\n    store.add({ dispose() { source.cancel(); } });\n    return source.token;\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 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 /* KeyCode.Unknown */;\n    }\n}\nconst uiMap = new KeyCodeStrMap();\nconst userSettingsUSMap = new KeyCodeStrMap();\nconst userSettingsGeneralMap = new KeyCodeStrMap();\nexport const EVENT_KEY_CODE_MAP = new Array(230);\nexport const NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE = {};\nconst scanCodeIntToStr = [];\nconst scanCodeStrToInt = Object.create(null);\nconst scanCodeLowerCaseStrToInt = Object.create(null);\n/**\n * -1 if a ScanCode => KeyCode mapping depends on kb layout.\n */\nexport const IMMUTABLE_CODE_TO_KEY_CODE = [];\n/**\n * -1 if a KeyCode => ScanCode mapping depends on kb layout.\n */\nexport const IMMUTABLE_KEY_CODE_TO_CODE = [];\nfor (let i = 0; i <= 193 /* ScanCode.MAX_VALUE */; i++) {\n    IMMUTABLE_CODE_TO_KEY_CODE[i] = -1 /* KeyCode.DependsOnKbLayout */;\n}\nfor (let i = 0; i <= 132 /* KeyCode.MAX_VALUE */; i++) {\n    IMMUTABLE_KEY_CODE_TO_CODE[i] = -1 /* ScanCode.DependsOnKbLayout */;\n}\n(function () {\n    // See https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx\n    // See https://github.com/microsoft/node-native-keymap/blob/88c0b0e5/deps/chromium/keyboard_codes_win.h\n    const empty = '';\n    const mappings = [\n        // immutable, scanCode, scanCodeStr, keyCode, keyCodeStr, eventKeyCode, vkey, usUserSettingsLabel, generalUserSettingsLabel\n        [1, 0 /* ScanCode.None */, 'None', 0 /* KeyCode.Unknown */, 'unknown', 0, 'VK_UNKNOWN', empty, empty],\n        [1, 1 /* ScanCode.Hyper */, 'Hyper', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 2 /* ScanCode.Super */, 'Super', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 3 /* ScanCode.Fn */, 'Fn', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 4 /* ScanCode.FnLock */, 'FnLock', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 5 /* ScanCode.Suspend */, 'Suspend', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 6 /* ScanCode.Resume */, 'Resume', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 7 /* ScanCode.Turbo */, 'Turbo', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 8 /* ScanCode.Sleep */, 'Sleep', 0 /* KeyCode.Unknown */, empty, 0, 'VK_SLEEP', empty, empty],\n        [1, 9 /* ScanCode.WakeUp */, 'WakeUp', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [0, 10 /* ScanCode.KeyA */, 'KeyA', 31 /* KeyCode.KeyA */, 'A', 65, 'VK_A', empty, empty],\n        [0, 11 /* ScanCode.KeyB */, 'KeyB', 32 /* KeyCode.KeyB */, 'B', 66, 'VK_B', empty, empty],\n        [0, 12 /* ScanCode.KeyC */, 'KeyC', 33 /* KeyCode.KeyC */, 'C', 67, 'VK_C', empty, empty],\n        [0, 13 /* ScanCode.KeyD */, 'KeyD', 34 /* KeyCode.KeyD */, 'D', 68, 'VK_D', empty, empty],\n        [0, 14 /* ScanCode.KeyE */, 'KeyE', 35 /* KeyCode.KeyE */, 'E', 69, 'VK_E', empty, empty],\n        [0, 15 /* ScanCode.KeyF */, 'KeyF', 36 /* KeyCode.KeyF */, 'F', 70, 'VK_F', empty, empty],\n        [0, 16 /* ScanCode.KeyG */, 'KeyG', 37 /* KeyCode.KeyG */, 'G', 71, 'VK_G', empty, empty],\n        [0, 17 /* ScanCode.KeyH */, 'KeyH', 38 /* KeyCode.KeyH */, 'H', 72, 'VK_H', empty, empty],\n        [0, 18 /* ScanCode.KeyI */, 'KeyI', 39 /* KeyCode.KeyI */, 'I', 73, 'VK_I', empty, empty],\n        [0, 19 /* ScanCode.KeyJ */, 'KeyJ', 40 /* KeyCode.KeyJ */, 'J', 74, 'VK_J', empty, empty],\n        [0, 20 /* ScanCode.KeyK */, 'KeyK', 41 /* KeyCode.KeyK */, 'K', 75, 'VK_K', empty, empty],\n        [0, 21 /* ScanCode.KeyL */, 'KeyL', 42 /* KeyCode.KeyL */, 'L', 76, 'VK_L', empty, empty],\n        [0, 22 /* ScanCode.KeyM */, 'KeyM', 43 /* KeyCode.KeyM */, 'M', 77, 'VK_M', empty, empty],\n        [0, 23 /* ScanCode.KeyN */, 'KeyN', 44 /* KeyCode.KeyN */, 'N', 78, 'VK_N', empty, empty],\n        [0, 24 /* ScanCode.KeyO */, 'KeyO', 45 /* KeyCode.KeyO */, 'O', 79, 'VK_O', empty, empty],\n        [0, 25 /* ScanCode.KeyP */, 'KeyP', 46 /* KeyCode.KeyP */, 'P', 80, 'VK_P', empty, empty],\n        [0, 26 /* ScanCode.KeyQ */, 'KeyQ', 47 /* KeyCode.KeyQ */, 'Q', 81, 'VK_Q', empty, empty],\n        [0, 27 /* ScanCode.KeyR */, 'KeyR', 48 /* KeyCode.KeyR */, 'R', 82, 'VK_R', empty, empty],\n        [0, 28 /* ScanCode.KeyS */, 'KeyS', 49 /* KeyCode.KeyS */, 'S', 83, 'VK_S', empty, empty],\n        [0, 29 /* ScanCode.KeyT */, 'KeyT', 50 /* KeyCode.KeyT */, 'T', 84, 'VK_T', empty, empty],\n        [0, 30 /* ScanCode.KeyU */, 'KeyU', 51 /* KeyCode.KeyU */, 'U', 85, 'VK_U', empty, empty],\n        [0, 31 /* ScanCode.KeyV */, 'KeyV', 52 /* KeyCode.KeyV */, 'V', 86, 'VK_V', empty, empty],\n        [0, 32 /* ScanCode.KeyW */, 'KeyW', 53 /* KeyCode.KeyW */, 'W', 87, 'VK_W', empty, empty],\n        [0, 33 /* ScanCode.KeyX */, 'KeyX', 54 /* KeyCode.KeyX */, 'X', 88, 'VK_X', empty, empty],\n        [0, 34 /* ScanCode.KeyY */, 'KeyY', 55 /* KeyCode.KeyY */, 'Y', 89, 'VK_Y', empty, empty],\n        [0, 35 /* ScanCode.KeyZ */, 'KeyZ', 56 /* KeyCode.KeyZ */, 'Z', 90, 'VK_Z', empty, empty],\n        [0, 36 /* ScanCode.Digit1 */, 'Digit1', 22 /* KeyCode.Digit1 */, '1', 49, 'VK_1', empty, empty],\n        [0, 37 /* ScanCode.Digit2 */, 'Digit2', 23 /* KeyCode.Digit2 */, '2', 50, 'VK_2', empty, empty],\n        [0, 38 /* ScanCode.Digit3 */, 'Digit3', 24 /* KeyCode.Digit3 */, '3', 51, 'VK_3', empty, empty],\n        [0, 39 /* ScanCode.Digit4 */, 'Digit4', 25 /* KeyCode.Digit4 */, '4', 52, 'VK_4', empty, empty],\n        [0, 40 /* ScanCode.Digit5 */, 'Digit5', 26 /* KeyCode.Digit5 */, '5', 53, 'VK_5', empty, empty],\n        [0, 41 /* ScanCode.Digit6 */, 'Digit6', 27 /* KeyCode.Digit6 */, '6', 54, 'VK_6', empty, empty],\n        [0, 42 /* ScanCode.Digit7 */, 'Digit7', 28 /* KeyCode.Digit7 */, '7', 55, 'VK_7', empty, empty],\n        [0, 43 /* ScanCode.Digit8 */, 'Digit8', 29 /* KeyCode.Digit8 */, '8', 56, 'VK_8', empty, empty],\n        [0, 44 /* ScanCode.Digit9 */, 'Digit9', 30 /* KeyCode.Digit9 */, '9', 57, 'VK_9', empty, empty],\n        [0, 45 /* ScanCode.Digit0 */, 'Digit0', 21 /* KeyCode.Digit0 */, '0', 48, 'VK_0', empty, empty],\n        [1, 46 /* ScanCode.Enter */, 'Enter', 3 /* KeyCode.Enter */, 'Enter', 13, 'VK_RETURN', empty, empty],\n        [1, 47 /* ScanCode.Escape */, 'Escape', 9 /* KeyCode.Escape */, 'Escape', 27, 'VK_ESCAPE', empty, empty],\n        [1, 48 /* ScanCode.Backspace */, 'Backspace', 1 /* KeyCode.Backspace */, 'Backspace', 8, 'VK_BACK', empty, empty],\n        [1, 49 /* ScanCode.Tab */, 'Tab', 2 /* KeyCode.Tab */, 'Tab', 9, 'VK_TAB', empty, empty],\n        [1, 50 /* ScanCode.Space */, 'Space', 10 /* KeyCode.Space */, 'Space', 32, 'VK_SPACE', empty, empty],\n        [0, 51 /* ScanCode.Minus */, 'Minus', 88 /* KeyCode.Minus */, '-', 189, 'VK_OEM_MINUS', '-', 'OEM_MINUS'],\n        [0, 52 /* ScanCode.Equal */, 'Equal', 86 /* KeyCode.Equal */, '=', 187, 'VK_OEM_PLUS', '=', 'OEM_PLUS'],\n        [0, 53 /* ScanCode.BracketLeft */, 'BracketLeft', 92 /* KeyCode.BracketLeft */, '[', 219, 'VK_OEM_4', '[', 'OEM_4'],\n        [0, 54 /* ScanCode.BracketRight */, 'BracketRight', 94 /* KeyCode.BracketRight */, ']', 221, 'VK_OEM_6', ']', 'OEM_6'],\n        [0, 55 /* ScanCode.Backslash */, 'Backslash', 93 /* KeyCode.Backslash */, '\\\\', 220, 'VK_OEM_5', '\\\\', 'OEM_5'],\n        [0, 56 /* ScanCode.IntlHash */, 'IntlHash', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty], // has been dropped from the w3c spec\n        [0, 57 /* ScanCode.Semicolon */, 'Semicolon', 85 /* KeyCode.Semicolon */, ';', 186, 'VK_OEM_1', ';', 'OEM_1'],\n        [0, 58 /* ScanCode.Quote */, 'Quote', 95 /* KeyCode.Quote */, '\\'', 222, 'VK_OEM_7', '\\'', 'OEM_7'],\n        [0, 59 /* ScanCode.Backquote */, 'Backquote', 91 /* KeyCode.Backquote */, '`', 192, 'VK_OEM_3', '`', 'OEM_3'],\n        [0, 60 /* ScanCode.Comma */, 'Comma', 87 /* KeyCode.Comma */, ',', 188, 'VK_OEM_COMMA', ',', 'OEM_COMMA'],\n        [0, 61 /* ScanCode.Period */, 'Period', 89 /* KeyCode.Period */, '.', 190, 'VK_OEM_PERIOD', '.', 'OEM_PERIOD'],\n        [0, 62 /* ScanCode.Slash */, 'Slash', 90 /* KeyCode.Slash */, '/', 191, 'VK_OEM_2', '/', 'OEM_2'],\n        [1, 63 /* ScanCode.CapsLock */, 'CapsLock', 8 /* KeyCode.CapsLock */, 'CapsLock', 20, 'VK_CAPITAL', empty, empty],\n        [1, 64 /* ScanCode.F1 */, 'F1', 59 /* KeyCode.F1 */, 'F1', 112, 'VK_F1', empty, empty],\n        [1, 65 /* ScanCode.F2 */, 'F2', 60 /* KeyCode.F2 */, 'F2', 113, 'VK_F2', empty, empty],\n        [1, 66 /* ScanCode.F3 */, 'F3', 61 /* KeyCode.F3 */, 'F3', 114, 'VK_F3', empty, empty],\n        [1, 67 /* ScanCode.F4 */, 'F4', 62 /* KeyCode.F4 */, 'F4', 115, 'VK_F4', empty, empty],\n        [1, 68 /* ScanCode.F5 */, 'F5', 63 /* KeyCode.F5 */, 'F5', 116, 'VK_F5', empty, empty],\n        [1, 69 /* ScanCode.F6 */, 'F6', 64 /* KeyCode.F6 */, 'F6', 117, 'VK_F6', empty, empty],\n        [1, 70 /* ScanCode.F7 */, 'F7', 65 /* KeyCode.F7 */, 'F7', 118, 'VK_F7', empty, empty],\n        [1, 71 /* ScanCode.F8 */, 'F8', 66 /* KeyCode.F8 */, 'F8', 119, 'VK_F8', empty, empty],\n        [1, 72 /* ScanCode.F9 */, 'F9', 67 /* KeyCode.F9 */, 'F9', 120, 'VK_F9', empty, empty],\n        [1, 73 /* ScanCode.F10 */, 'F10', 68 /* KeyCode.F10 */, 'F10', 121, 'VK_F10', empty, empty],\n        [1, 74 /* ScanCode.F11 */, 'F11', 69 /* KeyCode.F11 */, 'F11', 122, 'VK_F11', empty, empty],\n        [1, 75 /* ScanCode.F12 */, 'F12', 70 /* KeyCode.F12 */, 'F12', 123, 'VK_F12', empty, empty],\n        [1, 76 /* ScanCode.PrintScreen */, 'PrintScreen', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 77 /* ScanCode.ScrollLock */, 'ScrollLock', 84 /* KeyCode.ScrollLock */, 'ScrollLock', 145, 'VK_SCROLL', empty, empty],\n        [1, 78 /* ScanCode.Pause */, 'Pause', 7 /* KeyCode.PauseBreak */, 'PauseBreak', 19, 'VK_PAUSE', empty, empty],\n        [1, 79 /* ScanCode.Insert */, 'Insert', 19 /* KeyCode.Insert */, 'Insert', 45, 'VK_INSERT', empty, empty],\n        [1, 80 /* ScanCode.Home */, 'Home', 14 /* KeyCode.Home */, 'Home', 36, 'VK_HOME', empty, empty],\n        [1, 81 /* ScanCode.PageUp */, 'PageUp', 11 /* KeyCode.PageUp */, 'PageUp', 33, 'VK_PRIOR', empty, empty],\n        [1, 82 /* ScanCode.Delete */, 'Delete', 20 /* KeyCode.Delete */, 'Delete', 46, 'VK_DELETE', empty, empty],\n        [1, 83 /* ScanCode.End */, 'End', 13 /* KeyCode.End */, 'End', 35, 'VK_END', empty, empty],\n        [1, 84 /* ScanCode.PageDown */, 'PageDown', 12 /* KeyCode.PageDown */, 'PageDown', 34, 'VK_NEXT', empty, empty],\n        [1, 85 /* ScanCode.ArrowRight */, 'ArrowRight', 17 /* KeyCode.RightArrow */, 'RightArrow', 39, 'VK_RIGHT', 'Right', empty],\n        [1, 86 /* ScanCode.ArrowLeft */, 'ArrowLeft', 15 /* KeyCode.LeftArrow */, 'LeftArrow', 37, 'VK_LEFT', 'Left', empty],\n        [1, 87 /* ScanCode.ArrowDown */, 'ArrowDown', 18 /* KeyCode.DownArrow */, 'DownArrow', 40, 'VK_DOWN', 'Down', empty],\n        [1, 88 /* ScanCode.ArrowUp */, 'ArrowUp', 16 /* KeyCode.UpArrow */, 'UpArrow', 38, 'VK_UP', 'Up', empty],\n        [1, 89 /* ScanCode.NumLock */, 'NumLock', 83 /* KeyCode.NumLock */, 'NumLock', 144, 'VK_NUMLOCK', empty, empty],\n        [1, 90 /* ScanCode.NumpadDivide */, 'NumpadDivide', 113 /* KeyCode.NumpadDivide */, 'NumPad_Divide', 111, 'VK_DIVIDE', empty, empty],\n        [1, 91 /* ScanCode.NumpadMultiply */, 'NumpadMultiply', 108 /* KeyCode.NumpadMultiply */, 'NumPad_Multiply', 106, 'VK_MULTIPLY', empty, empty],\n        [1, 92 /* ScanCode.NumpadSubtract */, 'NumpadSubtract', 111 /* KeyCode.NumpadSubtract */, 'NumPad_Subtract', 109, 'VK_SUBTRACT', empty, empty],\n        [1, 93 /* ScanCode.NumpadAdd */, 'NumpadAdd', 109 /* KeyCode.NumpadAdd */, 'NumPad_Add', 107, 'VK_ADD', empty, empty],\n        [1, 94 /* ScanCode.NumpadEnter */, 'NumpadEnter', 3 /* KeyCode.Enter */, empty, 0, empty, empty, empty],\n        [1, 95 /* ScanCode.Numpad1 */, 'Numpad1', 99 /* KeyCode.Numpad1 */, 'NumPad1', 97, 'VK_NUMPAD1', empty, empty],\n        [1, 96 /* ScanCode.Numpad2 */, 'Numpad2', 100 /* KeyCode.Numpad2 */, 'NumPad2', 98, 'VK_NUMPAD2', empty, empty],\n        [1, 97 /* ScanCode.Numpad3 */, 'Numpad3', 101 /* KeyCode.Numpad3 */, 'NumPad3', 99, 'VK_NUMPAD3', empty, empty],\n        [1, 98 /* ScanCode.Numpad4 */, 'Numpad4', 102 /* KeyCode.Numpad4 */, 'NumPad4', 100, 'VK_NUMPAD4', empty, empty],\n        [1, 99 /* ScanCode.Numpad5 */, 'Numpad5', 103 /* KeyCode.Numpad5 */, 'NumPad5', 101, 'VK_NUMPAD5', empty, empty],\n        [1, 100 /* ScanCode.Numpad6 */, 'Numpad6', 104 /* KeyCode.Numpad6 */, 'NumPad6', 102, 'VK_NUMPAD6', empty, empty],\n        [1, 101 /* ScanCode.Numpad7 */, 'Numpad7', 105 /* KeyCode.Numpad7 */, 'NumPad7', 103, 'VK_NUMPAD7', empty, empty],\n        [1, 102 /* ScanCode.Numpad8 */, 'Numpad8', 106 /* KeyCode.Numpad8 */, 'NumPad8', 104, 'VK_NUMPAD8', empty, empty],\n        [1, 103 /* ScanCode.Numpad9 */, 'Numpad9', 107 /* KeyCode.Numpad9 */, 'NumPad9', 105, 'VK_NUMPAD9', empty, empty],\n        [1, 104 /* ScanCode.Numpad0 */, 'Numpad0', 98 /* KeyCode.Numpad0 */, 'NumPad0', 96, 'VK_NUMPAD0', empty, empty],\n        [1, 105 /* ScanCode.NumpadDecimal */, 'NumpadDecimal', 112 /* KeyCode.NumpadDecimal */, 'NumPad_Decimal', 110, 'VK_DECIMAL', empty, empty],\n        [0, 106 /* ScanCode.IntlBackslash */, 'IntlBackslash', 97 /* KeyCode.IntlBackslash */, 'OEM_102', 226, 'VK_OEM_102', empty, empty],\n        [1, 107 /* ScanCode.ContextMenu */, 'ContextMenu', 58 /* KeyCode.ContextMenu */, 'ContextMenu', 93, empty, empty, empty],\n        [1, 108 /* ScanCode.Power */, 'Power', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 109 /* ScanCode.NumpadEqual */, 'NumpadEqual', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 110 /* ScanCode.F13 */, 'F13', 71 /* KeyCode.F13 */, 'F13', 124, 'VK_F13', empty, empty],\n        [1, 111 /* ScanCode.F14 */, 'F14', 72 /* KeyCode.F14 */, 'F14', 125, 'VK_F14', empty, empty],\n        [1, 112 /* ScanCode.F15 */, 'F15', 73 /* KeyCode.F15 */, 'F15', 126, 'VK_F15', empty, empty],\n        [1, 113 /* ScanCode.F16 */, 'F16', 74 /* KeyCode.F16 */, 'F16', 127, 'VK_F16', empty, empty],\n        [1, 114 /* ScanCode.F17 */, 'F17', 75 /* KeyCode.F17 */, 'F17', 128, 'VK_F17', empty, empty],\n        [1, 115 /* ScanCode.F18 */, 'F18', 76 /* KeyCode.F18 */, 'F18', 129, 'VK_F18', empty, empty],\n        [1, 116 /* ScanCode.F19 */, 'F19', 77 /* KeyCode.F19 */, 'F19', 130, 'VK_F19', empty, empty],\n        [1, 117 /* ScanCode.F20 */, 'F20', 78 /* KeyCode.F20 */, 'F20', 131, 'VK_F20', empty, empty],\n        [1, 118 /* ScanCode.F21 */, 'F21', 79 /* KeyCode.F21 */, 'F21', 132, 'VK_F21', empty, empty],\n        [1, 119 /* ScanCode.F22 */, 'F22', 80 /* KeyCode.F22 */, 'F22', 133, 'VK_F22', empty, empty],\n        [1, 120 /* ScanCode.F23 */, 'F23', 81 /* KeyCode.F23 */, 'F23', 134, 'VK_F23', empty, empty],\n        [1, 121 /* ScanCode.F24 */, 'F24', 82 /* KeyCode.F24 */, 'F24', 135, 'VK_F24', empty, empty],\n        [1, 122 /* ScanCode.Open */, 'Open', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 123 /* ScanCode.Help */, 'Help', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 124 /* ScanCode.Select */, 'Select', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 125 /* ScanCode.Again */, 'Again', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 126 /* ScanCode.Undo */, 'Undo', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 127 /* ScanCode.Cut */, 'Cut', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 128 /* ScanCode.Copy */, 'Copy', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 129 /* ScanCode.Paste */, 'Paste', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 130 /* ScanCode.Find */, 'Find', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 131 /* ScanCode.AudioVolumeMute */, 'AudioVolumeMute', 117 /* KeyCode.AudioVolumeMute */, 'AudioVolumeMute', 173, 'VK_VOLUME_MUTE', empty, empty],\n        [1, 132 /* ScanCode.AudioVolumeUp */, 'AudioVolumeUp', 118 /* KeyCode.AudioVolumeUp */, 'AudioVolumeUp', 175, 'VK_VOLUME_UP', empty, empty],\n        [1, 133 /* ScanCode.AudioVolumeDown */, 'AudioVolumeDown', 119 /* KeyCode.AudioVolumeDown */, 'AudioVolumeDown', 174, 'VK_VOLUME_DOWN', empty, empty],\n        [1, 134 /* ScanCode.NumpadComma */, 'NumpadComma', 110 /* KeyCode.NUMPAD_SEPARATOR */, 'NumPad_Separator', 108, 'VK_SEPARATOR', empty, empty],\n        [0, 135 /* ScanCode.IntlRo */, 'IntlRo', 115 /* KeyCode.ABNT_C1 */, 'ABNT_C1', 193, 'VK_ABNT_C1', empty, empty],\n        [1, 136 /* ScanCode.KanaMode */, 'KanaMode', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [0, 137 /* ScanCode.IntlYen */, 'IntlYen', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 138 /* ScanCode.Convert */, 'Convert', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 139 /* ScanCode.NonConvert */, 'NonConvert', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 140 /* ScanCode.Lang1 */, 'Lang1', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 141 /* ScanCode.Lang2 */, 'Lang2', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 142 /* ScanCode.Lang3 */, 'Lang3', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 143 /* ScanCode.Lang4 */, 'Lang4', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 144 /* ScanCode.Lang5 */, 'Lang5', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 145 /* ScanCode.Abort */, 'Abort', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 146 /* ScanCode.Props */, 'Props', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 147 /* ScanCode.NumpadParenLeft */, 'NumpadParenLeft', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 148 /* ScanCode.NumpadParenRight */, 'NumpadParenRight', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 149 /* ScanCode.NumpadBackspace */, 'NumpadBackspace', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 150 /* ScanCode.NumpadMemoryStore */, 'NumpadMemoryStore', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 151 /* ScanCode.NumpadMemoryRecall */, 'NumpadMemoryRecall', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 152 /* ScanCode.NumpadMemoryClear */, 'NumpadMemoryClear', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 153 /* ScanCode.NumpadMemoryAdd */, 'NumpadMemoryAdd', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 154 /* ScanCode.NumpadMemorySubtract */, 'NumpadMemorySubtract', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 155 /* ScanCode.NumpadClear */, 'NumpadClear', 131 /* KeyCode.Clear */, 'Clear', 12, 'VK_CLEAR', empty, empty],\n        [1, 156 /* ScanCode.NumpadClearEntry */, 'NumpadClearEntry', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 5 /* KeyCode.Ctrl */, 'Ctrl', 17, 'VK_CONTROL', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 4 /* KeyCode.Shift */, 'Shift', 16, 'VK_SHIFT', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 6 /* KeyCode.Alt */, 'Alt', 18, 'VK_MENU', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 57 /* KeyCode.Meta */, 'Meta', 91, 'VK_COMMAND', empty, empty],\n        [1, 157 /* ScanCode.ControlLeft */, 'ControlLeft', 5 /* KeyCode.Ctrl */, empty, 0, 'VK_LCONTROL', empty, empty],\n        [1, 158 /* ScanCode.ShiftLeft */, 'ShiftLeft', 4 /* KeyCode.Shift */, empty, 0, 'VK_LSHIFT', empty, empty],\n        [1, 159 /* ScanCode.AltLeft */, 'AltLeft', 6 /* KeyCode.Alt */, empty, 0, 'VK_LMENU', empty, empty],\n        [1, 160 /* ScanCode.MetaLeft */, 'MetaLeft', 57 /* KeyCode.Meta */, empty, 0, 'VK_LWIN', empty, empty],\n        [1, 161 /* ScanCode.ControlRight */, 'ControlRight', 5 /* KeyCode.Ctrl */, empty, 0, 'VK_RCONTROL', empty, empty],\n        [1, 162 /* ScanCode.ShiftRight */, 'ShiftRight', 4 /* KeyCode.Shift */, empty, 0, 'VK_RSHIFT', empty, empty],\n        [1, 163 /* ScanCode.AltRight */, 'AltRight', 6 /* KeyCode.Alt */, empty, 0, 'VK_RMENU', empty, empty],\n        [1, 164 /* ScanCode.MetaRight */, 'MetaRight', 57 /* KeyCode.Meta */, empty, 0, 'VK_RWIN', empty, empty],\n        [1, 165 /* ScanCode.BrightnessUp */, 'BrightnessUp', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 166 /* ScanCode.BrightnessDown */, 'BrightnessDown', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 167 /* ScanCode.MediaPlay */, 'MediaPlay', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 168 /* ScanCode.MediaRecord */, 'MediaRecord', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 169 /* ScanCode.MediaFastForward */, 'MediaFastForward', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 170 /* ScanCode.MediaRewind */, 'MediaRewind', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 171 /* ScanCode.MediaTrackNext */, 'MediaTrackNext', 124 /* KeyCode.MediaTrackNext */, 'MediaTrackNext', 176, 'VK_MEDIA_NEXT_TRACK', empty, empty],\n        [1, 172 /* ScanCode.MediaTrackPrevious */, 'MediaTrackPrevious', 125 /* KeyCode.MediaTrackPrevious */, 'MediaTrackPrevious', 177, 'VK_MEDIA_PREV_TRACK', empty, empty],\n        [1, 173 /* ScanCode.MediaStop */, 'MediaStop', 126 /* KeyCode.MediaStop */, 'MediaStop', 178, 'VK_MEDIA_STOP', empty, empty],\n        [1, 174 /* ScanCode.Eject */, 'Eject', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 175 /* ScanCode.MediaPlayPause */, 'MediaPlayPause', 127 /* KeyCode.MediaPlayPause */, 'MediaPlayPause', 179, 'VK_MEDIA_PLAY_PAUSE', empty, empty],\n        [1, 176 /* ScanCode.MediaSelect */, 'MediaSelect', 128 /* KeyCode.LaunchMediaPlayer */, 'LaunchMediaPlayer', 181, 'VK_MEDIA_LAUNCH_MEDIA_SELECT', empty, empty],\n        [1, 177 /* ScanCode.LaunchMail */, 'LaunchMail', 129 /* KeyCode.LaunchMail */, 'LaunchMail', 180, 'VK_MEDIA_LAUNCH_MAIL', empty, empty],\n        [1, 178 /* ScanCode.LaunchApp2 */, 'LaunchApp2', 130 /* KeyCode.LaunchApp2 */, 'LaunchApp2', 183, 'VK_MEDIA_LAUNCH_APP2', empty, empty],\n        [1, 179 /* ScanCode.LaunchApp1 */, 'LaunchApp1', 0 /* KeyCode.Unknown */, empty, 0, 'VK_MEDIA_LAUNCH_APP1', empty, empty],\n        [1, 180 /* ScanCode.SelectTask */, 'SelectTask', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 181 /* ScanCode.LaunchScreenSaver */, 'LaunchScreenSaver', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 182 /* ScanCode.BrowserSearch */, 'BrowserSearch', 120 /* KeyCode.BrowserSearch */, 'BrowserSearch', 170, 'VK_BROWSER_SEARCH', empty, empty],\n        [1, 183 /* ScanCode.BrowserHome */, 'BrowserHome', 121 /* KeyCode.BrowserHome */, 'BrowserHome', 172, 'VK_BROWSER_HOME', empty, empty],\n        [1, 184 /* ScanCode.BrowserBack */, 'BrowserBack', 122 /* KeyCode.BrowserBack */, 'BrowserBack', 166, 'VK_BROWSER_BACK', empty, empty],\n        [1, 185 /* ScanCode.BrowserForward */, 'BrowserForward', 123 /* KeyCode.BrowserForward */, 'BrowserForward', 167, 'VK_BROWSER_FORWARD', empty, empty],\n        [1, 186 /* ScanCode.BrowserStop */, 'BrowserStop', 0 /* KeyCode.Unknown */, empty, 0, 'VK_BROWSER_STOP', empty, empty],\n        [1, 187 /* ScanCode.BrowserRefresh */, 'BrowserRefresh', 0 /* KeyCode.Unknown */, empty, 0, 'VK_BROWSER_REFRESH', empty, empty],\n        [1, 188 /* ScanCode.BrowserFavorites */, 'BrowserFavorites', 0 /* KeyCode.Unknown */, empty, 0, 'VK_BROWSER_FAVORITES', empty, empty],\n        [1, 189 /* ScanCode.ZoomToggle */, 'ZoomToggle', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 190 /* ScanCode.MailReply */, 'MailReply', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 191 /* ScanCode.MailForward */, 'MailForward', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        [1, 192 /* ScanCode.MailSend */, 'MailSend', 0 /* KeyCode.Unknown */, empty, 0, empty, empty, empty],\n        // See 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        [1, 0 /* ScanCode.None */, empty, 114 /* KeyCode.KEY_IN_COMPOSITION */, 'KeyInComposition', 229, empty, empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 116 /* KeyCode.ABNT_C2 */, 'ABNT_C2', 194, 'VK_ABNT_C2', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 96 /* KeyCode.OEM_8 */, 'OEM_8', 223, 'VK_OEM_8', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_KANA', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_HANGUL', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_JUNJA', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_FINAL', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_HANJA', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_KANJI', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_CONVERT', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_NONCONVERT', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_ACCEPT', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_MODECHANGE', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_SELECT', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_PRINT', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_EXECUTE', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_SNAPSHOT', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_HELP', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_APPS', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_PROCESSKEY', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_PACKET', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_DBE_SBCSCHAR', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_DBE_DBCSCHAR', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_ATTN', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_CRSEL', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_EXSEL', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_EREOF', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_PLAY', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_ZOOM', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_NONAME', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_PA1', empty, empty],\n        [1, 0 /* ScanCode.None */, empty, 0 /* KeyCode.Unknown */, empty, 0, 'VK_OEM_CLEAR', empty, empty],\n    ];\n    const seenKeyCode = [];\n    const seenScanCode = [];\n    for (const mapping of mappings) {\n        const [immutable, scanCode, scanCodeStr, keyCode, keyCodeStr, eventKeyCode, vkey, usUserSettingsLabel, generalUserSettingsLabel] = mapping;\n        if (!seenScanCode[scanCode]) {\n            seenScanCode[scanCode] = true;\n            scanCodeIntToStr[scanCode] = scanCodeStr;\n            scanCodeStrToInt[scanCodeStr] = scanCode;\n            scanCodeLowerCaseStrToInt[scanCodeStr.toLowerCase()] = scanCode;\n            if (immutable) {\n                IMMUTABLE_CODE_TO_KEY_CODE[scanCode] = keyCode;\n                if ((keyCode !== 0 /* KeyCode.Unknown */)\n                    && (keyCode !== 3 /* KeyCode.Enter */)\n                    && (keyCode !== 5 /* KeyCode.Ctrl */)\n                    && (keyCode !== 4 /* KeyCode.Shift */)\n                    && (keyCode !== 6 /* KeyCode.Alt */)\n                    && (keyCode !== 57 /* KeyCode.Meta */)) {\n                    IMMUTABLE_KEY_CODE_TO_CODE[keyCode] = scanCode;\n                }\n            }\n        }\n        if (!seenKeyCode[keyCode]) {\n            seenKeyCode[keyCode] = true;\n            if (!keyCodeStr) {\n                throw new Error(`String representation missing for key code ${keyCode} around scan code ${scanCodeStr}`);\n            }\n            uiMap.define(keyCode, keyCodeStr);\n            userSettingsUSMap.define(keyCode, usUserSettingsLabel || keyCodeStr);\n            userSettingsGeneralMap.define(keyCode, generalUserSettingsLabel || usUserSettingsLabel || keyCodeStr);\n        }\n        if (eventKeyCode) {\n            EVENT_KEY_CODE_MAP[eventKeyCode] = keyCode;\n        }\n        if (vkey) {\n            NATIVE_WINDOWS_KEY_CODE_TO_KEY_CODE[vkey] = keyCode;\n        }\n    }\n    // Manually added due to the exclusion above (due to duplication with NumpadEnter)\n    IMMUTABLE_KEY_CODE_TO_CODE[3 /* KeyCode.Enter */] = 46 /* ScanCode.Enter */;\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    function toElectronAccelerator(keyCode) {\n        if (keyCode >= 98 /* KeyCode.Numpad0 */ && keyCode <= 113 /* KeyCode.NumpadDivide */) {\n            // [Electron Accelerators] Electron is able to parse numpad keys, but unfortunately it\n            // renders them just as regular keys in menus. For example, num0 is rendered as \"0\",\n            // numdiv is rendered as \"/\", numsub is rendered as \"-\".\n            //\n            // This can lead to incredible confusion, as it makes numpad based keybindings indistinguishable\n            // from keybindings based on regular keys.\n            //\n            // We therefore need to fall back to custom rendering for numpad keys.\n            return null;\n        }\n        switch (keyCode) {\n            case 16 /* KeyCode.UpArrow */:\n                return 'Up';\n            case 18 /* KeyCode.DownArrow */:\n                return 'Down';\n            case 15 /* KeyCode.LeftArrow */:\n                return 'Left';\n            case 17 /* KeyCode.RightArrow */:\n                return 'Right';\n        }\n        return uiMap.keyCodeToStr(keyCode);\n    }\n    KeyCodeUtils.toElectronAccelerator = toElectronAccelerator;\n})(KeyCodeUtils || (KeyCodeUtils = {}));\nexport function KeyChord(firstPart, secondPart) {\n    const chordPart = ((secondPart & 0x0000FFFF) << 16) >>> 0;\n    return (firstPart | chordPart) >>> 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 { isMacintosh, isWindows } from './platform.js';\nlet safeProcess;\n// Native sandbox environment\nconst vscodeGlobal = globalThis.vscode;\nif (typeof vscodeGlobal !== 'undefined' && typeof vscodeGlobal.process !== 'undefined') {\n    const sandboxProcess = vscodeGlobal.process;\n    safeProcess = {\n        get platform() { return sandboxProcess.platform; },\n        get arch() { return sandboxProcess.arch; },\n        get env() { return sandboxProcess.env; },\n        cwd() { return sandboxProcess.cwd(); }\n    };\n}\n// Native node.js environment\nelse if (typeof process !== 'undefined' && typeof process?.versions?.node === 'string') {\n    safeProcess = {\n        get platform() { return process.platform; },\n        get arch() { return process.arch; },\n        get env() { return process.env; },\n        cwd() { return process.env['VSCODE_CWD'] || process.cwd(); }\n    };\n}\n// Web environment\nelse {\n    safeProcess = {\n        // Supported\n        get platform() { return isWindows ? 'win32' : isMacintosh ? 'darwin' : 'linux'; },\n        get arch() { return undefined; /* arch is undefined in web */ },\n        // Unsupported\n        get env() { return {}; },\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 *\n * @skipMangle\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/commits/v20.9.0/lib/path.js\n// Excluding: the change that adds primordials\n// (https://github.com/nodejs/node/commit/187a862d221dec42fa9a5c4214e7034d9092792f and others)\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 validateObject(pathObject, name) {\n    if (pathObject === null || typeof pathObject !== 'object') {\n        throw new ErrorInvalidArgType(name, 'Object', pathObject);\n    }\n}\nfunction validateString(value, name) {\n    if (typeof value !== 'string') {\n        throw new ErrorInvalidArgType(name, 'string', value);\n    }\n}\nconst platformIsWin32 = (process.platform === 'win32');\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 formatExt(ext) {\n    return ext ? `${ext[0] === '.' ? '' : '.'}${ext}` : '';\n}\nfunction _format(sep, pathObject) {\n    validateObject(pathObject, 'pathObject');\n    const dir = pathObject.dir || pathObject.root;\n    const base = pathObject.base ||\n        `${pathObject.name || ''}${formatExt(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, `paths[${i}]`);\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 a UNC path then.\n        //\n        // This step is skipped when it is very clear that the user actually\n        // intended to point at a 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 a 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' || path.length === 0) {\n            return path;\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, suffix) {\n        if (suffix !== undefined) {\n            validateString(suffix, 'suffix');\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 (suffix !== undefined && suffix.length > 0 && suffix.length <= path.length) {\n            if (suffix === path) {\n                return '';\n            }\n            let extIdx = suffix.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 === suffix.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};\nconst posixCwd = (() => {\n    if (platformIsWin32) {\n        // Converts Windows' backslash path separators to POSIX forward slashes\n        // and truncates any drive indicator\n        const regexp = /\\\\/g;\n        return () => {\n            const cwd = process.cwd().replace(regexp, '/');\n            return cwd.slice(cwd.indexOf('/'));\n        };\n    }\n    // We're already on POSIX, no need for any transformations\n    return () => process.cwd();\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] : posixCwd();\n            validateString(path, `paths[${i}]`);\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, suffix) {\n        if (suffix !== undefined) {\n            validateString(suffix, 'ext');\n        }\n        validateString(path, 'path');\n        let start = 0;\n        let end = -1;\n        let matchedSlash = true;\n        let i;\n        if (suffix !== undefined && suffix.length > 0 && suffix.length <= path.length) {\n            if (suffix === path) {\n                return '';\n            }\n            let extIdx = suffix.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 === suffix.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 = (platformIsWin32 ? win32.normalize : posix.normalize);\nexport const join = (platformIsWin32 ? win32.join : posix.join);\nexport const resolve = (platformIsWin32 ? win32.resolve : posix.resolve);\nexport const relative = (platformIsWin32 ? win32.relative : posix.relative);\nexport const dirname = (platformIsWin32 ? win32.dirname : posix.dirname);\nexport const basename = (platformIsWin32 ? win32.basename : posix.basename);\nexport const extname = (platformIsWin32 ? win32.extname : posix.extname);\nexport const sep = (platformIsWin32 ? 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 *--------------------------------------------------------------------------------------------*/\nimport * as paths from './path.js';\nimport { isWindows } from './platform.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    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    /**\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    // ---- 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.example.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    /**\n     * Creates new URI from uri components.\n     *\n     * Unless `strict` is `true` the scheme is defaults to be `file`. This function performs\n     * validation and should be used for untrusted uri components retrieved from storage,\n     * user input, command arguments etc\n     */\n    static from(components, strict) {\n        const result = new Uri(components.scheme, components.authority, components.path, components.query, components.fragment, strict);\n        return result;\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 ?? null;\n            result._fsPath = data._sep === _pathSepMarker ? data.fsPath ?? null : null;\n            return result;\n        }\n    }\n}\nconst _pathSepMarker = isWindows ? 1 : undefined;\n// This class exists so that URI is compatible 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 /* MarshalledId.Uri */\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        // TODO\n        // this isn't correct and can violate the UriComponents contract but\n        // this is part of the vscode.Uri API and we shouldn't change how that\n        // works anymore\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 /* CharCode.Colon */]: '%3A', // gen-delims\n    [47 /* CharCode.Slash */]: '%2F',\n    [63 /* CharCode.QuestionMark */]: '%3F',\n    [35 /* CharCode.Hash */]: '%23',\n    [91 /* CharCode.OpenSquareBracket */]: '%5B',\n    [93 /* CharCode.CloseSquareBracket */]: '%5D',\n    [64 /* CharCode.AtSign */]: '%40',\n    [33 /* CharCode.ExclamationMark */]: '%21', // sub-delims\n    [36 /* CharCode.DollarSign */]: '%24',\n    [38 /* CharCode.Ampersand */]: '%26',\n    [39 /* CharCode.SingleQuote */]: '%27',\n    [40 /* CharCode.OpenParen */]: '%28',\n    [41 /* CharCode.CloseParen */]: '%29',\n    [42 /* CharCode.Asterisk */]: '%2A',\n    [43 /* CharCode.Plus */]: '%2B',\n    [44 /* CharCode.Comma */]: '%2C',\n    [59 /* CharCode.Semicolon */]: '%3B',\n    [61 /* CharCode.Equals */]: '%3D',\n    [32 /* CharCode.Space */]: '%20',\n};\nfunction encodeURIComponentFast(uriComponent, isPath, isAuthority) {\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 /* CharCode.a */ && code <= 122 /* CharCode.z */)\n            || (code >= 65 /* CharCode.A */ && code <= 90 /* CharCode.Z */)\n            || (code >= 48 /* CharCode.Digit0 */ && code <= 57 /* CharCode.Digit9 */)\n            || code === 45 /* CharCode.Dash */\n            || code === 46 /* CharCode.Period */\n            || code === 95 /* CharCode.Underline */\n            || code === 126 /* CharCode.Tilde */\n            || (isPath && code === 47 /* CharCode.Slash */)\n            || (isAuthority && code === 91 /* CharCode.OpenSquareBracket */)\n            || (isAuthority && code === 93 /* CharCode.CloseSquareBracket */)\n            || (isAuthority && code === 58 /* CharCode.Colon */)) {\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 /* CharCode.Hash */ || code === 63 /* CharCode.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 /* CharCode.Slash */\n        && (uri.path.charCodeAt(1) >= 65 /* CharCode.A */ && uri.path.charCodeAt(1) <= 90 /* CharCode.Z */ || uri.path.charCodeAt(1) >= 97 /* CharCode.a */ && uri.path.charCodeAt(1) <= 122 /* CharCode.z */)\n        && uri.path.charCodeAt(2) === 58 /* CharCode.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.lastIndexOf(':');\n            if (idx === -1) {\n                res += encoder(userinfo, false, false);\n            }\n            else {\n                // <user>:<pass>@<auth>\n                res += encoder(userinfo.substr(0, idx), false, false);\n                res += ':';\n                res += encoder(userinfo.substr(idx + 1), false, true);\n            }\n            res += '@';\n        }\n        authority = authority.toLowerCase();\n        idx = authority.lastIndexOf(':');\n        if (idx === -1) {\n            res += encoder(authority, false, true);\n        }\n        else {\n            // <auth>:<port>\n            res += encoder(authority.substr(0, idx), false, true);\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 /* CharCode.Slash */ && path.charCodeAt(2) === 58 /* CharCode.Colon */) {\n            const code = path.charCodeAt(1);\n            if (code >= 65 /* CharCode.A */ && code <= 90 /* CharCode.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 /* CharCode.Colon */) {\n            const code = path.charCodeAt(0);\n            if (code >= 65 /* CharCode.A */ && code <= 90 /* CharCode.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, false);\n    }\n    if (query) {\n        res += '?';\n        res += encoder(query, false, false);\n    }\n    if (fragment) {\n        res += '#';\n        res += !skipEncoding ? encodeURIComponentFast(fragment, false, false) : fragment;\n    }\n    return res;\n}\n// --- decode\nfunction decodeURIComponentGraceful(str) {\n    try {\n        return decodeURIComponent(str);\n    }\n    catch {\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 *--------------------------------------------------------------------------------------------*/\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        const aLineNumber = a.lineNumber | 0;\n        const bLineNumber = b.lineNumber | 0;\n        if (aLineNumber === bLineNumber) {\n            const aColumn = a.column | 0;\n            const 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    toJSON() {\n        return {\n            lineNumber: this.lineNumber,\n            column: this.column\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 './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 `position` is in `range`. If the position is at the edges, will return false.\n     * @internal\n     */\n    static strictContainsPosition(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 strictly 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        const otherStartLineNumber = b.startLineNumber;\n        const otherStartColumn = b.startColumn;\n        const otherEndLineNumber = b.endLineNumber;\n        const 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        if (!a && !b) {\n            return true;\n        }\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     * Create a new empty range using this range's end position.\n     */\n    collapseToEnd() {\n        return Range.collapseToEnd(this);\n    }\n    /**\n     * Create a new empty range using this range's end position.\n     */\n    static collapseToEnd(range) {\n        return new Range(range.endLineNumber, range.endColumn, range.endLineNumber, range.endColumn);\n    }\n    /**\n     * Moves the range by the given amount of lines.\n     */\n    delta(lineCount) {\n        return new Range(this.startLineNumber + lineCount, this.startColumn, this.endLineNumber + lineCount, this.endColumn);\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    toJSON() {\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 { 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 /* SelectionDirection.LTR */;\n        }\n        return 1 /* SelectionDirection.RTL */;\n    }\n    /**\n     * Create a new selection with a different `positionLineNumber` and `positionColumn`.\n     */\n    setEndPosition(endLineNumber, endColumn) {\n        if (this.getDirection() === 0 /* SelectionDirection.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     * Get the position at the start of the selection.\n    */\n    getSelectionStart() {\n        return new Position(this.selectionStartLineNumber, this.selectionStartColumn);\n    }\n    /**\n     * Create a new selection with a different `selectionStartLineNumber` and `selectionStartColumn`.\n     */\n    setStartPosition(startLineNumber, startColumn) {\n        if (this.getDirection() === 0 /* SelectionDirection.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     * Creates a `Selection` from a range, given a direction.\n     */\n    static fromRange(range, direction) {\n        if (direction === 0 /* SelectionDirection.LTR */) {\n            return new Selection(range.startLineNumber, range.startColumn, range.endLineNumber, range.endColumn);\n        }\n        else {\n            return new Selection(range.endLineNumber, range.endColumn, range.startLineNumber, range.startColumn);\n        }\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 /* SelectionDirection.LTR */) {\n            return new Selection(startLineNumber, startColumn, endLineNumber, endColumn);\n        }\n        return new Selection(endLineNumber, endColumn, startLineNumber, startColumn);\n    }\n}\n","import { isString } from './types.js';\nconst _codiconFontCharacters = Object.create(null);\nexport function register(id, fontCharacter) {\n    if (isString(fontCharacter)) {\n        const val = _codiconFontCharacters[fontCharacter];\n        if (val === undefined) {\n            throw new Error(`${id} references an unknown codicon: ${fontCharacter}`);\n        }\n        fontCharacter = val;\n    }\n    _codiconFontCharacters[id] = fontCharacter;\n    return { id };\n}\n/**\n * Only to be used by the iconRegistry.\n */\nexport function getCodiconFontCharacters() {\n    return _codiconFontCharacters;\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { register } from './codiconsUtil.js';\n// This file is automatically generated by (microsoft/vscode-codicons)/scripts/export-to-ts.js\n// Please don't edit it, as your changes will be overwritten.\n// Instead, add mappings to codiconsDerived in codicons.ts.\nexport const codiconsLibrary = {\n    add: register('add', 0xea60),\n    plus: register('plus', 0xea60),\n    gistNew: register('gist-new', 0xea60),\n    repoCreate: register('repo-create', 0xea60),\n    lightbulb: register('lightbulb', 0xea61),\n    lightBulb: register('light-bulb', 0xea61),\n    repo: register('repo', 0xea62),\n    repoDelete: register('repo-delete', 0xea62),\n    gistFork: register('gist-fork', 0xea63),\n    repoForked: register('repo-forked', 0xea63),\n    gitPullRequest: register('git-pull-request', 0xea64),\n    gitPullRequestAbandoned: register('git-pull-request-abandoned', 0xea64),\n    recordKeys: register('record-keys', 0xea65),\n    keyboard: register('keyboard', 0xea65),\n    tag: register('tag', 0xea66),\n    gitPullRequestLabel: register('git-pull-request-label', 0xea66),\n    tagAdd: register('tag-add', 0xea66),\n    tagRemove: register('tag-remove', 0xea66),\n    person: register('person', 0xea67),\n    personFollow: register('person-follow', 0xea67),\n    personOutline: register('person-outline', 0xea67),\n    personFilled: register('person-filled', 0xea67),\n    gitBranch: register('git-branch', 0xea68),\n    gitBranchCreate: register('git-branch-create', 0xea68),\n    gitBranchDelete: register('git-branch-delete', 0xea68),\n    sourceControl: register('source-control', 0xea68),\n    mirror: register('mirror', 0xea69),\n    mirrorPublic: register('mirror-public', 0xea69),\n    star: register('star', 0xea6a),\n    starAdd: register('star-add', 0xea6a),\n    starDelete: register('star-delete', 0xea6a),\n    starEmpty: register('star-empty', 0xea6a),\n    comment: register('comment', 0xea6b),\n    commentAdd: register('comment-add', 0xea6b),\n    alert: register('alert', 0xea6c),\n    warning: register('warning', 0xea6c),\n    search: register('search', 0xea6d),\n    searchSave: register('search-save', 0xea6d),\n    logOut: register('log-out', 0xea6e),\n    signOut: register('sign-out', 0xea6e),\n    logIn: register('log-in', 0xea6f),\n    signIn: register('sign-in', 0xea6f),\n    eye: register('eye', 0xea70),\n    eyeUnwatch: register('eye-unwatch', 0xea70),\n    eyeWatch: register('eye-watch', 0xea70),\n    circleFilled: register('circle-filled', 0xea71),\n    primitiveDot: register('primitive-dot', 0xea71),\n    closeDirty: register('close-dirty', 0xea71),\n    debugBreakpoint: register('debug-breakpoint', 0xea71),\n    debugBreakpointDisabled: register('debug-breakpoint-disabled', 0xea71),\n    debugHint: register('debug-hint', 0xea71),\n    terminalDecorationSuccess: register('terminal-decoration-success', 0xea71),\n    primitiveSquare: register('primitive-square', 0xea72),\n    edit: register('edit', 0xea73),\n    pencil: register('pencil', 0xea73),\n    info: register('info', 0xea74),\n    issueOpened: register('issue-opened', 0xea74),\n    gistPrivate: register('gist-private', 0xea75),\n    gitForkPrivate: register('git-fork-private', 0xea75),\n    lock: register('lock', 0xea75),\n    mirrorPrivate: register('mirror-private', 0xea75),\n    close: register('close', 0xea76),\n    removeClose: register('remove-close', 0xea76),\n    x: register('x', 0xea76),\n    repoSync: register('repo-sync', 0xea77),\n    sync: register('sync', 0xea77),\n    clone: register('clone', 0xea78),\n    desktopDownload: register('desktop-download', 0xea78),\n    beaker: register('beaker', 0xea79),\n    microscope: register('microscope', 0xea79),\n    vm: register('vm', 0xea7a),\n    deviceDesktop: register('device-desktop', 0xea7a),\n    file: register('file', 0xea7b),\n    fileText: register('file-text', 0xea7b),\n    more: register('more', 0xea7c),\n    ellipsis: register('ellipsis', 0xea7c),\n    kebabHorizontal: register('kebab-horizontal', 0xea7c),\n    mailReply: register('mail-reply', 0xea7d),\n    reply: register('reply', 0xea7d),\n    organization: register('organization', 0xea7e),\n    organizationFilled: register('organization-filled', 0xea7e),\n    organizationOutline: register('organization-outline', 0xea7e),\n    newFile: register('new-file', 0xea7f),\n    fileAdd: register('file-add', 0xea7f),\n    newFolder: register('new-folder', 0xea80),\n    fileDirectoryCreate: register('file-directory-create', 0xea80),\n    trash: register('trash', 0xea81),\n    trashcan: register('trashcan', 0xea81),\n    history: register('history', 0xea82),\n    clock: register('clock', 0xea82),\n    folder: register('folder', 0xea83),\n    fileDirectory: register('file-directory', 0xea83),\n    symbolFolder: register('symbol-folder', 0xea83),\n    logoGithub: register('logo-github', 0xea84),\n    markGithub: register('mark-github', 0xea84),\n    github: register('github', 0xea84),\n    terminal: register('terminal', 0xea85),\n    console: register('console', 0xea85),\n    repl: register('repl', 0xea85),\n    zap: register('zap', 0xea86),\n    symbolEvent: register('symbol-event', 0xea86),\n    error: register('error', 0xea87),\n    stop: register('stop', 0xea87),\n    variable: register('variable', 0xea88),\n    symbolVariable: register('symbol-variable', 0xea88),\n    array: register('array', 0xea8a),\n    symbolArray: register('symbol-array', 0xea8a),\n    symbolModule: register('symbol-module', 0xea8b),\n    symbolPackage: register('symbol-package', 0xea8b),\n    symbolNamespace: register('symbol-namespace', 0xea8b),\n    symbolObject: register('symbol-object', 0xea8b),\n    symbolMethod: register('symbol-method', 0xea8c),\n    symbolFunction: register('symbol-function', 0xea8c),\n    symbolConstructor: register('symbol-constructor', 0xea8c),\n    symbolBoolean: register('symbol-boolean', 0xea8f),\n    symbolNull: register('symbol-null', 0xea8f),\n    symbolNumeric: register('symbol-numeric', 0xea90),\n    symbolNumber: register('symbol-number', 0xea90),\n    symbolStructure: register('symbol-structure', 0xea91),\n    symbolStruct: register('symbol-struct', 0xea91),\n    symbolParameter: register('symbol-parameter', 0xea92),\n    symbolTypeParameter: register('symbol-type-parameter', 0xea92),\n    symbolKey: register('symbol-key', 0xea93),\n    symbolText: register('symbol-text', 0xea93),\n    symbolReference: register('symbol-reference', 0xea94),\n    goToFile: register('go-to-file', 0xea94),\n    symbolEnum: register('symbol-enum', 0xea95),\n    symbolValue: register('symbol-value', 0xea95),\n    symbolRuler: register('symbol-ruler', 0xea96),\n    symbolUnit: register('symbol-unit', 0xea96),\n    activateBreakpoints: register('activate-breakpoints', 0xea97),\n    archive: register('archive', 0xea98),\n    arrowBoth: register('arrow-both', 0xea99),\n    arrowDown: register('arrow-down', 0xea9a),\n    arrowLeft: register('arrow-left', 0xea9b),\n    arrowRight: register('arrow-right', 0xea9c),\n    arrowSmallDown: register('arrow-small-down', 0xea9d),\n    arrowSmallLeft: register('arrow-small-left', 0xea9e),\n    arrowSmallRight: register('arrow-small-right', 0xea9f),\n    arrowSmallUp: register('arrow-small-up', 0xeaa0),\n    arrowUp: register('arrow-up', 0xeaa1),\n    bell: register('bell', 0xeaa2),\n    bold: register('bold', 0xeaa3),\n    book: register('book', 0xeaa4),\n    bookmark: register('bookmark', 0xeaa5),\n    debugBreakpointConditionalUnverified: register('debug-breakpoint-conditional-unverified', 0xeaa6),\n    debugBreakpointConditional: register('debug-breakpoint-conditional', 0xeaa7),\n    debugBreakpointConditionalDisabled: register('debug-breakpoint-conditional-disabled', 0xeaa7),\n    debugBreakpointDataUnverified: register('debug-breakpoint-data-unverified', 0xeaa8),\n    debugBreakpointData: register('debug-breakpoint-data', 0xeaa9),\n    debugBreakpointDataDisabled: register('debug-breakpoint-data-disabled', 0xeaa9),\n    debugBreakpointLogUnverified: register('debug-breakpoint-log-unverified', 0xeaaa),\n    debugBreakpointLog: register('debug-breakpoint-log', 0xeaab),\n    debugBreakpointLogDisabled: register('debug-breakpoint-log-disabled', 0xeaab),\n    briefcase: register('briefcase', 0xeaac),\n    broadcast: register('broadcast', 0xeaad),\n    browser: register('browser', 0xeaae),\n    bug: register('bug', 0xeaaf),\n    calendar: register('calendar', 0xeab0),\n    caseSensitive: register('case-sensitive', 0xeab1),\n    check: register('check', 0xeab2),\n    checklist: register('checklist', 0xeab3),\n    chevronDown: register('chevron-down', 0xeab4),\n    chevronLeft: register('chevron-left', 0xeab5),\n    chevronRight: register('chevron-right', 0xeab6),\n    chevronUp: register('chevron-up', 0xeab7),\n    chromeClose: register('chrome-close', 0xeab8),\n    chromeMaximize: register('chrome-maximize', 0xeab9),\n    chromeMinimize: register('chrome-minimize', 0xeaba),\n    chromeRestore: register('chrome-restore', 0xeabb),\n    circleOutline: register('circle-outline', 0xeabc),\n    circle: register('circle', 0xeabc),\n    debugBreakpointUnverified: register('debug-breakpoint-unverified', 0xeabc),\n    terminalDecorationIncomplete: register('terminal-decoration-incomplete', 0xeabc),\n    circleSlash: register('circle-slash', 0xeabd),\n    circuitBoard: register('circuit-board', 0xeabe),\n    clearAll: register('clear-all', 0xeabf),\n    clippy: register('clippy', 0xeac0),\n    closeAll: register('close-all', 0xeac1),\n    cloudDownload: register('cloud-download', 0xeac2),\n    cloudUpload: register('cloud-upload', 0xeac3),\n    code: register('code', 0xeac4),\n    collapseAll: register('collapse-all', 0xeac5),\n    colorMode: register('color-mode', 0xeac6),\n    commentDiscussion: register('comment-discussion', 0xeac7),\n    creditCard: register('credit-card', 0xeac9),\n    dash: register('dash', 0xeacc),\n    dashboard: register('dashboard', 0xeacd),\n    database: register('database', 0xeace),\n    debugContinue: register('debug-continue', 0xeacf),\n    debugDisconnect: register('debug-disconnect', 0xead0),\n    debugPause: register('debug-pause', 0xead1),\n    debugRestart: register('debug-restart', 0xead2),\n    debugStart: register('debug-start', 0xead3),\n    debugStepInto: register('debug-step-into', 0xead4),\n    debugStepOut: register('debug-step-out', 0xead5),\n    debugStepOver: register('debug-step-over', 0xead6),\n    debugStop: register('debug-stop', 0xead7),\n    debug: register('debug', 0xead8),\n    deviceCameraVideo: register('device-camera-video', 0xead9),\n    deviceCamera: register('device-camera', 0xeada),\n    deviceMobile: register('device-mobile', 0xeadb),\n    diffAdded: register('diff-added', 0xeadc),\n    diffIgnored: register('diff-ignored', 0xeadd),\n    diffModified: register('diff-modified', 0xeade),\n    diffRemoved: register('diff-removed', 0xeadf),\n    diffRenamed: register('diff-renamed', 0xeae0),\n    diff: register('diff', 0xeae1),\n    diffSidebyside: register('diff-sidebyside', 0xeae1),\n    discard: register('discard', 0xeae2),\n    editorLayout: register('editor-layout', 0xeae3),\n    emptyWindow: register('empty-window', 0xeae4),\n    exclude: register('exclude', 0xeae5),\n    extensions: register('extensions', 0xeae6),\n    eyeClosed: register('eye-closed', 0xeae7),\n    fileBinary: register('file-binary', 0xeae8),\n    fileCode: register('file-code', 0xeae9),\n    fileMedia: register('file-media', 0xeaea),\n    filePdf: register('file-pdf', 0xeaeb),\n    fileSubmodule: register('file-submodule', 0xeaec),\n    fileSymlinkDirectory: register('file-symlink-directory', 0xeaed),\n    fileSymlinkFile: register('file-symlink-file', 0xeaee),\n    fileZip: register('file-zip', 0xeaef),\n    files: register('files', 0xeaf0),\n    filter: register('filter', 0xeaf1),\n    flame: register('flame', 0xeaf2),\n    foldDown: register('fold-down', 0xeaf3),\n    foldUp: register('fold-up', 0xeaf4),\n    fold: register('fold', 0xeaf5),\n    folderActive: register('folder-active', 0xeaf6),\n    folderOpened: register('folder-opened', 0xeaf7),\n    gear: register('gear', 0xeaf8),\n    gift: register('gift', 0xeaf9),\n    gistSecret: register('gist-secret', 0xeafa),\n    gist: register('gist', 0xeafb),\n    gitCommit: register('git-commit', 0xeafc),\n    gitCompare: register('git-compare', 0xeafd),\n    compareChanges: register('compare-changes', 0xeafd),\n    gitMerge: register('git-merge', 0xeafe),\n    githubAction: register('github-action', 0xeaff),\n    githubAlt: register('github-alt', 0xeb00),\n    globe: register('globe', 0xeb01),\n    grabber: register('grabber', 0xeb02),\n    graph: register('graph', 0xeb03),\n    gripper: register('gripper', 0xeb04),\n    heart: register('heart', 0xeb05),\n    home: register('home', 0xeb06),\n    horizontalRule: register('horizontal-rule', 0xeb07),\n    hubot: register('hubot', 0xeb08),\n    inbox: register('inbox', 0xeb09),\n    issueReopened: register('issue-reopened', 0xeb0b),\n    issues: register('issues', 0xeb0c),\n    italic: register('italic', 0xeb0d),\n    jersey: register('jersey', 0xeb0e),\n    json: register('json', 0xeb0f),\n    kebabVertical: register('kebab-vertical', 0xeb10),\n    key: register('key', 0xeb11),\n    law: register('law', 0xeb12),\n    lightbulbAutofix: register('lightbulb-autofix', 0xeb13),\n    linkExternal: register('link-external', 0xeb14),\n    link: register('link', 0xeb15),\n    listOrdered: register('list-ordered', 0xeb16),\n    listUnordered: register('list-unordered', 0xeb17),\n    liveShare: register('live-share', 0xeb18),\n    loading: register('loading', 0xeb19),\n    location: register('location', 0xeb1a),\n    mailRead: register('mail-read', 0xeb1b),\n    mail: register('mail', 0xeb1c),\n    markdown: register('markdown', 0xeb1d),\n    megaphone: register('megaphone', 0xeb1e),\n    mention: register('mention', 0xeb1f),\n    milestone: register('milestone', 0xeb20),\n    gitPullRequestMilestone: register('git-pull-request-milestone', 0xeb20),\n    mortarBoard: register('mortar-board', 0xeb21),\n    move: register('move', 0xeb22),\n    multipleWindows: register('multiple-windows', 0xeb23),\n    mute: register('mute', 0xeb24),\n    noNewline: register('no-newline', 0xeb25),\n    note: register('note', 0xeb26),\n    octoface: register('octoface', 0xeb27),\n    openPreview: register('open-preview', 0xeb28),\n    package: register('package', 0xeb29),\n    paintcan: register('paintcan', 0xeb2a),\n    pin: register('pin', 0xeb2b),\n    play: register('play', 0xeb2c),\n    run: register('run', 0xeb2c),\n    plug: register('plug', 0xeb2d),\n    preserveCase: register('preserve-case', 0xeb2e),\n    preview: register('preview', 0xeb2f),\n    project: register('project', 0xeb30),\n    pulse: register('pulse', 0xeb31),\n    question: register('question', 0xeb32),\n    quote: register('quote', 0xeb33),\n    radioTower: register('radio-tower', 0xeb34),\n    reactions: register('reactions', 0xeb35),\n    references: register('references', 0xeb36),\n    refresh: register('refresh', 0xeb37),\n    regex: register('regex', 0xeb38),\n    remoteExplorer: register('remote-explorer', 0xeb39),\n    remote: register('remote', 0xeb3a),\n    remove: register('remove', 0xeb3b),\n    replaceAll: register('replace-all', 0xeb3c),\n    replace: register('replace', 0xeb3d),\n    repoClone: register('repo-clone', 0xeb3e),\n    repoForcePush: register('repo-force-push', 0xeb3f),\n    repoPull: register('repo-pull', 0xeb40),\n    repoPush: register('repo-push', 0xeb41),\n    report: register('report', 0xeb42),\n    requestChanges: register('request-changes', 0xeb43),\n    rocket: register('rocket', 0xeb44),\n    rootFolderOpened: register('root-folder-opened', 0xeb45),\n    rootFolder: register('root-folder', 0xeb46),\n    rss: register('rss', 0xeb47),\n    ruby: register('ruby', 0xeb48),\n    saveAll: register('save-all', 0xeb49),\n    saveAs: register('save-as', 0xeb4a),\n    save: register('save', 0xeb4b),\n    screenFull: register('screen-full', 0xeb4c),\n    screenNormal: register('screen-normal', 0xeb4d),\n    searchStop: register('search-stop', 0xeb4e),\n    server: register('server', 0xeb50),\n    settingsGear: register('settings-gear', 0xeb51),\n    settings: register('settings', 0xeb52),\n    shield: register('shield', 0xeb53),\n    smiley: register('smiley', 0xeb54),\n    sortPrecedence: register('sort-precedence', 0xeb55),\n    splitHorizontal: register('split-horizontal', 0xeb56),\n    splitVertical: register('split-vertical', 0xeb57),\n    squirrel: register('squirrel', 0xeb58),\n    starFull: register('star-full', 0xeb59),\n    starHalf: register('star-half', 0xeb5a),\n    symbolClass: register('symbol-class', 0xeb5b),\n    symbolColor: register('symbol-color', 0xeb5c),\n    symbolConstant: register('symbol-constant', 0xeb5d),\n    symbolEnumMember: register('symbol-enum-member', 0xeb5e),\n    symbolField: register('symbol-field', 0xeb5f),\n    symbolFile: register('symbol-file', 0xeb60),\n    symbolInterface: register('symbol-interface', 0xeb61),\n    symbolKeyword: register('symbol-keyword', 0xeb62),\n    symbolMisc: register('symbol-misc', 0xeb63),\n    symbolOperator: register('symbol-operator', 0xeb64),\n    symbolProperty: register('symbol-property', 0xeb65),\n    wrench: register('wrench', 0xeb65),\n    wrenchSubaction: register('wrench-subaction', 0xeb65),\n    symbolSnippet: register('symbol-snippet', 0xeb66),\n    tasklist: register('tasklist', 0xeb67),\n    telescope: register('telescope', 0xeb68),\n    textSize: register('text-size', 0xeb69),\n    threeBars: register('three-bars', 0xeb6a),\n    thumbsdown: register('thumbsdown', 0xeb6b),\n    thumbsup: register('thumbsup', 0xeb6c),\n    tools: register('tools', 0xeb6d),\n    triangleDown: register('triangle-down', 0xeb6e),\n    triangleLeft: register('triangle-left', 0xeb6f),\n    triangleRight: register('triangle-right', 0xeb70),\n    triangleUp: register('triangle-up', 0xeb71),\n    twitter: register('twitter', 0xeb72),\n    unfold: register('unfold', 0xeb73),\n    unlock: register('unlock', 0xeb74),\n    unmute: register('unmute', 0xeb75),\n    unverified: register('unverified', 0xeb76),\n    verified: register('verified', 0xeb77),\n    versions: register('versions', 0xeb78),\n    vmActive: register('vm-active', 0xeb79),\n    vmOutline: register('vm-outline', 0xeb7a),\n    vmRunning: register('vm-running', 0xeb7b),\n    watch: register('watch', 0xeb7c),\n    whitespace: register('whitespace', 0xeb7d),\n    wholeWord: register('whole-word', 0xeb7e),\n    window: register('window', 0xeb7f),\n    wordWrap: register('word-wrap', 0xeb80),\n    zoomIn: register('zoom-in', 0xeb81),\n    zoomOut: register('zoom-out', 0xeb82),\n    listFilter: register('list-filter', 0xeb83),\n    listFlat: register('list-flat', 0xeb84),\n    listSelection: register('list-selection', 0xeb85),\n    selection: register('selection', 0xeb85),\n    listTree: register('list-tree', 0xeb86),\n    debugBreakpointFunctionUnverified: register('debug-breakpoint-function-unverified', 0xeb87),\n    debugBreakpointFunction: register('debug-breakpoint-function', 0xeb88),\n    debugBreakpointFunctionDisabled: register('debug-breakpoint-function-disabled', 0xeb88),\n    debugStackframeActive: register('debug-stackframe-active', 0xeb89),\n    circleSmallFilled: register('circle-small-filled', 0xeb8a),\n    debugStackframeDot: register('debug-stackframe-dot', 0xeb8a),\n    terminalDecorationMark: register('terminal-decoration-mark', 0xeb8a),\n    debugStackframe: register('debug-stackframe', 0xeb8b),\n    debugStackframeFocused: register('debug-stackframe-focused', 0xeb8b),\n    debugBreakpointUnsupported: register('debug-breakpoint-unsupported', 0xeb8c),\n    symbolString: register('symbol-string', 0xeb8d),\n    debugReverseContinue: register('debug-reverse-continue', 0xeb8e),\n    debugStepBack: register('debug-step-back', 0xeb8f),\n    debugRestartFrame: register('debug-restart-frame', 0xeb90),\n    debugAlt: register('debug-alt', 0xeb91),\n    callIncoming: register('call-incoming', 0xeb92),\n    callOutgoing: register('call-outgoing', 0xeb93),\n    menu: register('menu', 0xeb94),\n    expandAll: register('expand-all', 0xeb95),\n    feedback: register('feedback', 0xeb96),\n    gitPullRequestReviewer: register('git-pull-request-reviewer', 0xeb96),\n    groupByRefType: register('group-by-ref-type', 0xeb97),\n    ungroupByRefType: register('ungroup-by-ref-type', 0xeb98),\n    account: register('account', 0xeb99),\n    gitPullRequestAssignee: register('git-pull-request-assignee', 0xeb99),\n    bellDot: register('bell-dot', 0xeb9a),\n    debugConsole: register('debug-console', 0xeb9b),\n    library: register('library', 0xeb9c),\n    output: register('output', 0xeb9d),\n    runAll: register('run-all', 0xeb9e),\n    syncIgnored: register('sync-ignored', 0xeb9f),\n    pinned: register('pinned', 0xeba0),\n    githubInverted: register('github-inverted', 0xeba1),\n    serverProcess: register('server-process', 0xeba2),\n    serverEnvironment: register('server-environment', 0xeba3),\n    pass: register('pass', 0xeba4),\n    issueClosed: register('issue-closed', 0xeba4),\n    stopCircle: register('stop-circle', 0xeba5),\n    playCircle: register('play-circle', 0xeba6),\n    record: register('record', 0xeba7),\n    debugAltSmall: register('debug-alt-small', 0xeba8),\n    vmConnect: register('vm-connect', 0xeba9),\n    cloud: register('cloud', 0xebaa),\n    merge: register('merge', 0xebab),\n    export: register('export', 0xebac),\n    graphLeft: register('graph-left', 0xebad),\n    magnet: register('magnet', 0xebae),\n    notebook: register('notebook', 0xebaf),\n    redo: register('redo', 0xebb0),\n    checkAll: register('check-all', 0xebb1),\n    pinnedDirty: register('pinned-dirty', 0xebb2),\n    passFilled: register('pass-filled', 0xebb3),\n    circleLargeFilled: register('circle-large-filled', 0xebb4),\n    circleLarge: register('circle-large', 0xebb5),\n    circleLargeOutline: register('circle-large-outline', 0xebb5),\n    combine: register('combine', 0xebb6),\n    gather: register('gather', 0xebb6),\n    table: register('table', 0xebb7),\n    variableGroup: register('variable-group', 0xebb8),\n    typeHierarchy: register('type-hierarchy', 0xebb9),\n    typeHierarchySub: register('type-hierarchy-sub', 0xebba),\n    typeHierarchySuper: register('type-hierarchy-super', 0xebbb),\n    gitPullRequestCreate: register('git-pull-request-create', 0xebbc),\n    runAbove: register('run-above', 0xebbd),\n    runBelow: register('run-below', 0xebbe),\n    notebookTemplate: register('notebook-template', 0xebbf),\n    debugRerun: register('debug-rerun', 0xebc0),\n    workspaceTrusted: register('workspace-trusted', 0xebc1),\n    workspaceUntrusted: register('workspace-untrusted', 0xebc2),\n    workspaceUnknown: register('workspace-unknown', 0xebc3),\n    terminalCmd: register('terminal-cmd', 0xebc4),\n    terminalDebian: register('terminal-debian', 0xebc5),\n    terminalLinux: register('terminal-linux', 0xebc6),\n    terminalPowershell: register('terminal-powershell', 0xebc7),\n    terminalTmux: register('terminal-tmux', 0xebc8),\n    terminalUbuntu: register('terminal-ubuntu', 0xebc9),\n    terminalBash: register('terminal-bash', 0xebca),\n    arrowSwap: register('arrow-swap', 0xebcb),\n    copy: register('copy', 0xebcc),\n    personAdd: register('person-add', 0xebcd),\n    filterFilled: register('filter-filled', 0xebce),\n    wand: register('wand', 0xebcf),\n    debugLineByLine: register('debug-line-by-line', 0xebd0),\n    inspect: register('inspect', 0xebd1),\n    layers: register('layers', 0xebd2),\n    layersDot: register('layers-dot', 0xebd3),\n    layersActive: register('layers-active', 0xebd4),\n    compass: register('compass', 0xebd5),\n    compassDot: register('compass-dot', 0xebd6),\n    compassActive: register('compass-active', 0xebd7),\n    azure: register('azure', 0xebd8),\n    issueDraft: register('issue-draft', 0xebd9),\n    gitPullRequestClosed: register('git-pull-request-closed', 0xebda),\n    gitPullRequestDraft: register('git-pull-request-draft', 0xebdb),\n    debugAll: register('debug-all', 0xebdc),\n    debugCoverage: register('debug-coverage', 0xebdd),\n    runErrors: register('run-errors', 0xebde),\n    folderLibrary: register('folder-library', 0xebdf),\n    debugContinueSmall: register('debug-continue-small', 0xebe0),\n    beakerStop: register('beaker-stop', 0xebe1),\n    graphLine: register('graph-line', 0xebe2),\n    graphScatter: register('graph-scatter', 0xebe3),\n    pieChart: register('pie-chart', 0xebe4),\n    bracket: register('bracket', 0xeb0f),\n    bracketDot: register('bracket-dot', 0xebe5),\n    bracketError: register('bracket-error', 0xebe6),\n    lockSmall: register('lock-small', 0xebe7),\n    azureDevops: register('azure-devops', 0xebe8),\n    verifiedFilled: register('verified-filled', 0xebe9),\n    newline: register('newline', 0xebea),\n    layout: register('layout', 0xebeb),\n    layoutActivitybarLeft: register('layout-activitybar-left', 0xebec),\n    layoutActivitybarRight: register('layout-activitybar-right', 0xebed),\n    layoutPanelLeft: register('layout-panel-left', 0xebee),\n    layoutPanelCenter: register('layout-panel-center', 0xebef),\n    layoutPanelJustify: register('layout-panel-justify', 0xebf0),\n    layoutPanelRight: register('layout-panel-right', 0xebf1),\n    layoutPanel: register('layout-panel', 0xebf2),\n    layoutSidebarLeft: register('layout-sidebar-left', 0xebf3),\n    layoutSidebarRight: register('layout-sidebar-right', 0xebf4),\n    layoutStatusbar: register('layout-statusbar', 0xebf5),\n    layoutMenubar: register('layout-menubar', 0xebf6),\n    layoutCentered: register('layout-centered', 0xebf7),\n    target: register('target', 0xebf8),\n    indent: register('indent', 0xebf9),\n    recordSmall: register('record-small', 0xebfa),\n    errorSmall: register('error-small', 0xebfb),\n    terminalDecorationError: register('terminal-decoration-error', 0xebfb),\n    arrowCircleDown: register('arrow-circle-down', 0xebfc),\n    arrowCircleLeft: register('arrow-circle-left', 0xebfd),\n    arrowCircleRight: register('arrow-circle-right', 0xebfe),\n    arrowCircleUp: register('arrow-circle-up', 0xebff),\n    layoutSidebarRightOff: register('layout-sidebar-right-off', 0xec00),\n    layoutPanelOff: register('layout-panel-off', 0xec01),\n    layoutSidebarLeftOff: register('layout-sidebar-left-off', 0xec02),\n    blank: register('blank', 0xec03),\n    heartFilled: register('heart-filled', 0xec04),\n    map: register('map', 0xec05),\n    mapHorizontal: register('map-horizontal', 0xec05),\n    foldHorizontal: register('fold-horizontal', 0xec05),\n    mapFilled: register('map-filled', 0xec06),\n    mapHorizontalFilled: register('map-horizontal-filled', 0xec06),\n    foldHorizontalFilled: register('fold-horizontal-filled', 0xec06),\n    circleSmall: register('circle-small', 0xec07),\n    bellSlash: register('bell-slash', 0xec08),\n    bellSlashDot: register('bell-slash-dot', 0xec09),\n    commentUnresolved: register('comment-unresolved', 0xec0a),\n    gitPullRequestGoToChanges: register('git-pull-request-go-to-changes', 0xec0b),\n    gitPullRequestNewChanges: register('git-pull-request-new-changes', 0xec0c),\n    searchFuzzy: register('search-fuzzy', 0xec0d),\n    commentDraft: register('comment-draft', 0xec0e),\n    send: register('send', 0xec0f),\n    sparkle: register('sparkle', 0xec10),\n    insert: register('insert', 0xec11),\n    mic: register('mic', 0xec12),\n    thumbsdownFilled: register('thumbsdown-filled', 0xec13),\n    thumbsupFilled: register('thumbsup-filled', 0xec14),\n    coffee: register('coffee', 0xec15),\n    snake: register('snake', 0xec16),\n    game: register('game', 0xec17),\n    vr: register('vr', 0xec18),\n    chip: register('chip', 0xec19),\n    piano: register('piano', 0xec1a),\n    music: register('music', 0xec1b),\n    micFilled: register('mic-filled', 0xec1c),\n    repoFetch: register('repo-fetch', 0xec1d),\n    copilot: register('copilot', 0xec1e),\n    lightbulbSparkle: register('lightbulb-sparkle', 0xec1f),\n    robot: register('robot', 0xec20),\n    sparkleFilled: register('sparkle-filled', 0xec21),\n    diffSingle: register('diff-single', 0xec22),\n    diffMultiple: register('diff-multiple', 0xec23),\n    surroundWith: register('surround-with', 0xec24),\n    share: register('share', 0xec25),\n    gitStash: register('git-stash', 0xec26),\n    gitStashApply: register('git-stash-apply', 0xec27),\n    gitStashPop: register('git-stash-pop', 0xec28),\n    vscode: register('vscode', 0xec29),\n    vscodeInsiders: register('vscode-insiders', 0xec2a),\n    codeOss: register('code-oss', 0xec2b),\n    runCoverage: register('run-coverage', 0xec2c),\n    runAllCoverage: register('run-all-coverage', 0xec2d),\n    coverage: register('coverage', 0xec2e),\n    githubProject: register('github-project', 0xec2f),\n    mapVertical: register('map-vertical', 0xec30),\n    foldVertical: register('fold-vertical', 0xec30),\n    mapVerticalFilled: register('map-vertical-filled', 0xec31),\n    foldVerticalFilled: register('fold-vertical-filled', 0xec31),\n    goToSearch: register('go-to-search', 0xec32),\n    percentage: register('percentage', 0xec33),\n    sortPercentage: register('sort-percentage', 0xec33),\n    attach: register('attach', 0xec34),\n};\n","import { register } from './codiconsUtil.js';\nimport { codiconsLibrary } from './codiconsLibrary.js';\n/**\n * Derived icons, that could become separate icons.\n * These mappings should be moved into the mapping file in the vscode-codicons repo at some point.\n */\nexport const codiconsDerived = {\n    dialogError: register('dialog-error', 'error'),\n    dialogWarning: register('dialog-warning', 'warning'),\n    dialogInfo: register('dialog-info', 'info'),\n    dialogClose: register('dialog-close', 'close'),\n    treeItemExpanded: register('tree-item-expanded', 'chevron-down'), // collapsed is done with rotation\n    treeFilterOnTypeOn: register('tree-filter-on-type-on', 'list-filter'),\n    treeFilterOnTypeOff: register('tree-filter-on-type-off', 'list-selection'),\n    treeFilterClear: register('tree-filter-clear', 'close'),\n    treeItemLoading: register('tree-item-loading', 'loading'),\n    menuSelection: register('menu-selection', 'check'),\n    menuSubmenu: register('menu-submenu', 'chevron-right'),\n    menuBarMore: register('menubar-more', 'more'),\n    scrollbarButtonLeft: register('scrollbar-button-left', 'triangle-left'),\n    scrollbarButtonRight: register('scrollbar-button-right', 'triangle-right'),\n    scrollbarButtonUp: register('scrollbar-button-up', 'triangle-up'),\n    scrollbarButtonDown: register('scrollbar-button-down', 'triangle-down'),\n    toolBarMore: register('toolbar-more', 'more'),\n    quickInputBack: register('quick-input-back', 'arrow-left'),\n    dropDownButton: register('drop-down-button', 0xeab4),\n    symbolCustomColor: register('symbol-customcolor', 0xeb5c),\n    exportIcon: register('export', 0xebac),\n    workspaceUnspecified: register('workspace-unspecified', 0xebc3),\n    newLine: register('newline', 0xebea),\n    thumbsDownFilled: register('thumbsdown-filled', 0xec13),\n    thumbsUpFilled: register('thumbsup-filled', 0xec14),\n    gitFetch: register('git-fetch', 0xec1d),\n    lightbulbSparkleAutofix: register('lightbulb-sparkle-autofix', 0xec1f),\n    debugBreakpointPending: register('debug-breakpoint-pending', 0xebd9),\n};\n/**\n * The Codicon library is a set of default icons that are built-in in VS Code.\n *\n * In the product (outside of base) Codicons should only be used as defaults. In order to have all icons in VS Code\n * themeable, component should define new, UI component specific icons using `iconRegistry.registerIcon`.\n * In that call a Codicon can be named as default.\n */\nexport const Codicon = {\n    ...codiconsLibrary,\n    ...codiconsDerived\n};\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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, toDisposable } from '../../base/common/lifecycle.js';\nexport class TokenizationRegistry {\n    constructor() {\n        this._tokenizationSupports = new Map();\n        this._factories = new Map();\n        this._onDidChange = new Emitter();\n        this.onDidChange = this._onDidChange.event;\n        this._colorMap = null;\n    }\n    handleChange(languageIds) {\n        this._onDidChange.fire({\n            changedLanguages: languageIds,\n            changedColorMap: false\n        });\n    }\n    register(languageId, support) {\n        this._tokenizationSupports.set(languageId, support);\n        this.handleChange([languageId]);\n        return toDisposable(() => {\n            if (this._tokenizationSupports.get(languageId) !== support) {\n                return;\n            }\n            this._tokenizationSupports.delete(languageId);\n            this.handleChange([languageId]);\n        });\n    }\n    get(languageId) {\n        return this._tokenizationSupports.get(languageId) || null;\n    }\n    registerFactory(languageId, factory) {\n        this._factories.get(languageId)?.dispose();\n        const myData = new TokenizationSupportFactoryData(this, languageId, factory);\n        this._factories.set(languageId, myData);\n        return toDisposable(() => {\n            const v = this._factories.get(languageId);\n            if (!v || v !== myData) {\n                return;\n            }\n            this._factories.delete(languageId);\n            v.dispose();\n        });\n    }\n    async getOrCreate(languageId) {\n        // check first if the support is already set\n        const tokenizationSupport = this.get(languageId);\n        if (tokenizationSupport) {\n            return tokenizationSupport;\n        }\n        const factory = this._factories.get(languageId);\n        if (!factory || factory.isResolved) {\n            // no factory or factory.resolve already finished\n            return null;\n        }\n        await factory.resolve();\n        return this.get(languageId);\n    }\n    isResolved(languageId) {\n        const tokenizationSupport = this.get(languageId);\n        if (tokenizationSupport) {\n            return true;\n        }\n        const factory = this._factories.get(languageId);\n        if (!factory || factory.isResolved) {\n            return true;\n        }\n        return false;\n    }\n    setColorMap(colorMap) {\n        this._colorMap = colorMap;\n        this._onDidChange.fire({\n            changedLanguages: Array.from(this._tokenizationSupports.keys()),\n            changedColorMap: true\n        });\n    }\n    getColorMap() {\n        return this._colorMap;\n    }\n    getDefaultBackground() {\n        if (this._colorMap && this._colorMap.length > 2 /* ColorId.DefaultBackground */) {\n            return this._colorMap[2 /* ColorId.DefaultBackground */];\n        }\n        return null;\n    }\n}\nclass TokenizationSupportFactoryData extends Disposable {\n    get isResolved() {\n        return this._isResolved;\n    }\n    constructor(_registry, _languageId, _factory) {\n        super();\n        this._registry = _registry;\n        this._languageId = _languageId;\n        this._factory = _factory;\n        this._isDisposed = false;\n        this._resolvePromise = null;\n        this._isResolved = false;\n    }\n    dispose() {\n        this._isDisposed = true;\n        super.dispose();\n    }\n    async resolve() {\n        if (!this._resolvePromise) {\n            this._resolvePromise = this._create();\n        }\n        return this._resolvePromise;\n    }\n    async _create() {\n        const value = await this._factory.tokenizationSupport;\n        this._isResolved = true;\n        if (value && !this._isDisposed) {\n            this._register(this._registry.register(this._languageId, value));\n        }\n    }\n}\n","import { Codicon } from '../../base/common/codicons.js';\nimport { URI } from '../../base/common/uri.js';\nimport { Range } from './core/range.js';\nimport { TokenizationRegistry as TokenizationRegistryImpl } from './tokenizationRegistry.js';\nimport { localize } from '../../nls.js';\nexport class Token {\n    constructor(offset, type, language) {\n        this.offset = offset;\n        this.type = type;\n        this.language = language;\n        this._tokenBrand = undefined;\n    }\n    toString() {\n        return '(' + this.offset + ', ' + this.type + ')';\n    }\n}\n/**\n * @internal\n */\nexport class TokenizationResult {\n    constructor(tokens, endState) {\n        this.tokens = tokens;\n        this.endState = endState;\n        this._tokenizationResultBrand = undefined;\n    }\n}\n/**\n * @internal\n */\nexport class EncodedTokenizationResult {\n    constructor(\n    /**\n     * The tokens in binary format. Each token occupies two array indices. For token i:\n     *  - at offset 2*i => startIndex\n     *  - at offset 2*i + 1 => metadata\n     *\n     */\n    tokens, endState) {\n        this.tokens = tokens;\n        this.endState = endState;\n        this._encodedTokenizationResultBrand = undefined;\n    }\n}\nexport var HoverVerbosityAction;\n(function (HoverVerbosityAction) {\n    /**\n     * Increase the verbosity of the hover\n     */\n    HoverVerbosityAction[HoverVerbosityAction[\"Increase\"] = 0] = \"Increase\";\n    /**\n     * Decrease the verbosity of the hover\n     */\n    HoverVerbosityAction[HoverVerbosityAction[\"Decrease\"] = 1] = \"Decrease\";\n})(HoverVerbosityAction || (HoverVerbosityAction = {}));\n/**\n * @internal\n */\nexport var CompletionItemKinds;\n(function (CompletionItemKinds) {\n    const byKind = new Map();\n    byKind.set(0 /* CompletionItemKind.Method */, Codicon.symbolMethod);\n    byKind.set(1 /* CompletionItemKind.Function */, Codicon.symbolFunction);\n    byKind.set(2 /* CompletionItemKind.Constructor */, Codicon.symbolConstructor);\n    byKind.set(3 /* CompletionItemKind.Field */, Codicon.symbolField);\n    byKind.set(4 /* CompletionItemKind.Variable */, Codicon.symbolVariable);\n    byKind.set(5 /* CompletionItemKind.Class */, Codicon.symbolClass);\n    byKind.set(6 /* CompletionItemKind.Struct */, Codicon.symbolStruct);\n    byKind.set(7 /* CompletionItemKind.Interface */, Codicon.symbolInterface);\n    byKind.set(8 /* CompletionItemKind.Module */, Codicon.symbolModule);\n    byKind.set(9 /* CompletionItemKind.Property */, Codicon.symbolProperty);\n    byKind.set(10 /* CompletionItemKind.Event */, Codicon.symbolEvent);\n    byKind.set(11 /* CompletionItemKind.Operator */, Codicon.symbolOperator);\n    byKind.set(12 /* CompletionItemKind.Unit */, Codicon.symbolUnit);\n    byKind.set(13 /* CompletionItemKind.Value */, Codicon.symbolValue);\n    byKind.set(15 /* CompletionItemKind.Enum */, Codicon.symbolEnum);\n    byKind.set(14 /* CompletionItemKind.Constant */, Codicon.symbolConstant);\n    byKind.set(15 /* CompletionItemKind.Enum */, Codicon.symbolEnum);\n    byKind.set(16 /* CompletionItemKind.EnumMember */, Codicon.symbolEnumMember);\n    byKind.set(17 /* CompletionItemKind.Keyword */, Codicon.symbolKeyword);\n    byKind.set(27 /* CompletionItemKind.Snippet */, Codicon.symbolSnippet);\n    byKind.set(18 /* CompletionItemKind.Text */, Codicon.symbolText);\n    byKind.set(19 /* CompletionItemKind.Color */, Codicon.symbolColor);\n    byKind.set(20 /* CompletionItemKind.File */, Codicon.symbolFile);\n    byKind.set(21 /* CompletionItemKind.Reference */, Codicon.symbolReference);\n    byKind.set(22 /* CompletionItemKind.Customcolor */, Codicon.symbolCustomColor);\n    byKind.set(23 /* CompletionItemKind.Folder */, Codicon.symbolFolder);\n    byKind.set(24 /* CompletionItemKind.TypeParameter */, Codicon.symbolTypeParameter);\n    byKind.set(25 /* CompletionItemKind.User */, Codicon.account);\n    byKind.set(26 /* CompletionItemKind.Issue */, Codicon.issues);\n    /**\n     * @internal\n     */\n    function toIcon(kind) {\n        let codicon = byKind.get(kind);\n        if (!codicon) {\n            console.info('No codicon found for CompletionItemKind ' + kind);\n            codicon = Codicon.symbolProperty;\n        }\n        return codicon;\n    }\n    CompletionItemKinds.toIcon = toIcon;\n    const data = new Map();\n    data.set('method', 0 /* CompletionItemKind.Method */);\n    data.set('function', 1 /* CompletionItemKind.Function */);\n    data.set('constructor', 2 /* CompletionItemKind.Constructor */);\n    data.set('field', 3 /* CompletionItemKind.Field */);\n    data.set('variable', 4 /* CompletionItemKind.Variable */);\n    data.set('class', 5 /* CompletionItemKind.Class */);\n    data.set('struct', 6 /* CompletionItemKind.Struct */);\n    data.set('interface', 7 /* CompletionItemKind.Interface */);\n    data.set('module', 8 /* CompletionItemKind.Module */);\n    data.set('property', 9 /* CompletionItemKind.Property */);\n    data.set('event', 10 /* CompletionItemKind.Event */);\n    data.set('operator', 11 /* CompletionItemKind.Operator */);\n    data.set('unit', 12 /* CompletionItemKind.Unit */);\n    data.set('value', 13 /* CompletionItemKind.Value */);\n    data.set('constant', 14 /* CompletionItemKind.Constant */);\n    data.set('enum', 15 /* CompletionItemKind.Enum */);\n    data.set('enum-member', 16 /* CompletionItemKind.EnumMember */);\n    data.set('enumMember', 16 /* CompletionItemKind.EnumMember */);\n    data.set('keyword', 17 /* CompletionItemKind.Keyword */);\n    data.set('snippet', 27 /* CompletionItemKind.Snippet */);\n    data.set('text', 18 /* CompletionItemKind.Text */);\n    data.set('color', 19 /* CompletionItemKind.Color */);\n    data.set('file', 20 /* CompletionItemKind.File */);\n    data.set('reference', 21 /* CompletionItemKind.Reference */);\n    data.set('customcolor', 22 /* CompletionItemKind.Customcolor */);\n    data.set('folder', 23 /* CompletionItemKind.Folder */);\n    data.set('type-parameter', 24 /* CompletionItemKind.TypeParameter */);\n    data.set('typeParameter', 24 /* CompletionItemKind.TypeParameter */);\n    data.set('account', 25 /* CompletionItemKind.User */);\n    data.set('issue', 26 /* CompletionItemKind.Issue */);\n    /**\n     * @internal\n     */\n    function fromString(value, strict) {\n        let res = data.get(value);\n        if (typeof res === 'undefined' && !strict) {\n            res = 9 /* CompletionItemKind.Property */;\n        }\n        return res;\n    }\n    CompletionItemKinds.fromString = fromString;\n})(CompletionItemKinds || (CompletionItemKinds = {}));\n/**\n * How an {@link InlineCompletionsProvider inline completion provider} was triggered.\n */\nexport var InlineCompletionTriggerKind;\n(function (InlineCompletionTriggerKind) {\n    /**\n     * Completion was triggered automatically while editing.\n     * It is sufficient to return a single completion item in this case.\n     */\n    InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Automatic\"] = 0] = \"Automatic\";\n    /**\n     * Completion was triggered explicitly by a user gesture.\n     * Return multiple completion items to enable cycling through them.\n     */\n    InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Explicit\"] = 1] = \"Explicit\";\n})(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {}));\nexport class SelectedSuggestionInfo {\n    constructor(range, text, completionKind, isSnippetText) {\n        this.range = range;\n        this.text = text;\n        this.completionKind = completionKind;\n        this.isSnippetText = isSnippetText;\n    }\n    equals(other) {\n        return Range.lift(this.range).equalsRange(other.range)\n            && this.text === other.text\n            && this.completionKind === other.completionKind\n            && this.isSnippetText === other.isSnippetText;\n    }\n}\n/**\n * @internal\n */\nexport var DocumentPasteTriggerKind;\n(function (DocumentPasteTriggerKind) {\n    DocumentPasteTriggerKind[DocumentPasteTriggerKind[\"Automatic\"] = 0] = \"Automatic\";\n    DocumentPasteTriggerKind[DocumentPasteTriggerKind[\"PasteAs\"] = 1] = \"PasteAs\";\n})(DocumentPasteTriggerKind || (DocumentPasteTriggerKind = {}));\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 const symbolKindNames = {\n    [17 /* SymbolKind.Array */]: localize('Array', \"array\"),\n    [16 /* SymbolKind.Boolean */]: localize('Boolean', \"boolean\"),\n    [4 /* SymbolKind.Class */]: localize('Class', \"class\"),\n    [13 /* SymbolKind.Constant */]: localize('Constant', \"constant\"),\n    [8 /* SymbolKind.Constructor */]: localize('Constructor', \"constructor\"),\n    [9 /* SymbolKind.Enum */]: localize('Enum', \"enumeration\"),\n    [21 /* SymbolKind.EnumMember */]: localize('EnumMember', \"enumeration member\"),\n    [23 /* SymbolKind.Event */]: localize('Event', \"event\"),\n    [7 /* SymbolKind.Field */]: localize('Field', \"field\"),\n    [0 /* SymbolKind.File */]: localize('File', \"file\"),\n    [11 /* SymbolKind.Function */]: localize('Function', \"function\"),\n    [10 /* SymbolKind.Interface */]: localize('Interface', \"interface\"),\n    [19 /* SymbolKind.Key */]: localize('Key', \"key\"),\n    [5 /* SymbolKind.Method */]: localize('Method', \"method\"),\n    [1 /* SymbolKind.Module */]: localize('Module', \"module\"),\n    [2 /* SymbolKind.Namespace */]: localize('Namespace', \"namespace\"),\n    [20 /* SymbolKind.Null */]: localize('Null', \"null\"),\n    [15 /* SymbolKind.Number */]: localize('Number', \"number\"),\n    [18 /* SymbolKind.Object */]: localize('Object', \"object\"),\n    [24 /* SymbolKind.Operator */]: localize('Operator', \"operator\"),\n    [3 /* SymbolKind.Package */]: localize('Package', \"package\"),\n    [6 /* SymbolKind.Property */]: localize('Property', \"property\"),\n    [14 /* SymbolKind.String */]: localize('String', \"string\"),\n    [22 /* SymbolKind.Struct */]: localize('Struct', \"struct\"),\n    [25 /* SymbolKind.TypeParameter */]: localize('TypeParameter', \"type parameter\"),\n    [12 /* SymbolKind.Variable */]: localize('Variable', \"variable\"),\n};\n/**\n * @internal\n */\nexport function getAriaLabelForSymbol(symbolName, kind) {\n    return localize('symbolAriaLabel', '{0} ({1})', symbolName, symbolKindNames[kind]);\n}\n/**\n * @internal\n */\nexport var SymbolKinds;\n(function (SymbolKinds) {\n    const byKind = new Map();\n    byKind.set(0 /* SymbolKind.File */, Codicon.symbolFile);\n    byKind.set(1 /* SymbolKind.Module */, Codicon.symbolModule);\n    byKind.set(2 /* SymbolKind.Namespace */, Codicon.symbolNamespace);\n    byKind.set(3 /* SymbolKind.Package */, Codicon.symbolPackage);\n    byKind.set(4 /* SymbolKind.Class */, Codicon.symbolClass);\n    byKind.set(5 /* SymbolKind.Method */, Codicon.symbolMethod);\n    byKind.set(6 /* SymbolKind.Property */, Codicon.symbolProperty);\n    byKind.set(7 /* SymbolKind.Field */, Codicon.symbolField);\n    byKind.set(8 /* SymbolKind.Constructor */, Codicon.symbolConstructor);\n    byKind.set(9 /* SymbolKind.Enum */, Codicon.symbolEnum);\n    byKind.set(10 /* SymbolKind.Interface */, Codicon.symbolInterface);\n    byKind.set(11 /* SymbolKind.Function */, Codicon.symbolFunction);\n    byKind.set(12 /* SymbolKind.Variable */, Codicon.symbolVariable);\n    byKind.set(13 /* SymbolKind.Constant */, Codicon.symbolConstant);\n    byKind.set(14 /* SymbolKind.String */, Codicon.symbolString);\n    byKind.set(15 /* SymbolKind.Number */, Codicon.symbolNumber);\n    byKind.set(16 /* SymbolKind.Boolean */, Codicon.symbolBoolean);\n    byKind.set(17 /* SymbolKind.Array */, Codicon.symbolArray);\n    byKind.set(18 /* SymbolKind.Object */, Codicon.symbolObject);\n    byKind.set(19 /* SymbolKind.Key */, Codicon.symbolKey);\n    byKind.set(20 /* SymbolKind.Null */, Codicon.symbolNull);\n    byKind.set(21 /* SymbolKind.EnumMember */, Codicon.symbolEnumMember);\n    byKind.set(22 /* SymbolKind.Struct */, Codicon.symbolStruct);\n    byKind.set(23 /* SymbolKind.Event */, Codicon.symbolEvent);\n    byKind.set(24 /* SymbolKind.Operator */, Codicon.symbolOperator);\n    byKind.set(25 /* SymbolKind.TypeParameter */, Codicon.symbolTypeParameter);\n    /**\n     * @internal\n     */\n    function toIcon(kind) {\n        let icon = byKind.get(kind);\n        if (!icon) {\n            console.info('No codicon found for SymbolKind ' + kind);\n            icon = Codicon.symbolProperty;\n        }\n        return icon;\n    }\n    SymbolKinds.toIcon = toIcon;\n})(SymbolKinds || (SymbolKinds = {}));\n/** @internal */\nexport class TextEdit {\n}\nexport class FoldingRangeKind {\n    /**\n     * Kind for folding range representing a comment. The value of the kind is 'comment'.\n     */\n    static { this.Comment = new FoldingRangeKind('comment'); }\n    /**\n     * Kind for folding range representing a import. The value of the kind is 'imports'.\n     */\n    static { this.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     */\n    static { this.Region = new FoldingRangeKind('region'); }\n    /**\n     * Returns a {@link FoldingRangeKind} for the given value.\n     *\n     * @param value of the kind.\n     */\n    static fromValue(value) {\n        switch (value) {\n            case 'comment': return FoldingRangeKind.Comment;\n            case 'imports': return FoldingRangeKind.Imports;\n            case 'region': return FoldingRangeKind.Region;\n        }\n        return new FoldingRangeKind(value);\n    }\n    /**\n     * Creates a new {@link FoldingRangeKind}.\n     *\n     * @param value of the kind.\n     */\n    constructor(value) {\n        this.value = value;\n    }\n}\nexport var NewSymbolNameTag;\n(function (NewSymbolNameTag) {\n    NewSymbolNameTag[NewSymbolNameTag[\"AIGenerated\"] = 1] = \"AIGenerated\";\n})(NewSymbolNameTag || (NewSymbolNameTag = {}));\nexport var NewSymbolNameTriggerKind;\n(function (NewSymbolNameTriggerKind) {\n    NewSymbolNameTriggerKind[NewSymbolNameTriggerKind[\"Invoke\"] = 0] = \"Invoke\";\n    NewSymbolNameTriggerKind[NewSymbolNameTriggerKind[\"Automatic\"] = 1] = \"Automatic\";\n})(NewSymbolNameTriggerKind || (NewSymbolNameTriggerKind = {}));\n/**\n * @internal\n */\nexport var Command;\n(function (Command) {\n    /**\n     * @internal\n     */\n    function is(obj) {\n        if (!obj || typeof obj !== 'object') {\n            return false;\n        }\n        return typeof obj.id === 'string' &&\n            typeof obj.title === 'string';\n    }\n    Command.is = is;\n})(Command || (Command = {}));\nexport var InlayHintKind;\n(function (InlayHintKind) {\n    InlayHintKind[InlayHintKind[\"Type\"] = 1] = \"Type\";\n    InlayHintKind[InlayHintKind[\"Parameter\"] = 2] = \"Parameter\";\n})(InlayHintKind || (InlayHintKind = {}));\n/**\n * @internal\n */\nexport class LazyTokenizationSupport {\n    constructor(createSupport) {\n        this.createSupport = createSupport;\n        this._tokenizationSupport = null;\n    }\n    dispose() {\n        if (this._tokenizationSupport) {\n            this._tokenizationSupport.then((support) => {\n                if (support) {\n                    support.dispose();\n                }\n            });\n        }\n    }\n    get tokenizationSupport() {\n        if (!this._tokenizationSupport) {\n            this._tokenizationSupport = this.createSupport();\n        }\n        return this._tokenizationSupport;\n    }\n}\n/**\n * @internal\n */\nexport const TokenizationRegistry = new TokenizationRegistryImpl();\n/**\n * @internal\n */\nexport const TreeSitterTokenizationRegistry = new TokenizationRegistryImpl();\nexport var InlineEditTriggerKind;\n(function (InlineEditTriggerKind) {\n    InlineEditTriggerKind[InlineEditTriggerKind[\"Invoke\"] = 0] = \"Invoke\";\n    InlineEditTriggerKind[InlineEditTriggerKind[\"Automatic\"] = 1] = \"Automatic\";\n})(InlineEditTriggerKind || (InlineEditTriggerKind = {}));\n","/*---------------------------------------------------------------------------------------------\n *  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 CodeActionTriggerType;\n(function (CodeActionTriggerType) {\n    CodeActionTriggerType[CodeActionTriggerType[\"Invoke\"] = 1] = \"Invoke\";\n    CodeActionTriggerType[CodeActionTriggerType[\"Auto\"] = 2] = \"Auto\";\n})(CodeActionTriggerType || (CodeActionTriggerType = {}));\nexport var CompletionItemInsertTextRule;\n(function (CompletionItemInsertTextRule) {\n    CompletionItemInsertTextRule[CompletionItemInsertTextRule[\"None\"] = 0] = \"None\";\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[\"ariaRequired\"] = 5] = \"ariaRequired\";\n    EditorOption[EditorOption[\"autoClosingBrackets\"] = 6] = \"autoClosingBrackets\";\n    EditorOption[EditorOption[\"autoClosingComments\"] = 7] = \"autoClosingComments\";\n    EditorOption[EditorOption[\"screenReaderAnnounceInlineSuggestion\"] = 8] = \"screenReaderAnnounceInlineSuggestion\";\n    EditorOption[EditorOption[\"autoClosingDelete\"] = 9] = \"autoClosingDelete\";\n    EditorOption[EditorOption[\"autoClosingOvertype\"] = 10] = \"autoClosingOvertype\";\n    EditorOption[EditorOption[\"autoClosingQuotes\"] = 11] = \"autoClosingQuotes\";\n    EditorOption[EditorOption[\"autoIndent\"] = 12] = \"autoIndent\";\n    EditorOption[EditorOption[\"automaticLayout\"] = 13] = \"automaticLayout\";\n    EditorOption[EditorOption[\"autoSurround\"] = 14] = \"autoSurround\";\n    EditorOption[EditorOption[\"bracketPairColorization\"] = 15] = \"bracketPairColorization\";\n    EditorOption[EditorOption[\"guides\"] = 16] = \"guides\";\n    EditorOption[EditorOption[\"codeLens\"] = 17] = \"codeLens\";\n    EditorOption[EditorOption[\"codeLensFontFamily\"] = 18] = \"codeLensFontFamily\";\n    EditorOption[EditorOption[\"codeLensFontSize\"] = 19] = \"codeLensFontSize\";\n    EditorOption[EditorOption[\"colorDecorators\"] = 20] = \"colorDecorators\";\n    EditorOption[EditorOption[\"colorDecoratorsLimit\"] = 21] = \"colorDecoratorsLimit\";\n    EditorOption[EditorOption[\"columnSelection\"] = 22] = \"columnSelection\";\n    EditorOption[EditorOption[\"comments\"] = 23] = \"comments\";\n    EditorOption[EditorOption[\"contextmenu\"] = 24] = \"contextmenu\";\n    EditorOption[EditorOption[\"copyWithSyntaxHighlighting\"] = 25] = \"copyWithSyntaxHighlighting\";\n    EditorOption[EditorOption[\"cursorBlinking\"] = 26] = \"cursorBlinking\";\n    EditorOption[EditorOption[\"cursorSmoothCaretAnimation\"] = 27] = \"cursorSmoothCaretAnimation\";\n    EditorOption[EditorOption[\"cursorStyle\"] = 28] = \"cursorStyle\";\n    EditorOption[EditorOption[\"cursorSurroundingLines\"] = 29] = \"cursorSurroundingLines\";\n    EditorOption[EditorOption[\"cursorSurroundingLinesStyle\"] = 30] = \"cursorSurroundingLinesStyle\";\n    EditorOption[EditorOption[\"cursorWidth\"] = 31] = \"cursorWidth\";\n    EditorOption[EditorOption[\"disableLayerHinting\"] = 32] = \"disableLayerHinting\";\n    EditorOption[EditorOption[\"disableMonospaceOptimizations\"] = 33] = \"disableMonospaceOptimizations\";\n    EditorOption[EditorOption[\"domReadOnly\"] = 34] = \"domReadOnly\";\n    EditorOption[EditorOption[\"dragAndDrop\"] = 35] = \"dragAndDrop\";\n    EditorOption[EditorOption[\"dropIntoEditor\"] = 36] = \"dropIntoEditor\";\n    EditorOption[EditorOption[\"emptySelectionClipboard\"] = 37] = \"emptySelectionClipboard\";\n    EditorOption[EditorOption[\"experimentalWhitespaceRendering\"] = 38] = \"experimentalWhitespaceRendering\";\n    EditorOption[EditorOption[\"extraEditorClassName\"] = 39] = \"extraEditorClassName\";\n    EditorOption[EditorOption[\"fastScrollSensitivity\"] = 40] = \"fastScrollSensitivity\";\n    EditorOption[EditorOption[\"find\"] = 41] = \"find\";\n    EditorOption[EditorOption[\"fixedOverflowWidgets\"] = 42] = \"fixedOverflowWidgets\";\n    EditorOption[EditorOption[\"folding\"] = 43] = \"folding\";\n    EditorOption[EditorOption[\"foldingStrategy\"] = 44] = \"foldingStrategy\";\n    EditorOption[EditorOption[\"foldingHighlight\"] = 45] = \"foldingHighlight\";\n    EditorOption[EditorOption[\"foldingImportsByDefault\"] = 46] = \"foldingImportsByDefault\";\n    EditorOption[EditorOption[\"foldingMaximumRegions\"] = 47] = \"foldingMaximumRegions\";\n    EditorOption[EditorOption[\"unfoldOnClickAfterEndOfLine\"] = 48] = \"unfoldOnClickAfterEndOfLine\";\n    EditorOption[EditorOption[\"fontFamily\"] = 49] = \"fontFamily\";\n    EditorOption[EditorOption[\"fontInfo\"] = 50] = \"fontInfo\";\n    EditorOption[EditorOption[\"fontLigatures\"] = 51] = \"fontLigatures\";\n    EditorOption[EditorOption[\"fontSize\"] = 52] = \"fontSize\";\n    EditorOption[EditorOption[\"fontWeight\"] = 53] = \"fontWeight\";\n    EditorOption[EditorOption[\"fontVariations\"] = 54] = \"fontVariations\";\n    EditorOption[EditorOption[\"formatOnPaste\"] = 55] = \"formatOnPaste\";\n    EditorOption[EditorOption[\"formatOnType\"] = 56] = \"formatOnType\";\n    EditorOption[EditorOption[\"glyphMargin\"] = 57] = \"glyphMargin\";\n    EditorOption[EditorOption[\"gotoLocation\"] = 58] = \"gotoLocation\";\n    EditorOption[EditorOption[\"hideCursorInOverviewRuler\"] = 59] = \"hideCursorInOverviewRuler\";\n    EditorOption[EditorOption[\"hover\"] = 60] = \"hover\";\n    EditorOption[EditorOption[\"inDiffEditor\"] = 61] = \"inDiffEditor\";\n    EditorOption[EditorOption[\"inlineSuggest\"] = 62] = \"inlineSuggest\";\n    EditorOption[EditorOption[\"inlineEdit\"] = 63] = \"inlineEdit\";\n    EditorOption[EditorOption[\"letterSpacing\"] = 64] = \"letterSpacing\";\n    EditorOption[EditorOption[\"lightbulb\"] = 65] = \"lightbulb\";\n    EditorOption[EditorOption[\"lineDecorationsWidth\"] = 66] = \"lineDecorationsWidth\";\n    EditorOption[EditorOption[\"lineHeight\"] = 67] = \"lineHeight\";\n    EditorOption[EditorOption[\"lineNumbers\"] = 68] = \"lineNumbers\";\n    EditorOption[EditorOption[\"lineNumbersMinChars\"] = 69] = \"lineNumbersMinChars\";\n    EditorOption[EditorOption[\"linkedEditing\"] = 70] = \"linkedEditing\";\n    EditorOption[EditorOption[\"links\"] = 71] = \"links\";\n    EditorOption[EditorOption[\"matchBrackets\"] = 72] = \"matchBrackets\";\n    EditorOption[EditorOption[\"minimap\"] = 73] = \"minimap\";\n    EditorOption[EditorOption[\"mouseStyle\"] = 74] = \"mouseStyle\";\n    EditorOption[EditorOption[\"mouseWheelScrollSensitivity\"] = 75] = \"mouseWheelScrollSensitivity\";\n    EditorOption[EditorOption[\"mouseWheelZoom\"] = 76] = \"mouseWheelZoom\";\n    EditorOption[EditorOption[\"multiCursorMergeOverlapping\"] = 77] = \"multiCursorMergeOverlapping\";\n    EditorOption[EditorOption[\"multiCursorModifier\"] = 78] = \"multiCursorModifier\";\n    EditorOption[EditorOption[\"multiCursorPaste\"] = 79] = \"multiCursorPaste\";\n    EditorOption[EditorOption[\"multiCursorLimit\"] = 80] = \"multiCursorLimit\";\n    EditorOption[EditorOption[\"occurrencesHighlight\"] = 81] = \"occurrencesHighlight\";\n    EditorOption[EditorOption[\"overviewRulerBorder\"] = 82] = \"overviewRulerBorder\";\n    EditorOption[EditorOption[\"overviewRulerLanes\"] = 83] = \"overviewRulerLanes\";\n    EditorOption[EditorOption[\"padding\"] = 84] = \"padding\";\n    EditorOption[EditorOption[\"pasteAs\"] = 85] = \"pasteAs\";\n    EditorOption[EditorOption[\"parameterHints\"] = 86] = \"parameterHints\";\n    EditorOption[EditorOption[\"peekWidgetDefaultFocus\"] = 87] = \"peekWidgetDefaultFocus\";\n    EditorOption[EditorOption[\"placeholder\"] = 88] = \"placeholder\";\n    EditorOption[EditorOption[\"definitionLinkOpensInPeek\"] = 89] = \"definitionLinkOpensInPeek\";\n    EditorOption[EditorOption[\"quickSuggestions\"] = 90] = \"quickSuggestions\";\n    EditorOption[EditorOption[\"quickSuggestionsDelay\"] = 91] = \"quickSuggestionsDelay\";\n    EditorOption[EditorOption[\"readOnly\"] = 92] = \"readOnly\";\n    EditorOption[EditorOption[\"readOnlyMessage\"] = 93] = \"readOnlyMessage\";\n    EditorOption[EditorOption[\"renameOnType\"] = 94] = \"renameOnType\";\n    EditorOption[EditorOption[\"renderControlCharacters\"] = 95] = \"renderControlCharacters\";\n    EditorOption[EditorOption[\"renderFinalNewline\"] = 96] = \"renderFinalNewline\";\n    EditorOption[EditorOption[\"renderLineHighlight\"] = 97] = \"renderLineHighlight\";\n    EditorOption[EditorOption[\"renderLineHighlightOnlyWhenFocus\"] = 98] = \"renderLineHighlightOnlyWhenFocus\";\n    EditorOption[EditorOption[\"renderValidationDecorations\"] = 99] = \"renderValidationDecorations\";\n    EditorOption[EditorOption[\"renderWhitespace\"] = 100] = \"renderWhitespace\";\n    EditorOption[EditorOption[\"revealHorizontalRightPadding\"] = 101] = \"revealHorizontalRightPadding\";\n    EditorOption[EditorOption[\"roundedSelection\"] = 102] = \"roundedSelection\";\n    EditorOption[EditorOption[\"rulers\"] = 103] = \"rulers\";\n    EditorOption[EditorOption[\"scrollbar\"] = 104] = \"scrollbar\";\n    EditorOption[EditorOption[\"scrollBeyondLastColumn\"] = 105] = \"scrollBeyondLastColumn\";\n    EditorOption[EditorOption[\"scrollBeyondLastLine\"] = 106] = \"scrollBeyondLastLine\";\n    EditorOption[EditorOption[\"scrollPredominantAxis\"] = 107] = \"scrollPredominantAxis\";\n    EditorOption[EditorOption[\"selectionClipboard\"] = 108] = \"selectionClipboard\";\n    EditorOption[EditorOption[\"selectionHighlight\"] = 109] = \"selectionHighlight\";\n    EditorOption[EditorOption[\"selectOnLineNumbers\"] = 110] = \"selectOnLineNumbers\";\n    EditorOption[EditorOption[\"showFoldingControls\"] = 111] = \"showFoldingControls\";\n    EditorOption[EditorOption[\"showUnused\"] = 112] = \"showUnused\";\n    EditorOption[EditorOption[\"snippetSuggestions\"] = 113] = \"snippetSuggestions\";\n    EditorOption[EditorOption[\"smartSelect\"] = 114] = \"smartSelect\";\n    EditorOption[EditorOption[\"smoothScrolling\"] = 115] = \"smoothScrolling\";\n    EditorOption[EditorOption[\"stickyScroll\"] = 116] = \"stickyScroll\";\n    EditorOption[EditorOption[\"stickyTabStops\"] = 117] = \"stickyTabStops\";\n    EditorOption[EditorOption[\"stopRenderingLineAfter\"] = 118] = \"stopRenderingLineAfter\";\n    EditorOption[EditorOption[\"suggest\"] = 119] = \"suggest\";\n    EditorOption[EditorOption[\"suggestFontSize\"] = 120] = \"suggestFontSize\";\n    EditorOption[EditorOption[\"suggestLineHeight\"] = 121] = \"suggestLineHeight\";\n    EditorOption[EditorOption[\"suggestOnTriggerCharacters\"] = 122] = \"suggestOnTriggerCharacters\";\n    EditorOption[EditorOption[\"suggestSelection\"] = 123] = \"suggestSelection\";\n    EditorOption[EditorOption[\"tabCompletion\"] = 124] = \"tabCompletion\";\n    EditorOption[EditorOption[\"tabIndex\"] = 125] = \"tabIndex\";\n    EditorOption[EditorOption[\"unicodeHighlighting\"] = 126] = \"unicodeHighlighting\";\n    EditorOption[EditorOption[\"unusualLineTerminators\"] = 127] = \"unusualLineTerminators\";\n    EditorOption[EditorOption[\"useShadowDOM\"] = 128] = \"useShadowDOM\";\n    EditorOption[EditorOption[\"useTabStops\"] = 129] = \"useTabStops\";\n    EditorOption[EditorOption[\"wordBreak\"] = 130] = \"wordBreak\";\n    EditorOption[EditorOption[\"wordSegmenterLocales\"] = 131] = \"wordSegmenterLocales\";\n    EditorOption[EditorOption[\"wordSeparators\"] = 132] = \"wordSeparators\";\n    EditorOption[EditorOption[\"wordWrap\"] = 133] = \"wordWrap\";\n    EditorOption[EditorOption[\"wordWrapBreakAfterCharacters\"] = 134] = \"wordWrapBreakAfterCharacters\";\n    EditorOption[EditorOption[\"wordWrapBreakBeforeCharacters\"] = 135] = \"wordWrapBreakBeforeCharacters\";\n    EditorOption[EditorOption[\"wordWrapColumn\"] = 136] = \"wordWrapColumn\";\n    EditorOption[EditorOption[\"wordWrapOverride1\"] = 137] = \"wordWrapOverride1\";\n    EditorOption[EditorOption[\"wordWrapOverride2\"] = 138] = \"wordWrapOverride2\";\n    EditorOption[EditorOption[\"wrappingIndent\"] = 139] = \"wrappingIndent\";\n    EditorOption[EditorOption[\"wrappingStrategy\"] = 140] = \"wrappingStrategy\";\n    EditorOption[EditorOption[\"showDeprecated\"] = 141] = \"showDeprecated\";\n    EditorOption[EditorOption[\"inlayHints\"] = 142] = \"inlayHints\";\n    EditorOption[EditorOption[\"editorClassName\"] = 143] = \"editorClassName\";\n    EditorOption[EditorOption[\"pixelRatio\"] = 144] = \"pixelRatio\";\n    EditorOption[EditorOption[\"tabFocusMode\"] = 145] = \"tabFocusMode\";\n    EditorOption[EditorOption[\"layoutInfo\"] = 146] = \"layoutInfo\";\n    EditorOption[EditorOption[\"wrappingInfo\"] = 147] = \"wrappingInfo\";\n    EditorOption[EditorOption[\"defaultColorDecorators\"] = 148] = \"defaultColorDecorators\";\n    EditorOption[EditorOption[\"colorDecoratorsActivatedOn\"] = 149] = \"colorDecoratorsActivatedOn\";\n    EditorOption[EditorOption[\"inlineCompletionsAccessibilityVerbose\"] = 150] = \"inlineCompletionsAccessibilityVerbose\";\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 * Vertical Lane in the glyph margin of the editor.\n */\nexport var GlyphMarginLane;\n(function (GlyphMarginLane) {\n    GlyphMarginLane[GlyphMarginLane[\"Left\"] = 1] = \"Left\";\n    GlyphMarginLane[GlyphMarginLane[\"Center\"] = 2] = \"Center\";\n    GlyphMarginLane[GlyphMarginLane[\"Right\"] = 3] = \"Right\";\n})(GlyphMarginLane || (GlyphMarginLane = {}));\nexport var HoverVerbosityAction;\n(function (HoverVerbosityAction) {\n    /**\n     * Increase the verbosity of the hover\n     */\n    HoverVerbosityAction[HoverVerbosityAction[\"Increase\"] = 0] = \"Increase\";\n    /**\n     * Decrease the verbosity of the hover\n     */\n    HoverVerbosityAction[HoverVerbosityAction[\"Decrease\"] = 1] = \"Decrease\";\n})(HoverVerbosityAction || (HoverVerbosityAction = {}));\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 InjectedTextCursorStops;\n(function (InjectedTextCursorStops) {\n    InjectedTextCursorStops[InjectedTextCursorStops[\"Both\"] = 0] = \"Both\";\n    InjectedTextCursorStops[InjectedTextCursorStops[\"Right\"] = 1] = \"Right\";\n    InjectedTextCursorStops[InjectedTextCursorStops[\"Left\"] = 2] = \"Left\";\n    InjectedTextCursorStops[InjectedTextCursorStops[\"None\"] = 3] = \"None\";\n})(InjectedTextCursorStops || (InjectedTextCursorStops = {}));\nexport var InlayHintKind;\n(function (InlayHintKind) {\n    InlayHintKind[InlayHintKind[\"Type\"] = 1] = \"Type\";\n    InlayHintKind[InlayHintKind[\"Parameter\"] = 2] = \"Parameter\";\n})(InlayHintKind || (InlayHintKind = {}));\n/**\n * How an {@link InlineCompletionsProvider inline completion provider} was triggered.\n */\nexport var InlineCompletionTriggerKind;\n(function (InlineCompletionTriggerKind) {\n    /**\n     * Completion was triggered automatically while editing.\n     * It is sufficient to return a single completion item in this case.\n     */\n    InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Automatic\"] = 0] = \"Automatic\";\n    /**\n     * Completion was triggered explicitly by a user gesture.\n     * Return multiple completion items to enable cycling through them.\n     */\n    InlineCompletionTriggerKind[InlineCompletionTriggerKind[\"Explicit\"] = 1] = \"Explicit\";\n})(InlineCompletionTriggerKind || (InlineCompletionTriggerKind = {}));\nexport var InlineEditTriggerKind;\n(function (InlineEditTriggerKind) {\n    InlineEditTriggerKind[InlineEditTriggerKind[\"Invoke\"] = 0] = \"Invoke\";\n    InlineEditTriggerKind[InlineEditTriggerKind[\"Automatic\"] = 1] = \"Automatic\";\n})(InlineEditTriggerKind || (InlineEditTriggerKind = {}));\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[\"Digit0\"] = 21] = \"Digit0\";\n    KeyCode[KeyCode[\"Digit1\"] = 22] = \"Digit1\";\n    KeyCode[KeyCode[\"Digit2\"] = 23] = \"Digit2\";\n    KeyCode[KeyCode[\"Digit3\"] = 24] = \"Digit3\";\n    KeyCode[KeyCode[\"Digit4\"] = 25] = \"Digit4\";\n    KeyCode[KeyCode[\"Digit5\"] = 26] = \"Digit5\";\n    KeyCode[KeyCode[\"Digit6\"] = 27] = \"Digit6\";\n    KeyCode[KeyCode[\"Digit7\"] = 28] = \"Digit7\";\n    KeyCode[KeyCode[\"Digit8\"] = 29] = \"Digit8\";\n    KeyCode[KeyCode[\"Digit9\"] = 30] = \"Digit9\";\n    KeyCode[KeyCode[\"KeyA\"] = 31] = \"KeyA\";\n    KeyCode[KeyCode[\"KeyB\"] = 32] = \"KeyB\";\n    KeyCode[KeyCode[\"KeyC\"] = 33] = \"KeyC\";\n    KeyCode[KeyCode[\"KeyD\"] = 34] = \"KeyD\";\n    KeyCode[KeyCode[\"KeyE\"] = 35] = \"KeyE\";\n    KeyCode[KeyCode[\"KeyF\"] = 36] = \"KeyF\";\n    KeyCode[KeyCode[\"KeyG\"] = 37] = \"KeyG\";\n    KeyCode[KeyCode[\"KeyH\"] = 38] = \"KeyH\";\n    KeyCode[KeyCode[\"KeyI\"] = 39] = \"KeyI\";\n    KeyCode[KeyCode[\"KeyJ\"] = 40] = \"KeyJ\";\n    KeyCode[KeyCode[\"KeyK\"] = 41] = \"KeyK\";\n    KeyCode[KeyCode[\"KeyL\"] = 42] = \"KeyL\";\n    KeyCode[KeyCode[\"KeyM\"] = 43] = \"KeyM\";\n    KeyCode[KeyCode[\"KeyN\"] = 44] = \"KeyN\";\n    KeyCode[KeyCode[\"KeyO\"] = 45] = \"KeyO\";\n    KeyCode[KeyCode[\"KeyP\"] = 46] = \"KeyP\";\n    KeyCode[KeyCode[\"KeyQ\"] = 47] = \"KeyQ\";\n    KeyCode[KeyCode[\"KeyR\"] = 48] = \"KeyR\";\n    KeyCode[KeyCode[\"KeyS\"] = 49] = \"KeyS\";\n    KeyCode[KeyCode[\"KeyT\"] = 50] = \"KeyT\";\n    KeyCode[KeyCode[\"KeyU\"] = 51] = \"KeyU\";\n    KeyCode[KeyCode[\"KeyV\"] = 52] = \"KeyV\";\n    KeyCode[KeyCode[\"KeyW\"] = 53] = \"KeyW\";\n    KeyCode[KeyCode[\"KeyX\"] = 54] = \"KeyX\";\n    KeyCode[KeyCode[\"KeyY\"] = 55] = \"KeyY\";\n    KeyCode[KeyCode[\"KeyZ\"] = 56] = \"KeyZ\";\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[\"F20\"] = 78] = \"F20\";\n    KeyCode[KeyCode[\"F21\"] = 79] = \"F21\";\n    KeyCode[KeyCode[\"F22\"] = 80] = \"F22\";\n    KeyCode[KeyCode[\"F23\"] = 81] = \"F23\";\n    KeyCode[KeyCode[\"F24\"] = 82] = \"F24\";\n    KeyCode[KeyCode[\"NumLock\"] = 83] = \"NumLock\";\n    KeyCode[KeyCode[\"ScrollLock\"] = 84] = \"ScrollLock\";\n    /**\n     * Used for miscellaneous characters; it can vary by keyboard.\n     * For the US standard keyboard, the ';:' key\n     */\n    KeyCode[KeyCode[\"Semicolon\"] = 85] = \"Semicolon\";\n    /**\n     * For any country/region, the '+' key\n     * For the US standard keyboard, the '=+' key\n     */\n    KeyCode[KeyCode[\"Equal\"] = 86] = \"Equal\";\n    /**\n     * For any country/region, the ',' key\n     * For the US standard keyboard, the ',<' key\n     */\n    KeyCode[KeyCode[\"Comma\"] = 87] = \"Comma\";\n    /**\n     * For any country/region, the '-' key\n     * For the US standard keyboard, the '-_' key\n     */\n    KeyCode[KeyCode[\"Minus\"] = 88] = \"Minus\";\n    /**\n     * For any country/region, the '.' key\n     * For the US standard keyboard, the '.>' key\n     */\n    KeyCode[KeyCode[\"Period\"] = 89] = \"Period\";\n    /**\n     * Used for miscellaneous characters; it can vary by keyboard.\n     * For the US standard keyboard, the '/?' key\n     */\n    KeyCode[KeyCode[\"Slash\"] = 90] = \"Slash\";\n    /**\n     * Used for miscellaneous characters; it can vary by keyboard.\n     * For the US standard keyboard, the '`~' key\n     */\n    KeyCode[KeyCode[\"Backquote\"] = 91] = \"Backquote\";\n    /**\n     * Used for miscellaneous characters; it can vary by keyboard.\n     * For the US standard keyboard, the '[{' key\n     */\n    KeyCode[KeyCode[\"BracketLeft\"] = 92] = \"BracketLeft\";\n    /**\n     * Used for miscellaneous characters; it can vary by keyboard.\n     * For the US standard keyboard, the '\\|' key\n     */\n    KeyCode[KeyCode[\"Backslash\"] = 93] = \"Backslash\";\n    /**\n     * Used for miscellaneous characters; it can vary by keyboard.\n     * For the US standard keyboard, the ']}' key\n     */\n    KeyCode[KeyCode[\"BracketRight\"] = 94] = \"BracketRight\";\n    /**\n     * Used for miscellaneous characters; it can vary by keyboard.\n     * For the US standard keyboard, the ''\"' key\n     */\n    KeyCode[KeyCode[\"Quote\"] = 95] = \"Quote\";\n    /**\n     * Used for miscellaneous characters; it can vary by keyboard.\n     */\n    KeyCode[KeyCode[\"OEM_8\"] = 96] = \"OEM_8\";\n    /**\n     * Either the angle bracket key or the backslash key on the RT 102-key keyboard.\n     */\n    KeyCode[KeyCode[\"IntlBackslash\"] = 97] = \"IntlBackslash\";\n    KeyCode[KeyCode[\"Numpad0\"] = 98] = \"Numpad0\";\n    KeyCode[KeyCode[\"Numpad1\"] = 99] = \"Numpad1\";\n    KeyCode[KeyCode[\"Numpad2\"] = 100] = \"Numpad2\";\n    KeyCode[KeyCode[\"Numpad3\"] = 101] = \"Numpad3\";\n    KeyCode[KeyCode[\"Numpad4\"] = 102] = \"Numpad4\";\n    KeyCode[KeyCode[\"Numpad5\"] = 103] = \"Numpad5\";\n    KeyCode[KeyCode[\"Numpad6\"] = 104] = \"Numpad6\";\n    KeyCode[KeyCode[\"Numpad7\"] = 105] = \"Numpad7\";\n    KeyCode[KeyCode[\"Numpad8\"] = 106] = \"Numpad8\";\n    KeyCode[KeyCode[\"Numpad9\"] = 107] = \"Numpad9\";\n    KeyCode[KeyCode[\"NumpadMultiply\"] = 108] = \"NumpadMultiply\";\n    KeyCode[KeyCode[\"NumpadAdd\"] = 109] = \"NumpadAdd\";\n    KeyCode[KeyCode[\"NUMPAD_SEPARATOR\"] = 110] = \"NUMPAD_SEPARATOR\";\n    KeyCode[KeyCode[\"NumpadSubtract\"] = 111] = \"NumpadSubtract\";\n    KeyCode[KeyCode[\"NumpadDecimal\"] = 112] = \"NumpadDecimal\";\n    KeyCode[KeyCode[\"NumpadDivide\"] = 113] = \"NumpadDivide\";\n    /**\n     * Cover all key codes when IME is processing input.\n     */\n    KeyCode[KeyCode[\"KEY_IN_COMPOSITION\"] = 114] = \"KEY_IN_COMPOSITION\";\n    KeyCode[KeyCode[\"ABNT_C1\"] = 115] = \"ABNT_C1\";\n    KeyCode[KeyCode[\"ABNT_C2\"] = 116] = \"ABNT_C2\";\n    KeyCode[KeyCode[\"AudioVolumeMute\"] = 117] = \"AudioVolumeMute\";\n    KeyCode[KeyCode[\"AudioVolumeUp\"] = 118] = \"AudioVolumeUp\";\n    KeyCode[KeyCode[\"AudioVolumeDown\"] = 119] = \"AudioVolumeDown\";\n    KeyCode[KeyCode[\"BrowserSearch\"] = 120] = \"BrowserSearch\";\n    KeyCode[KeyCode[\"BrowserHome\"] = 121] = \"BrowserHome\";\n    KeyCode[KeyCode[\"BrowserBack\"] = 122] = \"BrowserBack\";\n    KeyCode[KeyCode[\"BrowserForward\"] = 123] = \"BrowserForward\";\n    KeyCode[KeyCode[\"MediaTrackNext\"] = 124] = \"MediaTrackNext\";\n    KeyCode[KeyCode[\"MediaTrackPrevious\"] = 125] = \"MediaTrackPrevious\";\n    KeyCode[KeyCode[\"MediaStop\"] = 126] = \"MediaStop\";\n    KeyCode[KeyCode[\"MediaPlayPause\"] = 127] = \"MediaPlayPause\";\n    KeyCode[KeyCode[\"LaunchMediaPlayer\"] = 128] = \"LaunchMediaPlayer\";\n    KeyCode[KeyCode[\"LaunchMail\"] = 129] = \"LaunchMail\";\n    KeyCode[KeyCode[\"LaunchApp2\"] = 130] = \"LaunchApp2\";\n    /**\n     * VK_CLEAR, 0x0C, CLEAR key\n     */\n    KeyCode[KeyCode[\"Clear\"] = 131] = \"Clear\";\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\"] = 132] = \"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 * Section header style.\n */\nexport var MinimapSectionHeaderStyle;\n(function (MinimapSectionHeaderStyle) {\n    MinimapSectionHeaderStyle[MinimapSectionHeaderStyle[\"Normal\"] = 1] = \"Normal\";\n    MinimapSectionHeaderStyle[MinimapSectionHeaderStyle[\"Underlined\"] = 2] = \"Underlined\";\n})(MinimapSectionHeaderStyle || (MinimapSectionHeaderStyle = {}));\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 = {}));\nexport var NewSymbolNameTag;\n(function (NewSymbolNameTag) {\n    NewSymbolNameTag[NewSymbolNameTag[\"AIGenerated\"] = 1] = \"AIGenerated\";\n})(NewSymbolNameTag || (NewSymbolNameTag = {}));\nexport var NewSymbolNameTriggerKind;\n(function (NewSymbolNameTriggerKind) {\n    NewSymbolNameTriggerKind[NewSymbolNameTriggerKind[\"Invoke\"] = 0] = \"Invoke\";\n    NewSymbolNameTriggerKind[NewSymbolNameTriggerKind[\"Automatic\"] = 1] = \"Automatic\";\n})(NewSymbolNameTriggerKind || (NewSymbolNameTriggerKind = {}));\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 = {}));\n/**\n * How a partial acceptance was triggered.\n */\nexport var PartialAcceptTriggerKind;\n(function (PartialAcceptTriggerKind) {\n    PartialAcceptTriggerKind[PartialAcceptTriggerKind[\"Word\"] = 0] = \"Word\";\n    PartialAcceptTriggerKind[PartialAcceptTriggerKind[\"Line\"] = 1] = \"Line\";\n    PartialAcceptTriggerKind[PartialAcceptTriggerKind[\"Suggest\"] = 2] = \"Suggest\";\n})(PartialAcceptTriggerKind || (PartialAcceptTriggerKind = {}));\nexport var PositionAffinity;\n(function (PositionAffinity) {\n    /**\n     * Prefers the left most position.\n    */\n    PositionAffinity[PositionAffinity[\"Left\"] = 0] = \"Left\";\n    /**\n     * Prefers the right most position.\n    */\n    PositionAffinity[PositionAffinity[\"Right\"] = 1] = \"Right\";\n    /**\n     * No preference.\n    */\n    PositionAffinity[PositionAffinity[\"None\"] = 2] = \"None\";\n    /**\n     * If the given position is on injected text, prefers the position left of it.\n    */\n    PositionAffinity[PositionAffinity[\"LeftOfInjectedText\"] = 3] = \"LeftOfInjectedText\";\n    /**\n     * If the given position is on injected text, prefers the position right of it.\n    */\n    PositionAffinity[PositionAffinity[\"RightOfInjectedText\"] = 4] = \"RightOfInjectedText\";\n})(PositionAffinity || (PositionAffinity = {}));\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 ShowLightbulbIconMode;\n(function (ShowLightbulbIconMode) {\n    ShowLightbulbIconMode[\"Off\"] = \"off\";\n    ShowLightbulbIconMode[\"OnCode\"] = \"onCode\";\n    ShowLightbulbIconMode[\"On\"] = \"on\";\n})(ShowLightbulbIconMode || (ShowLightbulbIconMode = {}));\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 '../languages.js';\nimport * as standaloneEnums from '../standalone/standaloneEnums.js';\nexport class KeyMod {\n    static { this.CtrlCmd = 2048 /* ConstKeyMod.CtrlCmd */; }\n    static { this.Shift = 1024 /* ConstKeyMod.Shift */; }\n    static { this.Alt = 512 /* ConstKeyMod.Alt */; }\n    static { this.WinCtrl = 256 /* ConstKeyMod.WinCtrl */; }\n    static chord(firstPart, secondPart) {\n        return KeyChord(firstPart, secondPart);\n    }\n}\nexport function createMonacoBaseAPI() {\n    return {\n        editor: undefined, // undefined override expected here\n        languages: undefined, // undefined override expected here\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 function ensureCodeWindow(targetWindow, fallbackWindowId) {\n    const codeWindow = targetWindow;\n    if (typeof codeWindow.vscodeWindowId !== 'number') {\n        Object.defineProperty(codeWindow, 'vscodeWindowId', {\n            get: () => fallbackWindowId\n        });\n    }\n}\n// eslint-disable-next-line no-restricted-globals\nexport const mainWindow = window;\n","export function identity(t) {\n    return t;\n}\n/**\n * Uses a LRU cache to make a given parametrized function cached.\n * Caches just the last key/value.\n*/\nexport class LRUCachedFunction {\n    constructor(arg1, arg2) {\n        this.lastCache = undefined;\n        this.lastArgKey = undefined;\n        if (typeof arg1 === 'function') {\n            this._fn = arg1;\n            this._computeKey = identity;\n        }\n        else {\n            this._fn = arg2;\n            this._computeKey = arg1.getCacheKey;\n        }\n    }\n    get(arg) {\n        const key = this._computeKey(arg);\n        if (this.lastArgKey !== key) {\n            this.lastArgKey = key;\n            this.lastCache = this._fn(arg);\n        }\n        return this.lastCache;\n    }\n}\n/**\n * Uses an unbounded cache to memoize the results of the given function.\n*/\nexport class CachedFunction {\n    get cachedValues() {\n        return this._map;\n    }\n    constructor(arg1, arg2) {\n        this._map = new Map();\n        this._map2 = new Map();\n        if (typeof arg1 === 'function') {\n            this._fn = arg1;\n            this._computeKey = identity;\n        }\n        else {\n            this._fn = arg2;\n            this._computeKey = arg1.getCacheKey;\n        }\n    }\n    get(arg) {\n        const key = this._computeKey(arg);\n        if (this._map2.has(key)) {\n            return this._map2.get(key);\n        }\n        const value = this._fn(arg);\n        this._map.set(arg, value);\n        this._map2.set(key, value);\n        return 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 *--------------------------------------------------------------------------------------------*/\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    get value() {\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 *--------------------------------------------------------------------------------------------*/\nimport { LRUCachedFunction } from './cache.js';\nimport { Lazy } from './lazy.js';\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 * Encodes the given value so that it can be used as literal value in html attributes.\n *\n * In other words, computes `$val`, such that `attr` in `<div attr=\"$val\" />` has the runtime value `value`.\n * This prevents XSS injection.\n */\nexport function htmlAttributeEncodeValue(value) {\n    return value.replace(/[<>\"'&]/g, ch => {\n        switch (ch) {\n            case '<': return '&lt;';\n            case '>': return '&gt;';\n            case '\"': return '&quot;';\n            case '\\'': return '&apos;';\n            case '&': return '&amp;';\n        }\n        return ch;\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 splitLines(str) {\n    return str.split(/\\r\\n|\\r|\\n/);\n}\nexport function splitLinesIncludeSeparators(str) {\n    const linesWithSeparators = [];\n    const splitLinesAndSeparators = str.split(/(\\r\\n|\\r|\\n)/);\n    for (let i = 0; i < Math.ceil(splitLinesAndSeparators.length / 2); i++) {\n        linesWithSeparators.push(splitLinesAndSeparators[2 * i] + (splitLinesAndSeparators[2 * i + 1] ?? ''));\n    }\n    return linesWithSeparators;\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 /* CharCode.Space */ && chCode !== 9 /* CharCode.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 /* CharCode.Space */ && chCode !== 9 /* CharCode.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 /* CharCode.Space */ && chCode !== 9 /* CharCode.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        const codeA = a.charCodeAt(aStart);\n        const 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        if (codeA >= 128 || codeB >= 128) {\n            // not ASCII letters -> fallback to lower-casing strings\n            return compareSubstring(a.toLowerCase(), b.toLowerCase(), aStart, aEnd, bStart, bEnd);\n        }\n        // mapper lower-case ascii letter onto upper-case varinats\n        // [97-122] (lower ascii) --> [65-90] (upper ascii)\n        if (isLowerAsciiLetter(codeA)) {\n            codeA -= 32;\n        }\n        if (isLowerAsciiLetter(codeB)) {\n            codeB -= 32;\n        }\n        // compare both code points\n        const diff = codeA - codeB;\n        if (diff === 0) {\n            continue;\n        }\n        return diff;\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 isAsciiDigit(code) {\n    return code >= 48 /* CharCode.Digit0 */ && code <= 57 /* CharCode.Digit9 */;\n}\nexport function isLowerAsciiLetter(code) {\n    return code >= 97 /* CharCode.a */ && code <= 122 /* CharCode.z */;\n}\nexport function isUpperAsciiLetter(code) {\n    return code >= 65 /* CharCode.A */ && code <= 90 /* CharCode.Z */;\n}\nexport function equalsIgnoreCase(a, b) {\n    return a.length === b.length && compareSubstringIgnoreCase(a, b) === 0;\n}\nexport function startsWithIgnoreCase(str, candidate) {\n    const candidateLength = candidate.length;\n    if (candidate.length > str.length) {\n        return false;\n    }\n    return compareSubstringIgnoreCase(str, candidate, 0, candidateLength) === 0;\n}\n/**\n * @returns the length of the common prefix of the two strings.\n */\nexport function commonPrefixLength(a, b) {\n    const len = Math.min(a.length, b.length);\n    let i;\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    const len = Math.min(a.length, b.length);\n    let i;\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 class CodePointIterator {\n    get offset() {\n        return this._offset;\n    }\n    constructor(str, offset = 0) {\n        this._str = str;\n        this._len = str.length;\n        this._offset = offset;\n    }\n    setOffset(offset) {\n        this._offset = offset;\n    }\n    prevCodePoint() {\n        const codePoint = getPrevCodePoint(this._str, this._offset);\n        this._offset -= (codePoint >= 65536 /* Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n        return codePoint;\n    }\n    nextCodePoint() {\n        const codePoint = getNextCodePoint(this._str, this._len, this._offset);\n        this._offset += (codePoint >= 65536 /* Constants.UNICODE_SUPPLEMENTARY_PLANE_BEGIN */ ? 2 : 1);\n        return codePoint;\n    }\n    eol() {\n        return (this._offset >= this._len);\n    }\n}\nexport class GraphemeIterator {\n    get offset() {\n        return this._iterator.offset;\n    }\n    constructor(str, offset = 0) {\n        this._iterator = new CodePointIterator(str, offset);\n    }\n    nextGraphemeLength() {\n        const graphemeBreakTree = GraphemeBreakTree.getInstance();\n        const iterator = this._iterator;\n        const initialOffset = iterator.offset;\n        let graphemeBreakType = graphemeBreakTree.getGraphemeBreakType(iterator.nextCodePoint());\n        while (!iterator.eol()) {\n            const offset = iterator.offset;\n            const nextGraphemeBreakType = graphemeBreakTree.getGraphemeBreakType(iterator.nextCodePoint());\n            if (breakBetweenGraphemeBreakType(graphemeBreakType, nextGraphemeBreakType)) {\n                // move iterator back\n                iterator.setOffset(offset);\n                break;\n            }\n            graphemeBreakType = nextGraphemeBreakType;\n        }\n        return (iterator.offset - initialOffset);\n    }\n    prevGraphemeLength() {\n        const graphemeBreakTree = GraphemeBreakTree.getInstance();\n        const iterator = this._iterator;\n        const initialOffset = iterator.offset;\n        let graphemeBreakType = graphemeBreakTree.getGraphemeBreakType(iterator.prevCodePoint());\n        while (iterator.offset > 0) {\n            const offset = iterator.offset;\n            const prevGraphemeBreakType = graphemeBreakTree.getGraphemeBreakType(iterator.prevCodePoint());\n            if (breakBetweenGraphemeBreakType(prevGraphemeBreakType, graphemeBreakType)) {\n                // move iterator back\n                iterator.setOffset(offset);\n                break;\n            }\n            graphemeBreakType = prevGraphemeBreakType;\n        }\n        return (initialOffset - iterator.offset);\n    }\n    eol() {\n        return this._iterator.eol();\n    }\n}\nexport function nextCharLength(str, initialOffset) {\n    const iterator = new GraphemeIterator(str, initialOffset);\n    return iterator.nextGraphemeLength();\n}\nexport function prevCharLength(str, initialOffset) {\n    const iterator = new GraphemeIterator(str, initialOffset);\n    return iterator.prevGraphemeLength();\n}\nexport function getCharContainingOffset(str, offset) {\n    if (offset > 0 && isLowSurrogate(str.charCodeAt(offset))) {\n        offset--;\n    }\n    const endOffset = offset + nextCharLength(str, offset);\n    const startOffset = endOffset - prevCharLength(str, endOffset);\n    return [startOffset, endOffset];\n}\nlet CONTAINS_RTL = undefined;\nfunction makeContainsRtl() {\n    // Generated using https://github.com/alexdima/unicode-utils/blob/main/rtl-test.js\n    return /(?:[\\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\\u07FE-\\u0815\\u081A\\u0824\\u0828\\u0830-\\u0858\\u085E-\\u088E\\u08A0-\\u08C9\\u200F\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFD3D\\uFD50-\\uFDC7\\uFDF0-\\uFDFC\\uFE70-\\uFEFC]|\\uD802[\\uDC00-\\uDD1B\\uDD20-\\uDE00\\uDE10-\\uDE35\\uDE40-\\uDEE4\\uDEEB-\\uDF35\\uDF40-\\uDFFF]|\\uD803[\\uDC00-\\uDD23\\uDE80-\\uDEA9\\uDEAD-\\uDF45\\uDF51-\\uDF81\\uDF86-\\uDFF6]|\\uD83A[\\uDC00-\\uDCCF\\uDD00-\\uDD43\\uDD4B-\\uDFFF]|\\uD83B[\\uDC00-\\uDEBB])/;\n}\n/**\n * Returns true if `str` contains any Unicode character that is classified as \"R\" or \"AL\".\n */\nexport function containsRTL(str) {\n    if (!CONTAINS_RTL) {\n        CONTAINS_RTL = makeContainsRtl();\n    }\n    return CONTAINS_RTL.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 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    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/main/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 <= 129008) || (x >= 129280 && x <= 129535)\n        || (x >= 129648 && x <= 129782));\n}\n// -- UTF-8 BOM\nexport const UTF8_BOM_CHARACTER = String.fromCharCode(65279 /* CharCode.UTF8_BOM */);\nexport function startsWithUTF8BOM(str) {\n    return !!(str && str.length > 0 && str.charCodeAt(0) === 65279 /* CharCode.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 /* CharCode.Z */ - 65 /* CharCode.A */ + 1);\n    n = n % (2 * LETTERS_CNT);\n    if (n < LETTERS_CNT) {\n        return String.fromCharCode(97 /* CharCode.a */ + n);\n    }\n    return String.fromCharCode(65 /* CharCode.A */ + n - LETTERS_CNT);\n}\nfunction 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 /* GraphemeBreakType.Other */) {\n        // see https://www.unicode.org/Public/13.0.0/ucd/auxiliary/GraphemeBreakTest-13.0.0d10.html#table\n        return (breakTypeB !== 5 /* GraphemeBreakType.Extend */ && breakTypeB !== 7 /* GraphemeBreakType.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 /* GraphemeBreakType.CR */) {\n        if (breakTypeB === 3 /* GraphemeBreakType.LF */) {\n            return false; // GB3\n        }\n    }\n    if (breakTypeA === 4 /* GraphemeBreakType.Control */ || breakTypeA === 2 /* GraphemeBreakType.CR */ || breakTypeA === 3 /* GraphemeBreakType.LF */) {\n        return true; // GB4\n    }\n    if (breakTypeB === 4 /* GraphemeBreakType.Control */ || breakTypeB === 2 /* GraphemeBreakType.CR */ || breakTypeB === 3 /* GraphemeBreakType.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 /* GraphemeBreakType.L */) {\n        if (breakTypeB === 8 /* GraphemeBreakType.L */ || breakTypeB === 9 /* GraphemeBreakType.V */ || breakTypeB === 11 /* GraphemeBreakType.LV */ || breakTypeB === 12 /* GraphemeBreakType.LVT */) {\n            return false; // GB6\n        }\n    }\n    if (breakTypeA === 11 /* GraphemeBreakType.LV */ || breakTypeA === 9 /* GraphemeBreakType.V */) {\n        if (breakTypeB === 9 /* GraphemeBreakType.V */ || breakTypeB === 10 /* GraphemeBreakType.T */) {\n            return false; // GB7\n        }\n    }\n    if (breakTypeA === 12 /* GraphemeBreakType.LVT */ || breakTypeA === 10 /* GraphemeBreakType.T */) {\n        if (breakTypeB === 10 /* GraphemeBreakType.T */) {\n            return false; // GB8\n        }\n    }\n    // Do not break before extending characters or ZWJ.\n    // GB9                                           × (Extend | ZWJ)\n    if (breakTypeB === 5 /* GraphemeBreakType.Extend */ || breakTypeB === 13 /* GraphemeBreakType.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 /* GraphemeBreakType.SpacingMark */) {\n        return false; // GB9a\n    }\n    if (breakTypeA === 1 /* GraphemeBreakType.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 /* GraphemeBreakType.ZWJ */ && breakTypeB === 14 /* GraphemeBreakType.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 /* GraphemeBreakType.Regional_Indicator */ && breakTypeB === 6 /* GraphemeBreakType.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    static { this._INSTANCE = null; }\n    static getInstance() {\n        if (!GraphemeBreakTree._INSTANCE) {\n            GraphemeBreakTree._INSTANCE = new GraphemeBreakTree();\n        }\n        return GraphemeBreakTree._INSTANCE;\n    }\n    constructor() {\n        this._data = getGraphemeBreakRawData();\n    }\n    getGraphemeBreakType(codePoint) {\n        // !!! Let's make 7bit ASCII a bit faster: 0..31\n        if (codePoint < 32) {\n            if (codePoint === 10 /* CharCode.LineFeed */) {\n                return 3 /* GraphemeBreakType.LF */;\n            }\n            if (codePoint === 13 /* CharCode.CarriageReturn */) {\n                return 2 /* GraphemeBreakType.CR */;\n            }\n            return 4 /* GraphemeBreakType.Control */;\n        }\n        // !!! Let's make 7bit ASCII a bit faster: 32..126\n        if (codePoint < 127) {\n            return 0 /* GraphemeBreakType.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 /* GraphemeBreakType.Other */;\n    }\n}\nfunction getGraphemeBreakRawData() {\n    // generated using https://github.com/alexdima/unicode-utils/blob/main/grapheme-break.js\n    return JSON.parse('[0,0,0,51229,51255,12,44061,44087,12,127462,127487,6,7083,7085,5,47645,47671,12,54813,54839,12,128678,128678,14,3270,3270,5,9919,9923,14,45853,45879,12,49437,49463,12,53021,53047,12,71216,71218,7,128398,128399,14,129360,129374,14,2519,2519,5,4448,4519,9,9742,9742,14,12336,12336,14,44957,44983,12,46749,46775,12,48541,48567,12,50333,50359,12,52125,52151,12,53917,53943,12,69888,69890,5,73018,73018,5,127990,127990,14,128558,128559,14,128759,128760,14,129653,129655,14,2027,2035,5,2891,2892,7,3761,3761,5,6683,6683,5,8293,8293,4,9825,9826,14,9999,9999,14,43452,43453,5,44509,44535,12,45405,45431,12,46301,46327,12,47197,47223,12,48093,48119,12,48989,49015,12,49885,49911,12,50781,50807,12,51677,51703,12,52573,52599,12,53469,53495,12,54365,54391,12,65279,65279,4,70471,70472,7,72145,72147,7,119173,119179,5,127799,127818,14,128240,128244,14,128512,128512,14,128652,128652,14,128721,128722,14,129292,129292,14,129445,129450,14,129734,129743,14,1476,1477,5,2366,2368,7,2750,2752,7,3076,3076,5,3415,3415,5,4141,4144,5,6109,6109,5,6964,6964,5,7394,7400,5,9197,9198,14,9770,9770,14,9877,9877,14,9968,9969,14,10084,10084,14,43052,43052,5,43713,43713,5,44285,44311,12,44733,44759,12,45181,45207,12,45629,45655,12,46077,46103,12,46525,46551,12,46973,46999,12,47421,47447,12,47869,47895,12,48317,48343,12,48765,48791,12,49213,49239,12,49661,49687,12,50109,50135,12,50557,50583,12,51005,51031,12,51453,51479,12,51901,51927,12,52349,52375,12,52797,52823,12,53245,53271,12,53693,53719,12,54141,54167,12,54589,54615,12,55037,55063,12,69506,69509,5,70191,70193,5,70841,70841,7,71463,71467,5,72330,72342,5,94031,94031,5,123628,123631,5,127763,127765,14,127941,127941,14,128043,128062,14,128302,128317,14,128465,128467,14,128539,128539,14,128640,128640,14,128662,128662,14,128703,128703,14,128745,128745,14,129004,129007,14,129329,129330,14,129402,129402,14,129483,129483,14,129686,129704,14,130048,131069,14,173,173,4,1757,1757,1,2200,2207,5,2434,2435,7,2631,2632,5,2817,2817,5,3008,3008,5,3201,3201,5,3387,3388,5,3542,3542,5,3902,3903,7,4190,4192,5,6002,6003,5,6439,6440,5,6765,6770,7,7019,7027,5,7154,7155,7,8205,8205,13,8505,8505,14,9654,9654,14,9757,9757,14,9792,9792,14,9852,9853,14,9890,9894,14,9937,9937,14,9981,9981,14,10035,10036,14,11035,11036,14,42654,42655,5,43346,43347,7,43587,43587,5,44006,44007,7,44173,44199,12,44397,44423,12,44621,44647,12,44845,44871,12,45069,45095,12,45293,45319,12,45517,45543,12,45741,45767,12,45965,45991,12,46189,46215,12,46413,46439,12,46637,46663,12,46861,46887,12,47085,47111,12,47309,47335,12,47533,47559,12,47757,47783,12,47981,48007,12,48205,48231,12,48429,48455,12,48653,48679,12,48877,48903,12,49101,49127,12,49325,49351,12,49549,49575,12,49773,49799,12,49997,50023,12,50221,50247,12,50445,50471,12,50669,50695,12,50893,50919,12,51117,51143,12,51341,51367,12,51565,51591,12,51789,51815,12,52013,52039,12,52237,52263,12,52461,52487,12,52685,52711,12,52909,52935,12,53133,53159,12,53357,53383,12,53581,53607,12,53805,53831,12,54029,54055,12,54253,54279,12,54477,54503,12,54701,54727,12,54925,54951,12,55149,55175,12,68101,68102,5,69762,69762,7,70067,70069,7,70371,70378,5,70720,70721,7,71087,71087,5,71341,71341,5,71995,71996,5,72249,72249,7,72850,72871,5,73109,73109,5,118576,118598,5,121505,121519,5,127245,127247,14,127568,127569,14,127777,127777,14,127872,127891,14,127956,127967,14,128015,128016,14,128110,128172,14,128259,128259,14,128367,128368,14,128424,128424,14,128488,128488,14,128530,128532,14,128550,128551,14,128566,128566,14,128647,128647,14,128656,128656,14,128667,128673,14,128691,128693,14,128715,128715,14,128728,128732,14,128752,128752,14,128765,128767,14,129096,129103,14,129311,129311,14,129344,129349,14,129394,129394,14,129413,129425,14,129466,129471,14,129511,129535,14,129664,129666,14,129719,129722,14,129760,129767,14,917536,917631,5,13,13,2,1160,1161,5,1564,1564,4,1807,1807,1,2085,2087,5,2307,2307,7,2382,2383,7,2497,2500,5,2563,2563,7,2677,2677,5,2763,2764,7,2879,2879,5,2914,2915,5,3021,3021,5,3142,3144,5,3263,3263,5,3285,3286,5,3398,3400,7,3530,3530,5,3633,3633,5,3864,3865,5,3974,3975,5,4155,4156,7,4229,4230,5,5909,5909,7,6078,6085,7,6277,6278,5,6451,6456,7,6744,6750,5,6846,6846,5,6972,6972,5,7074,7077,5,7146,7148,7,7222,7223,5,7416,7417,5,8234,8238,4,8417,8417,5,9000,9000,14,9203,9203,14,9730,9731,14,9748,9749,14,9762,9763,14,9776,9783,14,9800,9811,14,9831,9831,14,9872,9873,14,9882,9882,14,9900,9903,14,9929,9933,14,9941,9960,14,9974,9974,14,9989,9989,14,10006,10006,14,10062,10062,14,10160,10160,14,11647,11647,5,12953,12953,14,43019,43019,5,43232,43249,5,43443,43443,5,43567,43568,7,43696,43696,5,43765,43765,7,44013,44013,5,44117,44143,12,44229,44255,12,44341,44367,12,44453,44479,12,44565,44591,12,44677,44703,12,44789,44815,12,44901,44927,12,45013,45039,12,45125,45151,12,45237,45263,12,45349,45375,12,45461,45487,12,45573,45599,12,45685,45711,12,45797,45823,12,45909,45935,12,46021,46047,12,46133,46159,12,46245,46271,12,46357,46383,12,46469,46495,12,46581,46607,12,46693,46719,12,46805,46831,12,46917,46943,12,47029,47055,12,47141,47167,12,47253,47279,12,47365,47391,12,47477,47503,12,47589,47615,12,47701,47727,12,47813,47839,12,47925,47951,12,48037,48063,12,48149,48175,12,48261,48287,12,48373,48399,12,48485,48511,12,48597,48623,12,48709,48735,12,48821,48847,12,48933,48959,12,49045,49071,12,49157,49183,12,49269,49295,12,49381,49407,12,49493,49519,12,49605,49631,12,49717,49743,12,49829,49855,12,49941,49967,12,50053,50079,12,50165,50191,12,50277,50303,12,50389,50415,12,50501,50527,12,50613,50639,12,50725,50751,12,50837,50863,12,50949,50975,12,51061,51087,12,51173,51199,12,51285,51311,12,51397,51423,12,51509,51535,12,51621,51647,12,51733,51759,12,51845,51871,12,51957,51983,12,52069,52095,12,52181,52207,12,52293,52319,12,52405,52431,12,52517,52543,12,52629,52655,12,52741,52767,12,52853,52879,12,52965,52991,12,53077,53103,12,53189,53215,12,53301,53327,12,53413,53439,12,53525,53551,12,53637,53663,12,53749,53775,12,53861,53887,12,53973,53999,12,54085,54111,12,54197,54223,12,54309,54335,12,54421,54447,12,54533,54559,12,54645,54671,12,54757,54783,12,54869,54895,12,54981,55007,12,55093,55119,12,55243,55291,10,66045,66045,5,68325,68326,5,69688,69702,5,69817,69818,5,69957,69958,7,70089,70092,5,70198,70199,5,70462,70462,5,70502,70508,5,70750,70750,5,70846,70846,7,71100,71101,5,71230,71230,7,71351,71351,5,71737,71738,5,72000,72000,7,72160,72160,5,72273,72278,5,72752,72758,5,72882,72883,5,73031,73031,5,73461,73462,7,94192,94193,7,119149,119149,7,121403,121452,5,122915,122916,5,126980,126980,14,127358,127359,14,127535,127535,14,127759,127759,14,127771,127771,14,127792,127793,14,127825,127867,14,127897,127899,14,127945,127945,14,127985,127986,14,128000,128007,14,128021,128021,14,128066,128100,14,128184,128235,14,128249,128252,14,128266,128276,14,128335,128335,14,128379,128390,14,128407,128419,14,128444,128444,14,128481,128481,14,128499,128499,14,128526,128526,14,128536,128536,14,128543,128543,14,128556,128556,14,128564,128564,14,128577,128580,14,128643,128645,14,128649,128649,14,128654,128654,14,128660,128660,14,128664,128664,14,128675,128675,14,128686,128689,14,128695,128696,14,128705,128709,14,128717,128719,14,128725,128725,14,128736,128741,14,128747,128748,14,128755,128755,14,128762,128762,14,128981,128991,14,129009,129023,14,129160,129167,14,129296,129304,14,129320,129327,14,129340,129342,14,129356,129356,14,129388,129392,14,129399,129400,14,129404,129407,14,129432,129442,14,129454,129455,14,129473,129474,14,129485,129487,14,129648,129651,14,129659,129660,14,129671,129679,14,129709,129711,14,129728,129730,14,129751,129753,14,129776,129782,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,2274,2274,1,2363,2363,7,2377,2380,7,2402,2403,5,2494,2494,5,2507,2508,7,2558,2558,5,2622,2624,7,2641,2641,5,2691,2691,7,2759,2760,5,2786,2787,5,2876,2876,5,2881,2884,5,2901,2902,5,3006,3006,5,3014,3016,7,3072,3072,5,3134,3136,5,3157,3158,5,3260,3260,5,3266,3266,5,3274,3275,7,3328,3329,5,3391,3392,7,3405,3405,5,3457,3457,5,3536,3537,7,3551,3551,5,3636,3642,5,3764,3772,5,3895,3895,5,3967,3967,7,3993,4028,5,4146,4151,5,4182,4183,7,4226,4226,5,4253,4253,5,4957,4959,5,5940,5940,7,6070,6070,7,6087,6088,7,6158,6158,4,6432,6434,5,6448,6449,7,6679,6680,5,6742,6742,5,6754,6754,5,6783,6783,5,6912,6915,5,6966,6970,5,6978,6978,5,7042,7042,7,7080,7081,5,7143,7143,7,7150,7150,7,7212,7219,5,7380,7392,5,7412,7412,5,8203,8203,4,8232,8232,4,8265,8265,14,8400,8412,5,8421,8432,5,8617,8618,14,9167,9167,14,9200,9200,14,9410,9410,14,9723,9726,14,9733,9733,14,9745,9745,14,9752,9752,14,9760,9760,14,9766,9766,14,9774,9774,14,9786,9786,14,9794,9794,14,9823,9823,14,9828,9828,14,9833,9850,14,9855,9855,14,9875,9875,14,9880,9880,14,9885,9887,14,9896,9897,14,9906,9916,14,9926,9927,14,9935,9935,14,9939,9939,14,9962,9962,14,9972,9972,14,9978,9978,14,9986,9986,14,9997,9997,14,10002,10002,14,10017,10017,14,10055,10055,14,10071,10071,14,10133,10135,14,10548,10549,14,11093,11093,14,12330,12333,5,12441,12442,5,42608,42610,5,43010,43010,5,43045,43046,5,43188,43203,7,43302,43309,5,43392,43394,5,43446,43449,5,43493,43493,5,43571,43572,7,43597,43597,7,43703,43704,5,43756,43757,5,44003,44004,7,44009,44010,7,44033,44059,12,44089,44115,12,44145,44171,12,44201,44227,12,44257,44283,12,44313,44339,12,44369,44395,12,44425,44451,12,44481,44507,12,44537,44563,12,44593,44619,12,44649,44675,12,44705,44731,12,44761,44787,12,44817,44843,12,44873,44899,12,44929,44955,12,44985,45011,12,45041,45067,12,45097,45123,12,45153,45179,12,45209,45235,12,45265,45291,12,45321,45347,12,45377,45403,12,45433,45459,12,45489,45515,12,45545,45571,12,45601,45627,12,45657,45683,12,45713,45739,12,45769,45795,12,45825,45851,12,45881,45907,12,45937,45963,12,45993,46019,12,46049,46075,12,46105,46131,12,46161,46187,12,46217,46243,12,46273,46299,12,46329,46355,12,46385,46411,12,46441,46467,12,46497,46523,12,46553,46579,12,46609,46635,12,46665,46691,12,46721,46747,12,46777,46803,12,46833,46859,12,46889,46915,12,46945,46971,12,47001,47027,12,47057,47083,12,47113,47139,12,47169,47195,12,47225,47251,12,47281,47307,12,47337,47363,12,47393,47419,12,47449,47475,12,47505,47531,12,47561,47587,12,47617,47643,12,47673,47699,12,47729,47755,12,47785,47811,12,47841,47867,12,47897,47923,12,47953,47979,12,48009,48035,12,48065,48091,12,48121,48147,12,48177,48203,12,48233,48259,12,48289,48315,12,48345,48371,12,48401,48427,12,48457,48483,12,48513,48539,12,48569,48595,12,48625,48651,12,48681,48707,12,48737,48763,12,48793,48819,12,48849,48875,12,48905,48931,12,48961,48987,12,49017,49043,12,49073,49099,12,49129,49155,12,49185,49211,12,49241,49267,12,49297,49323,12,49353,49379,12,49409,49435,12,49465,49491,12,49521,49547,12,49577,49603,12,49633,49659,12,49689,49715,12,49745,49771,12,49801,49827,12,49857,49883,12,49913,49939,12,49969,49995,12,50025,50051,12,50081,50107,12,50137,50163,12,50193,50219,12,50249,50275,12,50305,50331,12,50361,50387,12,50417,50443,12,50473,50499,12,50529,50555,12,50585,50611,12,50641,50667,12,50697,50723,12,50753,50779,12,50809,50835,12,50865,50891,12,50921,50947,12,50977,51003,12,51033,51059,12,51089,51115,12,51145,51171,12,51201,51227,12,51257,51283,12,51313,51339,12,51369,51395,12,51425,51451,12,51481,51507,12,51537,51563,12,51593,51619,12,51649,51675,12,51705,51731,12,51761,51787,12,51817,51843,12,51873,51899,12,51929,51955,12,51985,52011,12,52041,52067,12,52097,52123,12,52153,52179,12,52209,52235,12,52265,52291,12,52321,52347,12,52377,52403,12,52433,52459,12,52489,52515,12,52545,52571,12,52601,52627,12,52657,52683,12,52713,52739,12,52769,52795,12,52825,52851,12,52881,52907,12,52937,52963,12,52993,53019,12,53049,53075,12,53105,53131,12,53161,53187,12,53217,53243,12,53273,53299,12,53329,53355,12,53385,53411,12,53441,53467,12,53497,53523,12,53553,53579,12,53609,53635,12,53665,53691,12,53721,53747,12,53777,53803,12,53833,53859,12,53889,53915,12,53945,53971,12,54001,54027,12,54057,54083,12,54113,54139,12,54169,54195,12,54225,54251,12,54281,54307,12,54337,54363,12,54393,54419,12,54449,54475,12,54505,54531,12,54561,54587,12,54617,54643,12,54673,54699,12,54729,54755,12,54785,54811,12,54841,54867,12,54897,54923,12,54953,54979,12,55009,55035,12,55065,55091,12,55121,55147,12,55177,55203,12,65024,65039,5,65520,65528,4,66422,66426,5,68152,68154,5,69291,69292,5,69633,69633,5,69747,69748,5,69811,69814,5,69826,69826,5,69932,69932,7,70016,70017,5,70079,70080,7,70095,70095,5,70196,70196,5,70367,70367,5,70402,70403,7,70464,70464,5,70487,70487,5,70709,70711,7,70725,70725,7,70833,70834,7,70843,70844,7,70849,70849,7,71090,71093,5,71103,71104,5,71227,71228,7,71339,71339,5,71344,71349,5,71458,71461,5,71727,71735,5,71985,71989,7,71998,71998,5,72002,72002,7,72154,72155,5,72193,72202,5,72251,72254,5,72281,72283,5,72344,72345,5,72766,72766,7,72874,72880,5,72885,72886,5,73023,73029,5,73104,73105,5,73111,73111,5,92912,92916,5,94095,94098,5,113824,113827,4,119142,119142,7,119155,119162,4,119362,119364,5,121476,121476,5,122888,122904,5,123184,123190,5,125252,125258,5,127183,127183,14,127340,127343,14,127377,127386,14,127491,127503,14,127548,127551,14,127744,127756,14,127761,127761,14,127769,127769,14,127773,127774,14,127780,127788,14,127796,127797,14,127820,127823,14,127869,127869,14,127894,127895,14,127902,127903,14,127943,127943,14,127947,127950,14,127972,127972,14,127988,127988,14,127992,127994,14,128009,128011,14,128019,128019,14,128023,128041,14,128064,128064,14,128102,128107,14,128174,128181,14,128238,128238,14,128246,128247,14,128254,128254,14,128264,128264,14,128278,128299,14,128329,128330,14,128348,128359,14,128371,128377,14,128392,128393,14,128401,128404,14,128421,128421,14,128433,128434,14,128450,128452,14,128476,128478,14,128483,128483,14,128495,128495,14,128506,128506,14,128519,128520,14,128528,128528,14,128534,128534,14,128538,128538,14,128540,128542,14,128544,128549,14,128552,128555,14,128557,128557,14,128560,128563,14,128565,128565,14,128567,128576,14,128581,128591,14,128641,128642,14,128646,128646,14,128648,128648,14,128650,128651,14,128653,128653,14,128655,128655,14,128657,128659,14,128661,128661,14,128663,128663,14,128665,128666,14,128674,128674,14,128676,128677,14,128679,128685,14,128690,128690,14,128694,128694,14,128697,128702,14,128704,128704,14,128710,128714,14,128716,128716,14,128720,128720,14,128723,128724,14,128726,128727,14,128733,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,129008,129008,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,129661,129663,14,129667,129670,14,129680,129685,14,129705,129708,14,129712,129718,14,129723,129727,14,129731,129733,14,129744,129750,14,129754,129759,14,129768,129775,14,129783,129791,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,2192,2193,1,2250,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,3132,3132,5,3137,3140,7,3146,3149,5,3170,3171,5,3202,3203,7,3262,3262,7,3264,3265,7,3267,3268,7,3271,3272,7,3276,3277,5,3298,3299,5,3330,3331,7,3390,3390,5,3393,3396,5,3402,3404,7,3406,3406,1,3426,3427,5,3458,3459,7,3535,3535,5,3538,3540,5,3544,3550,7,3570,3571,7,3635,3635,7,3655,3662,5,3763,3763,7,3784,3789,5,3893,3893,5,3897,3897,5,3953,3966,5,3968,3972,5,3981,3991,5,4038,4038,5,4145,4145,7,4153,4154,5,4157,4158,5,4184,4185,5,4209,4212,5,4228,4228,7,4237,4237,5,4352,4447,8,4520,4607,10,5906,5908,5,5938,5939,5,5970,5971,5,6068,6069,5,6071,6077,5,6086,6086,5,6089,6099,5,6155,6157,5,6159,6159,5,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,6862,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,7679,5,8204,8204,5,8206,8207,4,8233,8233,4,8252,8252,14,8288,8292,4,8294,8303,4,8413,8416,5,8418,8420,5,8482,8482,14,8596,8601,14,8986,8987,14,9096,9096,14,9193,9196,14,9199,9199,14,9201,9202,14,9208,9210,14,9642,9643,14,9664,9664,14,9728,9729,14,9732,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,9775,9775,14,9784,9785,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,9874,14,9876,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,9934,14,9936,9936,14,9938,9938,14,9940,9940,14,9961,9961,14,9963,9967,14,9970,9971,14,9973,9973,14,9975,9977,14,9979,9980,14,9982,9985,14,9987,9988,14,9992,9996,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,10083,14,10085,10087,14,10145,10145,14,10175,10175,14,11013,11015,14,11088,11088,14,11503,11505,5,11744,11775,5,12334,12335,5,12349,12349,14,12951,12951,14,42607,42607,5,42612,42621,5,42736,42737,5,43014,43014,5,43043,43044,7,43047,43047,7,43136,43137,7,43204,43205,5,43263,43263,5,43335,43345,5,43360,43388,8,43395,43395,7,43444,43445,7,43450,43451,7,43454,43456,7,43561,43566,5,43569,43570,5,43573,43574,5,43596,43596,5,43644,43644,5,43698,43700,5,43710,43711,5,43755,43755,7,43758,43759,7,43766,43766,5,44005,44005,5,44008,44008,5,44012,44012,7,44032,44032,11,44060,44060,11,44088,44088,11,44116,44116,11,44144,44144,11,44172,44172,11,44200,44200,11,44228,44228,11,44256,44256,11,44284,44284,11,44312,44312,11,44340,44340,11,44368,44368,11,44396,44396,11,44424,44424,11,44452,44452,11,44480,44480,11,44508,44508,11,44536,44536,11,44564,44564,11,44592,44592,11,44620,44620,11,44648,44648,11,44676,44676,11,44704,44704,11,44732,44732,11,44760,44760,11,44788,44788,11,44816,44816,11,44844,44844,11,44872,44872,11,44900,44900,11,44928,44928,11,44956,44956,11,44984,44984,11,45012,45012,11,45040,45040,11,45068,45068,11,45096,45096,11,45124,45124,11,45152,45152,11,45180,45180,11,45208,45208,11,45236,45236,11,45264,45264,11,45292,45292,11,45320,45320,11,45348,45348,11,45376,45376,11,45404,45404,11,45432,45432,11,45460,45460,11,45488,45488,11,45516,45516,11,45544,45544,11,45572,45572,11,45600,45600,11,45628,45628,11,45656,45656,11,45684,45684,11,45712,45712,11,45740,45740,11,45768,45768,11,45796,45796,11,45824,45824,11,45852,45852,11,45880,45880,11,45908,45908,11,45936,45936,11,45964,45964,11,45992,45992,11,46020,46020,11,46048,46048,11,46076,46076,11,46104,46104,11,46132,46132,11,46160,46160,11,46188,46188,11,46216,46216,11,46244,46244,11,46272,46272,11,46300,46300,11,46328,46328,11,46356,46356,11,46384,46384,11,46412,46412,11,46440,46440,11,46468,46468,11,46496,46496,11,46524,46524,11,46552,46552,11,46580,46580,11,46608,46608,11,46636,46636,11,46664,46664,11,46692,46692,11,46720,46720,11,46748,46748,11,46776,46776,11,46804,46804,11,46832,46832,11,46860,46860,11,46888,46888,11,46916,46916,11,46944,46944,11,46972,46972,11,47000,47000,11,47028,47028,11,47056,47056,11,47084,47084,11,47112,47112,11,47140,47140,11,47168,47168,11,47196,47196,11,47224,47224,11,47252,47252,11,47280,47280,11,47308,47308,11,47336,47336,11,47364,47364,11,47392,47392,11,47420,47420,11,47448,47448,11,47476,47476,11,47504,47504,11,47532,47532,11,47560,47560,11,47588,47588,11,47616,47616,11,47644,47644,11,47672,47672,11,47700,47700,11,47728,47728,11,47756,47756,11,47784,47784,11,47812,47812,11,47840,47840,11,47868,47868,11,47896,47896,11,47924,47924,11,47952,47952,11,47980,47980,11,48008,48008,11,48036,48036,11,48064,48064,11,48092,48092,11,48120,48120,11,48148,48148,11,48176,48176,11,48204,48204,11,48232,48232,11,48260,48260,11,48288,48288,11,48316,48316,11,48344,48344,11,48372,48372,11,48400,48400,11,48428,48428,11,48456,48456,11,48484,48484,11,48512,48512,11,48540,48540,11,48568,48568,11,48596,48596,11,48624,48624,11,48652,48652,11,48680,48680,11,48708,48708,11,48736,48736,11,48764,48764,11,48792,48792,11,48820,48820,11,48848,48848,11,48876,48876,11,48904,48904,11,48932,48932,11,48960,48960,11,48988,48988,11,49016,49016,11,49044,49044,11,49072,49072,11,49100,49100,11,49128,49128,11,49156,49156,11,49184,49184,11,49212,49212,11,49240,49240,11,49268,49268,11,49296,49296,11,49324,49324,11,49352,49352,11,49380,49380,11,49408,49408,11,49436,49436,11,49464,49464,11,49492,49492,11,49520,49520,11,49548,49548,11,49576,49576,11,49604,49604,11,49632,49632,11,49660,49660,11,49688,49688,11,49716,49716,11,49744,49744,11,49772,49772,11,49800,49800,11,49828,49828,11,49856,49856,11,49884,49884,11,49912,49912,11,49940,49940,11,49968,49968,11,49996,49996,11,50024,50024,11,50052,50052,11,50080,50080,11,50108,50108,11,50136,50136,11,50164,50164,11,50192,50192,11,50220,50220,11,50248,50248,11,50276,50276,11,50304,50304,11,50332,50332,11,50360,50360,11,50388,50388,11,50416,50416,11,50444,50444,11,50472,50472,11,50500,50500,11,50528,50528,11,50556,50556,11,50584,50584,11,50612,50612,11,50640,50640,11,50668,50668,11,50696,50696,11,50724,50724,11,50752,50752,11,50780,50780,11,50808,50808,11,50836,50836,11,50864,50864,11,50892,50892,11,50920,50920,11,50948,50948,11,50976,50976,11,51004,51004,11,51032,51032,11,51060,51060,11,51088,51088,11,51116,51116,11,51144,51144,11,51172,51172,11,51200,51200,11,51228,51228,11,51256,51256,11,51284,51284,11,51312,51312,11,51340,51340,11,51368,51368,11,51396,51396,11,51424,51424,11,51452,51452,11,51480,51480,11,51508,51508,11,51536,51536,11,51564,51564,11,51592,51592,11,51620,51620,11,51648,51648,11,51676,51676,11,51704,51704,11,51732,51732,11,51760,51760,11,51788,51788,11,51816,51816,11,51844,51844,11,51872,51872,11,51900,51900,11,51928,51928,11,51956,51956,11,51984,51984,11,52012,52012,11,52040,52040,11,52068,52068,11,52096,52096,11,52124,52124,11,52152,52152,11,52180,52180,11,52208,52208,11,52236,52236,11,52264,52264,11,52292,52292,11,52320,52320,11,52348,52348,11,52376,52376,11,52404,52404,11,52432,52432,11,52460,52460,11,52488,52488,11,52516,52516,11,52544,52544,11,52572,52572,11,52600,52600,11,52628,52628,11,52656,52656,11,52684,52684,11,52712,52712,11,52740,52740,11,52768,52768,11,52796,52796,11,52824,52824,11,52852,52852,11,52880,52880,11,52908,52908,11,52936,52936,11,52964,52964,11,52992,52992,11,53020,53020,11,53048,53048,11,53076,53076,11,53104,53104,11,53132,53132,11,53160,53160,11,53188,53188,11,53216,53216,11,53244,53244,11,53272,53272,11,53300,53300,11,53328,53328,11,53356,53356,11,53384,53384,11,53412,53412,11,53440,53440,11,53468,53468,11,53496,53496,11,53524,53524,11,53552,53552,11,53580,53580,11,53608,53608,11,53636,53636,11,53664,53664,11,53692,53692,11,53720,53720,11,53748,53748,11,53776,53776,11,53804,53804,11,53832,53832,11,53860,53860,11,53888,53888,11,53916,53916,11,53944,53944,11,53972,53972,11,54000,54000,11,54028,54028,11,54056,54056,11,54084,54084,11,54112,54112,11,54140,54140,11,54168,54168,11,54196,54196,11,54224,54224,11,54252,54252,11,54280,54280,11,54308,54308,11,54336,54336,11,54364,54364,11,54392,54392,11,54420,54420,11,54448,54448,11,54476,54476,11,54504,54504,11,54532,54532,11,54560,54560,11,54588,54588,11,54616,54616,11,54644,54644,11,54672,54672,11,54700,54700,11,54728,54728,11,54756,54756,11,54784,54784,11,54812,54812,11,54840,54840,11,54868,54868,11,54896,54896,11,54924,54924,11,54952,54952,11,54980,54980,11,55008,55008,11,55036,55036,11,55064,55064,11,55092,55092,11,55120,55120,11,55148,55148,11,55176,55176,11,55216,55238,9,64286,64286,5,65056,65071,5,65438,65439,5,65529,65531,4,66272,66272,5,68097,68099,5,68108,68111,5,68159,68159,5,68900,68903,5,69446,69456,5,69632,69632,7,69634,69634,7,69744,69744,5,69759,69761,5,69808,69810,7,69815,69816,7,69821,69821,1,69837,69837,1,69927,69931,5,69933,69940,5,70003,70003,5,70018,70018,7,70070,70078,5,70082,70083,1,70094,70094,7,70188,70190,7,70194,70195,7,70197,70197,7,70206,70206,5,70368,70370,7,70400,70401,5,70459,70460,5,70463,70463,7,70465,70468,7,70475,70477,7,70498,70499,7,70512,70516,5,70712,70719,5,70722,70724,5,70726,70726,5,70832,70832,5,70835,70840,5,70842,70842,5,70845,70845,5,70847,70848,5,70850,70851,5,71088,71089,7,71096,71099,7,71102,71102,7,71132,71133,5,71219,71226,5,71229,71229,5,71231,71232,5,71340,71340,7,71342,71343,7,71350,71350,7,71453,71455,5,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,118528,118573,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,123566,123566,5,125136,125142,5,126976,126979,14,126981,127182,14,127184,127231,14,127279,127279,14,127344,127345,14,127374,127374,14,127405,127461,14,127489,127490,14,127514,127514,14,127538,127546,14,127561,127567,14,127570,127743,14,127757,127758,14,127760,127760,14,127762,127762,14,127766,127768,14,127770,127770,14,127772,127772,14,127775,127776,14,127778,127779,14,127789,127791,14,127794,127795,14,127798,127798,14,127819,127819,14,127824,127824,14,127868,127868,14,127870,127871,14,127892,127893,14,127896,127896,14,127900,127901,14,127904,127940,14,127942,127942,14,127944,127944,14,127946,127946,14,127951,127955,14,127968,127971,14,127973,127984,14,127987,127987,14,127989,127989,14,127991,127991,14,127995,127999,5,128008,128008,14,128012,128014,14,128017,128018,14,128020,128020,14,128022,128022,14,128042,128042,14,128063,128063,14,128065,128065,14,128101,128101,14,128108,128109,14,128173,128173,14,128182,128183,14,128236,128237,14,128239,128239,14,128245,128245,14,128248,128248,14,128253,128253,14,128255,128258,14,128260,128263,14,128265,128265,14,128277,128277,14,128300,128301,14,128326,128328,14,128331,128334,14,128336,128347,14,128360,128366,14,128369,128370,14,128378,128378,14,128391,128391,14,128394,128397,14,128400,128400,14,128405,128406,14,128420,128420,14,128422,128423,14,128425,128432,14,128435,128443,14,128445,128449,14,128453,128464,14,128468,128475,14,128479,128480,14,128482,128482,14,128484,128487,14,128489,128494,14,128496,128498,14,128500,128505,14,128507,128511,14,128513,128518,14,128521,128525,14,128527,128527,14,128529,128529,14,128533,128533,14,128535,128535,14,128537,128537,14]');\n}\n//#endregion\n/**\n * Computes the offset after performing a left delete on the given string,\n * while considering unicode grapheme/emoji rules.\n*/\nexport function getLeftDeleteOffset(offset, str) {\n    if (offset === 0) {\n        return 0;\n    }\n    // Try to delete emoji part.\n    const emojiOffset = getOffsetBeforeLastEmojiComponent(offset, str);\n    if (emojiOffset !== undefined) {\n        return emojiOffset;\n    }\n    // Otherwise, just skip a single code point.\n    const iterator = new CodePointIterator(str, offset);\n    iterator.prevCodePoint();\n    return iterator.offset;\n}\nfunction getOffsetBeforeLastEmojiComponent(initialOffset, str) {\n    // See https://www.unicode.org/reports/tr51/tr51-14.html#EBNF_and_Regex for the\n    // structure of emojis.\n    const iterator = new CodePointIterator(str, initialOffset);\n    let codePoint = iterator.prevCodePoint();\n    // Skip modifiers\n    while ((isEmojiModifier(codePoint) || codePoint === 65039 /* CodePoint.emojiVariantSelector */ || codePoint === 8419 /* CodePoint.enclosingKeyCap */)) {\n        if (iterator.offset === 0) {\n            // Cannot skip modifier, no preceding emoji base.\n            return undefined;\n        }\n        codePoint = iterator.prevCodePoint();\n    }\n    // Expect base emoji\n    if (!isEmojiImprecise(codePoint)) {\n        // Unexpected code point, not a valid emoji.\n        return undefined;\n    }\n    let resultOffset = iterator.offset;\n    if (resultOffset > 0) {\n        // Skip optional ZWJ code points that combine multiple emojis.\n        // In theory, we should check if that ZWJ actually combines multiple emojis\n        // to prevent deleting ZWJs in situations we didn't account for.\n        const optionalZwjCodePoint = iterator.prevCodePoint();\n        if (optionalZwjCodePoint === 8205 /* CodePoint.zwj */) {\n            resultOffset = iterator.offset;\n        }\n    }\n    return resultOffset;\n}\nfunction isEmojiModifier(codePoint) {\n    return 0x1F3FB <= codePoint && codePoint <= 0x1F3FF;\n}\nexport const noBreakWhitespace = '\\xa0';\nexport class AmbiguousCharacters {\n    static { this.ambiguousCharacterData = new Lazy(() => {\n        // Generated using https://github.com/hediet/vscode-unicode-data\n        // Stored as key1, value1, key2, value2, ...\n        return JSON.parse('{\\\"_common\\\":[8232,32,8233,32,5760,32,8192,32,8193,32,8194,32,8195,32,8196,32,8197,32,8198,32,8200,32,8201,32,8202,32,8287,32,8199,32,8239,32,2042,95,65101,95,65102,95,65103,95,8208,45,8209,45,8210,45,65112,45,1748,45,8259,45,727,45,8722,45,10134,45,11450,45,1549,44,1643,44,8218,44,184,44,42233,44,894,59,2307,58,2691,58,1417,58,1795,58,1796,58,5868,58,65072,58,6147,58,6153,58,8282,58,1475,58,760,58,42889,58,8758,58,720,58,42237,58,451,33,11601,33,660,63,577,63,2429,63,5038,63,42731,63,119149,46,8228,46,1793,46,1794,46,42510,46,68176,46,1632,46,1776,46,42232,46,1373,96,65287,96,8219,96,8242,96,1370,96,1523,96,8175,96,65344,96,900,96,8189,96,8125,96,8127,96,8190,96,697,96,884,96,712,96,714,96,715,96,756,96,699,96,701,96,700,96,702,96,42892,96,1497,96,2036,96,2037,96,5194,96,5836,96,94033,96,94034,96,65339,91,10088,40,10098,40,12308,40,64830,40,65341,93,10089,41,10099,41,12309,41,64831,41,10100,123,119060,123,10101,125,65342,94,8270,42,1645,42,8727,42,66335,42,5941,47,8257,47,8725,47,8260,47,9585,47,10187,47,10744,47,119354,47,12755,47,12339,47,11462,47,20031,47,12035,47,65340,92,65128,92,8726,92,10189,92,10741,92,10745,92,119311,92,119355,92,12756,92,20022,92,12034,92,42872,38,708,94,710,94,5869,43,10133,43,66203,43,8249,60,10094,60,706,60,119350,60,5176,60,5810,60,5120,61,11840,61,12448,61,42239,61,8250,62,10095,62,707,62,119351,62,5171,62,94015,62,8275,126,732,126,8128,126,8764,126,65372,124,65293,45,120784,50,120794,50,120804,50,120814,50,120824,50,130034,50,42842,50,423,50,1000,50,42564,50,5311,50,42735,50,119302,51,120785,51,120795,51,120805,51,120815,51,120825,51,130035,51,42923,51,540,51,439,51,42858,51,11468,51,1248,51,94011,51,71882,51,120786,52,120796,52,120806,52,120816,52,120826,52,130036,52,5070,52,71855,52,120787,53,120797,53,120807,53,120817,53,120827,53,130037,53,444,53,71867,53,120788,54,120798,54,120808,54,120818,54,120828,54,130038,54,11474,54,5102,54,71893,54,119314,55,120789,55,120799,55,120809,55,120819,55,120829,55,130039,55,66770,55,71878,55,2819,56,2538,56,2666,56,125131,56,120790,56,120800,56,120810,56,120820,56,120830,56,130040,56,547,56,546,56,66330,56,2663,57,2920,57,2541,57,3437,57,120791,57,120801,57,120811,57,120821,57,120831,57,130041,57,42862,57,11466,57,71884,57,71852,57,71894,57,9082,97,65345,97,119834,97,119886,97,119938,97,119990,97,120042,97,120094,97,120146,97,120198,97,120250,97,120302,97,120354,97,120406,97,120458,97,593,97,945,97,120514,97,120572,97,120630,97,120688,97,120746,97,65313,65,119808,65,119860,65,119912,65,119964,65,120016,65,120068,65,120120,65,120172,65,120224,65,120276,65,120328,65,120380,65,120432,65,913,65,120488,65,120546,65,120604,65,120662,65,120720,65,5034,65,5573,65,42222,65,94016,65,66208,65,119835,98,119887,98,119939,98,119991,98,120043,98,120095,98,120147,98,120199,98,120251,98,120303,98,120355,98,120407,98,120459,98,388,98,5071,98,5234,98,5551,98,65314,66,8492,66,119809,66,119861,66,119913,66,120017,66,120069,66,120121,66,120173,66,120225,66,120277,66,120329,66,120381,66,120433,66,42932,66,914,66,120489,66,120547,66,120605,66,120663,66,120721,66,5108,66,5623,66,42192,66,66178,66,66209,66,66305,66,65347,99,8573,99,119836,99,119888,99,119940,99,119992,99,120044,99,120096,99,120148,99,120200,99,120252,99,120304,99,120356,99,120408,99,120460,99,7428,99,1010,99,11429,99,43951,99,66621,99,128844,67,71922,67,71913,67,65315,67,8557,67,8450,67,8493,67,119810,67,119862,67,119914,67,119966,67,120018,67,120174,67,120226,67,120278,67,120330,67,120382,67,120434,67,1017,67,11428,67,5087,67,42202,67,66210,67,66306,67,66581,67,66844,67,8574,100,8518,100,119837,100,119889,100,119941,100,119993,100,120045,100,120097,100,120149,100,120201,100,120253,100,120305,100,120357,100,120409,100,120461,100,1281,100,5095,100,5231,100,42194,100,8558,68,8517,68,119811,68,119863,68,119915,68,119967,68,120019,68,120071,68,120123,68,120175,68,120227,68,120279,68,120331,68,120383,68,120435,68,5024,68,5598,68,5610,68,42195,68,8494,101,65349,101,8495,101,8519,101,119838,101,119890,101,119942,101,120046,101,120098,101,120150,101,120202,101,120254,101,120306,101,120358,101,120410,101,120462,101,43826,101,1213,101,8959,69,65317,69,8496,69,119812,69,119864,69,119916,69,120020,69,120072,69,120124,69,120176,69,120228,69,120280,69,120332,69,120384,69,120436,69,917,69,120492,69,120550,69,120608,69,120666,69,120724,69,11577,69,5036,69,42224,69,71846,69,71854,69,66182,69,119839,102,119891,102,119943,102,119995,102,120047,102,120099,102,120151,102,120203,102,120255,102,120307,102,120359,102,120411,102,120463,102,43829,102,42905,102,383,102,7837,102,1412,102,119315,70,8497,70,119813,70,119865,70,119917,70,120021,70,120073,70,120125,70,120177,70,120229,70,120281,70,120333,70,120385,70,120437,70,42904,70,988,70,120778,70,5556,70,42205,70,71874,70,71842,70,66183,70,66213,70,66853,70,65351,103,8458,103,119840,103,119892,103,119944,103,120048,103,120100,103,120152,103,120204,103,120256,103,120308,103,120360,103,120412,103,120464,103,609,103,7555,103,397,103,1409,103,119814,71,119866,71,119918,71,119970,71,120022,71,120074,71,120126,71,120178,71,120230,71,120282,71,120334,71,120386,71,120438,71,1292,71,5056,71,5107,71,42198,71,65352,104,8462,104,119841,104,119945,104,119997,104,120049,104,120101,104,120153,104,120205,104,120257,104,120309,104,120361,104,120413,104,120465,104,1211,104,1392,104,5058,104,65320,72,8459,72,8460,72,8461,72,119815,72,119867,72,119919,72,120023,72,120179,72,120231,72,120283,72,120335,72,120387,72,120439,72,919,72,120494,72,120552,72,120610,72,120668,72,120726,72,11406,72,5051,72,5500,72,42215,72,66255,72,731,105,9075,105,65353,105,8560,105,8505,105,8520,105,119842,105,119894,105,119946,105,119998,105,120050,105,120102,105,120154,105,120206,105,120258,105,120310,105,120362,105,120414,105,120466,105,120484,105,618,105,617,105,953,105,8126,105,890,105,120522,105,120580,105,120638,105,120696,105,120754,105,1110,105,42567,105,1231,105,43893,105,5029,105,71875,105,65354,106,8521,106,119843,106,119895,106,119947,106,119999,106,120051,106,120103,106,120155,106,120207,106,120259,106,120311,106,120363,106,120415,106,120467,106,1011,106,1112,106,65322,74,119817,74,119869,74,119921,74,119973,74,120025,74,120077,74,120129,74,120181,74,120233,74,120285,74,120337,74,120389,74,120441,74,42930,74,895,74,1032,74,5035,74,5261,74,42201,74,119844,107,119896,107,119948,107,120000,107,120052,107,120104,107,120156,107,120208,107,120260,107,120312,107,120364,107,120416,107,120468,107,8490,75,65323,75,119818,75,119870,75,119922,75,119974,75,120026,75,120078,75,120130,75,120182,75,120234,75,120286,75,120338,75,120390,75,120442,75,922,75,120497,75,120555,75,120613,75,120671,75,120729,75,11412,75,5094,75,5845,75,42199,75,66840,75,1472,108,8739,73,9213,73,65512,73,1633,108,1777,73,66336,108,125127,108,120783,73,120793,73,120803,73,120813,73,120823,73,130033,73,65321,73,8544,73,8464,73,8465,73,119816,73,119868,73,119920,73,120024,73,120128,73,120180,73,120232,73,120284,73,120336,73,120388,73,120440,73,65356,108,8572,73,8467,108,119845,108,119897,108,119949,108,120001,108,120053,108,120105,73,120157,73,120209,73,120261,73,120313,73,120365,73,120417,73,120469,73,448,73,120496,73,120554,73,120612,73,120670,73,120728,73,11410,73,1030,73,1216,73,1493,108,1503,108,1575,108,126464,108,126592,108,65166,108,65165,108,1994,108,11599,73,5825,73,42226,73,93992,73,66186,124,66313,124,119338,76,8556,76,8466,76,119819,76,119871,76,119923,76,120027,76,120079,76,120131,76,120183,76,120235,76,120287,76,120339,76,120391,76,120443,76,11472,76,5086,76,5290,76,42209,76,93974,76,71843,76,71858,76,66587,76,66854,76,65325,77,8559,77,8499,77,119820,77,119872,77,119924,77,120028,77,120080,77,120132,77,120184,77,120236,77,120288,77,120340,77,120392,77,120444,77,924,77,120499,77,120557,77,120615,77,120673,77,120731,77,1018,77,11416,77,5047,77,5616,77,5846,77,42207,77,66224,77,66321,77,119847,110,119899,110,119951,110,120003,110,120055,110,120107,110,120159,110,120211,110,120263,110,120315,110,120367,110,120419,110,120471,110,1400,110,1404,110,65326,78,8469,78,119821,78,119873,78,119925,78,119977,78,120029,78,120081,78,120185,78,120237,78,120289,78,120341,78,120393,78,120445,78,925,78,120500,78,120558,78,120616,78,120674,78,120732,78,11418,78,42208,78,66835,78,3074,111,3202,111,3330,111,3458,111,2406,111,2662,111,2790,111,3046,111,3174,111,3302,111,3430,111,3664,111,3792,111,4160,111,1637,111,1781,111,65359,111,8500,111,119848,111,119900,111,119952,111,120056,111,120108,111,120160,111,120212,111,120264,111,120316,111,120368,111,120420,111,120472,111,7439,111,7441,111,43837,111,959,111,120528,111,120586,111,120644,111,120702,111,120760,111,963,111,120532,111,120590,111,120648,111,120706,111,120764,111,11423,111,4351,111,1413,111,1505,111,1607,111,126500,111,126564,111,126596,111,65259,111,65260,111,65258,111,65257,111,1726,111,64428,111,64429,111,64427,111,64426,111,1729,111,64424,111,64425,111,64423,111,64422,111,1749,111,3360,111,4125,111,66794,111,71880,111,71895,111,66604,111,1984,79,2534,79,2918,79,12295,79,70864,79,71904,79,120782,79,120792,79,120802,79,120812,79,120822,79,130032,79,65327,79,119822,79,119874,79,119926,79,119978,79,120030,79,120082,79,120134,79,120186,79,120238,79,120290,79,120342,79,120394,79,120446,79,927,79,120502,79,120560,79,120618,79,120676,79,120734,79,11422,79,1365,79,11604,79,4816,79,2848,79,66754,79,42227,79,71861,79,66194,79,66219,79,66564,79,66838,79,9076,112,65360,112,119849,112,119901,112,119953,112,120005,112,120057,112,120109,112,120161,112,120213,112,120265,112,120317,112,120369,112,120421,112,120473,112,961,112,120530,112,120544,112,120588,112,120602,112,120646,112,120660,112,120704,112,120718,112,120762,112,120776,112,11427,112,65328,80,8473,80,119823,80,119875,80,119927,80,119979,80,120031,80,120083,80,120187,80,120239,80,120291,80,120343,80,120395,80,120447,80,929,80,120504,80,120562,80,120620,80,120678,80,120736,80,11426,80,5090,80,5229,80,42193,80,66197,80,119850,113,119902,113,119954,113,120006,113,120058,113,120110,113,120162,113,120214,113,120266,113,120318,113,120370,113,120422,113,120474,113,1307,113,1379,113,1382,113,8474,81,119824,81,119876,81,119928,81,119980,81,120032,81,120084,81,120188,81,120240,81,120292,81,120344,81,120396,81,120448,81,11605,81,119851,114,119903,114,119955,114,120007,114,120059,114,120111,114,120163,114,120215,114,120267,114,120319,114,120371,114,120423,114,120475,114,43847,114,43848,114,7462,114,11397,114,43905,114,119318,82,8475,82,8476,82,8477,82,119825,82,119877,82,119929,82,120033,82,120189,82,120241,82,120293,82,120345,82,120397,82,120449,82,422,82,5025,82,5074,82,66740,82,5511,82,42211,82,94005,82,65363,115,119852,115,119904,115,119956,115,120008,115,120060,115,120112,115,120164,115,120216,115,120268,115,120320,115,120372,115,120424,115,120476,115,42801,115,445,115,1109,115,43946,115,71873,115,66632,115,65331,83,119826,83,119878,83,119930,83,119982,83,120034,83,120086,83,120138,83,120190,83,120242,83,120294,83,120346,83,120398,83,120450,83,1029,83,1359,83,5077,83,5082,83,42210,83,94010,83,66198,83,66592,83,119853,116,119905,116,119957,116,120009,116,120061,116,120113,116,120165,116,120217,116,120269,116,120321,116,120373,116,120425,116,120477,116,8868,84,10201,84,128872,84,65332,84,119827,84,119879,84,119931,84,119983,84,120035,84,120087,84,120139,84,120191,84,120243,84,120295,84,120347,84,120399,84,120451,84,932,84,120507,84,120565,84,120623,84,120681,84,120739,84,11430,84,5026,84,42196,84,93962,84,71868,84,66199,84,66225,84,66325,84,119854,117,119906,117,119958,117,120010,117,120062,117,120114,117,120166,117,120218,117,120270,117,120322,117,120374,117,120426,117,120478,117,42911,117,7452,117,43854,117,43858,117,651,117,965,117,120534,117,120592,117,120650,117,120708,117,120766,117,1405,117,66806,117,71896,117,8746,85,8899,85,119828,85,119880,85,119932,85,119984,85,120036,85,120088,85,120140,85,120192,85,120244,85,120296,85,120348,85,120400,85,120452,85,1357,85,4608,85,66766,85,5196,85,42228,85,94018,85,71864,85,8744,118,8897,118,65366,118,8564,118,119855,118,119907,118,119959,118,120011,118,120063,118,120115,118,120167,118,120219,118,120271,118,120323,118,120375,118,120427,118,120479,118,7456,118,957,118,120526,118,120584,118,120642,118,120700,118,120758,118,1141,118,1496,118,71430,118,43945,118,71872,118,119309,86,1639,86,1783,86,8548,86,119829,86,119881,86,119933,86,119985,86,120037,86,120089,86,120141,86,120193,86,120245,86,120297,86,120349,86,120401,86,120453,86,1140,86,11576,86,5081,86,5167,86,42719,86,42214,86,93960,86,71840,86,66845,86,623,119,119856,119,119908,119,119960,119,120012,119,120064,119,120116,119,120168,119,120220,119,120272,119,120324,119,120376,119,120428,119,120480,119,7457,119,1121,119,1309,119,1377,119,71434,119,71438,119,71439,119,43907,119,71919,87,71910,87,119830,87,119882,87,119934,87,119986,87,120038,87,120090,87,120142,87,120194,87,120246,87,120298,87,120350,87,120402,87,120454,87,1308,87,5043,87,5076,87,42218,87,5742,120,10539,120,10540,120,10799,120,65368,120,8569,120,119857,120,119909,120,119961,120,120013,120,120065,120,120117,120,120169,120,120221,120,120273,120,120325,120,120377,120,120429,120,120481,120,5441,120,5501,120,5741,88,9587,88,66338,88,71916,88,65336,88,8553,88,119831,88,119883,88,119935,88,119987,88,120039,88,120091,88,120143,88,120195,88,120247,88,120299,88,120351,88,120403,88,120455,88,42931,88,935,88,120510,88,120568,88,120626,88,120684,88,120742,88,11436,88,11613,88,5815,88,42219,88,66192,88,66228,88,66327,88,66855,88,611,121,7564,121,65369,121,119858,121,119910,121,119962,121,120014,121,120066,121,120118,121,120170,121,120222,121,120274,121,120326,121,120378,121,120430,121,120482,121,655,121,7935,121,43866,121,947,121,8509,121,120516,121,120574,121,120632,121,120690,121,120748,121,1199,121,4327,121,71900,121,65337,89,119832,89,119884,89,119936,89,119988,89,120040,89,120092,89,120144,89,120196,89,120248,89,120300,89,120352,89,120404,89,120456,89,933,89,978,89,120508,89,120566,89,120624,89,120682,89,120740,89,11432,89,1198,89,5033,89,5053,89,42220,89,94019,89,71844,89,66226,89,119859,122,119911,122,119963,122,120015,122,120067,122,120119,122,120171,122,120223,122,120275,122,120327,122,120379,122,120431,122,120483,122,7458,122,43923,122,71876,122,66293,90,71909,90,65338,90,8484,90,8488,90,119833,90,119885,90,119937,90,119989,90,120041,90,120197,90,120249,90,120301,90,120353,90,120405,90,120457,90,918,90,120493,90,120551,90,120609,90,120667,90,120725,90,5059,90,42204,90,71849,90,65282,34,65284,36,65285,37,65286,38,65290,42,65291,43,65294,46,65295,47,65296,48,65297,49,65298,50,65299,51,65300,52,65301,53,65302,54,65303,55,65304,56,65305,57,65308,60,65309,61,65310,62,65312,64,65316,68,65318,70,65319,71,65324,76,65329,81,65330,82,65333,85,65334,86,65335,87,65343,95,65346,98,65348,100,65350,102,65355,107,65357,109,65358,110,65361,113,65362,114,65364,116,65365,117,65367,119,65370,122,65371,123,65373,125,119846,109],\\\"_default\\\":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\\\"cs\\\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\\\"de\\\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\\\"es\\\":[8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\\\"fr\\\":[65374,126,65306,58,65281,33,8216,96,8245,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\\\"it\\\":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\\\"ja\\\":[8211,45,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65292,44,65307,59],\\\"ko\\\":[8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\\\"pl\\\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\\\"pt-BR\\\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\\\"qps-ploc\\\":[160,32,8211,45,65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\\\"ru\\\":[65374,126,65306,58,65281,33,8216,96,8217,96,8245,96,180,96,12494,47,305,105,921,73,1009,112,215,120,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\\\"tr\\\":[160,32,8211,45,65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65288,40,65289,41,65292,44,65307,59,65311,63],\\\"zh-hans\\\":[65374,126,65306,58,65281,33,8245,96,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65288,40,65289,41],\\\"zh-hant\\\":[8211,45,65374,126,180,96,12494,47,1047,51,1073,54,1072,97,1040,65,1068,98,1042,66,1089,99,1057,67,1077,101,1045,69,1053,72,305,105,1050,75,921,73,1052,77,1086,111,1054,79,1009,112,1088,112,1056,80,1075,114,1058,84,215,120,1093,120,1061,88,1091,121,1059,89,65283,35,65307,59]}');\n    }); }\n    static { this.cache = new LRUCachedFunction({ getCacheKey: JSON.stringify }, (locales) => {\n        function arrayToMap(arr) {\n            const result = new Map();\n            for (let i = 0; i < arr.length; i += 2) {\n                result.set(arr[i], arr[i + 1]);\n            }\n            return result;\n        }\n        function mergeMaps(map1, map2) {\n            const result = new Map(map1);\n            for (const [key, value] of map2) {\n                result.set(key, value);\n            }\n            return result;\n        }\n        function intersectMaps(map1, map2) {\n            if (!map1) {\n                return map2;\n            }\n            const result = new Map();\n            for (const [key, value] of map1) {\n                if (map2.has(key)) {\n                    result.set(key, value);\n                }\n            }\n            return result;\n        }\n        const data = this.ambiguousCharacterData.value;\n        let filteredLocales = locales.filter((l) => !l.startsWith('_') && l in data);\n        if (filteredLocales.length === 0) {\n            filteredLocales = ['_default'];\n        }\n        let languageSpecificMap = undefined;\n        for (const locale of filteredLocales) {\n            const map = arrayToMap(data[locale]);\n            languageSpecificMap = intersectMaps(languageSpecificMap, map);\n        }\n        const commonMap = arrayToMap(data['_common']);\n        const map = mergeMaps(commonMap, languageSpecificMap);\n        return new AmbiguousCharacters(map);\n    }); }\n    static getInstance(locales) {\n        return AmbiguousCharacters.cache.get(Array.from(locales));\n    }\n    static { this._locales = new Lazy(() => Object.keys(AmbiguousCharacters.ambiguousCharacterData.value).filter((k) => !k.startsWith('_'))); }\n    static getLocales() {\n        return AmbiguousCharacters._locales.value;\n    }\n    constructor(confusableDictionary) {\n        this.confusableDictionary = confusableDictionary;\n    }\n    isAmbiguous(codePoint) {\n        return this.confusableDictionary.has(codePoint);\n    }\n    /**\n     * Returns the non basic ASCII code point that the given code point can be confused,\n     * or undefined if such code point does note exist.\n     */\n    getPrimaryConfusable(codePoint) {\n        return this.confusableDictionary.get(codePoint);\n    }\n    getConfusableCodePoints() {\n        return new Set(this.confusableDictionary.keys());\n    }\n}\nexport class InvisibleCharacters {\n    static getRawData() {\n        // Generated using https://github.com/hediet/vscode-unicode-data\n        return JSON.parse('[9,10,11,12,13,32,127,160,173,847,1564,4447,4448,6068,6069,6155,6156,6157,6158,7355,7356,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8234,8235,8236,8237,8238,8239,8287,8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,10240,12288,12644,65024,65025,65026,65027,65028,65029,65030,65031,65032,65033,65034,65035,65036,65037,65038,65039,65279,65440,65520,65521,65522,65523,65524,65525,65526,65527,65528,65532,78844,119155,119156,119157,119158,119159,119160,119161,119162,917504,917505,917506,917507,917508,917509,917510,917511,917512,917513,917514,917515,917516,917517,917518,917519,917520,917521,917522,917523,917524,917525,917526,917527,917528,917529,917530,917531,917532,917533,917534,917535,917536,917537,917538,917539,917540,917541,917542,917543,917544,917545,917546,917547,917548,917549,917550,917551,917552,917553,917554,917555,917556,917557,917558,917559,917560,917561,917562,917563,917564,917565,917566,917567,917568,917569,917570,917571,917572,917573,917574,917575,917576,917577,917578,917579,917580,917581,917582,917583,917584,917585,917586,917587,917588,917589,917590,917591,917592,917593,917594,917595,917596,917597,917598,917599,917600,917601,917602,917603,917604,917605,917606,917607,917608,917609,917610,917611,917612,917613,917614,917615,917616,917617,917618,917619,917620,917621,917622,917623,917624,917625,917626,917627,917628,917629,917630,917631,917760,917761,917762,917763,917764,917765,917766,917767,917768,917769,917770,917771,917772,917773,917774,917775,917776,917777,917778,917779,917780,917781,917782,917783,917784,917785,917786,917787,917788,917789,917790,917791,917792,917793,917794,917795,917796,917797,917798,917799,917800,917801,917802,917803,917804,917805,917806,917807,917808,917809,917810,917811,917812,917813,917814,917815,917816,917817,917818,917819,917820,917821,917822,917823,917824,917825,917826,917827,917828,917829,917830,917831,917832,917833,917834,917835,917836,917837,917838,917839,917840,917841,917842,917843,917844,917845,917846,917847,917848,917849,917850,917851,917852,917853,917854,917855,917856,917857,917858,917859,917860,917861,917862,917863,917864,917865,917866,917867,917868,917869,917870,917871,917872,917873,917874,917875,917876,917877,917878,917879,917880,917881,917882,917883,917884,917885,917886,917887,917888,917889,917890,917891,917892,917893,917894,917895,917896,917897,917898,917899,917900,917901,917902,917903,917904,917905,917906,917907,917908,917909,917910,917911,917912,917913,917914,917915,917916,917917,917918,917919,917920,917921,917922,917923,917924,917925,917926,917927,917928,917929,917930,917931,917932,917933,917934,917935,917936,917937,917938,917939,917940,917941,917942,917943,917944,917945,917946,917947,917948,917949,917950,917951,917952,917953,917954,917955,917956,917957,917958,917959,917960,917961,917962,917963,917964,917965,917966,917967,917968,917969,917970,917971,917972,917973,917974,917975,917976,917977,917978,917979,917980,917981,917982,917983,917984,917985,917986,917987,917988,917989,917990,917991,917992,917993,917994,917995,917996,917997,917998,917999]');\n    }\n    static { this._data = undefined; }\n    static getData() {\n        if (!this._data) {\n            this._data = new Set(InvisibleCharacters.getRawData());\n        }\n        return this._data;\n    }\n    static isInvisibleCharacter(codePoint) {\n        return InvisibleCharacters.getData().has(codePoint);\n    }\n    static get codePoints() {\n        return InvisibleCharacters.getData();\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { mainWindow } from './window.js';\nclass WindowManager {\n    constructor() {\n        // --- Zoom Factor\n        this.mapWindowIdToZoomFactor = new Map();\n    }\n    static { this.INSTANCE = new WindowManager(); }\n    getZoomFactor(targetWindow) {\n        return this.mapWindowIdToZoomFactor.get(this.getWindowId(targetWindow)) ?? 1;\n    }\n    getWindowId(targetWindow) {\n        return targetWindow.vscodeWindowId;\n    }\n}\nexport function addMatchMediaChangeListener(targetWindow, query, callback) {\n    if (typeof query === 'string') {\n        query = targetWindow.matchMedia(query);\n    }\n    query.addEventListener('change', callback);\n}\n/** The zoom scale for an index, e.g. 1, 1.2, 1.4 */\nexport function getZoomFactor(targetWindow) {\n    return WindowManager.INSTANCE.getZoomFactor(targetWindow);\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 isElectron = (userAgent.indexOf('Electron/') >= 0);\nexport const isAndroid = (userAgent.indexOf('Android') >= 0);\nlet standalone = false;\nif (typeof mainWindow.matchMedia === 'function') {\n    const standaloneMatchMedia = mainWindow.matchMedia('(display-mode: standalone) or (display-mode: window-controls-overlay)');\n    const fullScreenMatchMedia = mainWindow.matchMedia('(display-mode: fullscreen)');\n    standalone = standaloneMatchMedia.matches;\n    addMatchMediaChangeListener(mainWindow, standaloneMatchMedia, ({ matches }) => {\n        // entering fullscreen would change standaloneMatchMedia.matches to false\n        // if standalone is true (running as PWA) and entering fullscreen, skip this change\n        if (standalone && fullScreenMatchMedia.matches) {\n            return;\n        }\n        // otherwise update standalone (browser to PWA or PWA to browser)\n        standalone = matches;\n    });\n}\nexport function isStandalone() {\n    return standalone;\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { mainWindow } from './window.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 /* KeyboardSupport.Always */;\n        }\n        if (navigator.keyboard || browser.isSafari) {\n            return 1 /* KeyboardSupport.FullScreen */;\n        }\n        return 2 /* KeyboardSupport.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 mainWindow || navigator.maxTouchPoints > 0,\n    pointerEvents: mainWindow.PointerEvent && ('ontouchstart' in mainWindow || navigator.maxTouchPoints > 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 { illegalArgument } from './errors.js';\nexport function decodeKeybinding(keybinding, OS) {\n    if (typeof keybinding === 'number') {\n        if (keybinding === 0) {\n            return null;\n        }\n        const firstChord = (keybinding & 0x0000FFFF) >>> 0;\n        const secondChord = (keybinding & 0xFFFF0000) >>> 16;\n        if (secondChord !== 0) {\n            return new Keybinding([\n                createSimpleKeybinding(firstChord, OS),\n                createSimpleKeybinding(secondChord, OS)\n            ]);\n        }\n        return new Keybinding([createSimpleKeybinding(firstChord, OS)]);\n    }\n    else {\n        const chords = [];\n        for (let i = 0; i < keybinding.length; i++) {\n            chords.push(createSimpleKeybinding(keybinding[i], OS));\n        }\n        return new Keybinding(chords);\n    }\n}\nexport function createSimpleKeybinding(keybinding, OS) {\n    const ctrlCmd = (keybinding & 2048 /* BinaryKeybindingsMask.CtrlCmd */ ? true : false);\n    const winCtrl = (keybinding & 256 /* BinaryKeybindingsMask.WinCtrl */ ? true : false);\n    const ctrlKey = (OS === 2 /* OperatingSystem.Macintosh */ ? winCtrl : ctrlCmd);\n    const shiftKey = (keybinding & 1024 /* BinaryKeybindingsMask.Shift */ ? true : false);\n    const altKey = (keybinding & 512 /* BinaryKeybindingsMask.Alt */ ? true : false);\n    const metaKey = (OS === 2 /* OperatingSystem.Macintosh */ ? ctrlCmd : winCtrl);\n    const keyCode = (keybinding & 255 /* BinaryKeybindingsMask.KeyCode */);\n    return new KeyCodeChord(ctrlKey, shiftKey, altKey, metaKey, keyCode);\n}\n/**\n * Represents a chord which uses the `keyCode` field of keyboard events.\n * A chord is a combination of keys pressed simultaneously.\n */\nexport class KeyCodeChord {\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 (other instanceof KeyCodeChord\n            && 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 /* KeyCode.Unknown */\n            || this.keyCode === 5 /* KeyCode.Ctrl */\n            || this.keyCode === 57 /* KeyCode.Meta */\n            || this.keyCode === 6 /* KeyCode.Alt */\n            || this.keyCode === 4 /* KeyCode.Shift */);\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 /* KeyCode.Ctrl */)\n            || (this.shiftKey && this.keyCode === 4 /* KeyCode.Shift */)\n            || (this.altKey && this.keyCode === 6 /* KeyCode.Alt */)\n            || (this.metaKey && this.keyCode === 57 /* KeyCode.Meta */));\n    }\n}\n/**\n * Represents a chord which uses the `code` field of keyboard events.\n * A chord is a combination of keys pressed simultaneously.\n */\nexport class ScanCodeChord {\n    constructor(ctrlKey, shiftKey, altKey, metaKey, scanCode) {\n        this.ctrlKey = ctrlKey;\n        this.shiftKey = shiftKey;\n        this.altKey = altKey;\n        this.metaKey = metaKey;\n        this.scanCode = scanCode;\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.scanCode === 157 /* ScanCode.ControlLeft */ || this.scanCode === 161 /* ScanCode.ControlRight */))\n            || (this.shiftKey && (this.scanCode === 158 /* ScanCode.ShiftLeft */ || this.scanCode === 162 /* ScanCode.ShiftRight */))\n            || (this.altKey && (this.scanCode === 159 /* ScanCode.AltLeft */ || this.scanCode === 163 /* ScanCode.AltRight */))\n            || (this.metaKey && (this.scanCode === 160 /* ScanCode.MetaLeft */ || this.scanCode === 164 /* ScanCode.MetaRight */)));\n    }\n}\n/**\n * A keybinding is a sequence of chords.\n */\nexport class Keybinding {\n    constructor(chords) {\n        if (chords.length === 0) {\n            throw illegalArgument(`chords`);\n        }\n        this.chords = chords;\n    }\n}\nexport class ResolvedChord {\n    constructor(ctrlKey, shiftKey, altKey, metaKey, keyLabel, keyAriaLabel) {\n        this.ctrlKey = ctrlKey;\n        this.shiftKey = shiftKey;\n        this.altKey = altKey;\n        this.metaKey = metaKey;\n        this.keyLabel = keyLabel;\n        this.keyAriaLabel = keyAriaLabel;\n    }\n}\n/**\n * A resolved keybinding. Consists of one or multiple chords.\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 browser from './browser.js';\nimport { EVENT_KEY_CODE_MAP, KeyCodeUtils } from '../common/keyCodes.js';\nimport { KeyCodeChord } from '../common/keybindings.js';\nimport * as platform from '../common/platform.js';\nfunction extractKeyCode(e) {\n    if (e.charCode) {\n        // \"keypress\" events mostly\n        const char = String.fromCharCode(e.charCode).toUpperCase();\n        return KeyCodeUtils.fromString(char);\n    }\n    const keyCode = e.keyCode;\n    // browser quirks\n    if (keyCode === 3) {\n        return 7 /* KeyCode.PauseBreak */;\n    }\n    else if (browser.isFirefox) {\n        switch (keyCode) {\n            case 59: return 85 /* KeyCode.Semicolon */;\n            case 60:\n                if (platform.isLinux) {\n                    return 97 /* KeyCode.IntlBackslash */;\n                }\n                break;\n            case 61: return 86 /* KeyCode.Equal */;\n            // based on: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode#numpad_keys\n            case 107: return 109 /* KeyCode.NumpadAdd */;\n            case 109: return 111 /* KeyCode.NumpadSubtract */;\n            case 173: return 88 /* KeyCode.Minus */;\n            case 224:\n                if (platform.isMacintosh) {\n                    return 57 /* KeyCode.Meta */;\n                }\n                break;\n        }\n    }\n    else if (browser.isWebKit) {\n        if (platform.isMacintosh && keyCode === 93) {\n            // the two meta keys in the Mac have different key codes (91 and 93)\n            return 57 /* KeyCode.Meta */;\n        }\n        else if (!platform.isMacintosh && keyCode === 92) {\n            return 57 /* KeyCode.Meta */;\n        }\n    }\n    // cross browser keycodes:\n    return EVENT_KEY_CODE_MAP[keyCode] || 0 /* KeyCode.Unknown */;\n}\nconst ctrlKeyMod = (platform.isMacintosh ? 256 /* KeyMod.WinCtrl */ : 2048 /* KeyMod.CtrlCmd */);\nconst altKeyMod = 512 /* KeyMod.Alt */;\nconst shiftKeyMod = 1024 /* KeyMod.Shift */;\nconst metaKeyMod = (platform.isMacintosh ? 2048 /* KeyMod.CtrlCmd */ : 256 /* KeyMod.WinCtrl */);\nexport class StandardKeyboardEvent {\n    constructor(source) {\n        this._standardKeyboardEventBrand = true;\n        const 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.altGraphKey = e.getModifierState?.('AltGraph');\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 /* KeyCode.Ctrl */;\n        this.altKey = this.altKey || this.keyCode === 6 /* KeyCode.Alt */;\n        this.shiftKey = this.shiftKey || this.keyCode === 4 /* KeyCode.Shift */;\n        this.metaKey = this.metaKey || this.keyCode === 57 /* KeyCode.Meta */;\n        this._asKeybinding = this._computeKeybinding();\n        this._asKeyCodeChord = this._computeKeyCodeChord();\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    toKeyCodeChord() {\n        return this._asKeyCodeChord;\n    }\n    equals(other) {\n        return this._asKeybinding === other;\n    }\n    _computeKeybinding() {\n        let key = 0 /* KeyCode.Unknown */;\n        if (this.keyCode !== 5 /* KeyCode.Ctrl */ && this.keyCode !== 4 /* KeyCode.Shift */ && this.keyCode !== 6 /* KeyCode.Alt */ && this.keyCode !== 57 /* KeyCode.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    _computeKeyCodeChord() {\n        let key = 0 /* KeyCode.Unknown */;\n        if (this.keyCode !== 5 /* KeyCode.Ctrl */ && this.keyCode !== 4 /* KeyCode.Shift */ && this.keyCode !== 6 /* KeyCode.Alt */ && this.keyCode !== 57 /* KeyCode.Meta */) {\n            key = this.keyCode;\n        }\n        return new KeyCodeChord(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 *--------------------------------------------------------------------------------------------*/\nconst sameOriginWindowChainCache = new WeakMap();\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        const location = w.location;\n        const parentLocation = w.parent.location;\n        if (location.origin !== 'null' && parentLocation.origin !== 'null' && location.origin !== parentLocation.origin) {\n            return null;\n        }\n    }\n    catch (e) {\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     */\n    static getSameOriginWindowChain(targetWindow) {\n        let windowChainCache = sameOriginWindowChainCache.get(targetWindow);\n        if (!windowChainCache) {\n            windowChainCache = [];\n            sameOriginWindowChainCache.set(targetWindow, windowChainCache);\n            let w = targetWindow;\n            let parent;\n            do {\n                parent = getParentWindowIfSameOrigin(w);\n                if (parent) {\n                    windowChainCache.push({\n                        window: new WeakRef(w),\n                        iframeElement: w.frameElement || null\n                    });\n                }\n                else {\n                    windowChainCache.push({\n                        window: new WeakRef(w),\n                        iframeElement: null\n                    });\n                }\n                w = parent;\n            } while (w);\n        }\n        return windowChainCache.slice(0);\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        const windowChain = this.getSameOriginWindowChain(childWindow);\n        for (const windowChainEl of windowChain) {\n            const windowInChain = windowChainEl.window.deref();\n            top += windowInChain?.scrollY ?? 0;\n            left += windowInChain?.scrollX ?? 0;\n            if (windowInChain === ancestorWindow) {\n                break;\n            }\n            if (!windowChainEl.iframeElement) {\n                break;\n            }\n            const 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 { IframeUtils } from './iframe.js';\nimport * as platform from '../common/platform.js';\nexport class StandardMouseEvent {\n    constructor(targetWindow, 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 + this.target.ownerDocument.body.scrollLeft + this.target.ownerDocument.documentElement.scrollLeft;\n            this.posy = e.clientY + this.target.ownerDocument.body.scrollTop + this.target.ownerDocument.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        const iframeOffsets = IframeUtils.getPositionOfChildWindowRelativeToAncestorWindow(targetWindow, 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        let shouldFactorDPR = false;\n        if (browser.isChrome) {\n            // Chrome version >= 123 contains the fix to factor devicePixelRatio into the wheel event.\n            // See https://chromium.googlesource.com/chromium/src.git/+/be51b448441ff0c9d1f17e0f25c4bf1ab3f11f61\n            const chromeVersionMatch = navigator.userAgent.match(/Chrome\\/(\\d+)/);\n            const chromeMajorVersion = chromeVersionMatch ? parseInt(chromeVersionMatch[1]) : 123;\n            shouldFactorDPR = chromeMajorVersion <= 122;\n        }\n        if (e) {\n            // Old (deprecated) wheel events\n            const e1 = e;\n            const e2 = e;\n            const devicePixelRatio = e.view?.devicePixelRatio || 1;\n            // vertical delta scroll\n            if (typeof e1.wheelDeltaY !== 'undefined') {\n                if (shouldFactorDPR) {\n                    // Refs https://github.com/microsoft/vscode/issues/146403#issuecomment-1854538928\n                    this.deltaY = e1.wheelDeltaY / (120 * devicePixelRatio);\n                }\n                else {\n                    this.deltaY = e1.wheelDeltaY / 120;\n                }\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 if (shouldFactorDPR) {\n                    // Refs https://github.com/microsoft/vscode/issues/146403#issuecomment-1854538928\n                    this.deltaX = e1.wheelDeltaX / (120 * devicePixelRatio);\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                if (shouldFactorDPR) {\n                    // Refs https://github.com/microsoft/vscode/issues/146403#issuecomment-1854538928\n                    this.deltaY = e.wheelDelta / (120 * devicePixelRatio);\n                }\n                else {\n                    this.deltaY = e.wheelDelta / 120;\n                }\n            }\n        }\n    }\n    preventDefault() {\n        this.browserEvent?.preventDefault();\n    }\n    stopPropagation() {\n        this.browserEvent?.stopPropagation();\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 * Can be passed into the Delayed to defer using a microtask\n * */\nexport const MicrotaskDelay = Symbol('MicrotaskDelay');\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 './cancellation.js';\nimport { BugIndicatingError, CancellationError } from './errors.js';\nimport { Emitter, Event } from './event.js';\nimport { toDisposable } from './lifecycle.js';\nimport { setTimeout0 } from './platform.js';\nimport { MicrotaskDelay } from './symbols.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        const subscription = source.token.onCancellationRequested(() => {\n            subscription.dispose();\n            reject(new CancellationError());\n        });\n        Promise.resolve(thenable).then(value => {\n            subscription.dispose();\n            source.dispose();\n            resolve(value);\n        }, err => {\n            subscription.dispose();\n            source.dispose();\n            reject(err);\n        });\n    });\n    return new class {\n        cancel() {\n            source.cancel();\n            source.dispose();\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 new Promise((resolve, reject) => {\n        const ref = token.onCancellationRequested(() => {\n            ref.dispose();\n            resolve(defaultValue);\n        });\n        promise.then(resolve, reject).finally(() => ref.dispose());\n    });\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.isDisposed = false;\n        this.activePromise = null;\n        this.queuedPromise = null;\n        this.queuedPromiseFactory = null;\n    }\n    queue(promiseFactory) {\n        if (this.isDisposed) {\n            return Promise.reject(new Error('Throttler is disposed'));\n        }\n        if (this.activePromise) {\n            this.queuedPromiseFactory = promiseFactory;\n            if (!this.queuedPromise) {\n                const onComplete = () => {\n                    this.queuedPromise = null;\n                    if (this.isDisposed) {\n                        return;\n                    }\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    dispose() {\n        this.isDisposed = true;\n    }\n}\nconst timeoutDeferred = (timeout, fn) => {\n    let scheduled = true;\n    const handle = setTimeout(() => {\n        scheduled = false;\n        fn();\n    }, timeout);\n    return {\n        isTriggered: () => scheduled,\n        dispose: () => {\n            clearTimeout(handle);\n            scheduled = false;\n        },\n    };\n};\nconst microtaskDeferred = (fn) => {\n    let scheduled = true;\n    queueMicrotask(() => {\n        if (scheduled) {\n            scheduled = false;\n            fn();\n        }\n    });\n    return {\n        isTriggered: () => scheduled,\n        dispose: () => { scheduled = false; },\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.deferred = 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        const fn = () => {\n            this.deferred = null;\n            this.doResolve?.(null);\n        };\n        this.deferred = delay === MicrotaskDelay ? microtaskDeferred(fn) : timeoutDeferred(delay, fn);\n        return this.completionPromise;\n    }\n    isTriggered() {\n        return !!this.deferred?.isTriggered();\n    }\n    cancel() {\n        this.cancelTimeout();\n        if (this.completionPromise) {\n            this.doReject?.(new CancellationError());\n            this.completionPromise = null;\n        }\n    }\n    cancelTimeout() {\n        this.deferred?.dispose();\n        this.deferred = null;\n    }\n    dispose() {\n        this.cancel();\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        this.throttler.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(() => {\n            disposable.dispose();\n            resolve();\n        }, millis);\n        const disposable = token.onCancellationRequested(() => {\n            clearTimeout(handle);\n            disposable.dispose();\n            reject(new CancellationError());\n        });\n    });\n}\n/**\n * Creates a timeout that can be disposed using its returned value.\n * @param handler The timeout handler.\n * @param timeout An optional timeout in milliseconds.\n * @param store An optional {@link DisposableStore} that will have the timeout disposable managed automatically.\n *\n * @example\n * const store = new DisposableStore;\n * // Call the timeout after 1000ms at which point it will be automatically\n * // evicted from the store.\n * const timeoutDisposable = disposableTimeout(() => {}, 1000, store);\n *\n * if (foo) {\n *   // Cancel the timeout and evict it from store.\n *   timeoutDisposable.dispose();\n * }\n */\nexport function disposableTimeout(handler, timeout = 0, store) {\n    const timer = setTimeout(() => {\n        handler();\n        if (store) {\n            disposable.dispose();\n        }\n    }, timeout);\n    const disposable = toDisposable(() => {\n        clearTimeout(timer);\n        store?.deleteAndLeak(disposable);\n    });\n    store?.add(disposable);\n    return disposable;\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._isDisposed = false;\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        this._isDisposed = true;\n    }\n    cancel() {\n        if (this._token !== -1) {\n            clearTimeout(this._token);\n            this._token = -1;\n        }\n    }\n    cancelAndSet(runner, timeout) {\n        if (this._isDisposed) {\n            throw new BugIndicatingError(`Calling 'cancelAndSet' on a disposed TimeoutTimer`);\n        }\n        this.cancel();\n        this._token = setTimeout(() => {\n            this._token = -1;\n            runner();\n        }, timeout);\n    }\n    setIfNotSet(runner, timeout) {\n        if (this._isDisposed) {\n            throw new BugIndicatingError(`Calling 'setIfNotSet' on a disposed TimeoutTimer`);\n        }\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.disposable = undefined;\n        this.isDisposed = false;\n    }\n    cancel() {\n        this.disposable?.dispose();\n        this.disposable = undefined;\n    }\n    cancelAndSet(runner, interval, context = globalThis) {\n        if (this.isDisposed) {\n            throw new BugIndicatingError(`Calling 'cancelAndSet' on a disposed IntervalTimer`);\n        }\n        this.cancel();\n        const handle = context.setInterval(() => {\n            runner();\n        }, interval);\n        this.disposable = toDisposable(() => {\n            context.clearInterval(handle);\n            this.disposable = undefined;\n        });\n    }\n    dispose() {\n        this.cancel();\n        this.isDisposed = true;\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        this.runner?.();\n    }\n}\n/**\n * Execute the callback the next time the browser is idle, returning an\n * {@link IDisposable} that will cancel the callback when disposed. This wraps\n * [requestIdleCallback] so it will fallback to [setTimeout] if the environment\n * doesn't support it.\n *\n * @param callback The callback to run when idle, this includes an\n * [IdleDeadline] that provides the time alloted for the idle callback by the\n * browser. Not respecting this deadline will result in a degraded user\n * experience.\n * @param timeout A timeout at which point to queue no longer wait for an idle\n * callback but queue it on the regular event loop (like setTimeout). Typically\n * this should not be used.\n *\n * [IdleDeadline]: https://developer.mozilla.org/en-US/docs/Web/API/IdleDeadline\n * [requestIdleCallback]: https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback\n * [setTimeout]: https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout\n *\n * **Note** that there is `dom.ts#runWhenWindowIdle` which is better suited when running inside a browser\n * context\n */\nexport let runWhenGlobalIdle;\nexport let _runWhenIdle;\n(function () {\n    if (typeof globalThis.requestIdleCallback !== 'function' || typeof globalThis.cancelIdleCallback !== 'function') {\n        _runWhenIdle = (_targetWindow, runner) => {\n            setTimeout0(() => {\n                if (disposed) {\n                    return;\n                }\n                const end = Date.now() + 15; // one frame at 64fps\n                const deadline = {\n                    didTimeout: true,\n                    timeRemaining() {\n                        return Math.max(0, end - Date.now());\n                    }\n                };\n                runner(Object.freeze(deadline));\n            });\n            let disposed = false;\n            return {\n                dispose() {\n                    if (disposed) {\n                        return;\n                    }\n                    disposed = true;\n                }\n            };\n        };\n    }\n    else {\n        _runWhenIdle = (targetWindow, runner, timeout) => {\n            const handle = targetWindow.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                    targetWindow.cancelIdleCallback(handle);\n                }\n            };\n        };\n    }\n    runWhenGlobalIdle = (runner) => _runWhenIdle(globalThis, runner);\n})();\nexport class AbstractIdleValue {\n    constructor(targetWindow, 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(targetWindow, () => 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    get isInitialized() {\n        return this._didRun;\n    }\n}\n/**\n * An `IdleValue` that always uses the current window (which might be throttled or inactive)\n *\n * **Note** that there is `dom.ts#WindowIdleValue` which is better suited when running inside a browser\n * context\n */\nexport class GlobalIdleValue extends AbstractIdleValue {\n    constructor(executor) {\n        super(globalThis, executor);\n    }\n}\n/**\n * Creates a promise whose resolution or rejection can be controlled imperatively.\n */\nexport class DeferredPromise {\n    get isRejected() {\n        return this.outcome?.outcome === 1 /* DeferredOutcome.Rejected */;\n    }\n    get isSettled() {\n        return !!this.outcome;\n    }\n    constructor() {\n        this.p = new Promise((c, e) => {\n            this.completeCallback = c;\n            this.errorCallback = e;\n        });\n    }\n    complete(value) {\n        return new Promise(resolve => {\n            this.completeCallback(value);\n            this.outcome = { outcome: 0 /* DeferredOutcome.Resolved */, value };\n            resolve();\n        });\n    }\n    error(err) {\n        return new Promise(resolve => {\n            this.errorCallback(err);\n            this.outcome = { outcome: 1 /* DeferredOutcome.Rejected */, value: err };\n            resolve();\n        });\n    }\n    cancel() {\n        return this.error(new CancellationError());\n    }\n}\n//#endregion\n//#region Promises\nexport var Promises;\n(function (Promises) {\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    async function settled(promises) {\n        let firstError = undefined;\n        const result = await 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    Promises.settled = settled;\n    /**\n     * A helper to create a new `Promise<T>` with a body that is a promise\n     * itself. By default, an error that raises from the async body will\n     * end up as a unhandled rejection, so this utility properly awaits the\n     * body and rejects the promise as a normal promise does without async\n     * body.\n     *\n     * This method should only be used in rare cases where otherwise `async`\n     * cannot be used (e.g. when callbacks are involved that require this).\n     */\n    function withAsyncBody(bodyFn) {\n        // eslint-disable-next-line no-async-promise-executor\n        return new Promise(async (resolve, reject) => {\n            try {\n                await bodyFn(resolve, reject);\n            }\n            catch (error) {\n                reject(error);\n            }\n        });\n    }\n    Promises.withAsyncBody = withAsyncBody;\n})(Promises || (Promises = {}));\n/**\n * A rich implementation for an `AsyncIterable<T>`.\n */\nexport class AsyncIterableObject {\n    static fromArray(items) {\n        return new AsyncIterableObject((writer) => {\n            writer.emitMany(items);\n        });\n    }\n    static fromPromise(promise) {\n        return new AsyncIterableObject(async (emitter) => {\n            emitter.emitMany(await promise);\n        });\n    }\n    static fromPromises(promises) {\n        return new AsyncIterableObject(async (emitter) => {\n            await Promise.all(promises.map(async (p) => emitter.emitOne(await p)));\n        });\n    }\n    static merge(iterables) {\n        return new AsyncIterableObject(async (emitter) => {\n            await Promise.all(iterables.map(async (iterable) => {\n                for await (const item of iterable) {\n                    emitter.emitOne(item);\n                }\n            }));\n        });\n    }\n    static { this.EMPTY = AsyncIterableObject.fromArray([]); }\n    constructor(executor, onReturn) {\n        this._state = 0 /* AsyncIterableSourceState.Initial */;\n        this._results = [];\n        this._error = null;\n        this._onReturn = onReturn;\n        this._onStateChanged = new Emitter();\n        queueMicrotask(async () => {\n            const writer = {\n                emitOne: (item) => this.emitOne(item),\n                emitMany: (items) => this.emitMany(items),\n                reject: (error) => this.reject(error)\n            };\n            try {\n                await Promise.resolve(executor(writer));\n                this.resolve();\n            }\n            catch (err) {\n                this.reject(err);\n            }\n            finally {\n                writer.emitOne = undefined;\n                writer.emitMany = undefined;\n                writer.reject = undefined;\n            }\n        });\n    }\n    [Symbol.asyncIterator]() {\n        let i = 0;\n        return {\n            next: async () => {\n                do {\n                    if (this._state === 2 /* AsyncIterableSourceState.DoneError */) {\n                        throw this._error;\n                    }\n                    if (i < this._results.length) {\n                        return { done: false, value: this._results[i++] };\n                    }\n                    if (this._state === 1 /* AsyncIterableSourceState.DoneOK */) {\n                        return { done: true, value: undefined };\n                    }\n                    await Event.toPromise(this._onStateChanged.event);\n                } while (true);\n            },\n            return: async () => {\n                this._onReturn?.();\n                return { done: true, value: undefined };\n            }\n        };\n    }\n    static map(iterable, mapFn) {\n        return new AsyncIterableObject(async (emitter) => {\n            for await (const item of iterable) {\n                emitter.emitOne(mapFn(item));\n            }\n        });\n    }\n    map(mapFn) {\n        return AsyncIterableObject.map(this, mapFn);\n    }\n    static filter(iterable, filterFn) {\n        return new AsyncIterableObject(async (emitter) => {\n            for await (const item of iterable) {\n                if (filterFn(item)) {\n                    emitter.emitOne(item);\n                }\n            }\n        });\n    }\n    filter(filterFn) {\n        return AsyncIterableObject.filter(this, filterFn);\n    }\n    static coalesce(iterable) {\n        return AsyncIterableObject.filter(iterable, item => !!item);\n    }\n    coalesce() {\n        return AsyncIterableObject.coalesce(this);\n    }\n    static async toPromise(iterable) {\n        const result = [];\n        for await (const item of iterable) {\n            result.push(item);\n        }\n        return result;\n    }\n    toPromise() {\n        return AsyncIterableObject.toPromise(this);\n    }\n    /**\n     * The value will be appended at the end.\n     *\n     * **NOTE** If `resolve()` or `reject()` have already been called, this method has no effect.\n     */\n    emitOne(value) {\n        if (this._state !== 0 /* AsyncIterableSourceState.Initial */) {\n            return;\n        }\n        // it is important to add new values at the end,\n        // as we may have iterators already running on the array\n        this._results.push(value);\n        this._onStateChanged.fire();\n    }\n    /**\n     * The values will be appended at the end.\n     *\n     * **NOTE** If `resolve()` or `reject()` have already been called, this method has no effect.\n     */\n    emitMany(values) {\n        if (this._state !== 0 /* AsyncIterableSourceState.Initial */) {\n            return;\n        }\n        // it is important to add new values at the end,\n        // as we may have iterators already running on the array\n        this._results = this._results.concat(values);\n        this._onStateChanged.fire();\n    }\n    /**\n     * Calling `resolve()` will mark the result array as complete.\n     *\n     * **NOTE** `resolve()` must be called, otherwise all consumers of this iterable will hang indefinitely, similar to a non-resolved promise.\n     * **NOTE** If `resolve()` or `reject()` have already been called, this method has no effect.\n     */\n    resolve() {\n        if (this._state !== 0 /* AsyncIterableSourceState.Initial */) {\n            return;\n        }\n        this._state = 1 /* AsyncIterableSourceState.DoneOK */;\n        this._onStateChanged.fire();\n    }\n    /**\n     * Writing an error will permanently invalidate this iterable.\n     * The current users will receive an error thrown, as will all future users.\n     *\n     * **NOTE** If `resolve()` or `reject()` have already been called, this method has no effect.\n     */\n    reject(error) {\n        if (this._state !== 0 /* AsyncIterableSourceState.Initial */) {\n            return;\n        }\n        this._state = 2 /* AsyncIterableSourceState.DoneError */;\n        this._error = error;\n        this._onStateChanged.fire();\n    }\n}\nexport class CancelableAsyncIterableObject extends AsyncIterableObject {\n    constructor(_source, executor) {\n        super(executor);\n        this._source = _source;\n    }\n    cancel() {\n        this._source.cancel();\n    }\n}\nexport function createCancelableAsyncIterable(callback) {\n    const source = new CancellationTokenSource();\n    const innerIterable = callback(source.token);\n    return new CancelableAsyncIterableObject(source, async (emitter) => {\n        const subscription = source.token.onCancellationRequested(() => {\n            subscription.dispose();\n            source.dispose();\n            emitter.reject(new CancellationError());\n        });\n        try {\n            for await (const item of innerIterable) {\n                if (source.token.isCancellationRequested) {\n                    // canceled in the meantime\n                    return;\n                }\n                emitter.emitOne(item);\n            }\n            subscription.dispose();\n            source.dispose();\n        }\n        catch (err) {\n            subscription.dispose();\n            source.dispose();\n            emitter.reject(err);\n        }\n    });\n}\n//#endregion\n","/*! @license DOMPurify 3.1.7 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.1.7/LICENSE */\n\nconst {\n  entries,\n  setPrototypeOf,\n  isFrozen,\n  getPrototypeOf,\n  getOwnPropertyDescriptor\n} = Object;\nlet {\n  freeze,\n  seal,\n  create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n  apply,\n  construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n  freeze = function freeze(x) {\n    return x;\n  };\n}\nif (!seal) {\n  seal = function seal(x) {\n    return x;\n  };\n}\nif (!apply) {\n  apply = function apply(fun, thisValue, args) {\n    return fun.apply(thisValue, args);\n  };\n}\nif (!construct) {\n  construct = function construct(Func, args) {\n    return new Func(...args);\n  };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param {Function} func - The function to be wrapped and called.\n * @returns {Function} A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n  return function (thisArg) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    return apply(func, thisArg, args);\n  };\n}\n\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param {Function} func - The constructor function to be wrapped and called.\n * @returns {Function} A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(func) {\n  return function () {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    return construct(func, args);\n  };\n}\n\n/**\n * Add properties to a lookup table\n *\n * @param {Object} set - The set to which elements will be added.\n * @param {Array} array - The array containing elements to be added to the set.\n * @param {Function} transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns {Object} The modified set with added elements.\n */\nfunction addToSet(set, array) {\n  let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n  if (setPrototypeOf) {\n    // Make 'in' and truthy checks like Boolean(set.constructor)\n    // independent of any properties defined on Object.prototype.\n    // Prevent prototype setters from intercepting set as a this value.\n    setPrototypeOf(set, null);\n  }\n  let l = array.length;\n  while (l--) {\n    let element = array[l];\n    if (typeof element === 'string') {\n      const lcElement = transformCaseFunc(element);\n      if (lcElement !== element) {\n        // Config presets (e.g. tags.js, attrs.js) are immutable.\n        if (!isFrozen(array)) {\n          array[l] = lcElement;\n        }\n        element = lcElement;\n      }\n    }\n    set[element] = true;\n  }\n  return set;\n}\n\n/**\n * Clean up an array to harden against CSPP\n *\n * @param {Array} array - The array to be cleaned.\n * @returns {Array} The cleaned version of the array\n */\nfunction cleanArray(array) {\n  for (let index = 0; index < array.length; index++) {\n    const isPropertyExist = objectHasOwnProperty(array, index);\n    if (!isPropertyExist) {\n      array[index] = null;\n    }\n  }\n  return array;\n}\n\n/**\n * Shallow clone an object\n *\n * @param {Object} object - The object to be cloned.\n * @returns {Object} A new object that copies the original.\n */\nfunction clone(object) {\n  const newObject = create(null);\n  for (const [property, value] of entries(object)) {\n    const isPropertyExist = objectHasOwnProperty(object, property);\n    if (isPropertyExist) {\n      if (Array.isArray(value)) {\n        newObject[property] = cleanArray(value);\n      } else if (value && typeof value === 'object' && value.constructor === Object) {\n        newObject[property] = clone(value);\n      } else {\n        newObject[property] = value;\n      }\n    }\n  }\n  return newObject;\n}\n\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param {Object} object - The object to look up the getter function in its prototype chain.\n * @param {String} prop - The property name for which to find the getter function.\n * @returns {Function} The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n  while (object !== null) {\n    const desc = getOwnPropertyDescriptor(object, prop);\n    if (desc) {\n      if (desc.get) {\n        return unapply(desc.get);\n      }\n      if (typeof desc.value === 'function') {\n        return unapply(desc.value);\n      }\n    }\n    object = getPrototypeOf(object);\n  }\n  function fallbackValue() {\n    return null;\n  }\n  return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\n\n// SVG\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\${[\\w\\W]*}/gm);\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  MUSTACHE_EXPR: MUSTACHE_EXPR,\n  ERB_EXPR: ERB_EXPR,\n  TMPLIT_EXPR: TMPLIT_EXPR,\n  DATA_ATTR: DATA_ATTR,\n  ARIA_ATTR: ARIA_ATTR,\n  IS_ALLOWED_URI: IS_ALLOWED_URI,\n  IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n  ATTR_WHITESPACE: ATTR_WHITESPACE,\n  DOCTYPE_NAME: DOCTYPE_NAME,\n  CUSTOM_ELEMENT: CUSTOM_ELEMENT\n});\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n  element: 1,\n  attribute: 2,\n  text: 3,\n  cdataSection: 4,\n  entityReference: 5,\n  // Deprecated\n  entityNode: 6,\n  // Deprecated\n  progressingInstruction: 7,\n  comment: 8,\n  document: 9,\n  documentType: 10,\n  documentFragment: 11,\n  notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n  return typeof window === 'undefined' ? null : window;\n};\n\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param {TrustedTypePolicyFactory} trustedTypes The policy factory.\n * @param {HTMLScriptElement} purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return {TrustedTypePolicy} The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n  if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n    return null;\n  }\n\n  // Allow the callers to control the unique policy name\n  // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n  // Policy creation with duplicate names throws in Trusted Types.\n  let suffix = null;\n  const ATTR_NAME = 'data-tt-policy-suffix';\n  if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n    suffix = purifyHostElement.getAttribute(ATTR_NAME);\n  }\n  const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n  try {\n    return trustedTypes.createPolicy(policyName, {\n      createHTML(html) {\n        return html;\n      },\n      createScriptURL(scriptUrl) {\n        return scriptUrl;\n      }\n    });\n  } catch (_) {\n    // Policy creation failed (most likely another DOMPurify script has\n    // already run). Skip creating the policy, as this will only cause errors\n    // if TT are enforced.\n    console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n    return null;\n  }\n};\nfunction createDOMPurify() {\n  let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n  const DOMPurify = root => createDOMPurify(root);\n\n  /**\n   * Version label, exposed for easier checks\n   * if DOMPurify is up to date or not\n   */\n  DOMPurify.version = '3.1.7';\n\n  /**\n   * Array of elements that DOMPurify removed during sanitation.\n   * Empty if nothing was removed.\n   */\n  DOMPurify.removed = [];\n  if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document) {\n    // Not running in a browser, provide a factory function\n    // so that you can pass your own Window\n    DOMPurify.isSupported = false;\n    return DOMPurify;\n  }\n  let {\n    document\n  } = window;\n  const originalDocument = document;\n  const currentScript = originalDocument.currentScript;\n  const {\n    DocumentFragment,\n    HTMLTemplateElement,\n    Node,\n    Element,\n    NodeFilter,\n    NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n    HTMLFormElement,\n    DOMParser,\n    trustedTypes\n  } = window;\n  const ElementPrototype = Element.prototype;\n  const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n  const remove = lookupGetter(ElementPrototype, 'remove');\n  const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n  const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n  const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n\n  // As per issue #47, the web-components registry is inherited by a\n  // new document created via createHTMLDocument. As per the spec\n  // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n  // a new empty registry is used when creating a template contents owner\n  // document, so we use that as our parent document to ensure nothing\n  // is inherited.\n  if (typeof HTMLTemplateElement === 'function') {\n    const template = document.createElement('template');\n    if (template.content && template.content.ownerDocument) {\n      document = template.content.ownerDocument;\n    }\n  }\n  let trustedTypesPolicy;\n  let emptyHTML = '';\n  const {\n    implementation,\n    createNodeIterator,\n    createDocumentFragment,\n    getElementsByTagName\n  } = document;\n  const {\n    importNode\n  } = originalDocument;\n  let hooks = {};\n\n  /**\n   * Expose whether this browser supports running the full DOMPurify.\n   */\n  DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n  const {\n    MUSTACHE_EXPR,\n    ERB_EXPR,\n    TMPLIT_EXPR,\n    DATA_ATTR,\n    ARIA_ATTR,\n    IS_SCRIPT_OR_DATA,\n    ATTR_WHITESPACE,\n    CUSTOM_ELEMENT\n  } = EXPRESSIONS;\n  let {\n    IS_ALLOWED_URI: IS_ALLOWED_URI$1\n  } = EXPRESSIONS;\n\n  /**\n   * We consider the elements and attributes below to be safe. Ideally\n   * don't add any new ones but feel free to remove unwanted ones.\n   */\n\n  /* allowed element names */\n  let ALLOWED_TAGS = null;\n  const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n\n  /* Allowed attribute names */\n  let ALLOWED_ATTR = null;\n  const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n\n  /*\n   * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.\n   * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n   * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n   * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n   */\n  let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n    tagNameCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    attributeNameCheck: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: null\n    },\n    allowCustomizedBuiltInElements: {\n      writable: true,\n      configurable: false,\n      enumerable: true,\n      value: false\n    }\n  }));\n\n  /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n  let FORBID_TAGS = null;\n\n  /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n  let FORBID_ATTR = null;\n\n  /* Decide if ARIA attributes are okay */\n  let ALLOW_ARIA_ATTR = true;\n\n  /* Decide if custom data attributes are okay */\n  let ALLOW_DATA_ATTR = true;\n\n  /* Decide if unknown protocols are okay */\n  let ALLOW_UNKNOWN_PROTOCOLS = false;\n\n  /* Decide if self-closing tags in attributes are allowed.\n   * Usually removed due to a mXSS issue in jQuery 3.0 */\n  let ALLOW_SELF_CLOSE_IN_ATTR = true;\n\n  /* Output should be safe for common template engines.\n   * This means, DOMPurify removes data attributes, mustaches and ERB\n   */\n  let SAFE_FOR_TEMPLATES = false;\n\n  /* Output should be safe even for XML used within HTML and alike.\n   * This means, DOMPurify removes comments when containing risky content.\n   */\n  let SAFE_FOR_XML = true;\n\n  /* Decide if document with <html>... should be returned */\n  let WHOLE_DOCUMENT = false;\n\n  /* Track whether config is already set on this instance of DOMPurify. */\n  let SET_CONFIG = false;\n\n  /* Decide if all elements (e.g. style, script) must be children of\n   * document.body. By default, browsers might move them to document.head */\n  let FORCE_BODY = false;\n\n  /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n   * string (or a TrustedHTML object if Trusted Types are supported).\n   * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n   */\n  let RETURN_DOM = false;\n\n  /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n   * string  (or a TrustedHTML object if Trusted Types are supported) */\n  let RETURN_DOM_FRAGMENT = false;\n\n  /* Try to return a Trusted Type object instead of a string, return a string in\n   * case Trusted Types are not supported  */\n  let RETURN_TRUSTED_TYPE = false;\n\n  /* Output should be free from DOM clobbering attacks?\n   * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n   */\n  let SANITIZE_DOM = true;\n\n  /* Achieve full DOM Clobbering protection by isolating the namespace of named\n   * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n   *\n   * HTML/DOM spec rules that enable DOM Clobbering:\n   *   - Named Access on Window (§7.3.3)\n   *   - DOM Tree Accessors (§3.1.5)\n   *   - Form Element Parent-Child Relations (§4.10.3)\n   *   - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n   *   - HTMLCollection (§4.2.10.2)\n   *\n   * Namespace isolation is implemented by prefixing `id` and `name` attributes\n   * with a constant string, i.e., `user-content-`\n   */\n  let SANITIZE_NAMED_PROPS = false;\n  const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n\n  /* Keep element content when removing element? */\n  let KEEP_CONTENT = true;\n\n  /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n   * of importing it into a new Document and returning a sanitized copy */\n  let IN_PLACE = false;\n\n  /* Allow usage of profiles like html, svg and mathMl */\n  let USE_PROFILES = {};\n\n  /* Tags to ignore content of when KEEP_CONTENT is true */\n  let FORBID_CONTENTS = null;\n  const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n\n  /* Tags that are safe for data: URIs */\n  let DATA_URI_TAGS = null;\n  const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n\n  /* Attributes safe for values like \"javascript:\" */\n  let URI_SAFE_ATTRIBUTES = null;\n  const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n  const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n  const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n  const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n  /* Document namespace */\n  let NAMESPACE = HTML_NAMESPACE;\n  let IS_EMPTY_INPUT = false;\n\n  /* Allowed XHTML+XML namespaces */\n  let ALLOWED_NAMESPACES = null;\n  const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n\n  /* Parsing of strict XHTML documents */\n  let PARSER_MEDIA_TYPE = null;\n  const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n  const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n  let transformCaseFunc = null;\n\n  /* Keep a reference to config to pass to hooks */\n  let CONFIG = null;\n\n  /* Ideally, do not touch anything below this line */\n  /* ______________________________________________ */\n\n  const formElement = document.createElement('form');\n  const isRegexOrFunction = function isRegexOrFunction(testValue) {\n    return testValue instanceof RegExp || testValue instanceof Function;\n  };\n\n  /**\n   * _parseConfig\n   *\n   * @param  {Object} cfg optional config literal\n   */\n  // eslint-disable-next-line complexity\n  const _parseConfig = function _parseConfig() {\n    let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    if (CONFIG && CONFIG === cfg) {\n      return;\n    }\n\n    /* Shield configuration object from tampering */\n    if (!cfg || typeof cfg !== 'object') {\n      cfg = {};\n    }\n\n    /* Shield configuration object from prototype pollution */\n    cfg = clone(cfg);\n    PARSER_MEDIA_TYPE =\n      // eslint-disable-next-line unicorn/prefer-includes\n      SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n\n    // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n    transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n\n    /* Set configuration parameters */\n    ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n    ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n    ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n    URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES),\n      // eslint-disable-line indent\n      cfg.ADD_URI_SAFE_ATTR,\n      // eslint-disable-line indent\n      transformCaseFunc // eslint-disable-line indent\n    ) // eslint-disable-line indent\n      : DEFAULT_URI_SAFE_ATTRIBUTES;\n    DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS),\n      // eslint-disable-line indent\n      cfg.ADD_DATA_URI_TAGS,\n      // eslint-disable-line indent\n      transformCaseFunc // eslint-disable-line indent\n    ) // eslint-disable-line indent\n      : DEFAULT_DATA_URI_TAGS;\n    FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n    FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};\n    FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};\n    USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n    ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n    ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n    ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n    ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n    SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n    SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n    WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n    RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n    RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n    RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n    FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n    SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n    SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n    KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n    IN_PLACE = cfg.IN_PLACE || false; // Default false\n    IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n    NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n    CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n    if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n    }\n    if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n      CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n    }\n    if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n      CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n    }\n    if (SAFE_FOR_TEMPLATES) {\n      ALLOW_DATA_ATTR = false;\n    }\n    if (RETURN_DOM_FRAGMENT) {\n      RETURN_DOM = true;\n    }\n\n    /* Parse profile info */\n    if (USE_PROFILES) {\n      ALLOWED_TAGS = addToSet({}, text);\n      ALLOWED_ATTR = [];\n      if (USE_PROFILES.html === true) {\n        addToSet(ALLOWED_TAGS, html$1);\n        addToSet(ALLOWED_ATTR, html);\n      }\n      if (USE_PROFILES.svg === true) {\n        addToSet(ALLOWED_TAGS, svg$1);\n        addToSet(ALLOWED_ATTR, svg);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n      if (USE_PROFILES.svgFilters === true) {\n        addToSet(ALLOWED_TAGS, svgFilters);\n        addToSet(ALLOWED_ATTR, svg);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n      if (USE_PROFILES.mathMl === true) {\n        addToSet(ALLOWED_TAGS, mathMl$1);\n        addToSet(ALLOWED_ATTR, mathMl);\n        addToSet(ALLOWED_ATTR, xml);\n      }\n    }\n\n    /* Merge configuration parameters */\n    if (cfg.ADD_TAGS) {\n      if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n        ALLOWED_TAGS = clone(ALLOWED_TAGS);\n      }\n      addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n    }\n    if (cfg.ADD_ATTR) {\n      if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n        ALLOWED_ATTR = clone(ALLOWED_ATTR);\n      }\n      addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n    }\n    if (cfg.ADD_URI_SAFE_ATTR) {\n      addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n    }\n    if (cfg.FORBID_CONTENTS) {\n      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n        FORBID_CONTENTS = clone(FORBID_CONTENTS);\n      }\n      addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n    }\n\n    /* Add #text in case KEEP_CONTENT is set to true */\n    if (KEEP_CONTENT) {\n      ALLOWED_TAGS['#text'] = true;\n    }\n\n    /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n    if (WHOLE_DOCUMENT) {\n      addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n    }\n\n    /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n    if (ALLOWED_TAGS.table) {\n      addToSet(ALLOWED_TAGS, ['tbody']);\n      delete FORBID_TAGS.tbody;\n    }\n    if (cfg.TRUSTED_TYPES_POLICY) {\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n        throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n      }\n      if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n        throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n      }\n\n      // Overwrite existing TrustedTypes policy.\n      trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n\n      // Sign local variables required by `sanitize`.\n      emptyHTML = trustedTypesPolicy.createHTML('');\n    } else {\n      // Uninitialized policy, attempt to initialize the internal dompurify policy.\n      if (trustedTypesPolicy === undefined) {\n        trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n      }\n\n      // If creating the internal policy succeeded sign internal variables.\n      if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n        emptyHTML = trustedTypesPolicy.createHTML('');\n      }\n    }\n\n    // Prevent further manipulation of configuration.\n    // Not available in IE8, Safari 5, etc.\n    if (freeze) {\n      freeze(cfg);\n    }\n    CONFIG = cfg;\n  };\n  const MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n  const HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n\n  // Certain elements are allowed in both SVG and HTML\n  // namespace. We need to specify them explicitly\n  // so that they don't get erroneously deleted from\n  // HTML namespace.\n  const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n\n  /* Keep track of all possible SVG and MathML tags\n   * so that we can perform the namespace checks\n   * correctly. */\n  const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n  const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n\n  /**\n   * @param  {Element} element a DOM element whose namespace is being checked\n   * @returns {boolean} Return false if the element has a\n   *  namespace that a spec-compliant parser would never\n   *  return. Return true otherwise.\n   */\n  const _checkValidNamespace = function _checkValidNamespace(element) {\n    let parent = getParentNode(element);\n\n    // In JSDOM, if we're inside shadow DOM, then parentNode\n    // can be null. We just simulate parent in this case.\n    if (!parent || !parent.tagName) {\n      parent = {\n        namespaceURI: NAMESPACE,\n        tagName: 'template'\n      };\n    }\n    const tagName = stringToLowerCase(element.tagName);\n    const parentTagName = stringToLowerCase(parent.tagName);\n    if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return false;\n    }\n    if (element.namespaceURI === SVG_NAMESPACE) {\n      // The only way to switch from HTML namespace to SVG\n      // is via <svg>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'svg';\n      }\n\n      // The only way to switch from MathML to SVG is via`\n      // svg if parent is either <annotation-xml> or MathML\n      // text integration points.\n      if (parent.namespaceURI === MATHML_NAMESPACE) {\n        return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n      }\n\n      // We only allow elements that are defined in SVG\n      // spec. All others are disallowed in SVG namespace.\n      return Boolean(ALL_SVG_TAGS[tagName]);\n    }\n    if (element.namespaceURI === MATHML_NAMESPACE) {\n      // The only way to switch from HTML namespace to MathML\n      // is via <math>. If it happens via any other tag, then\n      // it should be killed.\n      if (parent.namespaceURI === HTML_NAMESPACE) {\n        return tagName === 'math';\n      }\n\n      // The only way to switch from SVG to MathML is via\n      // <math> and HTML integration points\n      if (parent.namespaceURI === SVG_NAMESPACE) {\n        return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n      }\n\n      // We only allow elements that are defined in MathML\n      // spec. All others are disallowed in MathML namespace.\n      return Boolean(ALL_MATHML_TAGS[tagName]);\n    }\n    if (element.namespaceURI === HTML_NAMESPACE) {\n      // The only way to switch from SVG to HTML is via\n      // HTML integration points, and from MathML to HTML\n      // is via MathML text integration points\n      if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n        return false;\n      }\n      if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n        return false;\n      }\n\n      // We disallow tags that are specific for MathML\n      // or SVG and should never appear in HTML namespace\n      return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n    }\n\n    // For XHTML and XML documents that support custom namespaces\n    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n      return true;\n    }\n\n    // The code should never reach this place (this means\n    // that the element somehow got namespace that is not\n    // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n    // Return false just in case.\n    return false;\n  };\n\n  /**\n   * _forceRemove\n   *\n   * @param  {Node} node a DOM node\n   */\n  const _forceRemove = function _forceRemove(node) {\n    arrayPush(DOMPurify.removed, {\n      element: node\n    });\n    try {\n      // eslint-disable-next-line unicorn/prefer-dom-node-remove\n      getParentNode(node).removeChild(node);\n    } catch (_) {\n      remove(node);\n    }\n  };\n\n  /**\n   * _removeAttribute\n   *\n   * @param  {String} name an Attribute name\n   * @param  {Node} node a DOM node\n   */\n  const _removeAttribute = function _removeAttribute(name, node) {\n    try {\n      arrayPush(DOMPurify.removed, {\n        attribute: node.getAttributeNode(name),\n        from: node\n      });\n    } catch (_) {\n      arrayPush(DOMPurify.removed, {\n        attribute: null,\n        from: node\n      });\n    }\n    node.removeAttribute(name);\n\n    // We void attribute values for unremovable \"is\"\" attributes\n    if (name === 'is' && !ALLOWED_ATTR[name]) {\n      if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n        try {\n          _forceRemove(node);\n        } catch (_) { }\n      } else {\n        try {\n          node.setAttribute(name, '');\n        } catch (_) { }\n      }\n    }\n  };\n\n  /**\n   * _initDocument\n   *\n   * @param  {String} dirty a string of dirty markup\n   * @return {Document} a DOM, filled with the dirty markup\n   */\n  const _initDocument = function _initDocument(dirty) {\n    /* Create a HTML document */\n    let doc = null;\n    let leadingWhitespace = null;\n    if (FORCE_BODY) {\n      dirty = '<remove></remove>' + dirty;\n    } else {\n      /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n      const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n      leadingWhitespace = matches && matches[0];\n    }\n    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n      // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n      dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n    }\n    const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n    /*\n     * Use the DOMParser API by default, fallback later if needs be\n     * DOMParser not work for svg when has multiple root element.\n     */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      try {\n        doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n      } catch (_) { }\n    }\n\n    /* Use createHTMLDocument in case DOMParser is not available */\n    if (!doc || !doc.documentElement) {\n      doc = implementation.createDocument(NAMESPACE, 'template', null);\n      try {\n        doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n      } catch (_) {\n        // Syntax error if dirtyPayload is invalid xml\n      }\n    }\n    const body = doc.body || doc.documentElement;\n    if (dirty && leadingWhitespace) {\n      body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n    }\n\n    /* Work on whole document or just its body */\n    if (NAMESPACE === HTML_NAMESPACE) {\n      return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n    }\n    return WHOLE_DOCUMENT ? doc.documentElement : body;\n  };\n\n  /**\n   * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n   *\n   * @param  {Node} root The root element or node to start traversing on.\n   * @return {NodeIterator} The created NodeIterator\n   */\n  const _createNodeIterator = function _createNodeIterator(root) {\n    return createNodeIterator.call(root.ownerDocument || root, root,\n      // eslint-disable-next-line no-bitwise\n      NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n  };\n\n  /**\n   * _isClobbered\n   *\n   * @param  {Node} elm element to check for clobbering attacks\n   * @return {Boolean} true if clobbered, false if safe\n   */\n  const _isClobbered = function _isClobbered(elm) {\n    return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');\n  };\n\n  /**\n   * Checks whether the given object is a DOM node.\n   *\n   * @param  {Node} object object to check whether it's a DOM node\n   * @return {Boolean} true is object is a DOM node\n   */\n  const _isNode = function _isNode(object) {\n    return typeof Node === 'function' && object instanceof Node;\n  };\n\n  /**\n   * _executeHook\n   * Execute user configurable hooks\n   *\n   * @param  {String} entryPoint  Name of the hook's entry point\n   * @param  {Node} currentNode node to work on with the hook\n   * @param  {Object} data additional hook parameters\n   */\n  const _executeHook = function _executeHook(entryPoint, currentNode, data) {\n    if (!hooks[entryPoint]) {\n      return;\n    }\n    arrayForEach(hooks[entryPoint], hook => {\n      hook.call(DOMPurify, currentNode, data, CONFIG);\n    });\n  };\n\n  /**\n   * _sanitizeElements\n   *\n   * @protect nodeName\n   * @protect textContent\n   * @protect removeChild\n   *\n   * @param   {Node} currentNode to check for permission to exist\n   * @return  {Boolean} true if node was killed, false if left alive\n   */\n  const _sanitizeElements = function _sanitizeElements(currentNode) {\n    let content = null;\n\n    /* Execute a hook if present */\n    _executeHook('beforeSanitizeElements', currentNode, null);\n\n    /* Check if element is clobbered or can clobber */\n    if (_isClobbered(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Now let's check the element's type and name */\n    const tagName = transformCaseFunc(currentNode.nodeName);\n\n    /* Execute a hook if present */\n    _executeHook('uponSanitizeElement', currentNode, {\n      tagName,\n      allowedTags: ALLOWED_TAGS\n    });\n\n    /* Detect mXSS attempts abusing namespace confusion */\n    if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w]/g, currentNode.innerHTML) && regExpTest(/<[/\\w]/g, currentNode.textContent)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Remove any occurrence of processing instructions */\n    if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Remove any kind of possibly harmful comments */\n    if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Remove element if anything forbids its presence */\n    if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n      /* Check if we have a custom element to handle */\n      if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n          return false;\n        }\n        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n          return false;\n        }\n      }\n\n      /* Keep content except for bad-listed elements */\n      if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n        const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n        const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n        if (childNodes && parentNode) {\n          const childCount = childNodes.length;\n          for (let i = childCount - 1; i >= 0; --i) {\n            const childClone = cloneNode(childNodes[i], true);\n            childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n            parentNode.insertBefore(childClone, getNextSibling(currentNode));\n          }\n        }\n      }\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Check whether element has a valid namespace */\n    if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Make sure that older browsers don't get fallback-tag mXSS */\n    if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n      _forceRemove(currentNode);\n      return true;\n    }\n\n    /* Sanitize element content to be template-safe */\n    if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n      /* Get the element's text content */\n      content = currentNode.textContent;\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n        content = stringReplace(content, expr, ' ');\n      });\n      if (currentNode.textContent !== content) {\n        arrayPush(DOMPurify.removed, {\n          element: currentNode.cloneNode()\n        });\n        currentNode.textContent = content;\n      }\n    }\n\n    /* Execute a hook if present */\n    _executeHook('afterSanitizeElements', currentNode, null);\n    return false;\n  };\n\n  /**\n   * _isValidAttribute\n   *\n   * @param  {string} lcTag Lowercase tag name of containing element.\n   * @param  {string} lcName Lowercase attribute name.\n   * @param  {string} value Attribute value.\n   * @return {Boolean} Returns true if `value` is valid, otherwise false.\n   */\n  // eslint-disable-next-line complexity\n  const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n    /* Make sure attribute cannot clobber */\n    if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n      return false;\n    }\n\n    /* Allow valid data-* attributes: At least one character after \"-\"\n        (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n        XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n        We don't need to check the value; it's always URI safe. */\n    if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)); else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)); else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n      if (\n        // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n        // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n        _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||\n        // Alternative, second condition checks if it's an `is`-attribute, AND\n        // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n        lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))); else {\n        return false;\n      }\n      /* Check value is safe. First, is attr inert? If so, is safe */\n    } else if (URI_SAFE_ATTRIBUTES[lcName]); else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))); else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]); else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))); else if (value) {\n      return false;\n    } else;\n    return true;\n  };\n\n  /**\n   * _isBasicCustomElement\n   * checks if at least one dash is included in tagName, and it's not the first char\n   * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n   *\n   * @param {string} tagName name of the tag of the node to sanitize\n   * @returns {boolean} Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n   */\n  const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n    return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n  };\n\n  /**\n   * _sanitizeAttributes\n   *\n   * @protect attributes\n   * @protect nodeName\n   * @protect removeAttribute\n   * @protect setAttribute\n   *\n   * @param  {Node} currentNode to sanitize\n   */\n  const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n    /* Execute a hook if present */\n    _executeHook('beforeSanitizeAttributes', currentNode, null);\n    const {\n      attributes\n    } = currentNode;\n\n    /* Check if we have attributes; if not we might have a text node */\n    if (!attributes) {\n      return;\n    }\n    const hookEvent = {\n      attrName: '',\n      attrValue: '',\n      keepAttr: true,\n      allowedAttributes: ALLOWED_ATTR\n    };\n    let l = attributes.length;\n\n    /* Go backwards over all attributes; safely remove bad ones */\n    while (l--) {\n      const attr = attributes[l];\n      const {\n        name,\n        namespaceURI,\n        value: attrValue\n      } = attr;\n      const lcName = transformCaseFunc(name);\n      let value = name === 'value' ? attrValue : stringTrim(attrValue);\n\n      /* Execute a hook if present */\n      hookEvent.attrName = lcName;\n      hookEvent.attrValue = value;\n      hookEvent.keepAttr = true;\n      hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n      _executeHook('uponSanitizeAttribute', currentNode, hookEvent);\n      value = hookEvent.attrValue;\n\n      /* Did the hooks approve of the attribute? */\n      if (hookEvent.forceKeepAttr) {\n        continue;\n      }\n\n      /* Remove attribute */\n      _removeAttribute(name, currentNode);\n\n      /* Did the hooks approve of the attribute? */\n      if (!hookEvent.keepAttr) {\n        continue;\n      }\n\n      /* Work around a security issue in jQuery 3.0 */\n      if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n\n      /* Sanitize attribute content to be template-safe */\n      if (SAFE_FOR_TEMPLATES) {\n        arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n          value = stringReplace(value, expr, ' ');\n        });\n      }\n\n      /* Is `value` valid for this attribute? */\n      const lcTag = transformCaseFunc(currentNode.nodeName);\n      if (!_isValidAttribute(lcTag, lcName, value)) {\n        continue;\n      }\n\n      /* Full DOM Clobbering protection via namespace isolation,\n       * Prefix id and name attributes with `user-content-`\n       */\n      if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n        // Remove the attribute with this value\n        _removeAttribute(name, currentNode);\n\n        // Prefix the value and later re-create the attribute with the sanitized value\n        value = SANITIZE_NAMED_PROPS_PREFIX + value;\n      }\n\n      /* Work around a security issue with comments inside attributes */\n      if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n        _removeAttribute(name, currentNode);\n        continue;\n      }\n\n      /* Handle attributes that require Trusted Types */\n      if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n        if (namespaceURI); else {\n          switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n            case 'TrustedHTML':\n              {\n                value = trustedTypesPolicy.createHTML(value);\n                break;\n              }\n            case 'TrustedScriptURL':\n              {\n                value = trustedTypesPolicy.createScriptURL(value);\n                break;\n              }\n          }\n        }\n      }\n\n      /* Handle invalid data-* attribute set by try-catching it */\n      try {\n        if (namespaceURI) {\n          currentNode.setAttributeNS(namespaceURI, name, value);\n        } else {\n          /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n          currentNode.setAttribute(name, value);\n        }\n        if (_isClobbered(currentNode)) {\n          _forceRemove(currentNode);\n        } else {\n          arrayPop(DOMPurify.removed);\n        }\n      } catch (_) { }\n    }\n\n    /* Execute a hook if present */\n    _executeHook('afterSanitizeAttributes', currentNode, null);\n  };\n\n  /**\n   * _sanitizeShadowDOM\n   *\n   * @param  {DocumentFragment} fragment to iterate over recursively\n   */\n  const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n    let shadowNode = null;\n    const shadowIterator = _createNodeIterator(fragment);\n\n    /* Execute a hook if present */\n    _executeHook('beforeSanitizeShadowDOM', fragment, null);\n    while (shadowNode = shadowIterator.nextNode()) {\n      /* Execute a hook if present */\n      _executeHook('uponSanitizeShadowNode', shadowNode, null);\n\n      /* Sanitize tags and elements */\n      if (_sanitizeElements(shadowNode)) {\n        continue;\n      }\n\n      /* Deep shadow DOM detected */\n      if (shadowNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(shadowNode.content);\n      }\n\n      /* Check attributes, sanitize if necessary */\n      _sanitizeAttributes(shadowNode);\n    }\n\n    /* Execute a hook if present */\n    _executeHook('afterSanitizeShadowDOM', fragment, null);\n  };\n\n  /**\n   * Sanitize\n   * Public method providing core sanitation functionality\n   *\n   * @param {String|Node} dirty string or DOM node\n   * @param {Object} cfg object\n   */\n  // eslint-disable-next-line complexity\n  DOMPurify.sanitize = function (dirty) {\n    let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    let body = null;\n    let importedNode = null;\n    let currentNode = null;\n    let returnNode = null;\n    /* Make sure we have a string to sanitize.\n      DO NOT return early, as this will return the wrong type if\n      the user has requested a DOM object rather than a string */\n    IS_EMPTY_INPUT = !dirty;\n    if (IS_EMPTY_INPUT) {\n      dirty = '<!-->';\n    }\n\n    /* Stringify, in case dirty is an object */\n    if (typeof dirty !== 'string' && !_isNode(dirty)) {\n      if (typeof dirty.toString === 'function') {\n        dirty = dirty.toString();\n        if (typeof dirty !== 'string') {\n          throw typeErrorCreate('dirty is not a string, aborting');\n        }\n      } else {\n        throw typeErrorCreate('toString is not a function');\n      }\n    }\n\n    /* Return dirty HTML if DOMPurify cannot run */\n    if (!DOMPurify.isSupported) {\n      return dirty;\n    }\n\n    /* Assign config vars */\n    if (!SET_CONFIG) {\n      _parseConfig(cfg);\n    }\n\n    /* Clean up removed elements */\n    DOMPurify.removed = [];\n\n    /* Check if dirty is correctly typed for IN_PLACE */\n    if (typeof dirty === 'string') {\n      IN_PLACE = false;\n    }\n    if (IN_PLACE) {\n      /* Do some early pre-sanitization to avoid unsafe root nodes */\n      if (dirty.nodeName) {\n        const tagName = transformCaseFunc(dirty.nodeName);\n        if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n          throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n        }\n      }\n    } else if (dirty instanceof Node) {\n      /* If dirty is a DOM element, append to an empty document to avoid\n         elements being stripped by the parser */\n      body = _initDocument('<!---->');\n      importedNode = body.ownerDocument.importNode(dirty, true);\n      if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n        /* Node is already a body, use as is */\n        body = importedNode;\n      } else if (importedNode.nodeName === 'HTML') {\n        body = importedNode;\n      } else {\n        // eslint-disable-next-line unicorn/prefer-dom-node-append\n        body.appendChild(importedNode);\n      }\n    } else {\n      /* Exit directly if we have nothing to do */\n      if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n        // eslint-disable-next-line unicorn/prefer-includes\n        dirty.indexOf('<') === -1) {\n        return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n      }\n\n      /* Initialize the document to work on */\n      body = _initDocument(dirty);\n\n      /* Check we have a DOM node from the data */\n      if (!body) {\n        return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n      }\n    }\n\n    /* Remove first element node (ours) if FORCE_BODY is set */\n    if (body && FORCE_BODY) {\n      _forceRemove(body.firstChild);\n    }\n\n    /* Get node iterator */\n    const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n\n    /* Now start iterating over the created document */\n    while (currentNode = nodeIterator.nextNode()) {\n      /* Sanitize tags and elements */\n      if (_sanitizeElements(currentNode)) {\n        continue;\n      }\n\n      /* Shadow DOM detected, sanitize it */\n      if (currentNode.content instanceof DocumentFragment) {\n        _sanitizeShadowDOM(currentNode.content);\n      }\n\n      /* Check attributes, sanitize if necessary */\n      _sanitizeAttributes(currentNode);\n    }\n\n    /* If we sanitized `dirty` in-place, return it. */\n    if (IN_PLACE) {\n      return dirty;\n    }\n\n    /* Return sanitized string or DOM */\n    if (RETURN_DOM) {\n      if (RETURN_DOM_FRAGMENT) {\n        returnNode = createDocumentFragment.call(body.ownerDocument);\n        while (body.firstChild) {\n          // eslint-disable-next-line unicorn/prefer-dom-node-append\n          returnNode.appendChild(body.firstChild);\n        }\n      } else {\n        returnNode = body;\n      }\n      if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n        /*\n          AdoptNode() is not used because internal state is not reset\n          (e.g. the past names map of a HTMLFormElement), this is safe\n          in theory but we would rather not risk another attack vector.\n          The state that is cloned by importNode() is explicitly defined\n          by the specs.\n        */\n        returnNode = importNode.call(originalDocument, returnNode, true);\n      }\n      return returnNode;\n    }\n    let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n\n    /* Serialize doctype if allowed */\n    if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n      serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n    }\n\n    /* Sanitize final string template-safe */\n    if (SAFE_FOR_TEMPLATES) {\n      arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n        serializedHTML = stringReplace(serializedHTML, expr, ' ');\n      });\n    }\n    return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n  };\n\n  /**\n   * Public method to set the configuration once\n   * setConfig\n   *\n   * @param {Object} cfg configuration object\n   */\n  DOMPurify.setConfig = function () {\n    let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    _parseConfig(cfg);\n    SET_CONFIG = true;\n  };\n\n  /**\n   * Public method to remove the configuration\n   * clearConfig\n   *\n   */\n  DOMPurify.clearConfig = function () {\n    CONFIG = null;\n    SET_CONFIG = false;\n  };\n\n  /**\n   * Public method to check if an attribute value is valid.\n   * Uses last set config, if any. Otherwise, uses config defaults.\n   * isValidAttribute\n   *\n   * @param  {String} tag Tag name of containing element.\n   * @param  {String} attr Attribute name.\n   * @param  {String} value Attribute value.\n   * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.\n   */\n  DOMPurify.isValidAttribute = function (tag, attr, value) {\n    /* Initialize shared config vars if necessary. */\n    if (!CONFIG) {\n      _parseConfig({});\n    }\n    const lcTag = transformCaseFunc(tag);\n    const lcName = transformCaseFunc(attr);\n    return _isValidAttribute(lcTag, lcName, value);\n  };\n\n  /**\n   * AddHook\n   * Public method to add DOMPurify hooks\n   *\n   * @param {String} entryPoint entry point for the hook to add\n   * @param {Function} hookFunction function to execute\n   */\n  DOMPurify.addHook = function (entryPoint, hookFunction) {\n    if (typeof hookFunction !== 'function') {\n      return;\n    }\n    hooks[entryPoint] = hooks[entryPoint] || [];\n    arrayPush(hooks[entryPoint], hookFunction);\n  };\n\n  /**\n   * RemoveHook\n   * Public method to remove a DOMPurify hook at a given entryPoint\n   * (pops it from the stack of hooks if more are present)\n   *\n   * @param {String} entryPoint entry point for the hook to remove\n   * @return {Function} removed(popped) hook\n   */\n  DOMPurify.removeHook = function (entryPoint) {\n    if (hooks[entryPoint]) {\n      return arrayPop(hooks[entryPoint]);\n    }\n  };\n\n  /**\n   * RemoveHooks\n   * Public method to remove all DOMPurify hooks at a given entryPoint\n   *\n   * @param  {String} entryPoint entry point for the hooks to remove\n   */\n  DOMPurify.removeHooks = function (entryPoint) {\n    if (hooks[entryPoint]) {\n      hooks[entryPoint] = [];\n    }\n  };\n\n  /**\n   * RemoveAllHooks\n   * Public method to remove all DOMPurify hooks\n   */\n  DOMPurify.removeAllHooks = function () {\n    hooks = {};\n  };\n  return DOMPurify;\n}\nvar purify = createDOMPurify();\n\n// ESM-comment-begin\n// define(function () { return purify; });\n// ESM-comment-end\n\n// ESM-uncomment-begin\nexport default purify;\nexport const version = purify.version;\nexport const isSupported = purify.isSupported;\nexport const sanitize = purify.sanitize;\nexport const setConfig = purify.setConfig;\nexport const clearConfig = purify.clearConfig;\nexport const isValidAttribute = purify.isValidAttribute;\nexport const addHook = purify.addHook;\nexport const removeHook = purify.removeHook;\nexport const removeHooks = purify.removeHooks;\nexport const removeAllHooks = purify.removeAllHooks;\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 *--------------------------------------------------------------------------------------------*/\nimport * as errors from './errors.js';\nimport * as platform from './platform.js';\nimport { equalsIgnoreCase, startsWithIgnoreCase } from './strings.js';\nimport { URI } from './uri.js';\nimport * as paths from './path.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.vscodeManagedRemoteResource = 'vscode-managed-remote-resource';\n    Schemas.vscodeUserData = 'vscode-userdata';\n    Schemas.vscodeCustomEditor = 'vscode-custom-editor';\n    Schemas.vscodeNotebookCell = 'vscode-notebook-cell';\n    Schemas.vscodeNotebookCellMetadata = 'vscode-notebook-cell-metadata';\n    Schemas.vscodeNotebookCellMetadataDiff = 'vscode-notebook-cell-metadata-diff';\n    Schemas.vscodeNotebookCellOutput = 'vscode-notebook-cell-output';\n    Schemas.vscodeNotebookCellOutputDiff = 'vscode-notebook-cell-output-diff';\n    Schemas.vscodeNotebookMetadata = 'vscode-notebook-metadata';\n    Schemas.vscodeInteractiveInput = 'vscode-interactive-input';\n    Schemas.vscodeSettings = 'vscode-settings';\n    Schemas.vscodeWorkspaceTrust = 'vscode-workspace-trust';\n    Schemas.vscodeTerminal = 'vscode-terminal';\n    /** Scheme used for code blocks in chat. */\n    Schemas.vscodeChatCodeBlock = 'vscode-chat-code-block';\n    /** Scheme used for LHS of code compare (aka diff) blocks in chat. */\n    Schemas.vscodeChatCodeCompareBlock = 'vscode-chat-code-compare-block';\n    /** Scheme used for the chat input editor. */\n    Schemas.vscodeChatSesssion = 'vscode-chat-editor';\n    /**\n     * Scheme used internally for webviews that aren't linked to a resource (i.e. not custom editors)\n     */\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    /**\n     * Scheme used vs live share\n     */\n    Schemas.vsls = 'vsls';\n    /**\n     * Scheme used for the Source Control commit input's text document\n     */\n    Schemas.vscodeSourceControl = 'vscode-scm';\n    /**\n     * Scheme used for input box for creating comments.\n     */\n    Schemas.commentsInput = 'comment';\n    /**\n     * Scheme used for special rendering of settings in the release notes\n     */\n    Schemas.codeSetting = 'code-setting';\n    /**\n     * Scheme used for output panel resources\n     */\n    Schemas.outputChannel = 'output';\n})(Schemas || (Schemas = {}));\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}\nexport function matchesSomeScheme(target, ...schemes) {\n    return schemes.some(scheme => matchesScheme(target, scheme));\n}\nexport const connectionTokenQueryName = 'tkn';\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        this._serverRootPath = '/';\n    }\n    setPreferredWebSchema(schema) {\n        this._preferredWebSchema = schema;\n    }\n    get _remoteResourcesPath() {\n        return paths.posix.join(this._serverRootPath, Schemas.vscodeRemoteResource);\n    }\n    rewrite(uri) {\n        if (this._delegate) {\n            try {\n                return this._delegate(uri);\n            }\n            catch (err) {\n                errors.onUnexpectedError(err);\n                return uri;\n            }\n        }\n        const authority = uri.authority;\n        let host = this._hosts[authority];\n        if (host && host.indexOf(':') !== -1 && 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 += `&${connectionTokenQueryName}=${encodeURIComponent(connectionToken)}`;\n        }\n        return URI.from({\n            scheme: platform.isWeb ? this._preferredWebSchema : Schemas.vscodeRemoteResource,\n            authority: `${host}:${port}`,\n            path: this._remoteResourcesPath,\n            query\n        });\n    }\n}\nexport const RemoteAuthorities = new RemoteAuthoritiesImpl();\nexport const VSCODE_AUTHORITY = 'vscode-app';\nclass FileAccessImpl {\n    static { this.FALLBACK_AUTHORITY = VSCODE_AUTHORITY; }\n    /**\n     * Returns a URI to use in contexts where the browser is responsible\n     * for loading (e.g. fetch()) or when used within the DOM.\n     *\n     * **Note:** use `dom.ts#asCSSUrl` whenever the URL is to be used in CSS context.\n     */\n    asBrowserUri(resourcePath) {\n        // ESM-comment-begin\n        // \t\tconst uri = this.toUri(resourcePath, require);\n        // ESM-comment-end\n        // ESM-uncomment-begin\n        const uri = this.toUri(resourcePath);\n        // ESM-uncomment-end\n        return this.uriToBrowserUri(uri);\n    }\n    /**\n     * Returns a URI to use in contexts where the browser is responsible\n     * for loading (e.g. fetch()) or when used within the DOM.\n     *\n     * **Note:** use `dom.ts#asCSSUrl` whenever the URL is to be used in CSS context.\n     */\n    uriToBrowserUri(uri) {\n        // Handle remote URIs via `RemoteAuthorities`\n        if (uri.scheme === Schemas.vscodeRemote) {\n            return RemoteAuthorities.rewrite(uri);\n        }\n        // Convert to `vscode-file` resource..\n        if (\n        // ...only ever for `file` resources\n        uri.scheme === Schemas.file &&\n            (\n            // ...and we run in native environments\n            platform.isNative ||\n                // ...or web worker extensions on desktop\n                (platform.webWorkerOrigin === `${Schemas.vscodeFileResource}://${FileAccessImpl.FALLBACK_AUTHORITY}`))) {\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 || FileAccessImpl.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        if (globalThis._VSCODE_FILE_ROOT) {\n            const rootUriOrPath = globalThis._VSCODE_FILE_ROOT;\n            // File URL (with scheme)\n            if (/^\\w[\\w\\d+.-]*:\\/\\//.test(rootUriOrPath)) {\n                return URI.joinPath(URI.parse(rootUriOrPath, true), uriOrModule);\n            }\n            // File Path (no scheme)\n            const modulePath = paths.join(rootUriOrPath, uriOrModule);\n            return URI.file(modulePath);\n        }\n        return URI.parse(moduleIdToUrl.toUrl(uriOrModule));\n    }\n}\nexport const FileAccess = new FileAccessImpl();\nexport var COI;\n(function (COI) {\n    const coiHeaders = new Map([\n        ['1', { 'Cross-Origin-Opener-Policy': 'same-origin' }],\n        ['2', { 'Cross-Origin-Embedder-Policy': 'require-corp' }],\n        ['3', { 'Cross-Origin-Opener-Policy': 'same-origin', 'Cross-Origin-Embedder-Policy': 'require-corp' }],\n    ]);\n    COI.CoopAndCoep = Object.freeze(coiHeaders.get('3'));\n    const coiSearchParamName = 'vscode-coi';\n    /**\n     * Extract desired headers from `vscode-coi` invocation\n     */\n    function getHeadersFromQuery(url) {\n        let params;\n        if (typeof url === 'string') {\n            params = new URL(url).searchParams;\n        }\n        else if (url instanceof URL) {\n            params = url.searchParams;\n        }\n        else if (URI.isUri(url)) {\n            params = new URL(url.toString(true)).searchParams;\n        }\n        const value = params?.get(coiSearchParamName);\n        if (!value) {\n            return undefined;\n        }\n        return coiHeaders.get(value);\n    }\n    COI.getHeadersFromQuery = getHeadersFromQuery;\n    /**\n     * Add the `vscode-coi` query attribute based on wanting `COOP` and `COEP`. Will be a noop when `crossOriginIsolated`\n     * isn't enabled the current context\n     */\n    function addSearchParam(urlOrSearch, coop, coep) {\n        if (!globalThis.crossOriginIsolated) {\n            // depends on the current context being COI\n            return;\n        }\n        const value = coop && coep ? '3' : coep ? '2' : '1';\n        if (urlOrSearch instanceof URLSearchParams) {\n            urlOrSearch.set(coiSearchParamName, value);\n        }\n        else {\n            urlOrSearch[coiSearchParamName] = value;\n        }\n    }\n    COI.addSearchParam = addSearchParam;\n})(COI || (COI = {}));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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}\nexport function 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    static { this._bigBlock32 = new DataView(new ArrayBuffer(320)); } // 80 * 4 = 320\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 /* SHA1Constant.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 /* SHA1Constant.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 /* SHA1Constant.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 /* SHA1Constant.BLOCK_SIZE */) {\n            this._step();\n            buffLen -= 64 /* SHA1Constant.BLOCK_SIZE */;\n            this._totalLen += 64 /* SHA1Constant.BLOCK_SIZE */;\n            // take last 3 in case of UTF8 overflow\n            buff[0] = buff[64 /* SHA1Constant.BLOCK_SIZE */ + 0];\n            buff[1] = buff[64 /* SHA1Constant.BLOCK_SIZE */ + 1];\n            buff[2] = buff[64 /* SHA1Constant.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 /* SHA1Constant.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}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { BrowserFeatures } from './canIUse.js';\nimport { StandardKeyboardEvent } from './keyboardEvent.js';\nimport { StandardMouseEvent } from './mouseEvent.js';\nimport { AbstractIdleValue, IntervalTimer, _runWhenIdle } from '../common/async.js';\nimport { onUnexpectedError } from '../common/errors.js';\nimport * as event from '../common/event.js';\nimport * as dompurify from './dompurify/dompurify.js';\nimport { Disposable, DisposableStore, toDisposable } from '../common/lifecycle.js';\nimport { FileAccess, RemoteAuthorities } from '../common/network.js';\nimport * as platform from '../common/platform.js';\nimport { hash } from '../common/hash.js';\nimport { ensureCodeWindow, mainWindow } from './window.js';\n//# region Multi-Window Support Utilities\nexport const { registerWindow, getWindow, getDocument, getWindows, getWindowsCount, getWindowId, getWindowById, hasWindow, onDidRegisterWindow, onWillUnregisterWindow, onDidUnregisterWindow } = (function () {\n    const windows = new Map();\n    ensureCodeWindow(mainWindow, 1);\n    const mainWindowRegistration = { window: mainWindow, disposables: new DisposableStore() };\n    windows.set(mainWindow.vscodeWindowId, mainWindowRegistration);\n    const onDidRegisterWindow = new event.Emitter();\n    const onDidUnregisterWindow = new event.Emitter();\n    const onWillUnregisterWindow = new event.Emitter();\n    function getWindowById(windowId, fallbackToMain) {\n        const window = typeof windowId === 'number' ? windows.get(windowId) : undefined;\n        return window ?? (fallbackToMain ? mainWindowRegistration : undefined);\n    }\n    return {\n        onDidRegisterWindow: onDidRegisterWindow.event,\n        onWillUnregisterWindow: onWillUnregisterWindow.event,\n        onDidUnregisterWindow: onDidUnregisterWindow.event,\n        registerWindow(window) {\n            if (windows.has(window.vscodeWindowId)) {\n                return Disposable.None;\n            }\n            const disposables = new DisposableStore();\n            const registeredWindow = {\n                window,\n                disposables: disposables.add(new DisposableStore())\n            };\n            windows.set(window.vscodeWindowId, registeredWindow);\n            disposables.add(toDisposable(() => {\n                windows.delete(window.vscodeWindowId);\n                onDidUnregisterWindow.fire(window);\n            }));\n            disposables.add(addDisposableListener(window, EventType.BEFORE_UNLOAD, () => {\n                onWillUnregisterWindow.fire(window);\n            }));\n            onDidRegisterWindow.fire(registeredWindow);\n            return disposables;\n        },\n        getWindows() {\n            return windows.values();\n        },\n        getWindowsCount() {\n            return windows.size;\n        },\n        getWindowId(targetWindow) {\n            return targetWindow.vscodeWindowId;\n        },\n        hasWindow(windowId) {\n            return windows.has(windowId);\n        },\n        getWindowById,\n        getWindow(e) {\n            const candidateNode = e;\n            if (candidateNode?.ownerDocument?.defaultView) {\n                return candidateNode.ownerDocument.defaultView.window;\n            }\n            const candidateEvent = e;\n            if (candidateEvent?.view) {\n                return candidateEvent.view.window;\n            }\n            return mainWindow;\n        },\n        getDocument(e) {\n            const candidateNode = e;\n            return getWindow(candidateNode).document;\n        }\n    };\n})();\n//#endregion\nexport function clearNode(node) {\n    while (node.firstChild) {\n        node.firstChild.remove();\n    }\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(targetWindow, handler) {\n    return function (e) {\n        return handler(new StandardMouseEvent(targetWindow, e));\n    };\n}\nfunction _wrapAsStandardKeyboardEvent(handler) {\n    return function (e) {\n        return handler(new StandardKeyboardEvent(e));\n    };\n}\nexport const addStandardDisposableListener = function addStandardDisposableListener(node, type, handler, useCapture) {\n    let wrapHandler = handler;\n    if (type === 'click' || type === 'mousedown' || type === 'contextmenu') {\n        wrapHandler = _wrapAsStandardMouseEvent(getWindow(node), 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 const addStandardDisposableGenericMouseDownListener = function addStandardDisposableListener(node, handler, useCapture) {\n    const wrapHandler = _wrapAsStandardMouseEvent(getWindow(node), handler);\n    return addDisposableGenericMouseDownListener(node, wrapHandler, useCapture);\n};\nexport const addStandardDisposableGenericMouseUpListener = function addStandardDisposableListener(node, handler, useCapture) {\n    const wrapHandler = _wrapAsStandardMouseEvent(getWindow(node), handler);\n    return addDisposableGenericMouseUpListener(node, wrapHandler, useCapture);\n};\nexport function addDisposableGenericMouseDownListener(node, handler, useCapture) {\n    return addDisposableListener(node, platform.isIOS && BrowserFeatures.pointerEvents ? EventType.POINTER_DOWN : EventType.MOUSE_DOWN, handler, useCapture);\n}\nexport function addDisposableGenericMouseUpListener(node, handler, useCapture) {\n    return addDisposableListener(node, platform.isIOS && BrowserFeatures.pointerEvents ? EventType.POINTER_UP : EventType.MOUSE_UP, handler, useCapture);\n}\n/**\n * Execute the callback the next time the browser is idle, returning an\n * {@link IDisposable} that will cancel the callback when disposed. This wraps\n * [requestIdleCallback] so it will fallback to [setTimeout] if the environment\n * doesn't support it.\n *\n * @param targetWindow The window for which to run the idle callback\n * @param callback The callback to run when idle, this includes an\n * [IdleDeadline] that provides the time alloted for the idle callback by the\n * browser. Not respecting this deadline will result in a degraded user\n * experience.\n * @param timeout A timeout at which point to queue no longer wait for an idle\n * callback but queue it on the regular event loop (like setTimeout). Typically\n * this should not be used.\n *\n * [IdleDeadline]: https://developer.mozilla.org/en-US/docs/Web/API/IdleDeadline\n * [requestIdleCallback]: https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback\n * [setTimeout]: https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout\n */\nexport function runWhenWindowIdle(targetWindow, callback, timeout) {\n    return _runWhenIdle(targetWindow, callback, timeout);\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 WindowIdleValue extends AbstractIdleValue {\n    constructor(targetWindow, executor) {\n        super(targetWindow, executor);\n    }\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;\nexport class WindowIntervalTimer extends IntervalTimer {\n    /**\n     *\n     * @param node The optional node from which the target window is determined\n     */\n    constructor(node) {\n        super();\n        this.defaultTarget = node && getWindow(node);\n    }\n    cancelAndSet(runner, interval, targetWindow) {\n        return super.cancelAndSet(runner, interval, targetWindow ?? this.defaultTarget);\n    }\n}\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    const NEXT_QUEUE = new Map();\n    /**\n     * The runners scheduled at the current animation frame\n     */\n    const CURRENT_QUEUE = new Map();\n    /**\n     * A flag to keep track if the native requestAnimationFrame was already called\n     */\n    const animFrameRequested = new Map();\n    /**\n     * A flag to indicate if currently handling a native requestAnimationFrame callback\n     */\n    const inAnimationFrameRunner = new Map();\n    const animationFrameRunner = (targetWindowId) => {\n        animFrameRequested.set(targetWindowId, false);\n        const currentQueue = NEXT_QUEUE.get(targetWindowId) ?? [];\n        CURRENT_QUEUE.set(targetWindowId, currentQueue);\n        NEXT_QUEUE.set(targetWindowId, []);\n        inAnimationFrameRunner.set(targetWindowId, true);\n        while (currentQueue.length > 0) {\n            currentQueue.sort(AnimationFrameQueueItem.sort);\n            const top = currentQueue.shift();\n            top.execute();\n        }\n        inAnimationFrameRunner.set(targetWindowId, false);\n    };\n    scheduleAtNextAnimationFrame = (targetWindow, runner, priority = 0) => {\n        const targetWindowId = getWindowId(targetWindow);\n        const item = new AnimationFrameQueueItem(runner, priority);\n        let nextQueue = NEXT_QUEUE.get(targetWindowId);\n        if (!nextQueue) {\n            nextQueue = [];\n            NEXT_QUEUE.set(targetWindowId, nextQueue);\n        }\n        nextQueue.push(item);\n        if (!animFrameRequested.get(targetWindowId)) {\n            animFrameRequested.set(targetWindowId, true);\n            targetWindow.requestAnimationFrame(() => animationFrameRunner(targetWindowId));\n        }\n        return item;\n    };\n    runAtThisOrScheduleAtNextAnimationFrame = (targetWindow, runner, priority) => {\n        const targetWindowId = getWindowId(targetWindow);\n        if (inAnimationFrameRunner.get(targetWindowId)) {\n            const item = new AnimationFrameQueueItem(runner, priority);\n            let currentQueue = CURRENT_QUEUE.get(targetWindowId);\n            if (!currentQueue) {\n                currentQueue = [];\n                CURRENT_QUEUE.set(targetWindowId, currentQueue);\n            }\n            currentQueue.push(item);\n            return item;\n        }\n        else {\n            return scheduleAtNextAnimationFrame(targetWindow, runner, priority);\n        }\n    };\n})();\nexport function getComputedStyle(el) {\n    return getWindow(el).getComputedStyle(el, null);\n}\nexport function getClientArea(element, fallback) {\n    const elWindow = getWindow(element);\n    const elDocument = elWindow.document;\n    // Try with DOM clientWidth / clientHeight\n    if (element !== elDocument.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 && elWindow?.visualViewport) {\n        return new Dimension(elWindow.visualViewport.width, elWindow.visualViewport.height);\n    }\n    // Try innerWidth / innerHeight\n    if (elWindow?.innerWidth && elWindow.innerHeight) {\n        return new Dimension(elWindow.innerWidth, elWindow.innerHeight);\n    }\n    // Try with document.body.clientWidth / document.body.clientHeight\n    if (elDocument.body && elDocument.body.clientWidth && elDocument.body.clientHeight) {\n        return new Dimension(elDocument.body.clientWidth, elDocument.body.clientHeight);\n    }\n    // Try with document.documentElement.clientWidth / document.documentElement.clientHeight\n    if (elDocument.documentElement && elDocument.documentElement.clientWidth && elDocument.documentElement.clientHeight) {\n        return new Dimension(elDocument.documentElement.clientWidth, elDocument.documentElement.clientHeight);\n    }\n    if (fallback) {\n        return getClientArea(fallback);\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        const computedStyle = getComputedStyle(element);\n        const value = computedStyle ? computedStyle.getPropertyValue(cssPropertyName) : '0';\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    static { this.None = new Dimension(0, 0); }\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 !== element.ownerDocument.body\n        && element !== element.ownerDocument.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    const bb = domNode.getBoundingClientRect();\n    const window = getWindow(domNode);\n    return {\n        left: bb.left + window.scrollX,\n        top: bb.top + window.scrollY,\n        width: bb.width,\n        height: bb.height\n    };\n}\n/**\n * Returns the effective zoom on a given element before window zoom level is applied\n */\nexport function getDomNodeZoomLevel(domNode) {\n    let testElement = domNode;\n    let zoom = 1.0;\n    do {\n        const elementZoomLevel = getComputedStyle(testElement).zoom;\n        if (elementZoomLevel !== null && elementZoomLevel !== undefined && elementZoomLevel !== '1') {\n            zoom *= elementZoomLevel;\n        }\n        testElement = testElement.parentElement;\n    } while (testElement !== null && testElement !== testElement.ownerDocument.documentElement);\n    return zoom;\n}\n// Adapted from WinJS\n// Gets the width of the element, including margins.\nexport function getTotalWidth(element) {\n    const margin = SizeUtils.getMarginLeft(element) + SizeUtils.getMarginRight(element);\n    return element.offsetWidth + margin;\n}\nexport function getContentWidth(element) {\n    const border = SizeUtils.getBorderLeftWidth(element) + SizeUtils.getBorderRightWidth(element);\n    const 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    const border = SizeUtils.getBorderTopWidth(element) + SizeUtils.getBorderBottomWidth(element);\n    const 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    const margin = SizeUtils.getMarginTop(element) + SizeUtils.getMarginBottom(element);\n    return element.offsetHeight + margin;\n}\n// ----------------------------------------------------------------------------------------\nexport function isAncestor(testChild, testAncestor) {\n    return Boolean(testAncestor?.contains(testChild));\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 === domNode.ownerDocument?.body) {\n            // reached the body\n            return null;\n        }\n        domNode = domNode.parentNode;\n    }\n    return isShadowRoot(domNode) ? domNode : null;\n}\n/**\n * Returns the active element across all child windows\n * based on document focus. Falls back to the main\n * window if no window has focus.\n */\nexport function getActiveElement() {\n    let result = getActiveDocument().activeElement;\n    while (result?.shadowRoot) {\n        result = result.shadowRoot.activeElement;\n    }\n    return result;\n}\n/**\n * Returns true if the focused window active element matches\n * the provided element. Falls back to the main window if no\n * window has focus.\n */\nexport function isActiveElement(element) {\n    return getActiveElement() === element;\n}\n/**\n * Returns true if the focused window active element is contained in\n * `ancestor`. Falls back to the main window if no window has focus.\n */\nexport function isAncestorOfActiveElement(ancestor) {\n    return isAncestor(getActiveElement(), ancestor);\n}\n/**\n * Returns the active document across main and child windows.\n * Prefers the window with focus, otherwise falls back to\n * the main windows document.\n */\nexport function getActiveDocument() {\n    if (getWindowsCount() <= 1) {\n        return mainWindow.document;\n    }\n    const documents = Array.from(getWindows()).map(({ window }) => window.document);\n    return documents.find(doc => doc.hasFocus()) ?? mainWindow.document;\n}\n/**\n * Returns the active window across main and child windows.\n * Prefers the window with focus, otherwise falls back to\n * the main window.\n */\nexport function getActiveWindow() {\n    const document = getActiveDocument();\n    return (document.defaultView?.window ?? mainWindow);\n}\nconst globalStylesheets = new Map();\n/**\n * A version of createStyleSheet which has a unified API to initialize/set the style content.\n */\nexport function createStyleSheet2() {\n    return new WrappedStyleElement();\n}\nclass WrappedStyleElement {\n    constructor() {\n        this._currentCssStyle = '';\n        this._styleSheet = undefined;\n    }\n    setStyle(cssStyle) {\n        if (cssStyle === this._currentCssStyle) {\n            return;\n        }\n        this._currentCssStyle = cssStyle;\n        if (!this._styleSheet) {\n            this._styleSheet = createStyleSheet(mainWindow.document.head, (s) => s.innerText = cssStyle);\n        }\n        else {\n            this._styleSheet.innerText = cssStyle;\n        }\n    }\n    dispose() {\n        if (this._styleSheet) {\n            this._styleSheet.remove();\n            this._styleSheet = undefined;\n        }\n    }\n}\nexport function createStyleSheet(container = mainWindow.document.head, beforeAppend, disposableStore) {\n    const style = document.createElement('style');\n    style.type = 'text/css';\n    style.media = 'screen';\n    beforeAppend?.(style);\n    container.appendChild(style);\n    if (disposableStore) {\n        disposableStore.add(toDisposable(() => style.remove()));\n    }\n    // With <head> as container, the stylesheet becomes global and is tracked\n    // to support auxiliary windows to clone the stylesheet.\n    if (container === mainWindow.document.head) {\n        const globalStylesheetClones = new Set();\n        globalStylesheets.set(style, globalStylesheetClones);\n        for (const { window: targetWindow, disposables } of getWindows()) {\n            if (targetWindow === mainWindow) {\n                continue; // main window is already tracked\n            }\n            const cloneDisposable = disposables.add(cloneGlobalStyleSheet(style, globalStylesheetClones, targetWindow));\n            disposableStore?.add(cloneDisposable);\n        }\n    }\n    return style;\n}\nfunction cloneGlobalStyleSheet(globalStylesheet, globalStylesheetClones, targetWindow) {\n    const disposables = new DisposableStore();\n    const clone = globalStylesheet.cloneNode(true);\n    targetWindow.document.head.appendChild(clone);\n    disposables.add(toDisposable(() => clone.remove()));\n    for (const rule of getDynamicStyleSheetRules(globalStylesheet)) {\n        clone.sheet?.insertRule(rule.cssText, clone.sheet?.cssRules.length);\n    }\n    disposables.add(sharedMutationObserver.observe(globalStylesheet, disposables, { childList: true })(() => {\n        clone.textContent = globalStylesheet.textContent;\n    }));\n    globalStylesheetClones.add(clone);\n    disposables.add(toDisposable(() => globalStylesheetClones.delete(clone)));\n    return disposables;\n}\nexport const sharedMutationObserver = new class {\n    constructor() {\n        this.mutationObservers = new Map();\n    }\n    observe(target, disposables, options) {\n        let mutationObserversPerTarget = this.mutationObservers.get(target);\n        if (!mutationObserversPerTarget) {\n            mutationObserversPerTarget = new Map();\n            this.mutationObservers.set(target, mutationObserversPerTarget);\n        }\n        const optionsHash = hash(options);\n        let mutationObserverPerOptions = mutationObserversPerTarget.get(optionsHash);\n        if (!mutationObserverPerOptions) {\n            const onDidMutate = new event.Emitter();\n            const observer = new MutationObserver(mutations => onDidMutate.fire(mutations));\n            observer.observe(target, options);\n            const resolvedMutationObserverPerOptions = mutationObserverPerOptions = {\n                users: 1,\n                observer,\n                onDidMutate: onDidMutate.event\n            };\n            disposables.add(toDisposable(() => {\n                resolvedMutationObserverPerOptions.users -= 1;\n                if (resolvedMutationObserverPerOptions.users === 0) {\n                    onDidMutate.dispose();\n                    observer.disconnect();\n                    mutationObserversPerTarget?.delete(optionsHash);\n                    if (mutationObserversPerTarget?.size === 0) {\n                        this.mutationObservers.delete(target);\n                    }\n                }\n            }));\n            mutationObserversPerTarget.set(optionsHash, mutationObserverPerOptions);\n        }\n        else {\n            mutationObserverPerOptions.users += 1;\n        }\n        return mutationObserverPerOptions.onDidMutate;\n    }\n};\nlet _sharedStyleSheet = null;\nfunction getSharedStyleSheet() {\n    if (!_sharedStyleSheet) {\n        _sharedStyleSheet = createStyleSheet();\n    }\n    return _sharedStyleSheet;\n}\nfunction getDynamicStyleSheetRules(style) {\n    if (style?.sheet?.rules) {\n        // Chrome, IE\n        return style.sheet.rules;\n    }\n    if (style?.sheet?.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    // Apply rule also to all cloned global stylesheets\n    for (const clonedGlobalStylesheet of globalStylesheets.get(style) ?? []) {\n        createCSSRule(selector, cssText, clonedGlobalStylesheet);\n    }\n}\nexport function removeCSSRulesContainingSelector(ruleName, style = getSharedStyleSheet()) {\n    if (!style) {\n        return;\n    }\n    const rules = getDynamicStyleSheetRules(style);\n    const toDelete = [];\n    for (let i = 0; i < rules.length; i++) {\n        const rule = rules[i];\n        if (isCSSStyleRule(rule) && 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    // Remove rules also from all cloned global stylesheets\n    for (const clonedGlobalStylesheet of globalStylesheets.get(style) ?? []) {\n        removeCSSRulesContainingSelector(ruleName, clonedGlobalStylesheet);\n    }\n}\nfunction isCSSStyleRule(rule) {\n    return typeof rule.selectorText === 'string';\n}\nexport function isHTMLElement(e) {\n    // eslint-disable-next-line no-restricted-syntax\n    return e instanceof HTMLElement || e instanceof getWindow(e).HTMLElement;\n}\nexport function isHTMLAnchorElement(e) {\n    // eslint-disable-next-line no-restricted-syntax\n    return e instanceof HTMLAnchorElement || e instanceof getWindow(e).HTMLAnchorElement;\n}\nexport function isSVGElement(e) {\n    // eslint-disable-next-line no-restricted-syntax\n    return e instanceof SVGElement || e instanceof getWindow(e).SVGElement;\n}\nexport function isMouseEvent(e) {\n    // eslint-disable-next-line no-restricted-syntax\n    return e instanceof MouseEvent || e instanceof getWindow(e).MouseEvent;\n}\nexport function isKeyboardEvent(e) {\n    // eslint-disable-next-line no-restricted-syntax\n    return e instanceof KeyboardEvent || e instanceof getWindow(e).KeyboardEvent;\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    POINTER_LEAVE: 'pointerleave',\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    PAGE_SHOW: 'pageshow',\n    PAGE_HIDE: 'pagehide',\n    PASTE: 'paste',\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 function isEventLike(obj) {\n    const candidate = obj;\n    return !!(candidate && typeof candidate.preventDefault === 'function' && typeof candidate.stopPropagation === 'function');\n}\nexport const EventHelper = {\n    stop: (e, cancelBubble) => {\n        e.preventDefault();\n        if (cancelBubble) {\n            e.stopPropagation();\n        }\n        return e;\n    }\n};\nexport function saveParentsScrollTop(node) {\n    const 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    static hasFocusWithin(element) {\n        if (isHTMLElement(element)) {\n            const shadowRoot = getShadowRoot(element);\n            const activeElement = (shadowRoot ? shadowRoot.activeElement : element.ownerDocument.activeElement);\n            return isAncestor(activeElement, element);\n        }\n        else {\n            const window = element;\n            return isAncestor(window.document.activeElement, window.document);\n        }\n    }\n    constructor(element) {\n        super();\n        this._onDidFocus = this._register(new event.Emitter());\n        this.onDidFocus = this._onDidFocus.event;\n        this._onDidBlur = this._register(new event.Emitter());\n        this.onDidBlur = this._onDidBlur.event;\n        let hasFocus = FocusTracker.hasFocusWithin(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                (isHTMLElement(element) ? getWindow(element) : element).setTimeout(() => {\n                    if (loosingFocus) {\n                        loosingFocus = false;\n                        hasFocus = false;\n                        this._onDidBlur.fire();\n                    }\n                }, 0);\n            }\n        };\n        this._refreshStateHandler = () => {\n            const currentNodeHasFocus = FocusTracker.hasFocusWithin(element);\n            if (currentNodeHasFocus !== hasFocus) {\n                if (hasFocus) {\n                    onBlur();\n                }\n                else {\n                    onFocus();\n                }\n            }\n        };\n        this._register(addDisposableListener(element, EventType.FOCUS, onFocus, true));\n        this._register(addDisposableListener(element, EventType.BLUR, onBlur, true));\n        if (isHTMLElement(element)) {\n            this._register(addDisposableListener(element, EventType.FOCUS_IN, () => this._refreshStateHandler()));\n            this._register(addDisposableListener(element, EventType.FOCUS_OUT, () => this._refreshStateHandler()));\n        }\n    }\n}\n/**\n * Creates a new `IFocusTracker` instance that tracks focus changes on the given `element` and its descendants.\n *\n * @param element The `HTMLElement` or `Window` to track focus changes on.\n * @returns An `IFocusTracker` instance.\n */\nexport function trackFocus(element) {\n    return new FocusTracker(element);\n}\nexport function after(sibling, child) {\n    sibling.after(child);\n    return child;\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}\nexport function prepend(parent, child) {\n    parent.insertBefore(child, parent.firstChild);\n    return child;\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    const match = SELECTOR_REGEX.exec(description);\n    if (!match) {\n        throw new Error('Bad use of emmet');\n    }\n    const 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    if (attrs) {\n        Object.entries(attrs).forEach(([name, value]) => {\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    }\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 setVisibility(visible, ...elements) {\n    if (visible) {\n        show(...elements);\n    }\n    else {\n        hide(...elements);\n    }\n}\nexport function show(...elements) {\n    for (const element of elements) {\n        element.style.display = '';\n        element.removeAttribute('aria-hidden');\n    }\n}\nexport function hide(...elements) {\n    for (const element of elements) {\n        element.style.display = 'none';\n        element.setAttribute('aria-hidden', 'true');\n    }\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(window, 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 browser's popup blocker.\n * If you want to tell if the browser blocked the new window, use {@link windowOpenWithSuccess}.\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    mainWindow.open(url, '_blank', 'noopener');\n}\nexport function animate(targetWindow, fn) {\n    const step = () => {\n        fn();\n        stepDisposable = scheduleAtNextAnimationFrame(targetWindow, step);\n    };\n    let stepDisposable = scheduleAtNextAnimationFrame(targetWindow, step);\n    return toDisposable(() => stepDisposable.dispose());\n}\nRemoteAuthorities.setPreferredWebSchema(/^https:/.test(mainWindow.location.href) ? 'https' : 'http');\n/**\n * returns url('...')\n */\nexport function asCSSUrl(uri) {\n    if (!uri) {\n        return `url('')`;\n    }\n    return `url('${FileAccess.uriToBrowserUri(uri).toString(true).replace(/'/g, '%27')}')`;\n}\nexport function asCSSPropertyValue(value) {\n    return `'${value.replace(/'/g, '%27')}'`;\n}\nexport function asCssValueWithDefault(cssPropertyValue, dflt) {\n    if (cssPropertyValue !== undefined) {\n        const variableMatch = cssPropertyValue.match(/^\\s*var\\((.+)\\)$/);\n        if (variableMatch) {\n            const varArguments = variableMatch[1].split(',', 2);\n            if (varArguments.length === 2) {\n                dflt = asCssValueWithDefault(varArguments[1].trim(), dflt);\n            }\n            return `var(${varArguments[0]}, ${dflt})`;\n        }\n        return cssPropertyValue;\n    }\n    return dflt;\n}\n// -- sanitize and trusted html\n/**\n * Hooks dompurify using `afterSanitizeAttributes` to check that all `href` and `src`\n * attributes are valid.\n */\nexport function hookDomPurifyHrefAndSrcSanitizer(allowedProtocols, allowDataImages = false) {\n    // https://github.com/cure53/DOMPurify/blob/main/demos/hooks-scheme-allowlist.html\n    // build an anchor to map URLs to\n    const anchor = document.createElement('a');\n    dompurify.addHook('afterSanitizeAttributes', (node) => {\n        // check all href/src attributes for validity\n        for (const attr of ['href', 'src']) {\n            if (node.hasAttribute(attr)) {\n                const attrValue = node.getAttribute(attr);\n                if (attr === 'href' && attrValue.startsWith('#')) {\n                    // Allow fragment links\n                    continue;\n                }\n                anchor.href = attrValue;\n                if (!allowedProtocols.includes(anchor.protocol.replace(/:$/, ''))) {\n                    if (allowDataImages && attr === 'src' && anchor.href.startsWith('data:')) {\n                        continue;\n                    }\n                    node.removeAttribute(attr);\n                }\n            }\n        }\n    });\n    return toDisposable(() => {\n        dompurify.removeHook('afterSanitizeAttributes');\n    });\n}\n/**\n * List of safe, non-input html tags.\n */\nexport const basicMarkupHtmlTags = Object.freeze([\n    'a',\n    'abbr',\n    'b',\n    'bdo',\n    'blockquote',\n    'br',\n    'caption',\n    'cite',\n    'code',\n    'col',\n    'colgroup',\n    'dd',\n    'del',\n    'details',\n    'dfn',\n    'div',\n    'dl',\n    'dt',\n    'em',\n    'figcaption',\n    'figure',\n    'h1',\n    'h2',\n    'h3',\n    'h4',\n    'h5',\n    'h6',\n    'hr',\n    'i',\n    'img',\n    'input',\n    'ins',\n    'kbd',\n    'label',\n    'li',\n    'mark',\n    'ol',\n    'p',\n    'pre',\n    'q',\n    'rp',\n    'rt',\n    'ruby',\n    'samp',\n    'small',\n    'small',\n    'source',\n    'span',\n    'strike',\n    'strong',\n    'sub',\n    'summary',\n    'sup',\n    'table',\n    'tbody',\n    'td',\n    'tfoot',\n    'th',\n    'thead',\n    'time',\n    'tr',\n    'tt',\n    'u',\n    'ul',\n    'var',\n    'video',\n    'wbr',\n]);\nconst defaultDomPurifyConfig = Object.freeze({\n    ALLOWED_TAGS: ['a', 'button', 'blockquote', 'code', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'input', 'label', 'li', 'p', 'pre', 'select', 'small', 'span', 'strong', 'textarea', 'ul', 'ol'],\n    ALLOWED_ATTR: ['href', 'data-href', 'data-command', 'target', 'title', 'name', 'src', 'alt', 'class', 'id', 'role', 'tabindex', 'style', 'data-code', 'width', 'height', 'align', 'x-dispatch', 'required', 'checked', 'placeholder', 'type', 'start'],\n    RETURN_DOM: false,\n    RETURN_DOM_FRAGMENT: false,\n    RETURN_TRUSTED_TYPE: true\n});\nexport class ModifierKeyEmitter extends event.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(event.Event.runAndSubscribe(onDidRegisterWindow, ({ window, disposables }) => this.registerListeners(window, disposables), { window: mainWindow, disposables: this._subscriptions }));\n    }\n    registerListeners(window, disposables) {\n        disposables.add(addDisposableListener(window, 'keydown', e => {\n            if (e.defaultPrevented) {\n                return;\n            }\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 /* KeyCode.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 /* KeyCode.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        }, true));\n        disposables.add(addDisposableListener(window, 'keyup', e => {\n            if (e.defaultPrevented) {\n                return;\n            }\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        }, true));\n        disposables.add(addDisposableListener(window.document.body, 'mousedown', () => {\n            this._keyStatus.lastKeyPressed = undefined;\n        }, true));\n        disposables.add(addDisposableListener(window.document.body, 'mouseup', () => {\n            this._keyStatus.lastKeyPressed = undefined;\n        }, true));\n        disposables.add(addDisposableListener(window.document.body, 'mousemove', e => {\n            if (e.buttons) {\n                this._keyStatus.lastKeyPressed = undefined;\n            }\n        }, true));\n        disposables.add(addDisposableListener(window, 'blur', () => {\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 class DragAndDropObserver extends Disposable {\n    constructor(element, callbacks) {\n        super();\n        this.element = element;\n        this.callbacks = callbacks;\n        // A helper to fix issues with repeated DRAG_ENTER / DRAG_LEAVE\n        // calls see https://github.com/microsoft/vscode/issues/14470\n        // when the element has child elements where the events are fired\n        // repeadedly.\n        this.counter = 0;\n        // Allows to measure the duration of the drag operation.\n        this.dragStartTime = 0;\n        this.registerListeners();\n    }\n    registerListeners() {\n        if (this.callbacks.onDragStart) {\n            this._register(addDisposableListener(this.element, EventType.DRAG_START, (e) => {\n                this.callbacks.onDragStart?.(e);\n            }));\n        }\n        if (this.callbacks.onDrag) {\n            this._register(addDisposableListener(this.element, EventType.DRAG, (e) => {\n                this.callbacks.onDrag?.(e);\n            }));\n        }\n        this._register(addDisposableListener(this.element, EventType.DRAG_ENTER, (e) => {\n            this.counter++;\n            this.dragStartTime = e.timeStamp;\n            this.callbacks.onDragEnter?.(e);\n        }));\n        this._register(addDisposableListener(this.element, EventType.DRAG_OVER, (e) => {\n            e.preventDefault(); // needed so that the drop event fires (https://stackoverflow.com/questions/21339924/drop-event-not-firing-in-chrome)\n            this.callbacks.onDragOver?.(e, e.timeStamp - this.dragStartTime);\n        }));\n        this._register(addDisposableListener(this.element, EventType.DRAG_LEAVE, (e) => {\n            this.counter--;\n            if (this.counter === 0) {\n                this.dragStartTime = 0;\n                this.callbacks.onDragLeave?.(e);\n            }\n        }));\n        this._register(addDisposableListener(this.element, EventType.DRAG_END, (e) => {\n            this.counter = 0;\n            this.dragStartTime = 0;\n            this.callbacks.onDragEnd?.(e);\n        }));\n        this._register(addDisposableListener(this.element, EventType.DROP, (e) => {\n            this.counter = 0;\n            this.dragStartTime = 0;\n            this.callbacks.onDrop?.(e);\n        }));\n    }\n}\nconst H_REGEX = /(?<tag>[\\w\\-]+)?(?:#(?<id>[\\w\\-]+))?(?<class>(?:\\.(?:[\\w\\-]+))*)(?:@(?<name>(?:[\\w\\_])+))?/;\nexport function h(tag, ...args) {\n    let attributes;\n    let children;\n    if (Array.isArray(args[0])) {\n        attributes = {};\n        children = args[0];\n    }\n    else {\n        attributes = args[0] || {};\n        children = args[1];\n    }\n    const match = H_REGEX.exec(tag);\n    if (!match || !match.groups) {\n        throw new Error('Bad use of h');\n    }\n    const tagName = match.groups['tag'] || 'div';\n    const el = document.createElement(tagName);\n    if (match.groups['id']) {\n        el.id = match.groups['id'];\n    }\n    const classNames = [];\n    if (match.groups['class']) {\n        for (const className of match.groups['class'].split('.')) {\n            if (className !== '') {\n                classNames.push(className);\n            }\n        }\n    }\n    if (attributes.className !== undefined) {\n        for (const className of attributes.className.split('.')) {\n            if (className !== '') {\n                classNames.push(className);\n            }\n        }\n    }\n    if (classNames.length > 0) {\n        el.className = classNames.join(' ');\n    }\n    const result = {};\n    if (match.groups['name']) {\n        result[match.groups['name']] = el;\n    }\n    if (children) {\n        for (const c of children) {\n            if (isHTMLElement(c)) {\n                el.appendChild(c);\n            }\n            else if (typeof c === 'string') {\n                el.append(c);\n            }\n            else if ('root' in c) {\n                Object.assign(result, c);\n                el.appendChild(c.root);\n            }\n        }\n    }\n    for (const [key, value] of Object.entries(attributes)) {\n        if (key === 'className') {\n            continue;\n        }\n        else if (key === 'style') {\n            for (const [cssKey, cssValue] of Object.entries(value)) {\n                el.style.setProperty(camelCaseToHyphenCase(cssKey), typeof cssValue === 'number' ? cssValue + 'px' : '' + cssValue);\n            }\n        }\n        else if (key === 'tabIndex') {\n            el.tabIndex = value;\n        }\n        else {\n            el.setAttribute(camelCaseToHyphenCase(key), value.toString());\n        }\n    }\n    result['root'] = el;\n    return result;\n}\nexport function svgElem(tag, ...args) {\n    let attributes;\n    let children;\n    if (Array.isArray(args[0])) {\n        attributes = {};\n        children = args[0];\n    }\n    else {\n        attributes = args[0] || {};\n        children = args[1];\n    }\n    const match = H_REGEX.exec(tag);\n    if (!match || !match.groups) {\n        throw new Error('Bad use of h');\n    }\n    const tagName = match.groups['tag'] || 'div';\n    const el = document.createElementNS('http://www.w3.org/2000/svg', tagName);\n    if (match.groups['id']) {\n        el.id = match.groups['id'];\n    }\n    const classNames = [];\n    if (match.groups['class']) {\n        for (const className of match.groups['class'].split('.')) {\n            if (className !== '') {\n                classNames.push(className);\n            }\n        }\n    }\n    if (attributes.className !== undefined) {\n        for (const className of attributes.className.split('.')) {\n            if (className !== '') {\n                classNames.push(className);\n            }\n        }\n    }\n    if (classNames.length > 0) {\n        el.className = classNames.join(' ');\n    }\n    const result = {};\n    if (match.groups['name']) {\n        result[match.groups['name']] = el;\n    }\n    if (children) {\n        for (const c of children) {\n            if (isHTMLElement(c)) {\n                el.appendChild(c);\n            }\n            else if (typeof c === 'string') {\n                el.append(c);\n            }\n            else if ('root' in c) {\n                Object.assign(result, c);\n                el.appendChild(c.root);\n            }\n        }\n    }\n    for (const [key, value] of Object.entries(attributes)) {\n        if (key === 'className') {\n            continue;\n        }\n        else if (key === 'style') {\n            for (const [cssKey, cssValue] of Object.entries(value)) {\n                el.style.setProperty(camelCaseToHyphenCase(cssKey), typeof cssValue === 'number' ? cssValue + 'px' : '' + cssValue);\n            }\n        }\n        else if (key === 'tabIndex') {\n            el.tabIndex = value;\n        }\n        else {\n            el.setAttribute(camelCaseToHyphenCase(key), value.toString());\n        }\n    }\n    result['root'] = el;\n    return result;\n}\nfunction camelCaseToHyphenCase(str) {\n    return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { getWindowId, onDidUnregisterWindow } from './dom.js';\nimport { Emitter, Event } from '../common/event.js';\nimport { Disposable, markAsSingleton } from '../common/lifecycle.js';\n/**\n * See https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio#monitoring_screen_resolution_or_zoom_level_changes\n */\nclass DevicePixelRatioMonitor extends Disposable {\n    constructor(targetWindow) {\n        super();\n        this._onDidChange = this._register(new Emitter());\n        this.onDidChange = this._onDidChange.event;\n        this._listener = () => this._handleChange(targetWindow, true);\n        this._mediaQueryList = null;\n        this._handleChange(targetWindow, false);\n    }\n    _handleChange(targetWindow, fireEvent) {\n        this._mediaQueryList?.removeEventListener('change', this._listener);\n        this._mediaQueryList = targetWindow.matchMedia(`(resolution: ${targetWindow.devicePixelRatio}dppx)`);\n        this._mediaQueryList.addEventListener('change', this._listener);\n        if (fireEvent) {\n            this._onDidChange.fire();\n        }\n    }\n}\nclass PixelRatioMonitorImpl extends Disposable {\n    get value() {\n        return this._value;\n    }\n    constructor(targetWindow) {\n        super();\n        this._onDidChange = this._register(new Emitter());\n        this.onDidChange = this._onDidChange.event;\n        this._value = this._getPixelRatio(targetWindow);\n        const dprMonitor = this._register(new DevicePixelRatioMonitor(targetWindow));\n        this._register(dprMonitor.onDidChange(() => {\n            this._value = this._getPixelRatio(targetWindow);\n            this._onDidChange.fire(this._value);\n        }));\n    }\n    _getPixelRatio(targetWindow) {\n        const ctx = document.createElement('canvas').getContext('2d');\n        const dpr = targetWindow.devicePixelRatio || 1;\n        const bsr = ctx.webkitBackingStorePixelRatio ||\n            ctx.mozBackingStorePixelRatio ||\n            ctx.msBackingStorePixelRatio ||\n            ctx.oBackingStorePixelRatio ||\n            ctx.backingStorePixelRatio || 1;\n        return dpr / bsr;\n    }\n}\nclass PixelRatioMonitorFacade {\n    constructor() {\n        this.mapWindowIdToPixelRatioMonitor = new Map();\n    }\n    _getOrCreatePixelRatioMonitor(targetWindow) {\n        const targetWindowId = getWindowId(targetWindow);\n        let pixelRatioMonitor = this.mapWindowIdToPixelRatioMonitor.get(targetWindowId);\n        if (!pixelRatioMonitor) {\n            pixelRatioMonitor = markAsSingleton(new PixelRatioMonitorImpl(targetWindow));\n            this.mapWindowIdToPixelRatioMonitor.set(targetWindowId, pixelRatioMonitor);\n            markAsSingleton(Event.once(onDidUnregisterWindow)(({ vscodeWindowId }) => {\n                if (vscodeWindowId === targetWindowId) {\n                    pixelRatioMonitor?.dispose();\n                    this.mapWindowIdToPixelRatioMonitor.delete(targetWindowId);\n                }\n            }));\n        }\n        return pixelRatioMonitor;\n    }\n    getInstance(targetWindow) {\n        return this._getOrCreatePixelRatioMonitor(targetWindow);\n    }\n}\n/**\n * Returns the pixel ratio.\n *\n * This is useful for rendering <canvas> elements at native screen resolution or for being used as\n * a cache key when storing font measurements. Fonts might render differently depending on resolution\n * and any measurements need to be discarded for example when a window is moved from a monitor to another.\n */\nexport const PixelRatio = new PixelRatioMonitorFacade();\n","/*---------------------------------------------------------------------------------------------\n *  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 = '';\n        this._width = '';\n        this._height = '';\n        this._top = '';\n        this._left = '';\n        this._bottom = '';\n        this._right = '';\n        this._paddingLeft = '';\n        this._fontFamily = '';\n        this._fontWeight = '';\n        this._fontSize = '';\n        this._fontStyle = '';\n        this._fontFeatureSettings = '';\n        this._fontVariationSettings = '';\n        this._textDecoration = '';\n        this._lineHeight = '';\n        this._letterSpacing = '';\n        this._className = '';\n        this._display = '';\n        this._position = '';\n        this._visibility = '';\n        this._color = '';\n        this._backgroundColor = '';\n        this._layerHint = false;\n        this._contain = 'none';\n        this._boxShadow = '';\n    }\n    setMaxWidth(_maxWidth) {\n        const maxWidth = numberAsPixels(_maxWidth);\n        if (this._maxWidth === maxWidth) {\n            return;\n        }\n        this._maxWidth = maxWidth;\n        this.domNode.style.maxWidth = this._maxWidth;\n    }\n    setWidth(_width) {\n        const width = numberAsPixels(_width);\n        if (this._width === width) {\n            return;\n        }\n        this._width = width;\n        this.domNode.style.width = this._width;\n    }\n    setHeight(_height) {\n        const height = numberAsPixels(_height);\n        if (this._height === height) {\n            return;\n        }\n        this._height = height;\n        this.domNode.style.height = this._height;\n    }\n    setTop(_top) {\n        const top = numberAsPixels(_top);\n        if (this._top === top) {\n            return;\n        }\n        this._top = top;\n        this.domNode.style.top = this._top;\n    }\n    setLeft(_left) {\n        const left = numberAsPixels(_left);\n        if (this._left === left) {\n            return;\n        }\n        this._left = left;\n        this.domNode.style.left = this._left;\n    }\n    setBottom(_bottom) {\n        const bottom = numberAsPixels(_bottom);\n        if (this._bottom === bottom) {\n            return;\n        }\n        this._bottom = bottom;\n        this.domNode.style.bottom = this._bottom;\n    }\n    setRight(_right) {\n        const right = numberAsPixels(_right);\n        if (this._right === right) {\n            return;\n        }\n        this._right = right;\n        this.domNode.style.right = this._right;\n    }\n    setPaddingLeft(_paddingLeft) {\n        const paddingLeft = numberAsPixels(_paddingLeft);\n        if (this._paddingLeft === paddingLeft) {\n            return;\n        }\n        this._paddingLeft = paddingLeft;\n        this.domNode.style.paddingLeft = this._paddingLeft;\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        const fontSize = numberAsPixels(_fontSize);\n        if (this._fontSize === fontSize) {\n            return;\n        }\n        this._fontSize = fontSize;\n        this.domNode.style.fontSize = this._fontSize;\n    }\n    setFontStyle(fontStyle) {\n        if (this._fontStyle === fontStyle) {\n            return;\n        }\n        this._fontStyle = fontStyle;\n        this.domNode.style.fontStyle = this._fontStyle;\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    setFontVariationSettings(fontVariationSettings) {\n        if (this._fontVariationSettings === fontVariationSettings) {\n            return;\n        }\n        this._fontVariationSettings = fontVariationSettings;\n        this.domNode.style.fontVariationSettings = this._fontVariationSettings;\n    }\n    setTextDecoration(textDecoration) {\n        if (this._textDecoration === textDecoration) {\n            return;\n        }\n        this._textDecoration = textDecoration;\n        this.domNode.style.textDecoration = this._textDecoration;\n    }\n    setLineHeight(_lineHeight) {\n        const lineHeight = numberAsPixels(_lineHeight);\n        if (this._lineHeight === lineHeight) {\n            return;\n        }\n        this._lineHeight = lineHeight;\n        this.domNode.style.lineHeight = this._lineHeight;\n    }\n    setLetterSpacing(_letterSpacing) {\n        const letterSpacing = numberAsPixels(_letterSpacing);\n        if (this._letterSpacing === letterSpacing) {\n            return;\n        }\n        this._letterSpacing = letterSpacing;\n        this.domNode.style.letterSpacing = this._letterSpacing;\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    setColor(color) {\n        if (this._color === color) {\n            return;\n        }\n        this._color = color;\n        this.domNode.style.color = this._color;\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}\nfunction numberAsPixels(value) {\n    return (typeof value === 'number' ? `${value}px` : value);\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 { FastDomNode } from '../../../base/browser/fastDomNode.js';\nexport function applyFontInfo(domNode, fontInfo) {\n    if (domNode instanceof FastDomNode) {\n        domNode.setFontFamily(fontInfo.getMassagedFontFamily());\n        domNode.setFontWeight(fontInfo.fontWeight);\n        domNode.setFontSize(fontInfo.fontSize);\n        domNode.setFontFeatureSettings(fontInfo.fontFeatureSettings);\n        domNode.setFontVariationSettings(fontInfo.fontVariationSettings);\n        domNode.setLineHeight(fontInfo.lineHeight);\n        domNode.setLetterSpacing(fontInfo.letterSpacing);\n    }\n    else {\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.fontVariationSettings = fontInfo.fontVariationSettings;\n        domNode.style.lineHeight = fontInfo.lineHeight + 'px';\n        domNode.style.letterSpacing = fontInfo.letterSpacing + '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 *--------------------------------------------------------------------------------------------*/\nimport { applyFontInfo } from './domFontInfo.js';\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(targetWindow) {\n        // Create a test container with all these test elements\n        this._createDomElements();\n        // Add the container to the DOM\n        targetWindow.document.body.appendChild(this._container);\n        // Read character widths\n        this._readFromDomElements();\n        // Remove the container from the DOM\n        this._container?.remove();\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        applyFontInfo(regularDomNode, this._bareFontInfo);\n        container.appendChild(regularDomNode);\n        const boldDomNode = document.createElement('div');\n        applyFontInfo(boldDomNode, this._bareFontInfo);\n        boldDomNode.style.fontWeight = 'bold';\n        container.appendChild(boldDomNode);\n        const italicDomNode = document.createElement('div');\n        applyFontInfo(italicDomNode, this._bareFontInfo);\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 /* CharWidthRequestType.Regular */) {\n                parent = regularDomNode;\n            }\n            if (request.type === 2 /* CharWidthRequestType.Bold */) {\n                parent = boldDomNode;\n            }\n            if (request.type === 1 /* CharWidthRequestType.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(targetWindow, bareFontInfo, requests) {\n    const reader = new DomCharWidthReader(bareFontInfo, requests);\n    reader.read(targetWindow);\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { EditorFontVariations, EDITOR_FONT_DEFAULTS } from './editorOptions.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    static createFromValidatedSettings(options, pixelRatio, ignoreEditorZoom) {\n        const fontFamily = options.get(49 /* EditorOption.fontFamily */);\n        const fontWeight = options.get(53 /* EditorOption.fontWeight */);\n        const fontSize = options.get(52 /* EditorOption.fontSize */);\n        const fontFeatureSettings = options.get(51 /* EditorOption.fontLigatures */);\n        const fontVariationSettings = options.get(54 /* EditorOption.fontVariations */);\n        const lineHeight = options.get(67 /* EditorOption.lineHeight */);\n        const letterSpacing = options.get(64 /* EditorOption.letterSpacing */);\n        return BareFontInfo._create(fontFamily, fontWeight, fontSize, fontFeatureSettings, fontVariationSettings, lineHeight, letterSpacing, pixelRatio, ignoreEditorZoom);\n    }\n    /**\n     * @internal\n     */\n    static _create(fontFamily, fontWeight, fontSize, fontFeatureSettings, fontVariationSettings, lineHeight, letterSpacing, pixelRatio, ignoreEditorZoom) {\n        if (lineHeight === 0) {\n            lineHeight = GOLDEN_LINE_HEIGHT_RATIO * fontSize;\n        }\n        else if (lineHeight < MINIMUM_LINE_HEIGHT) {\n            // Values too small to be line heights in pixels are in ems.\n            lineHeight = lineHeight * fontSize;\n        }\n        // Enforce integer, minimum constraints\n        lineHeight = Math.round(lineHeight);\n        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        if (fontVariationSettings === EditorFontVariations.TRANSLATE) {\n            if (fontWeight === 'normal' || fontWeight === 'bold') {\n                fontVariationSettings = EditorFontVariations.OFF;\n            }\n            else {\n                const fontWeightAsNumber = parseInt(fontWeight, 10);\n                fontVariationSettings = `'wght' ${fontWeightAsNumber}`;\n                fontWeight = 'normal';\n            }\n        }\n        return new BareFontInfo({\n            pixelRatio: pixelRatio,\n            fontFamily: fontFamily,\n            fontWeight: fontWeight,\n            fontSize: fontSize,\n            fontFeatureSettings: fontFeatureSettings,\n            fontVariationSettings,\n            lineHeight: lineHeight,\n            letterSpacing: letterSpacing\n        });\n    }\n    /**\n     * @internal\n     */\n    constructor(opts) {\n        this._bareFontInfoBrand = undefined;\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.fontVariationSettings = opts.fontVariationSettings;\n        this.lineHeight = opts.lineHeight | 0;\n        this.letterSpacing = opts.letterSpacing;\n    }\n    /**\n     * @internal\n     */\n    getId() {\n        return `${this.pixelRatio}-${this.fontFamily}-${this.fontWeight}-${this.fontSize}-${this.fontFeatureSettings}-${this.fontVariationSettings}-${this.lineHeight}-${this.letterSpacing}`;\n    }\n    /**\n     * @internal\n     */\n    getMassagedFontFamily() {\n        const fallbackFontFamily = EDITOR_FONT_DEFAULTS.fontFamily;\n        const fontFamily = BareFontInfo._wrapInQuotes(this.fontFamily);\n        if (fallbackFontFamily && this.fontFamily !== fallbackFontFamily) {\n            return `${fontFamily}, ${fallbackFontFamily}`;\n        }\n        return fontFamily;\n    }\n    static _wrapInQuotes(fontFamily) {\n        if (/[,\"']/.test(fontFamily)) {\n            // Looks like the font family might be already escaped\n            return fontFamily;\n        }\n        if (/[+ ]/.test(fontFamily)) {\n            // Wrap a font family using + or <space> with quotes\n            return `\"${fontFamily}\"`;\n        }\n        return fontFamily;\n    }\n}\n// change this whenever `FontInfo` members are changed\nexport const SERIALIZED_FONT_INFO_VERSION = 2;\nexport class FontInfo extends BareFontInfo {\n    /**\n     * @internal\n     */\n    constructor(opts, isTrusted) {\n        super(opts);\n        this._editorStylingBrand = undefined;\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.fontVariationSettings === other.fontVariationSettings\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 { getWindowId } from '../../../base/browser/dom.js';\nimport { PixelRatio } from '../../../base/browser/pixelRatio.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { CharWidthRequest, readCharWidths } from './charWidthReader.js';\nimport { EditorFontLigatures } from '../../common/config/editorOptions.js';\nimport { FontInfo } from '../../common/config/fontInfo.js';\nexport class FontMeasurementsImpl extends Disposable {\n    constructor() {\n        super(...arguments);\n        this._cache = new Map();\n        this._evictUntrustedReadingsTimeout = -1;\n        this._onDidChange = this._register(new Emitter());\n        this.onDidChange = this._onDidChange.event;\n    }\n    dispose() {\n        if (this._evictUntrustedReadingsTimeout !== -1) {\n            clearTimeout(this._evictUntrustedReadingsTimeout);\n            this._evictUntrustedReadingsTimeout = -1;\n        }\n        super.dispose();\n    }\n    /**\n     * Clear all cached font information and trigger a change event.\n     */\n    clearAllFontInfos() {\n        this._cache.clear();\n        this._onDidChange.fire();\n    }\n    _ensureCache(targetWindow) {\n        const windowId = getWindowId(targetWindow);\n        let cache = this._cache.get(windowId);\n        if (!cache) {\n            cache = new FontMeasurementsCache();\n            this._cache.set(windowId, cache);\n        }\n        return cache;\n    }\n    _writeToCache(targetWindow, item, value) {\n        const cache = this._ensureCache(targetWindow);\n        cache.put(item, value);\n        if (!value.isTrusted && this._evictUntrustedReadingsTimeout === -1) {\n            // Try reading again after some time\n            this._evictUntrustedReadingsTimeout = targetWindow.setTimeout(() => {\n                this._evictUntrustedReadingsTimeout = -1;\n                this._evictUntrustedReadings(targetWindow);\n            }, 5000);\n        }\n    }\n    _evictUntrustedReadings(targetWindow) {\n        const cache = this._ensureCache(targetWindow);\n        const values = cache.getValues();\n        let somethingRemoved = false;\n        for (const item of values) {\n            if (!item.isTrusted) {\n                somethingRemoved = true;\n                cache.remove(item);\n            }\n        }\n        if (somethingRemoved) {\n            this._onDidChange.fire();\n        }\n    }\n    /**\n     * Read font information.\n     */\n    readFontInfo(targetWindow, bareFontInfo) {\n        const cache = this._ensureCache(targetWindow);\n        if (!cache.has(bareFontInfo)) {\n            let readConfig = this._actualReadFontInfo(targetWindow, 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                    pixelRatio: PixelRatio.getInstance(targetWindow).value,\n                    fontFamily: readConfig.fontFamily,\n                    fontWeight: readConfig.fontWeight,\n                    fontSize: readConfig.fontSize,\n                    fontFeatureSettings: readConfig.fontFeatureSettings,\n                    fontVariationSettings: readConfig.fontVariationSettings,\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(targetWindow, bareFontInfo, readConfig);\n        }\n        return cache.get(bareFontInfo);\n    }\n    _createRequest(chr, type, all, monospace) {\n        const result = new CharWidthRequest(chr, type);\n        all.push(result);\n        monospace?.push(result);\n        return result;\n    }\n    _actualReadFontInfo(targetWindow, bareFontInfo) {\n        const all = [];\n        const monospace = [];\n        const typicalHalfwidthCharacter = this._createRequest('n', 0 /* CharWidthRequestType.Regular */, all, monospace);\n        const typicalFullwidthCharacter = this._createRequest('\\uff4d', 0 /* CharWidthRequestType.Regular */, all, null);\n        const space = this._createRequest(' ', 0 /* CharWidthRequestType.Regular */, all, monospace);\n        const digit0 = this._createRequest('0', 0 /* CharWidthRequestType.Regular */, all, monospace);\n        const digit1 = this._createRequest('1', 0 /* CharWidthRequestType.Regular */, all, monospace);\n        const digit2 = this._createRequest('2', 0 /* CharWidthRequestType.Regular */, all, monospace);\n        const digit3 = this._createRequest('3', 0 /* CharWidthRequestType.Regular */, all, monospace);\n        const digit4 = this._createRequest('4', 0 /* CharWidthRequestType.Regular */, all, monospace);\n        const digit5 = this._createRequest('5', 0 /* CharWidthRequestType.Regular */, all, monospace);\n        const digit6 = this._createRequest('6', 0 /* CharWidthRequestType.Regular */, all, monospace);\n        const digit7 = this._createRequest('7', 0 /* CharWidthRequestType.Regular */, all, monospace);\n        const digit8 = this._createRequest('8', 0 /* CharWidthRequestType.Regular */, all, monospace);\n        const digit9 = this._createRequest('9', 0 /* CharWidthRequestType.Regular */, all, monospace);\n        // monospace test: used for whitespace rendering\n        const rightwardsArrow = this._createRequest('→', 0 /* CharWidthRequestType.Regular */, all, monospace);\n        const halfwidthRightwardsArrow = this._createRequest('￫', 0 /* CharWidthRequestType.Regular */, all, null);\n        // U+00B7 - MIDDLE DOT\n        const middot = this._createRequest('·', 0 /* CharWidthRequestType.Regular */, all, monospace);\n        // U+2E31 - WORD SEPARATOR MIDDLE DOT\n        const wsmiddotWidth = this._createRequest(String.fromCharCode(0x2E31), 0 /* CharWidthRequestType.Regular */, all, null);\n        // monospace test: some characters\n        const monospaceTestChars = '|/-_ilm%';\n        for (let i = 0, len = monospaceTestChars.length; i < len; i++) {\n            this._createRequest(monospaceTestChars.charAt(i), 0 /* CharWidthRequestType.Regular */, all, monospace);\n            this._createRequest(monospaceTestChars.charAt(i), 1 /* CharWidthRequestType.Italic */, all, monospace);\n            this._createRequest(monospaceTestChars.charAt(i), 2 /* CharWidthRequestType.Bold */, all, monospace);\n        }\n        readCharWidths(targetWindow, 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        return new FontInfo({\n            pixelRatio: PixelRatio.getInstance(targetWindow).value,\n            fontFamily: bareFontInfo.fontFamily,\n            fontWeight: bareFontInfo.fontWeight,\n            fontSize: bareFontInfo.fontSize,\n            fontFeatureSettings: bareFontInfo.fontFeatureSettings,\n            fontVariationSettings: bareFontInfo.fontVariationSettings,\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        }, true);\n    }\n}\nclass FontMeasurementsCache {\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 const FontMeasurements = new FontMeasurementsImpl();\n","/*---------------------------------------------------------------------------------------------\n *  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) {\n    if (target[_util.DI_TARGET] === target) {\n        target[_util.DI_DEPENDENCIES].push({ id, index });\n    }\n    else {\n        target[_util.DI_DEPENDENCIES] = [{ id, index }];\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);\n    };\n    id.toString = () => serviceId;\n    _util.serviceIds.set(serviceId, id);\n    return id;\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const IModelService = createDecorator('modelService');\n","import { 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 { Emitter } from './event.js';\nimport { Disposable } from './lifecycle.js';\nimport * as nls from '../../nls.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._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    async run(event, data) {\n        if (this._actionCallback) {\n            await this._actionCallback(event);\n        }\n    }\n}\nexport class ActionRunner extends Disposable {\n    constructor() {\n        super(...arguments);\n        this._onWillRun = this._register(new Emitter());\n        this.onWillRun = this._onWillRun.event;\n        this._onDidRun = this._register(new Emitter());\n        this.onDidRun = this._onDidRun.event;\n    }\n    async run(action, context) {\n        if (!action.enabled) {\n            return;\n        }\n        this._onWillRun.fire({ action });\n        let error = undefined;\n        try {\n            await this.runAction(action, context);\n        }\n        catch (e) {\n            error = e;\n        }\n        this._onDidRun.fire({ action, error });\n    }\n    async runAction(action, context) {\n        await action.run(context);\n    }\n}\nexport class Separator {\n    constructor() {\n        this.id = Separator.ID;\n        this.label = '';\n        this.tooltip = '';\n        this.class = 'separator';\n        this.enabled = false;\n        this.checked = false;\n    }\n    /**\n     * Joins all non-empty lists of actions with separators.\n     */\n    static join(...actionLists) {\n        let out = [];\n        for (const list of actionLists) {\n            if (!list.length) {\n                // skip\n            }\n            else if (out.length) {\n                out = [...out, new Separator(), ...list];\n            }\n            else {\n                out = list;\n            }\n        }\n        return out;\n    }\n    static { this.ID = 'vs.actions.separator'; }\n    async run() { }\n}\nexport class SubmenuAction {\n    get actions() { return this._actions; }\n    constructor(id, label, actions, cssClass) {\n        this.tooltip = '';\n        this.enabled = true;\n        this.checked = undefined;\n        this.id = id;\n        this.label = label;\n        this.class = cssClass;\n        this._actions = actions;\n    }\n    async run() { }\n}\nexport class EmptySubmenuAction extends Action {\n    static { this.ID = 'vs.actions.empty'; }\n    constructor() {\n        super(EmptySubmenuAction.ID, nls.localize('submenu.empty', '(empty)'), undefined, false);\n    }\n}\nexport function toAction(props) {\n    return {\n        id: props.id,\n        label: props.label,\n        tooltip: props.tooltip ?? props.label,\n        class: props.class,\n        enabled: props.enabled ?? true,\n        checked: props.checked,\n        run: async (...args) => props.run(...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 { Codicon } from './codicons.js';\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 var ThemeIcon;\n(function (ThemeIcon) {\n    ThemeIcon.iconNameSegment = '[A-Za-z0-9]+';\n    ThemeIcon.iconNameExpression = '[A-Za-z0-9-]+';\n    ThemeIcon.iconModifierExpression = '~[A-Za-z]+';\n    ThemeIcon.iconNameCharacter = '[A-Za-z0-9~-]';\n    const ThemeIconIdRegex = new RegExp(`^(${ThemeIcon.iconNameExpression})(${ThemeIcon.iconModifierExpression})?$`);\n    function asClassNameArray(icon) {\n        const match = ThemeIconIdRegex.exec(icon.id);\n        if (!match) {\n            return asClassNameArray(Codicon.error);\n        }\n        const [, id, modifier] = match;\n        const classNames = ['codicon', 'codicon-' + id];\n        if (modifier) {\n            classNames.push('codicon-modifier-' + modifier.substring(1));\n        }\n        return classNames;\n    }\n    ThemeIcon.asClassNameArray = asClassNameArray;\n    function asClassName(icon) {\n        return asClassNameArray(icon).join(' ');\n    }\n    ThemeIcon.asClassName = asClassName;\n    function asCSSSelector(icon) {\n        return '.' + asClassNameArray(icon).join('.');\n    }\n    ThemeIcon.asCSSSelector = asCSSSelector;\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(`^\\\\$\\\\((${ThemeIcon.iconNameExpression}(?:${ThemeIcon.iconModifierExpression})?)\\\\)$`);\n    function fromString(str) {\n        const match = _regexFromString.exec(str);\n        if (!match) {\n            return undefined;\n        }\n        const [, name] = match;\n        return { id: name };\n    }\n    ThemeIcon.fromString = fromString;\n    function fromId(id) {\n        return { id };\n    }\n    ThemeIcon.fromId = fromId;\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 getModifier(icon) {\n        const tildeIndex = icon.id.lastIndexOf('~');\n        if (tildeIndex !== -1) {\n            return icon.id.substring(tildeIndex + 1);\n        }\n        return undefined;\n    }\n    ThemeIcon.getModifier = getModifier;\n    function isEqual(ti1, ti2) {\n        return ti1.id === ti2.id && ti1.color?.id === ti2.color?.id;\n    }\n    ThemeIcon.isEqual = isEqual;\n})(ThemeIcon || (ThemeIcon = {}));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { Iterable } from '../../../base/common/iterator.js';\nimport { toDisposable } from '../../../base/common/lifecycle.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\nimport { validateConstraints } from '../../../base/common/types.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.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.metadata && Array.isArray(idOrCommand.metadata.args)) {\n            const constraints = [];\n            for (const arg of idOrCommand.metadata.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        const removeFn = commands.unshift(idOrCommand);\n        const ret = toDisposable(() => {\n            removeFn();\n            const command = this._commands.get(id);\n            if (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","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { localize } from '../../../nls.js';\nfunction hintDidYouMean(...meant) {\n    switch (meant.length) {\n        case 1:\n            return localize('contextkey.scanner.hint.didYouMean1', \"Did you mean {0}?\", meant[0]);\n        case 2:\n            return localize('contextkey.scanner.hint.didYouMean2', \"Did you mean {0} or {1}?\", meant[0], meant[1]);\n        case 3:\n            return localize('contextkey.scanner.hint.didYouMean3', \"Did you mean {0}, {1} or {2}?\", meant[0], meant[1], meant[2]);\n        default: // we just don't expect that many\n            return undefined;\n    }\n}\nconst hintDidYouForgetToOpenOrCloseQuote = localize('contextkey.scanner.hint.didYouForgetToOpenOrCloseQuote', \"Did you forget to open or close the quote?\");\nconst hintDidYouForgetToEscapeSlash = localize('contextkey.scanner.hint.didYouForgetToEscapeSlash', \"Did you forget to escape the '/' (slash) character? Put two backslashes before it to escape, e.g., '\\\\\\\\/\\'.\");\n/**\n * A simple scanner for context keys.\n *\n * Example:\n *\n * ```ts\n * const scanner = new Scanner().reset('resourceFileName =~ /docker/ && !config.docker.enabled');\n * const tokens = [...scanner];\n * if (scanner.errorTokens.length > 0) {\n *     scanner.errorTokens.forEach(err => console.error(`Unexpected token at ${err.offset}: ${err.lexeme}\\nHint: ${err.additional}`));\n * } else {\n *     // process tokens\n * }\n * ```\n */\nexport class Scanner {\n    constructor() {\n        this._input = '';\n        this._start = 0;\n        this._current = 0;\n        this._tokens = [];\n        this._errors = [];\n        // u - unicode, y - sticky // TODO@ulugbekna: we accept double quotes as part of the string rather than as a delimiter (to preserve old parser's behavior)\n        this.stringRe = /[a-zA-Z0-9_<>\\-\\./\\\\:\\*\\?\\+\\[\\]\\^,#@;\"%\\$\\p{L}-]+/uy;\n    }\n    static getLexeme(token) {\n        switch (token.type) {\n            case 0 /* TokenType.LParen */:\n                return '(';\n            case 1 /* TokenType.RParen */:\n                return ')';\n            case 2 /* TokenType.Neg */:\n                return '!';\n            case 3 /* TokenType.Eq */:\n                return token.isTripleEq ? '===' : '==';\n            case 4 /* TokenType.NotEq */:\n                return token.isTripleEq ? '!==' : '!=';\n            case 5 /* TokenType.Lt */:\n                return '<';\n            case 6 /* TokenType.LtEq */:\n                return '<=';\n            case 7 /* TokenType.Gt */:\n                return '>=';\n            case 8 /* TokenType.GtEq */:\n                return '>=';\n            case 9 /* TokenType.RegexOp */:\n                return '=~';\n            case 10 /* TokenType.RegexStr */:\n                return token.lexeme;\n            case 11 /* TokenType.True */:\n                return 'true';\n            case 12 /* TokenType.False */:\n                return 'false';\n            case 13 /* TokenType.In */:\n                return 'in';\n            case 14 /* TokenType.Not */:\n                return 'not';\n            case 15 /* TokenType.And */:\n                return '&&';\n            case 16 /* TokenType.Or */:\n                return '||';\n            case 17 /* TokenType.Str */:\n                return token.lexeme;\n            case 18 /* TokenType.QuotedStr */:\n                return token.lexeme;\n            case 19 /* TokenType.Error */:\n                return token.lexeme;\n            case 20 /* TokenType.EOF */:\n                return 'EOF';\n            default:\n                throw illegalState(`unhandled token type: ${JSON.stringify(token)}; have you forgotten to add a case?`);\n        }\n    }\n    static { this._regexFlags = new Set(['i', 'g', 's', 'm', 'y', 'u'].map(ch => ch.charCodeAt(0))); }\n    static { this._keywords = new Map([\n        ['not', 14 /* TokenType.Not */],\n        ['in', 13 /* TokenType.In */],\n        ['false', 12 /* TokenType.False */],\n        ['true', 11 /* TokenType.True */],\n    ]); }\n    reset(value) {\n        this._input = value;\n        this._start = 0;\n        this._current = 0;\n        this._tokens = [];\n        this._errors = [];\n        return this;\n    }\n    scan() {\n        while (!this._isAtEnd()) {\n            this._start = this._current;\n            const ch = this._advance();\n            switch (ch) {\n                case 40 /* CharCode.OpenParen */:\n                    this._addToken(0 /* TokenType.LParen */);\n                    break;\n                case 41 /* CharCode.CloseParen */:\n                    this._addToken(1 /* TokenType.RParen */);\n                    break;\n                case 33 /* CharCode.ExclamationMark */:\n                    if (this._match(61 /* CharCode.Equals */)) {\n                        const isTripleEq = this._match(61 /* CharCode.Equals */); // eat last `=` if `!==`\n                        this._tokens.push({ type: 4 /* TokenType.NotEq */, offset: this._start, isTripleEq });\n                    }\n                    else {\n                        this._addToken(2 /* TokenType.Neg */);\n                    }\n                    break;\n                case 39 /* CharCode.SingleQuote */:\n                    this._quotedString();\n                    break;\n                case 47 /* CharCode.Slash */:\n                    this._regex();\n                    break;\n                case 61 /* CharCode.Equals */:\n                    if (this._match(61 /* CharCode.Equals */)) { // support `==`\n                        const isTripleEq = this._match(61 /* CharCode.Equals */); // eat last `=` if `===`\n                        this._tokens.push({ type: 3 /* TokenType.Eq */, offset: this._start, isTripleEq });\n                    }\n                    else if (this._match(126 /* CharCode.Tilde */)) {\n                        this._addToken(9 /* TokenType.RegexOp */);\n                    }\n                    else {\n                        this._error(hintDidYouMean('==', '=~'));\n                    }\n                    break;\n                case 60 /* CharCode.LessThan */:\n                    this._addToken(this._match(61 /* CharCode.Equals */) ? 6 /* TokenType.LtEq */ : 5 /* TokenType.Lt */);\n                    break;\n                case 62 /* CharCode.GreaterThan */:\n                    this._addToken(this._match(61 /* CharCode.Equals */) ? 8 /* TokenType.GtEq */ : 7 /* TokenType.Gt */);\n                    break;\n                case 38 /* CharCode.Ampersand */:\n                    if (this._match(38 /* CharCode.Ampersand */)) {\n                        this._addToken(15 /* TokenType.And */);\n                    }\n                    else {\n                        this._error(hintDidYouMean('&&'));\n                    }\n                    break;\n                case 124 /* CharCode.Pipe */:\n                    if (this._match(124 /* CharCode.Pipe */)) {\n                        this._addToken(16 /* TokenType.Or */);\n                    }\n                    else {\n                        this._error(hintDidYouMean('||'));\n                    }\n                    break;\n                // TODO@ulugbekna: 1) rewrite using a regex 2) reconsider what characters are considered whitespace, including unicode, nbsp, etc.\n                case 32 /* CharCode.Space */:\n                case 13 /* CharCode.CarriageReturn */:\n                case 9 /* CharCode.Tab */:\n                case 10 /* CharCode.LineFeed */:\n                case 160 /* CharCode.NoBreakSpace */: // &nbsp\n                    break;\n                default:\n                    this._string();\n            }\n        }\n        this._start = this._current;\n        this._addToken(20 /* TokenType.EOF */);\n        return Array.from(this._tokens);\n    }\n    _match(expected) {\n        if (this._isAtEnd()) {\n            return false;\n        }\n        if (this._input.charCodeAt(this._current) !== expected) {\n            return false;\n        }\n        this._current++;\n        return true;\n    }\n    _advance() {\n        return this._input.charCodeAt(this._current++);\n    }\n    _peek() {\n        return this._isAtEnd() ? 0 /* CharCode.Null */ : this._input.charCodeAt(this._current);\n    }\n    _addToken(type) {\n        this._tokens.push({ type, offset: this._start });\n    }\n    _error(additional) {\n        const offset = this._start;\n        const lexeme = this._input.substring(this._start, this._current);\n        const errToken = { type: 19 /* TokenType.Error */, offset: this._start, lexeme };\n        this._errors.push({ offset, lexeme, additionalInfo: additional });\n        this._tokens.push(errToken);\n    }\n    _string() {\n        this.stringRe.lastIndex = this._start;\n        const match = this.stringRe.exec(this._input);\n        if (match) {\n            this._current = this._start + match[0].length;\n            const lexeme = this._input.substring(this._start, this._current);\n            const keyword = Scanner._keywords.get(lexeme);\n            if (keyword) {\n                this._addToken(keyword);\n            }\n            else {\n                this._tokens.push({ type: 17 /* TokenType.Str */, lexeme, offset: this._start });\n            }\n        }\n    }\n    // captures the lexeme without the leading and trailing '\n    _quotedString() {\n        while (this._peek() !== 39 /* CharCode.SingleQuote */ && !this._isAtEnd()) { // TODO@ulugbekna: add support for escaping ' ?\n            this._advance();\n        }\n        if (this._isAtEnd()) {\n            this._error(hintDidYouForgetToOpenOrCloseQuote);\n            return;\n        }\n        // consume the closing '\n        this._advance();\n        this._tokens.push({ type: 18 /* TokenType.QuotedStr */, lexeme: this._input.substring(this._start + 1, this._current - 1), offset: this._start + 1 });\n    }\n    /*\n     * Lexing a regex expression: /.../[igsmyu]*\n     * Based on https://github.com/microsoft/TypeScript/blob/9247ef115e617805983740ba795d7a8164babf89/src/compiler/scanner.ts#L2129-L2181\n     *\n     * Note that we want slashes within a regex to be escaped, e.g., /file:\\\\/\\\\/\\\\// should match `file:///`\n     */\n    _regex() {\n        let p = this._current;\n        let inEscape = false;\n        let inCharacterClass = false;\n        while (true) {\n            if (p >= this._input.length) {\n                this._current = p;\n                this._error(hintDidYouForgetToEscapeSlash);\n                return;\n            }\n            const ch = this._input.charCodeAt(p);\n            if (inEscape) { // parsing an escape character\n                inEscape = false;\n            }\n            else if (ch === 47 /* CharCode.Slash */ && !inCharacterClass) { // end of regex\n                p++;\n                break;\n            }\n            else if (ch === 91 /* CharCode.OpenSquareBracket */) {\n                inCharacterClass = true;\n            }\n            else if (ch === 92 /* CharCode.Backslash */) {\n                inEscape = true;\n            }\n            else if (ch === 93 /* CharCode.CloseSquareBracket */) {\n                inCharacterClass = false;\n            }\n            p++;\n        }\n        // Consume flags // TODO@ulugbekna: use regex instead\n        while (p < this._input.length && Scanner._regexFlags.has(this._input.charCodeAt(p))) {\n            p++;\n        }\n        this._current = p;\n        const lexeme = this._input.substring(this._start, this._current);\n        this._tokens.push({ type: 10 /* TokenType.RegexStr */, lexeme, offset: this._start });\n    }\n    _isAtEnd() {\n        return this._current >= this._input.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 { isChrome, isEdge, isFirefox, isLinux, isMacintosh, isSafari, isWeb, isWindows } from '../../../base/common/platform.js';\nimport { isFalsyOrWhitespace } from '../../../base/common/strings.js';\nimport { Scanner } from './scanner.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nimport { localize } from '../../../nls.js';\nconst CONSTANT_VALUES = new Map();\nCONSTANT_VALUES.set('false', false);\nCONSTANT_VALUES.set('true', true);\nCONSTANT_VALUES.set('isMac', isMacintosh);\nCONSTANT_VALUES.set('isLinux', isLinux);\nCONSTANT_VALUES.set('isWindows', isWindows);\nCONSTANT_VALUES.set('isWeb', isWeb);\nCONSTANT_VALUES.set('isMacNative', isMacintosh && !isWeb);\nCONSTANT_VALUES.set('isEdge', isEdge);\nCONSTANT_VALUES.set('isFirefox', isFirefox);\nCONSTANT_VALUES.set('isChrome', isChrome);\nCONSTANT_VALUES.set('isSafari', isSafari);\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst defaultConfig = {\n    regexParsingWithErrorRecovery: true\n};\nconst errorEmptyString = localize('contextkey.parser.error.emptyString', \"Empty context key expression\");\nconst hintEmptyString = localize('contextkey.parser.error.emptyString.hint', \"Did you forget to write an expression? You can also put 'false' or 'true' to always evaluate to false or true, respectively.\");\nconst errorNoInAfterNot = localize('contextkey.parser.error.noInAfterNot', \"'in' after 'not'.\");\nconst errorClosingParenthesis = localize('contextkey.parser.error.closingParenthesis', \"closing parenthesis ')'\");\nconst errorUnexpectedToken = localize('contextkey.parser.error.unexpectedToken', \"Unexpected token\");\nconst hintUnexpectedToken = localize('contextkey.parser.error.unexpectedToken.hint', \"Did you forget to put && or || before the token?\");\nconst errorUnexpectedEOF = localize('contextkey.parser.error.unexpectedEOF', \"Unexpected end of expression\");\nconst hintUnexpectedEOF = localize('contextkey.parser.error.unexpectedEOF.hint', \"Did you forget to put a context key?\");\n/**\n * A parser for context key expressions.\n *\n * Example:\n * ```ts\n * const parser = new Parser();\n * const expr = parser.parse('foo == \"bar\" && baz == true');\n *\n * if (expr === undefined) {\n * \t// there were lexing or parsing errors\n * \t// process lexing errors with `parser.lexingErrors`\n *  // process parsing errors with `parser.parsingErrors`\n * } else {\n * \t// expr is a valid expression\n * }\n * ```\n */\nexport class Parser {\n    // Note: this doesn't produce an exact syntax tree but a normalized one\n    // ContextKeyExpression's that we use as AST nodes do not expose constructors that do not normalize\n    static { this._parseError = new Error(); }\n    constructor(_config = defaultConfig) {\n        this._config = _config;\n        // lifetime note: `_scanner` lives as long as the parser does, i.e., is not reset between calls to `parse`\n        this._scanner = new Scanner();\n        // lifetime note: `_tokens`, `_current`, and `_parsingErrors` must be reset between calls to `parse`\n        this._tokens = [];\n        this._current = 0; // invariant: 0 <= this._current < this._tokens.length ; any incrementation of this value must first call `_isAtEnd`\n        this._parsingErrors = [];\n        this._flagsGYRe = /g|y/g;\n    }\n    /**\n     * Parse a context key expression.\n     *\n     * @param input the expression to parse\n     * @returns the parsed expression or `undefined` if there's an error - call `lexingErrors` and `parsingErrors` to see the errors\n     */\n    parse(input) {\n        if (input === '') {\n            this._parsingErrors.push({ message: errorEmptyString, offset: 0, lexeme: '', additionalInfo: hintEmptyString });\n            return undefined;\n        }\n        this._tokens = this._scanner.reset(input).scan();\n        // @ulugbekna: we do not stop parsing if there are lexing errors to be able to reconstruct regexes with unescaped slashes; TODO@ulugbekna: make this respect config option for recovery\n        this._current = 0;\n        this._parsingErrors = [];\n        try {\n            const expr = this._expr();\n            if (!this._isAtEnd()) {\n                const peek = this._peek();\n                const additionalInfo = peek.type === 17 /* TokenType.Str */ ? hintUnexpectedToken : undefined;\n                this._parsingErrors.push({ message: errorUnexpectedToken, offset: peek.offset, lexeme: Scanner.getLexeme(peek), additionalInfo });\n                throw Parser._parseError;\n            }\n            return expr;\n        }\n        catch (e) {\n            if (!(e === Parser._parseError)) {\n                throw e;\n            }\n            return undefined;\n        }\n    }\n    _expr() {\n        return this._or();\n    }\n    _or() {\n        const expr = [this._and()];\n        while (this._matchOne(16 /* TokenType.Or */)) {\n            const right = this._and();\n            expr.push(right);\n        }\n        return expr.length === 1 ? expr[0] : ContextKeyExpr.or(...expr);\n    }\n    _and() {\n        const expr = [this._term()];\n        while (this._matchOne(15 /* TokenType.And */)) {\n            const right = this._term();\n            expr.push(right);\n        }\n        return expr.length === 1 ? expr[0] : ContextKeyExpr.and(...expr);\n    }\n    _term() {\n        if (this._matchOne(2 /* TokenType.Neg */)) {\n            const peek = this._peek();\n            switch (peek.type) {\n                case 11 /* TokenType.True */:\n                    this._advance();\n                    return ContextKeyFalseExpr.INSTANCE;\n                case 12 /* TokenType.False */:\n                    this._advance();\n                    return ContextKeyTrueExpr.INSTANCE;\n                case 0 /* TokenType.LParen */: {\n                    this._advance();\n                    const expr = this._expr();\n                    this._consume(1 /* TokenType.RParen */, errorClosingParenthesis);\n                    return expr?.negate();\n                }\n                case 17 /* TokenType.Str */:\n                    this._advance();\n                    return ContextKeyNotExpr.create(peek.lexeme);\n                default:\n                    throw this._errExpectedButGot(`KEY | true | false | '(' expression ')'`, peek);\n            }\n        }\n        return this._primary();\n    }\n    _primary() {\n        const peek = this._peek();\n        switch (peek.type) {\n            case 11 /* TokenType.True */:\n                this._advance();\n                return ContextKeyExpr.true();\n            case 12 /* TokenType.False */:\n                this._advance();\n                return ContextKeyExpr.false();\n            case 0 /* TokenType.LParen */: {\n                this._advance();\n                const expr = this._expr();\n                this._consume(1 /* TokenType.RParen */, errorClosingParenthesis);\n                return expr;\n            }\n            case 17 /* TokenType.Str */: {\n                // KEY\n                const key = peek.lexeme;\n                this._advance();\n                // =~ regex\n                if (this._matchOne(9 /* TokenType.RegexOp */)) {\n                    // @ulugbekna: we need to reconstruct the regex from the tokens because some extensions use unescaped slashes in regexes\n                    const expr = this._peek();\n                    if (!this._config.regexParsingWithErrorRecovery) {\n                        this._advance();\n                        if (expr.type !== 10 /* TokenType.RegexStr */) {\n                            throw this._errExpectedButGot(`REGEX`, expr);\n                        }\n                        const regexLexeme = expr.lexeme;\n                        const closingSlashIndex = regexLexeme.lastIndexOf('/');\n                        const flags = closingSlashIndex === regexLexeme.length - 1 ? undefined : this._removeFlagsGY(regexLexeme.substring(closingSlashIndex + 1));\n                        let regexp;\n                        try {\n                            regexp = new RegExp(regexLexeme.substring(1, closingSlashIndex), flags);\n                        }\n                        catch (e) {\n                            throw this._errExpectedButGot(`REGEX`, expr);\n                        }\n                        return ContextKeyRegexExpr.create(key, regexp);\n                    }\n                    switch (expr.type) {\n                        case 10 /* TokenType.RegexStr */:\n                        case 19 /* TokenType.Error */: { // also handle an ErrorToken in case of smth such as /(/file)/\n                            const lexemeReconstruction = [expr.lexeme]; // /REGEX/ or /REGEX/FLAGS\n                            this._advance();\n                            let followingToken = this._peek();\n                            let parenBalance = 0;\n                            for (let i = 0; i < expr.lexeme.length; i++) {\n                                if (expr.lexeme.charCodeAt(i) === 40 /* CharCode.OpenParen */) {\n                                    parenBalance++;\n                                }\n                                else if (expr.lexeme.charCodeAt(i) === 41 /* CharCode.CloseParen */) {\n                                    parenBalance--;\n                                }\n                            }\n                            while (!this._isAtEnd() && followingToken.type !== 15 /* TokenType.And */ && followingToken.type !== 16 /* TokenType.Or */) {\n                                switch (followingToken.type) {\n                                    case 0 /* TokenType.LParen */:\n                                        parenBalance++;\n                                        break;\n                                    case 1 /* TokenType.RParen */:\n                                        parenBalance--;\n                                        break;\n                                    case 10 /* TokenType.RegexStr */:\n                                    case 18 /* TokenType.QuotedStr */:\n                                        for (let i = 0; i < followingToken.lexeme.length; i++) {\n                                            if (followingToken.lexeme.charCodeAt(i) === 40 /* CharCode.OpenParen */) {\n                                                parenBalance++;\n                                            }\n                                            else if (expr.lexeme.charCodeAt(i) === 41 /* CharCode.CloseParen */) {\n                                                parenBalance--;\n                                            }\n                                        }\n                                }\n                                if (parenBalance < 0) {\n                                    break;\n                                }\n                                lexemeReconstruction.push(Scanner.getLexeme(followingToken));\n                                this._advance();\n                                followingToken = this._peek();\n                            }\n                            const regexLexeme = lexemeReconstruction.join('');\n                            const closingSlashIndex = regexLexeme.lastIndexOf('/');\n                            const flags = closingSlashIndex === regexLexeme.length - 1 ? undefined : this._removeFlagsGY(regexLexeme.substring(closingSlashIndex + 1));\n                            let regexp;\n                            try {\n                                regexp = new RegExp(regexLexeme.substring(1, closingSlashIndex), flags);\n                            }\n                            catch (e) {\n                                throw this._errExpectedButGot(`REGEX`, expr);\n                            }\n                            return ContextKeyExpr.regex(key, regexp);\n                        }\n                        case 18 /* TokenType.QuotedStr */: {\n                            const serializedValue = expr.lexeme;\n                            this._advance();\n                            // replicate old regex parsing behavior\n                            let regex = null;\n                            if (!isFalsyOrWhitespace(serializedValue)) {\n                                const start = serializedValue.indexOf('/');\n                                const end = serializedValue.lastIndexOf('/');\n                                if (start !== end && start >= 0) {\n                                    const value = serializedValue.slice(start + 1, end);\n                                    const caseIgnoreFlag = serializedValue[end + 1] === 'i' ? 'i' : '';\n                                    try {\n                                        regex = new RegExp(value, caseIgnoreFlag);\n                                    }\n                                    catch (_e) {\n                                        throw this._errExpectedButGot(`REGEX`, expr);\n                                    }\n                                }\n                            }\n                            if (regex === null) {\n                                throw this._errExpectedButGot('REGEX', expr);\n                            }\n                            return ContextKeyRegexExpr.create(key, regex);\n                        }\n                        default:\n                            throw this._errExpectedButGot('REGEX', this._peek());\n                    }\n                }\n                // [ 'not' 'in' value ]\n                if (this._matchOne(14 /* TokenType.Not */)) {\n                    this._consume(13 /* TokenType.In */, errorNoInAfterNot);\n                    const right = this._value();\n                    return ContextKeyExpr.notIn(key, right);\n                }\n                // [ ('==' | '!=' | '<' | '<=' | '>' | '>=' | 'in') value ]\n                const maybeOp = this._peek().type;\n                switch (maybeOp) {\n                    case 3 /* TokenType.Eq */: {\n                        this._advance();\n                        const right = this._value();\n                        if (this._previous().type === 18 /* TokenType.QuotedStr */) { // to preserve old parser behavior: \"foo == 'true'\" is preserved as \"foo == 'true'\", but \"foo == true\" is optimized as \"foo\"\n                            return ContextKeyExpr.equals(key, right);\n                        }\n                        switch (right) {\n                            case 'true':\n                                return ContextKeyExpr.has(key);\n                            case 'false':\n                                return ContextKeyExpr.not(key);\n                            default:\n                                return ContextKeyExpr.equals(key, right);\n                        }\n                    }\n                    case 4 /* TokenType.NotEq */: {\n                        this._advance();\n                        const right = this._value();\n                        if (this._previous().type === 18 /* TokenType.QuotedStr */) { // same as above with \"foo != 'true'\"\n                            return ContextKeyExpr.notEquals(key, right);\n                        }\n                        switch (right) {\n                            case 'true':\n                                return ContextKeyExpr.not(key);\n                            case 'false':\n                                return ContextKeyExpr.has(key);\n                            default:\n                                return ContextKeyExpr.notEquals(key, right);\n                        }\n                    }\n                    // TODO: ContextKeyExpr.smaller(key, right) accepts only `number` as `right` AND during eval of this node, we just eval to `false` if `right` is not a number\n                    // consequently, package.json linter should _warn_ the user if they're passing undesired things to ops\n                    case 5 /* TokenType.Lt */:\n                        this._advance();\n                        return ContextKeySmallerExpr.create(key, this._value());\n                    case 6 /* TokenType.LtEq */:\n                        this._advance();\n                        return ContextKeySmallerEqualsExpr.create(key, this._value());\n                    case 7 /* TokenType.Gt */:\n                        this._advance();\n                        return ContextKeyGreaterExpr.create(key, this._value());\n                    case 8 /* TokenType.GtEq */:\n                        this._advance();\n                        return ContextKeyGreaterEqualsExpr.create(key, this._value());\n                    case 13 /* TokenType.In */:\n                        this._advance();\n                        return ContextKeyExpr.in(key, this._value());\n                    default:\n                        return ContextKeyExpr.has(key);\n                }\n            }\n            case 20 /* TokenType.EOF */:\n                this._parsingErrors.push({ message: errorUnexpectedEOF, offset: peek.offset, lexeme: '', additionalInfo: hintUnexpectedEOF });\n                throw Parser._parseError;\n            default:\n                throw this._errExpectedButGot(`true | false | KEY \\n\\t| KEY '=~' REGEX \\n\\t| KEY ('==' | '!=' | '<' | '<=' | '>' | '>=' | 'in' | 'not' 'in') value`, this._peek());\n        }\n    }\n    _value() {\n        const token = this._peek();\n        switch (token.type) {\n            case 17 /* TokenType.Str */:\n            case 18 /* TokenType.QuotedStr */:\n                this._advance();\n                return token.lexeme;\n            case 11 /* TokenType.True */:\n                this._advance();\n                return 'true';\n            case 12 /* TokenType.False */:\n                this._advance();\n                return 'false';\n            case 13 /* TokenType.In */: // we support `in` as a value, e.g., \"when\": \"languageId == in\" - exists in existing extensions\n                this._advance();\n                return 'in';\n            default:\n                // this allows \"when\": \"foo == \" which's used by existing extensions\n                // we do not call `_advance` on purpose - we don't want to eat unintended tokens\n                return '';\n        }\n    }\n    _removeFlagsGY(flags) {\n        return flags.replaceAll(this._flagsGYRe, '');\n    }\n    // careful: this can throw if current token is the initial one (ie index = 0)\n    _previous() {\n        return this._tokens[this._current - 1];\n    }\n    _matchOne(token) {\n        if (this._check(token)) {\n            this._advance();\n            return true;\n        }\n        return false;\n    }\n    _advance() {\n        if (!this._isAtEnd()) {\n            this._current++;\n        }\n        return this._previous();\n    }\n    _consume(type, message) {\n        if (this._check(type)) {\n            return this._advance();\n        }\n        throw this._errExpectedButGot(message, this._peek());\n    }\n    _errExpectedButGot(expected, got, additionalInfo) {\n        const message = localize('contextkey.parser.error.expectedButGot', \"Expected: {0}\\nReceived: '{1}'.\", expected, Scanner.getLexeme(got));\n        const offset = got.offset;\n        const lexeme = Scanner.getLexeme(got);\n        this._parsingErrors.push({ message, offset, lexeme, additionalInfo });\n        return Parser._parseError;\n    }\n    _check(type) {\n        return this._peek().type === type;\n    }\n    _peek() {\n        return this._tokens[this._current];\n    }\n    _isAtEnd() {\n        return this._peek().type === 20 /* TokenType.EOF */;\n    }\n}\nexport class ContextKeyExpr {\n    static false() {\n        return ContextKeyFalseExpr.INSTANCE;\n    }\n    static true() {\n        return ContextKeyTrueExpr.INSTANCE;\n    }\n    static has(key) {\n        return ContextKeyDefinedExpr.create(key);\n    }\n    static equals(key, value) {\n        return ContextKeyEqualsExpr.create(key, value);\n    }\n    static notEquals(key, value) {\n        return ContextKeyNotEqualsExpr.create(key, value);\n    }\n    static regex(key, value) {\n        return ContextKeyRegexExpr.create(key, value);\n    }\n    static in(key, value) {\n        return ContextKeyInExpr.create(key, value);\n    }\n    static notIn(key, value) {\n        return ContextKeyNotInExpr.create(key, value);\n    }\n    static not(key) {\n        return ContextKeyNotExpr.create(key);\n    }\n    static and(...expr) {\n        return ContextKeyAndExpr.create(expr, null, true);\n    }\n    static or(...expr) {\n        return ContextKeyOrExpr.create(expr, null, true);\n    }\n    static { this._parser = new Parser({ regexParsingWithErrorRecovery: false }); }\n    static deserialize(serialized) {\n        if (serialized === undefined || serialized === null) { // an empty string needs to be handled by the parser to get a corresponding parsing error reported\n            return undefined;\n        }\n        const expr = this._parser.parse(serialized);\n        return expr;\n    }\n}\nexport function expressionsAreEqualWithConstantSubstitution(a, b) {\n    const aExpr = a ? a.substituteConstants() : undefined;\n    const bExpr = b ? b.substituteConstants() : undefined;\n    if (!aExpr && !bExpr) {\n        return true;\n    }\n    if (!aExpr || !bExpr) {\n        return false;\n    }\n    return aExpr.equals(bExpr);\n}\nfunction cmp(a, b) {\n    return a.cmp(b);\n}\nexport class ContextKeyFalseExpr {\n    static { this.INSTANCE = new ContextKeyFalseExpr(); }\n    constructor() {\n        this.type = 0 /* ContextKeyExprType.False */;\n    }\n    cmp(other) {\n        return this.type - other.type;\n    }\n    equals(other) {\n        return (other.type === this.type);\n    }\n    substituteConstants() {\n        return this;\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}\nexport class ContextKeyTrueExpr {\n    static { this.INSTANCE = new ContextKeyTrueExpr(); }\n    constructor() {\n        this.type = 1 /* ContextKeyExprType.True */;\n    }\n    cmp(other) {\n        return this.type - other.type;\n    }\n    equals(other) {\n        return (other.type === this.type);\n    }\n    substituteConstants() {\n        return this;\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}\nexport class ContextKeyDefinedExpr {\n    static create(key, negated = null) {\n        const constantValue = CONSTANT_VALUES.get(key);\n        if (typeof constantValue === 'boolean') {\n            return constantValue ? ContextKeyTrueExpr.INSTANCE : ContextKeyFalseExpr.INSTANCE;\n        }\n        return new ContextKeyDefinedExpr(key, negated);\n    }\n    constructor(key, negated) {\n        this.key = key;\n        this.negated = negated;\n        this.type = 2 /* ContextKeyExprType.Defined */;\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    substituteConstants() {\n        const constantValue = CONSTANT_VALUES.get(this.key);\n        if (typeof constantValue === 'boolean') {\n            return constantValue ? ContextKeyTrueExpr.INSTANCE : ContextKeyFalseExpr.INSTANCE;\n        }\n        return this;\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        if (!this.negated) {\n            this.negated = ContextKeyNotExpr.create(this.key, this);\n        }\n        return this.negated;\n    }\n}\nexport class ContextKeyEqualsExpr {\n    static create(key, value, negated = null) {\n        if (typeof value === 'boolean') {\n            return (value ? ContextKeyDefinedExpr.create(key, negated) : ContextKeyNotExpr.create(key, negated));\n        }\n        const constantValue = CONSTANT_VALUES.get(key);\n        if (typeof constantValue === 'boolean') {\n            const trueValue = constantValue ? 'true' : 'false';\n            return (value === trueValue ? ContextKeyTrueExpr.INSTANCE : ContextKeyFalseExpr.INSTANCE);\n        }\n        return new ContextKeyEqualsExpr(key, value, negated);\n    }\n    constructor(key, value, negated) {\n        this.key = key;\n        this.value = value;\n        this.negated = negated;\n        this.type = 4 /* ContextKeyExprType.Equals */;\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    substituteConstants() {\n        const constantValue = CONSTANT_VALUES.get(this.key);\n        if (typeof constantValue === 'boolean') {\n            const trueValue = constantValue ? 'true' : 'false';\n            return (this.value === trueValue ? ContextKeyTrueExpr.INSTANCE : ContextKeyFalseExpr.INSTANCE);\n        }\n        return this;\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        if (!this.negated) {\n            this.negated = ContextKeyNotEqualsExpr.create(this.key, this.value, this);\n        }\n        return this.negated;\n    }\n}\nexport class ContextKeyInExpr {\n    static create(key, valueKey) {\n        return new ContextKeyInExpr(key, valueKey);\n    }\n    constructor(key, valueKey) {\n        this.key = key;\n        this.valueKey = valueKey;\n        this.type = 10 /* ContextKeyExprType.In */;\n        this.negated = null;\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    substituteConstants() {\n        return this;\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.includes(item);\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        if (!this.negated) {\n            this.negated = ContextKeyNotInExpr.create(this.key, this.valueKey);\n        }\n        return this.negated;\n    }\n}\nexport class ContextKeyNotInExpr {\n    static create(key, valueKey) {\n        return new ContextKeyNotInExpr(key, valueKey);\n    }\n    constructor(key, valueKey) {\n        this.key = key;\n        this.valueKey = valueKey;\n        this.type = 11 /* ContextKeyExprType.NotIn */;\n        this._negated = ContextKeyInExpr.create(key, valueKey);\n    }\n    cmp(other) {\n        if (other.type !== this.type) {\n            return this.type - other.type;\n        }\n        return this._negated.cmp(other._negated);\n    }\n    equals(other) {\n        if (other.type === this.type) {\n            return this._negated.equals(other._negated);\n        }\n        return false;\n    }\n    substituteConstants() {\n        return this;\n    }\n    evaluate(context) {\n        return !this._negated.evaluate(context);\n    }\n    serialize() {\n        return `${this.key} not in '${this.valueKey}'`;\n    }\n    keys() {\n        return this._negated.keys();\n    }\n    negate() {\n        return this._negated;\n    }\n}\nexport class ContextKeyNotEqualsExpr {\n    static create(key, value, negated = null) {\n        if (typeof value === 'boolean') {\n            if (value) {\n                return ContextKeyNotExpr.create(key, negated);\n            }\n            return ContextKeyDefinedExpr.create(key, negated);\n        }\n        const constantValue = CONSTANT_VALUES.get(key);\n        if (typeof constantValue === 'boolean') {\n            const falseValue = constantValue ? 'true' : 'false';\n            return (value === falseValue ? ContextKeyFalseExpr.INSTANCE : ContextKeyTrueExpr.INSTANCE);\n        }\n        return new ContextKeyNotEqualsExpr(key, value, negated);\n    }\n    constructor(key, value, negated) {\n        this.key = key;\n        this.value = value;\n        this.negated = negated;\n        this.type = 5 /* ContextKeyExprType.NotEquals */;\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    substituteConstants() {\n        const constantValue = CONSTANT_VALUES.get(this.key);\n        if (typeof constantValue === 'boolean') {\n            const falseValue = constantValue ? 'true' : 'false';\n            return (this.value === falseValue ? ContextKeyFalseExpr.INSTANCE : ContextKeyTrueExpr.INSTANCE);\n        }\n        return this;\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        if (!this.negated) {\n            this.negated = ContextKeyEqualsExpr.create(this.key, this.value, this);\n        }\n        return this.negated;\n    }\n}\nexport class ContextKeyNotExpr {\n    static create(key, negated = null) {\n        const constantValue = CONSTANT_VALUES.get(key);\n        if (typeof constantValue === 'boolean') {\n            return (constantValue ? ContextKeyFalseExpr.INSTANCE : ContextKeyTrueExpr.INSTANCE);\n        }\n        return new ContextKeyNotExpr(key, negated);\n    }\n    constructor(key, negated) {\n        this.key = key;\n        this.negated = negated;\n        this.type = 3 /* ContextKeyExprType.Not */;\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    substituteConstants() {\n        const constantValue = CONSTANT_VALUES.get(this.key);\n        if (typeof constantValue === 'boolean') {\n            return (constantValue ? ContextKeyFalseExpr.INSTANCE : ContextKeyTrueExpr.INSTANCE);\n        }\n        return this;\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        if (!this.negated) {\n            this.negated = ContextKeyDefinedExpr.create(this.key, this);\n        }\n        return this.negated;\n    }\n}\nfunction withFloatOrStr(value, callback) {\n    if (typeof value === 'string') {\n        const n = parseFloat(value);\n        if (!isNaN(n)) {\n            value = n;\n        }\n    }\n    if (typeof value === 'string' || typeof value === 'number') {\n        return callback(value);\n    }\n    return ContextKeyFalseExpr.INSTANCE;\n}\nexport class ContextKeyGreaterExpr {\n    static create(key, _value, negated = null) {\n        return withFloatOrStr(_value, (value) => new ContextKeyGreaterExpr(key, value, negated));\n    }\n    constructor(key, value, negated) {\n        this.key = key;\n        this.value = value;\n        this.negated = negated;\n        this.type = 12 /* ContextKeyExprType.Greater */;\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    substituteConstants() {\n        return this;\n    }\n    evaluate(context) {\n        if (typeof this.value === 'string') {\n            return false;\n        }\n        return (parseFloat(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        if (!this.negated) {\n            this.negated = ContextKeySmallerEqualsExpr.create(this.key, this.value, this);\n        }\n        return this.negated;\n    }\n}\nexport class ContextKeyGreaterEqualsExpr {\n    static create(key, _value, negated = null) {\n        return withFloatOrStr(_value, (value) => new ContextKeyGreaterEqualsExpr(key, value, negated));\n    }\n    constructor(key, value, negated) {\n        this.key = key;\n        this.value = value;\n        this.negated = negated;\n        this.type = 13 /* ContextKeyExprType.GreaterEquals */;\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    substituteConstants() {\n        return this;\n    }\n    evaluate(context) {\n        if (typeof this.value === 'string') {\n            return false;\n        }\n        return (parseFloat(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        if (!this.negated) {\n            this.negated = ContextKeySmallerExpr.create(this.key, this.value, this);\n        }\n        return this.negated;\n    }\n}\nexport class ContextKeySmallerExpr {\n    static create(key, _value, negated = null) {\n        return withFloatOrStr(_value, (value) => new ContextKeySmallerExpr(key, value, negated));\n    }\n    constructor(key, value, negated) {\n        this.key = key;\n        this.value = value;\n        this.negated = negated;\n        this.type = 14 /* ContextKeyExprType.Smaller */;\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    substituteConstants() {\n        return this;\n    }\n    evaluate(context) {\n        if (typeof this.value === 'string') {\n            return false;\n        }\n        return (parseFloat(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        if (!this.negated) {\n            this.negated = ContextKeyGreaterEqualsExpr.create(this.key, this.value, this);\n        }\n        return this.negated;\n    }\n}\nexport class ContextKeySmallerEqualsExpr {\n    static create(key, _value, negated = null) {\n        return withFloatOrStr(_value, (value) => new ContextKeySmallerEqualsExpr(key, value, negated));\n    }\n    constructor(key, value, negated) {\n        this.key = key;\n        this.value = value;\n        this.negated = negated;\n        this.type = 15 /* ContextKeyExprType.SmallerEquals */;\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    substituteConstants() {\n        return this;\n    }\n    evaluate(context) {\n        if (typeof this.value === 'string') {\n            return false;\n        }\n        return (parseFloat(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        if (!this.negated) {\n            this.negated = ContextKeyGreaterExpr.create(this.key, this.value, this);\n        }\n        return this.negated;\n    }\n}\nexport class ContextKeyRegexExpr {\n    static create(key, regexp) {\n        return new ContextKeyRegexExpr(key, regexp);\n    }\n    constructor(key, regexp) {\n        this.key = key;\n        this.regexp = regexp;\n        this.type = 7 /* ContextKeyExprType.Regex */;\n        this.negated = null;\n        //\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    substituteConstants() {\n        return this;\n    }\n    evaluate(context) {\n        const 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.flags}`\n            : '/invalid/';\n        return `${this.key} =~ ${value}`;\n    }\n    keys() {\n        return [this.key];\n    }\n    negate() {\n        if (!this.negated) {\n            this.negated = ContextKeyNotRegexExpr.create(this);\n        }\n        return this.negated;\n    }\n}\nexport class ContextKeyNotRegexExpr {\n    static create(actual) {\n        return new ContextKeyNotRegexExpr(actual);\n    }\n    constructor(_actual) {\n        this._actual = _actual;\n        this.type = 8 /* ContextKeyExprType.NotRegex */;\n        //\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    substituteConstants() {\n        return this;\n    }\n    evaluate(context) {\n        return !this._actual.evaluate(context);\n    }\n    serialize() {\n        return `!(${this._actual.serialize()})`;\n    }\n    keys() {\n        return this._actual.keys();\n    }\n    negate() {\n        return this._actual;\n    }\n}\n/**\n * @returns the same instance if nothing changed.\n */\nfunction eliminateConstantsInArray(arr) {\n    // Allocate array only if there is a difference\n    let newArr = null;\n    for (let i = 0, len = arr.length; i < len; i++) {\n        const newExpr = arr[i].substituteConstants();\n        if (arr[i] !== newExpr) {\n            // something has changed!\n            // allocate array on first difference\n            if (newArr === null) {\n                newArr = [];\n                for (let j = 0; j < i; j++) {\n                    newArr[j] = arr[j];\n                }\n            }\n        }\n        if (newArr !== null) {\n            newArr[i] = newExpr;\n        }\n    }\n    if (newArr === null) {\n        return arr;\n    }\n    return newArr;\n}\nexport class ContextKeyAndExpr {\n    static create(_expr, negated, extraRedundantCheck) {\n        return ContextKeyAndExpr._normalizeArr(_expr, negated, extraRedundantCheck);\n    }\n    constructor(expr, negated) {\n        this.expr = expr;\n        this.negated = negated;\n        this.type = 6 /* ContextKeyExprType.And */;\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    substituteConstants() {\n        const exprArr = eliminateConstantsInArray(this.expr);\n        if (exprArr === this.expr) {\n            // no change\n            return this;\n        }\n        return ContextKeyAndExpr.create(exprArr, this.negated, 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, negated, extraRedundantCheck) {\n        const expr = [];\n        let hasTrue = false;\n        for (const e of arr) {\n            if (!e) {\n                continue;\n            }\n            if (e.type === 1 /* ContextKeyExprType.True */) {\n                // anything && true ==> anything\n                hasTrue = true;\n                continue;\n            }\n            if (e.type === 0 /* ContextKeyExprType.False */) {\n                // anything && false ==> false\n                return ContextKeyFalseExpr.INSTANCE;\n            }\n            if (e.type === 6 /* ContextKeyExprType.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        // eliminate duplicate terms\n        for (let i = 1; i < expr.length; i++) {\n            if (expr[i - 1].equals(expr[i])) {\n                expr.splice(i, 1);\n                i--;\n            }\n        }\n        if (expr.length === 1) {\n            return expr[0];\n        }\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 /* ContextKeyExprType.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            const isFinished = (expr.length === 0);\n            // distribute `lastElement` over `secondToLastElement`\n            const resultElement = ContextKeyOrExpr.create(lastElement.expr.map(el => ContextKeyAndExpr.create([el, secondToLastElement], null, extraRedundantCheck)), null, isFinished);\n            if (resultElement) {\n                expr.push(resultElement);\n                expr.sort(cmp);\n            }\n        }\n        if (expr.length === 1) {\n            return expr[0];\n        }\n        // resolve false AND expressions\n        if (extraRedundantCheck) {\n            for (let i = 0; i < expr.length; i++) {\n                for (let j = i + 1; j < expr.length; j++) {\n                    if (expr[i].negate().equals(expr[j])) {\n                        // A && !A case\n                        return ContextKeyFalseExpr.INSTANCE;\n                    }\n                }\n            }\n            if (expr.length === 1) {\n                return expr[0];\n            }\n        }\n        return new ContextKeyAndExpr(expr, negated);\n    }\n    serialize() {\n        return this.expr.map(e => e.serialize()).join(' && ');\n    }\n    keys() {\n        const result = [];\n        for (const expr of this.expr) {\n            result.push(...expr.keys());\n        }\n        return result;\n    }\n    negate() {\n        if (!this.negated) {\n            const result = [];\n            for (const expr of this.expr) {\n                result.push(expr.negate());\n            }\n            this.negated = ContextKeyOrExpr.create(result, this, true);\n        }\n        return this.negated;\n    }\n}\nexport class ContextKeyOrExpr {\n    static create(_expr, negated, extraRedundantCheck) {\n        return ContextKeyOrExpr._normalizeArr(_expr, negated, extraRedundantCheck);\n    }\n    constructor(expr, negated) {\n        this.expr = expr;\n        this.negated = negated;\n        this.type = 9 /* ContextKeyExprType.Or */;\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    substituteConstants() {\n        const exprArr = eliminateConstantsInArray(this.expr);\n        if (exprArr === this.expr) {\n            // no change\n            return this;\n        }\n        return ContextKeyOrExpr.create(exprArr, this.negated, 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, negated, extraRedundantCheck) {\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 /* ContextKeyExprType.False */) {\n                    // anything || false ==> anything\n                    hasFalse = true;\n                    continue;\n                }\n                if (e.type === 1 /* ContextKeyExprType.True */) {\n                    // anything || true ==> true\n                    return ContextKeyTrueExpr.INSTANCE;\n                }\n                if (e.type === 9 /* ContextKeyExprType.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        if (expr.length === 0) {\n            return undefined;\n        }\n        if (expr.length === 1) {\n            return expr[0];\n        }\n        // eliminate duplicate terms\n        for (let i = 1; i < expr.length; i++) {\n            if (expr[i - 1].equals(expr[i])) {\n                expr.splice(i, 1);\n                i--;\n            }\n        }\n        if (expr.length === 1) {\n            return expr[0];\n        }\n        // resolve true OR expressions\n        if (extraRedundantCheck) {\n            for (let i = 0; i < expr.length; i++) {\n                for (let j = i + 1; j < expr.length; j++) {\n                    if (expr[i].negate().equals(expr[j])) {\n                        // A || !A case\n                        return ContextKeyTrueExpr.INSTANCE;\n                    }\n                }\n            }\n            if (expr.length === 1) {\n                return expr[0];\n            }\n        }\n        return new ContextKeyOrExpr(expr, negated);\n    }\n    serialize() {\n        return this.expr.map(e => e.serialize()).join(' || ');\n    }\n    keys() {\n        const result = [];\n        for (const expr of this.expr) {\n            result.push(...expr.keys());\n        }\n        return result;\n    }\n    negate() {\n        if (!this.negated) {\n            const result = [];\n            for (const expr of this.expr) {\n                result.push(expr.negate());\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 getTerminals(LEFT)) {\n                    for (const right of getTerminals(RIGHT)) {\n                        all.push(ContextKeyAndExpr.create([left, right], null, false));\n                    }\n                }\n                result.unshift(ContextKeyOrExpr.create(all, null, false));\n            }\n            this.negated = ContextKeyOrExpr.create(result, this, true);\n        }\n        return this.negated;\n    }\n}\nexport class RawContextKey extends ContextKeyDefinedExpr {\n    static { this._info = []; }\n    static all() {\n        return RawContextKey._info.values();\n    }\n    constructor(key, defaultValue, metaOrHide) {\n        super(key, null);\n        this._defaultValue = defaultValue;\n        // collect all context keys into a central place\n        if (typeof metaOrHide === 'object') {\n            RawContextKey._info.push({ ...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    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 this.negate();\n    }\n    isEqualTo(value) {\n        return ContextKeyEqualsExpr.create(this.key, value);\n    }\n}\nexport const IContextKeyService = createDecorator('contextKeyService');\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 * Returns true if it is provable `p` implies `q`.\n */\nexport function implies(p, q) {\n    if (p.type === 0 /* ContextKeyExprType.False */ || q.type === 1 /* ContextKeyExprType.True */) {\n        // false implies anything\n        // anything implies true\n        return true;\n    }\n    if (p.type === 9 /* ContextKeyExprType.Or */) {\n        if (q.type === 9 /* ContextKeyExprType.Or */) {\n            // `a || b || c` can only imply something like `a || b || c || d`\n            return allElementsIncluded(p.expr, q.expr);\n        }\n        return false;\n    }\n    if (q.type === 9 /* ContextKeyExprType.Or */) {\n        for (const element of q.expr) {\n            if (implies(p, element)) {\n                return true;\n            }\n        }\n        return false;\n    }\n    if (p.type === 6 /* ContextKeyExprType.And */) {\n        if (q.type === 6 /* ContextKeyExprType.And */) {\n            // `a && b && c` implies `a && c`\n            return allElementsIncluded(q.expr, p.expr);\n        }\n        for (const element of p.expr) {\n            if (implies(element, q)) {\n                return true;\n            }\n        }\n        return false;\n    }\n    return p.equals(q);\n}\n/**\n * Returns true if all elements in `p` are also present in `q`.\n * The two arrays are assumed to be sorted\n */\nfunction allElementsIncluded(p, q) {\n    let pIndex = 0;\n    let qIndex = 0;\n    while (pIndex < p.length && qIndex < q.length) {\n        const cmp = p[pIndex].cmp(q[qIndex]);\n        if (cmp < 0) {\n            // an element from `p` is missing from `q`\n            return false;\n        }\n        else if (cmp === 0) {\n            pIndex++;\n            qIndex++;\n        }\n        else {\n            qIndex++;\n        }\n    }\n    return (pIndex === p.length);\n}\nfunction getTerminals(node) {\n    if (node.type === 9 /* ContextKeyExprType.Or */) {\n        return node.expr;\n    }\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 *--------------------------------------------------------------------------------------------*/\nimport { BugIndicatingError, onUnexpectedError } from './errors.js';\n/**\n * Throws an error with the provided message if the provided value does not evaluate to a true Javascript value.\n *\n * @deprecated Use `assert(...)` instead.\n * This method is usually used like this:\n * ```ts\n * import * as assert from 'vs/base/common/assert';\n * assert.ok(...);\n * ```\n *\n * However, `assert` in that example is a user chosen name.\n * There is no tooling for generating such an import statement.\n * Thus, the `assert(...)` function should be used instead.\n */\nexport function ok(value, message) {\n    if (!value) {\n        throw new Error(message ? `Assertion failed (${message})` : 'Assertion Failed');\n    }\n}\nexport function assertNever(value, message = 'Unreachable') {\n    throw new Error(message);\n}\n/**\n * Like assert, but doesn't throw.\n */\nexport function softAssert(condition) {\n    if (!condition) {\n        onUnexpectedError(new BugIndicatingError('Soft Assertion Failed'));\n    }\n}\n/**\n * condition must be side-effect free!\n */\nexport function assertFn(condition) {\n    if (!condition()) {\n        // eslint-disable-next-line no-debugger\n        debugger;\n        // Reevaluate `condition` again to make debugging easier\n        condition();\n        onUnexpectedError(new BugIndicatingError('Assertion Failed'));\n    }\n}\nexport function checkAdjacentItems(items, predicate) {\n    let i = 0;\n    while (i < items.length - 1) {\n        const a = items[i];\n        const b = items[i + 1];\n        if (!predicate(a, b)) {\n            return false;\n        }\n        i++;\n    }\n    return 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 * as Assert from '../../../base/common/assert.js';\nimport * as Types from '../../../base/common/types.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 *--------------------------------------------------------------------------------------------*/\nimport { decodeKeybinding } from '../../../base/common/keybindings.js';\nimport { OS } from '../../../base/common/platform.js';\nimport { CommandsRegistry } from '../../commands/common/commands.js';\nimport { Registry } from '../../registry/common/platform.js';\nimport { combinedDisposable, DisposableStore, toDisposable } from '../../../base/common/lifecycle.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\n/**\n * Stores all built-in and extension-provided keybindings (but not ones that user defines themselves)\n */\nclass KeybindingsRegistryImpl {\n    constructor() {\n        this._coreKeybindings = new LinkedList();\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 /* OperatingSystem.Windows */) {\n            if (kb && kb.win) {\n                return kb.win;\n            }\n        }\n        else if (OS === 2 /* OperatingSystem.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        const result = new DisposableStore();\n        if (actualKb && actualKb.primary) {\n            const kk = decodeKeybinding(actualKb.primary, OS);\n            if (kk) {\n                result.add(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 = decodeKeybinding(k, OS);\n                if (kk) {\n                    result.add(this._registerDefaultKeybinding(kk, rule.id, rule.args, rule.weight, -i - 1, rule.when));\n                }\n            }\n        }\n        return result;\n    }\n    registerCommandAndKeybindingRule(desc) {\n        return combinedDisposable(this.registerKeybindingRule(desc), CommandsRegistry.registerCommand(desc));\n    }\n    _registerDefaultKeybinding(keybinding, commandId, commandArgs, weight1, weight2, when) {\n        const remove = 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        return toDisposable(() => {\n            remove();\n            this._cachedMergedKeybindings = null;\n        });\n    }\n    getDefaultKeybindings() {\n        if (!this._cachedMergedKeybindings) {\n            this._cachedMergedKeybindings = Array.from(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        if (a.command < b.command) {\n            return -1;\n        }\n        if (a.command > b.command) {\n            return 1;\n        }\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 *--------------------------------------------------------------------------------------------*/\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 MenuItemAction_1;\nimport { SubmenuAction } from '../../../base/common/actions.js';\nimport { ThemeIcon } from '../../../base/common/themables.js';\nimport { MicrotaskEmitter } from '../../../base/common/event.js';\nimport { DisposableStore, dispose, toDisposable } from '../../../base/common/lifecycle.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\nimport { CommandsRegistry, ICommandService } from '../../commands/common/commands.js';\nimport { ContextKeyExpr, IContextKeyService } from '../../contextkey/common/contextkey.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nimport { KeybindingsRegistry } from '../../keybinding/common/keybindingsRegistry.js';\nexport function isIMenuItem(item) {\n    return item.command !== undefined;\n}\nexport function isISubmenuItem(item) {\n    return item.submenu !== undefined;\n}\nexport class MenuId {\n    static { this._instances = new Map(); }\n    static { this.CommandPalette = new MenuId('CommandPalette'); }\n    static { this.DebugBreakpointsContext = new MenuId('DebugBreakpointsContext'); }\n    static { this.DebugCallStackContext = new MenuId('DebugCallStackContext'); }\n    static { this.DebugConsoleContext = new MenuId('DebugConsoleContext'); }\n    static { this.DebugVariablesContext = new MenuId('DebugVariablesContext'); }\n    static { this.NotebookVariablesContext = new MenuId('NotebookVariablesContext'); }\n    static { this.DebugHoverContext = new MenuId('DebugHoverContext'); }\n    static { this.DebugWatchContext = new MenuId('DebugWatchContext'); }\n    static { this.DebugToolBar = new MenuId('DebugToolBar'); }\n    static { this.DebugToolBarStop = new MenuId('DebugToolBarStop'); }\n    static { this.DebugCallStackToolbar = new MenuId('DebugCallStackToolbar'); }\n    static { this.DebugCreateConfiguration = new MenuId('DebugCreateConfiguration'); }\n    static { this.EditorContext = new MenuId('EditorContext'); }\n    static { this.SimpleEditorContext = new MenuId('SimpleEditorContext'); }\n    static { this.EditorContent = new MenuId('EditorContent'); }\n    static { this.EditorLineNumberContext = new MenuId('EditorLineNumberContext'); }\n    static { this.EditorContextCopy = new MenuId('EditorContextCopy'); }\n    static { this.EditorContextPeek = new MenuId('EditorContextPeek'); }\n    static { this.EditorContextShare = new MenuId('EditorContextShare'); }\n    static { this.EditorTitle = new MenuId('EditorTitle'); }\n    static { this.EditorTitleRun = new MenuId('EditorTitleRun'); }\n    static { this.EditorTitleContext = new MenuId('EditorTitleContext'); }\n    static { this.EditorTitleContextShare = new MenuId('EditorTitleContextShare'); }\n    static { this.EmptyEditorGroup = new MenuId('EmptyEditorGroup'); }\n    static { this.EmptyEditorGroupContext = new MenuId('EmptyEditorGroupContext'); }\n    static { this.EditorTabsBarContext = new MenuId('EditorTabsBarContext'); }\n    static { this.EditorTabsBarShowTabsSubmenu = new MenuId('EditorTabsBarShowTabsSubmenu'); }\n    static { this.EditorTabsBarShowTabsZenModeSubmenu = new MenuId('EditorTabsBarShowTabsZenModeSubmenu'); }\n    static { this.EditorActionsPositionSubmenu = new MenuId('EditorActionsPositionSubmenu'); }\n    static { this.ExplorerContext = new MenuId('ExplorerContext'); }\n    static { this.ExplorerContextShare = new MenuId('ExplorerContextShare'); }\n    static { this.ExtensionContext = new MenuId('ExtensionContext'); }\n    static { this.GlobalActivity = new MenuId('GlobalActivity'); }\n    static { this.CommandCenter = new MenuId('CommandCenter'); }\n    static { this.CommandCenterCenter = new MenuId('CommandCenterCenter'); }\n    static { this.LayoutControlMenuSubmenu = new MenuId('LayoutControlMenuSubmenu'); }\n    static { this.LayoutControlMenu = new MenuId('LayoutControlMenu'); }\n    static { this.MenubarMainMenu = new MenuId('MenubarMainMenu'); }\n    static { this.MenubarAppearanceMenu = new MenuId('MenubarAppearanceMenu'); }\n    static { this.MenubarDebugMenu = new MenuId('MenubarDebugMenu'); }\n    static { this.MenubarEditMenu = new MenuId('MenubarEditMenu'); }\n    static { this.MenubarCopy = new MenuId('MenubarCopy'); }\n    static { this.MenubarFileMenu = new MenuId('MenubarFileMenu'); }\n    static { this.MenubarGoMenu = new MenuId('MenubarGoMenu'); }\n    static { this.MenubarHelpMenu = new MenuId('MenubarHelpMenu'); }\n    static { this.MenubarLayoutMenu = new MenuId('MenubarLayoutMenu'); }\n    static { this.MenubarNewBreakpointMenu = new MenuId('MenubarNewBreakpointMenu'); }\n    static { this.PanelAlignmentMenu = new MenuId('PanelAlignmentMenu'); }\n    static { this.PanelPositionMenu = new MenuId('PanelPositionMenu'); }\n    static { this.ActivityBarPositionMenu = new MenuId('ActivityBarPositionMenu'); }\n    static { this.MenubarPreferencesMenu = new MenuId('MenubarPreferencesMenu'); }\n    static { this.MenubarRecentMenu = new MenuId('MenubarRecentMenu'); }\n    static { this.MenubarSelectionMenu = new MenuId('MenubarSelectionMenu'); }\n    static { this.MenubarShare = new MenuId('MenubarShare'); }\n    static { this.MenubarSwitchEditorMenu = new MenuId('MenubarSwitchEditorMenu'); }\n    static { this.MenubarSwitchGroupMenu = new MenuId('MenubarSwitchGroupMenu'); }\n    static { this.MenubarTerminalMenu = new MenuId('MenubarTerminalMenu'); }\n    static { this.MenubarViewMenu = new MenuId('MenubarViewMenu'); }\n    static { this.MenubarHomeMenu = new MenuId('MenubarHomeMenu'); }\n    static { this.OpenEditorsContext = new MenuId('OpenEditorsContext'); }\n    static { this.OpenEditorsContextShare = new MenuId('OpenEditorsContextShare'); }\n    static { this.ProblemsPanelContext = new MenuId('ProblemsPanelContext'); }\n    static { this.SCMInputBox = new MenuId('SCMInputBox'); }\n    static { this.SCMChangesSeparator = new MenuId('SCMChangesSeparator'); }\n    static { this.SCMChangesContext = new MenuId('SCMChangesContext'); }\n    static { this.SCMIncomingChanges = new MenuId('SCMIncomingChanges'); }\n    static { this.SCMIncomingChangesContext = new MenuId('SCMIncomingChangesContext'); }\n    static { this.SCMIncomingChangesSetting = new MenuId('SCMIncomingChangesSetting'); }\n    static { this.SCMOutgoingChanges = new MenuId('SCMOutgoingChanges'); }\n    static { this.SCMOutgoingChangesContext = new MenuId('SCMOutgoingChangesContext'); }\n    static { this.SCMOutgoingChangesSetting = new MenuId('SCMOutgoingChangesSetting'); }\n    static { this.SCMIncomingChangesAllChangesContext = new MenuId('SCMIncomingChangesAllChangesContext'); }\n    static { this.SCMIncomingChangesHistoryItemContext = new MenuId('SCMIncomingChangesHistoryItemContext'); }\n    static { this.SCMOutgoingChangesAllChangesContext = new MenuId('SCMOutgoingChangesAllChangesContext'); }\n    static { this.SCMOutgoingChangesHistoryItemContext = new MenuId('SCMOutgoingChangesHistoryItemContext'); }\n    static { this.SCMChangeContext = new MenuId('SCMChangeContext'); }\n    static { this.SCMResourceContext = new MenuId('SCMResourceContext'); }\n    static { this.SCMResourceContextShare = new MenuId('SCMResourceContextShare'); }\n    static { this.SCMResourceFolderContext = new MenuId('SCMResourceFolderContext'); }\n    static { this.SCMResourceGroupContext = new MenuId('SCMResourceGroupContext'); }\n    static { this.SCMSourceControl = new MenuId('SCMSourceControl'); }\n    static { this.SCMSourceControlInline = new MenuId('SCMSourceControlInline'); }\n    static { this.SCMSourceControlTitle = new MenuId('SCMSourceControlTitle'); }\n    static { this.SCMHistoryTitle = new MenuId('SCMHistoryTitle'); }\n    static { this.SCMTitle = new MenuId('SCMTitle'); }\n    static { this.SearchContext = new MenuId('SearchContext'); }\n    static { this.SearchActionMenu = new MenuId('SearchActionContext'); }\n    static { this.StatusBarWindowIndicatorMenu = new MenuId('StatusBarWindowIndicatorMenu'); }\n    static { this.StatusBarRemoteIndicatorMenu = new MenuId('StatusBarRemoteIndicatorMenu'); }\n    static { this.StickyScrollContext = new MenuId('StickyScrollContext'); }\n    static { this.TestItem = new MenuId('TestItem'); }\n    static { this.TestItemGutter = new MenuId('TestItemGutter'); }\n    static { this.TestProfilesContext = new MenuId('TestProfilesContext'); }\n    static { this.TestMessageContext = new MenuId('TestMessageContext'); }\n    static { this.TestMessageContent = new MenuId('TestMessageContent'); }\n    static { this.TestPeekElement = new MenuId('TestPeekElement'); }\n    static { this.TestPeekTitle = new MenuId('TestPeekTitle'); }\n    static { this.TestCallStack = new MenuId('TestCallStack'); }\n    static { this.TouchBarContext = new MenuId('TouchBarContext'); }\n    static { this.TitleBarContext = new MenuId('TitleBarContext'); }\n    static { this.TitleBarTitleContext = new MenuId('TitleBarTitleContext'); }\n    static { this.TunnelContext = new MenuId('TunnelContext'); }\n    static { this.TunnelPrivacy = new MenuId('TunnelPrivacy'); }\n    static { this.TunnelProtocol = new MenuId('TunnelProtocol'); }\n    static { this.TunnelPortInline = new MenuId('TunnelInline'); }\n    static { this.TunnelTitle = new MenuId('TunnelTitle'); }\n    static { this.TunnelLocalAddressInline = new MenuId('TunnelLocalAddressInline'); }\n    static { this.TunnelOriginInline = new MenuId('TunnelOriginInline'); }\n    static { this.ViewItemContext = new MenuId('ViewItemContext'); }\n    static { this.ViewContainerTitle = new MenuId('ViewContainerTitle'); }\n    static { this.ViewContainerTitleContext = new MenuId('ViewContainerTitleContext'); }\n    static { this.ViewTitle = new MenuId('ViewTitle'); }\n    static { this.ViewTitleContext = new MenuId('ViewTitleContext'); }\n    static { this.CommentEditorActions = new MenuId('CommentEditorActions'); }\n    static { this.CommentThreadTitle = new MenuId('CommentThreadTitle'); }\n    static { this.CommentThreadActions = new MenuId('CommentThreadActions'); }\n    static { this.CommentThreadAdditionalActions = new MenuId('CommentThreadAdditionalActions'); }\n    static { this.CommentThreadTitleContext = new MenuId('CommentThreadTitleContext'); }\n    static { this.CommentThreadCommentContext = new MenuId('CommentThreadCommentContext'); }\n    static { this.CommentTitle = new MenuId('CommentTitle'); }\n    static { this.CommentActions = new MenuId('CommentActions'); }\n    static { this.CommentsViewThreadActions = new MenuId('CommentsViewThreadActions'); }\n    static { this.InteractiveToolbar = new MenuId('InteractiveToolbar'); }\n    static { this.InteractiveCellTitle = new MenuId('InteractiveCellTitle'); }\n    static { this.InteractiveCellDelete = new MenuId('InteractiveCellDelete'); }\n    static { this.InteractiveCellExecute = new MenuId('InteractiveCellExecute'); }\n    static { this.InteractiveInputExecute = new MenuId('InteractiveInputExecute'); }\n    static { this.InteractiveInputConfig = new MenuId('InteractiveInputConfig'); }\n    static { this.ReplInputExecute = new MenuId('ReplInputExecute'); }\n    static { this.IssueReporter = new MenuId('IssueReporter'); }\n    static { this.NotebookToolbar = new MenuId('NotebookToolbar'); }\n    static { this.NotebookStickyScrollContext = new MenuId('NotebookStickyScrollContext'); }\n    static { this.NotebookCellTitle = new MenuId('NotebookCellTitle'); }\n    static { this.NotebookCellDelete = new MenuId('NotebookCellDelete'); }\n    static { this.NotebookCellInsert = new MenuId('NotebookCellInsert'); }\n    static { this.NotebookCellBetween = new MenuId('NotebookCellBetween'); }\n    static { this.NotebookCellListTop = new MenuId('NotebookCellTop'); }\n    static { this.NotebookCellExecute = new MenuId('NotebookCellExecute'); }\n    static { this.NotebookCellExecuteGoTo = new MenuId('NotebookCellExecuteGoTo'); }\n    static { this.NotebookCellExecutePrimary = new MenuId('NotebookCellExecutePrimary'); }\n    static { this.NotebookDiffCellInputTitle = new MenuId('NotebookDiffCellInputTitle'); }\n    static { this.NotebookDiffCellMetadataTitle = new MenuId('NotebookDiffCellMetadataTitle'); }\n    static { this.NotebookDiffCellOutputsTitle = new MenuId('NotebookDiffCellOutputsTitle'); }\n    static { this.NotebookOutputToolbar = new MenuId('NotebookOutputToolbar'); }\n    static { this.NotebookOutlineFilter = new MenuId('NotebookOutlineFilter'); }\n    static { this.NotebookOutlineActionMenu = new MenuId('NotebookOutlineActionMenu'); }\n    static { this.NotebookEditorLayoutConfigure = new MenuId('NotebookEditorLayoutConfigure'); }\n    static { this.NotebookKernelSource = new MenuId('NotebookKernelSource'); }\n    static { this.BulkEditTitle = new MenuId('BulkEditTitle'); }\n    static { this.BulkEditContext = new MenuId('BulkEditContext'); }\n    static { this.TimelineItemContext = new MenuId('TimelineItemContext'); }\n    static { this.TimelineTitle = new MenuId('TimelineTitle'); }\n    static { this.TimelineTitleContext = new MenuId('TimelineTitleContext'); }\n    static { this.TimelineFilterSubMenu = new MenuId('TimelineFilterSubMenu'); }\n    static { this.AccountsContext = new MenuId('AccountsContext'); }\n    static { this.SidebarTitle = new MenuId('SidebarTitle'); }\n    static { this.PanelTitle = new MenuId('PanelTitle'); }\n    static { this.AuxiliaryBarTitle = new MenuId('AuxiliaryBarTitle'); }\n    static { this.AuxiliaryBarHeader = new MenuId('AuxiliaryBarHeader'); }\n    static { this.TerminalInstanceContext = new MenuId('TerminalInstanceContext'); }\n    static { this.TerminalEditorInstanceContext = new MenuId('TerminalEditorInstanceContext'); }\n    static { this.TerminalNewDropdownContext = new MenuId('TerminalNewDropdownContext'); }\n    static { this.TerminalTabContext = new MenuId('TerminalTabContext'); }\n    static { this.TerminalTabEmptyAreaContext = new MenuId('TerminalTabEmptyAreaContext'); }\n    static { this.TerminalStickyScrollContext = new MenuId('TerminalStickyScrollContext'); }\n    static { this.WebviewContext = new MenuId('WebviewContext'); }\n    static { this.InlineCompletionsActions = new MenuId('InlineCompletionsActions'); }\n    static { this.InlineEditsActions = new MenuId('InlineEditsActions'); }\n    static { this.InlineEditActions = new MenuId('InlineEditActions'); }\n    static { this.NewFile = new MenuId('NewFile'); }\n    static { this.MergeInput1Toolbar = new MenuId('MergeToolbar1Toolbar'); }\n    static { this.MergeInput2Toolbar = new MenuId('MergeToolbar2Toolbar'); }\n    static { this.MergeBaseToolbar = new MenuId('MergeBaseToolbar'); }\n    static { this.MergeInputResultToolbar = new MenuId('MergeToolbarResultToolbar'); }\n    static { this.InlineSuggestionToolbar = new MenuId('InlineSuggestionToolbar'); }\n    static { this.InlineEditToolbar = new MenuId('InlineEditToolbar'); }\n    static { this.ChatContext = new MenuId('ChatContext'); }\n    static { this.ChatCodeBlock = new MenuId('ChatCodeblock'); }\n    static { this.ChatCompareBlock = new MenuId('ChatCompareBlock'); }\n    static { this.ChatMessageTitle = new MenuId('ChatMessageTitle'); }\n    static { this.ChatExecute = new MenuId('ChatExecute'); }\n    static { this.ChatExecuteSecondary = new MenuId('ChatExecuteSecondary'); }\n    static { this.ChatInputSide = new MenuId('ChatInputSide'); }\n    static { this.AccessibleView = new MenuId('AccessibleView'); }\n    static { this.MultiDiffEditorFileToolbar = new MenuId('MultiDiffEditorFileToolbar'); }\n    static { this.DiffEditorHunkToolbar = new MenuId('DiffEditorHunkToolbar'); }\n    static { this.DiffEditorSelectionToolbar = new MenuId('DiffEditorSelectionToolbar'); }\n    /**\n     * Create a new `MenuId` with the unique identifier. Will throw if a menu\n     * with the identifier already exists, use `MenuId.for(ident)` or a unique\n     * identifier\n     */\n    constructor(identifier) {\n        if (MenuId._instances.has(identifier)) {\n            throw new TypeError(`MenuId with identifier '${identifier}' already exists. Use MenuId.for(ident) or a unique identifier`);\n        }\n        MenuId._instances.set(identifier, this);\n        this.id = identifier;\n    }\n}\nexport const IMenuService = createDecorator('menuService');\nclass MenuRegistryChangeEvent {\n    static { this._all = new Map(); }\n    static for(id) {\n        let value = this._all.get(id);\n        if (!value) {\n            value = new MenuRegistryChangeEvent(id);\n            this._all.set(id, value);\n        }\n        return value;\n    }\n    static merge(events) {\n        const ids = new Set();\n        for (const item of events) {\n            if (item instanceof MenuRegistryChangeEvent) {\n                ids.add(item.id);\n            }\n        }\n        return ids;\n    }\n    constructor(id) {\n        this.id = id;\n        this.has = candidate => candidate === id;\n    }\n}\nexport const MenuRegistry = new class {\n    constructor() {\n        this._commands = new Map();\n        this._menuItems = new Map();\n        this._onDidChangeMenu = new MicrotaskEmitter({\n            merge: MenuRegistryChangeEvent.merge\n        });\n        this.onDidChangeMenu = this._onDidChangeMenu.event;\n    }\n    addCommand(command) {\n        this._commands.set(command.id, command);\n        this._onDidChangeMenu.fire(MenuRegistryChangeEvent.for(MenuId.CommandPalette));\n        return toDisposable(() => {\n            if (this._commands.delete(command.id)) {\n                this._onDidChangeMenu.fire(MenuRegistryChangeEvent.for(MenuId.CommandPalette));\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        let list = this._menuItems.get(id);\n        if (!list) {\n            list = new LinkedList();\n            this._menuItems.set(id, list);\n        }\n        const rm = list.push(item);\n        this._onDidChangeMenu.fire(MenuRegistryChangeEvent.for(id));\n        return toDisposable(() => {\n            rm();\n            this._onDidChangeMenu.fire(MenuRegistryChangeEvent.for(id));\n        });\n    }\n    appendMenuItems(items) {\n        const result = new DisposableStore();\n        for (const { id, item } of items) {\n            result.add(this.appendMenuItem(id, item));\n        }\n        return result;\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, hideActions, actions) {\n        super(`submenuitem.${item.submenu.id}`, typeof item.title === 'string' ? item.title : item.title.value, actions, 'submenu');\n        this.item = item;\n        this.hideActions = hideActions;\n    }\n}\n// implements IAction, does NOT extend Action, so that no one\n// subscribes to events of Action or modified properties\nlet MenuItemAction = MenuItemAction_1 = class MenuItemAction {\n    static label(action, options) {\n        return options?.renderShortTitle && action.shortTitle\n            ? (typeof action.shortTitle === 'string' ? action.shortTitle : action.shortTitle.value)\n            : (typeof action.title === 'string' ? action.title : action.title.value);\n    }\n    constructor(item, alt, options, hideActions, menuKeybinding, contextKeyService, _commandService) {\n        this.hideActions = hideActions;\n        this.menuKeybinding = menuKeybinding;\n        this._commandService = _commandService;\n        this.id = item.id;\n        this.label = MenuItemAction_1.label(item, options);\n        this.tooltip = (typeof item.tooltip === 'string' ? item.tooltip : item.tooltip?.value) ?? '';\n        this.enabled = !item.precondition || contextKeyService.contextMatchesRules(item.precondition);\n        this.checked = undefined;\n        let icon;\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 (this.checked && ThemeIcon.isThemeIcon(toggled.icon)) {\n                icon = toggled.icon;\n            }\n            if (this.checked && toggled.title) {\n                this.label = typeof toggled.title === 'string' ? toggled.title : toggled.title.value;\n            }\n        }\n        if (!icon) {\n            icon = ThemeIcon.isThemeIcon(item.icon) ? item.icon : undefined;\n        }\n        this.item = item;\n        this.alt = alt ? new MenuItemAction_1(alt, undefined, options, hideActions, undefined, contextKeyService, _commandService) : undefined;\n        this._options = options;\n        this.class = icon && ThemeIcon.asClassName(icon);\n    }\n    run(...args) {\n        let runArgs = [];\n        if (this._options?.arg) {\n            runArgs = [...runArgs, this._options.arg];\n        }\n        if (this._options?.shouldForwardArgs) {\n            runArgs = [...runArgs, ...args];\n        }\n        return this._commandService.executeCommand(this.id, ...runArgs);\n    }\n};\nMenuItemAction = MenuItemAction_1 = __decorate([\n    __param(5, IContextKeyService),\n    __param(6, ICommandService)\n], MenuItemAction);\nexport { MenuItemAction };\nexport class Action2 {\n    constructor(desc) {\n        this.desc = desc;\n    }\n}\nexport function registerAction2(ctor) {\n    const disposables = []; // not using `DisposableStore` to reduce startup perf cost\n    const action = new ctor();\n    const { f1, menu, keybinding, ...command } = action.desc;\n    if (CommandsRegistry.getCommand(command.id)) {\n        throw new Error(`Cannot register two commands with the same id: ${command.id}`);\n    }\n    // command\n    disposables.push(CommandsRegistry.registerCommand({\n        id: command.id,\n        handler: (accessor, ...args) => action.run(accessor, ...args),\n        metadata: command.metadata,\n    }));\n    // menu\n    if (Array.isArray(menu)) {\n        for (const item of menu) {\n            disposables.push(MenuRegistry.appendMenuItem(item.id, { command: { ...command, precondition: item.precondition === null ? undefined : command.precondition }, ...item }));\n        }\n    }\n    else if (menu) {\n        disposables.push(MenuRegistry.appendMenuItem(menu.id, { command: { ...command, precondition: menu.precondition === null ? undefined : command.precondition }, ...menu }));\n    }\n    if (f1) {\n        disposables.push(MenuRegistry.appendMenuItem(MenuId.CommandPalette, { command, when: command.precondition }));\n        disposables.push(MenuRegistry.addCommand(command));\n    }\n    // keybinding\n    if (Array.isArray(keybinding)) {\n        for (const item of keybinding) {\n            disposables.push(KeybindingsRegistry.registerKeybindingRule({\n                ...item,\n                id: command.id,\n                when: command.precondition ? ContextKeyExpr.and(command.precondition, item.when) : item.when\n            }));\n        }\n    }\n    else if (keybinding) {\n        disposables.push(KeybindingsRegistry.registerKeybindingRule({\n            ...keybinding,\n            id: command.id,\n            when: command.precondition ? ContextKeyExpr.and(command.precondition, keybinding.when) : keybinding.when\n        }));\n    }\n    return {\n        dispose() {\n            dispose(disposables);\n        }\n    };\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 *--------------------------------------------------------------------------------------------*/\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const ITelemetryService = createDecorator('telemetryService');\n","import { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { RawContextKey } from '../../contextkey/common/contextkey.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const ILogService = createDecorator('logService');\nexport var LogLevel;\n(function (LogLevel) {\n    LogLevel[LogLevel[\"Off\"] = 0] = \"Off\";\n    LogLevel[LogLevel[\"Trace\"] = 1] = \"Trace\";\n    LogLevel[LogLevel[\"Debug\"] = 2] = \"Debug\";\n    LogLevel[LogLevel[\"Info\"] = 3] = \"Info\";\n    LogLevel[LogLevel[\"Warning\"] = 4] = \"Warning\";\n    LogLevel[LogLevel[\"Error\"] = 5] = \"Error\";\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        this.onDidChangeLogLevel = this._onDidChangeLogLevel.event;\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    checkLogLevel(level) {\n        return this.level !== LogLevel.Off && this.level <= level;\n    }\n}\nexport class ConsoleLogger extends AbstractLogger {\n    constructor(logLevel = DEFAULT_LOG_LEVEL, useColors = true) {\n        super();\n        this.useColors = useColors;\n        this.setLevel(logLevel);\n    }\n    trace(message, ...args) {\n        if (this.checkLogLevel(LogLevel.Trace)) {\n            if (this.useColors) {\n                console.log('%cTRACE', 'color: #888', message, ...args);\n            }\n            else {\n                console.log(message, ...args);\n            }\n        }\n    }\n    debug(message, ...args) {\n        if (this.checkLogLevel(LogLevel.Debug)) {\n            if (this.useColors) {\n                console.log('%cDEBUG', 'background: #eee; color: #888', message, ...args);\n            }\n            else {\n                console.log(message, ...args);\n            }\n        }\n    }\n    info(message, ...args) {\n        if (this.checkLogLevel(LogLevel.Info)) {\n            if (this.useColors) {\n                console.log('%c INFO', 'color: #33f', message, ...args);\n            }\n            else {\n                console.log(message, ...args);\n            }\n        }\n    }\n    warn(message, ...args) {\n        if (this.checkLogLevel(LogLevel.Warning)) {\n            if (this.useColors) {\n                console.log('%c WARN', 'color: #993', message, ...args);\n            }\n            else {\n                console.log(message, ...args);\n            }\n        }\n    }\n    error(message, ...args) {\n        if (this.checkLogLevel(LogLevel.Error)) {\n            if (this.useColors) {\n                console.log('%c  ERR', 'color: #f33', message, ...args);\n            }\n            else {\n                console.error(message, ...args);\n            }\n        }\n    }\n}\nexport class MultiplexLogger extends AbstractLogger {\n    constructor(loggers) {\n        super();\n        this.loggers = loggers;\n        if (loggers.length) {\n            this.setLevel(loggers[0].getLevel());\n        }\n    }\n    setLevel(level) {\n        for (const logger of this.loggers) {\n            logger.setLevel(level);\n        }\n        super.setLevel(level);\n    }\n    trace(message, ...args) {\n        for (const logger of this.loggers) {\n            logger.trace(message, ...args);\n        }\n    }\n    debug(message, ...args) {\n        for (const logger of this.loggers) {\n            logger.debug(message, ...args);\n        }\n    }\n    info(message, ...args) {\n        for (const logger of this.loggers) {\n            logger.info(message, ...args);\n        }\n    }\n    warn(message, ...args) {\n        for (const logger of this.loggers) {\n            logger.warn(message, ...args);\n        }\n    }\n    error(message, ...args) {\n        for (const logger of this.loggers) {\n            logger.error(message, ...args);\n        }\n    }\n    dispose() {\n        for (const logger of this.loggers) {\n            logger.dispose();\n        }\n        super.dispose();\n    }\n}\nexport function LogLevelToString(logLevel) {\n    switch (logLevel) {\n        case LogLevel.Trace: return 'trace';\n        case LogLevel.Debug: return 'debug';\n        case LogLevel.Info: return 'info';\n        case LogLevel.Warning: return 'warn';\n        case LogLevel.Error: return 'error';\n        case LogLevel.Off: return 'off';\n    }\n}\n// Contexts\nexport const CONTEXT_LOG_LEVEL = new RawContextKey('logLevel', LogLevelToString(LogLevel.Info));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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/model.js';\nimport { ITextModelService } from '../common/services/resolverService.js';\nimport { MenuId, MenuRegistry, Action2 } from '../../platform/actions/common/actions.js';\nimport { 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 { Registry } from '../../platform/registry/common/platform.js';\nimport { ITelemetryService } from '../../platform/telemetry/common/telemetry.js';\nimport { assertType } from '../../base/common/types.js';\nimport { ILogService } from '../../platform/log/common/log.js';\nimport { getActiveElement } from '../../base/browser/dom.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.metadata = opts.metadata;\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            const kbOptsArr = Array.isArray(this._kbOpts) ? this._kbOpts : [this._kbOpts];\n            for (const kbOpts of kbOptsArr) {\n                let kbWhen = 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                const desc = {\n                    id: this.id,\n                    weight: kbOpts.weight,\n                    args: kbOpts.args,\n                    when: kbWhen,\n                    primary: kbOpts.primary,\n                    secondary: kbOpts.secondary,\n                    win: kbOpts.win,\n                    linux: kbOpts.linux,\n                    mac: kbOpts.mac,\n                };\n                KeybindingsRegistry.registerKeybindingRule(desc);\n            }\n        }\n        CommandsRegistry.registerCommand({\n            id: this.id,\n            handler: (accessor, args) => this.runCommand(accessor, args),\n            metadata: this.metadata\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, when) {\n        this._implementations.push({ priority, name, implementation, when });\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        const contextKeyService = accessor.get(IContextKeyService);\n        logService.trace(`Executing Command '${this.id}' which has ${this._implementations.length} bound.`);\n        for (const impl of this._implementations) {\n            if (impl.when) {\n                const context = contextKeyService.getContext(getActiveElement());\n                const value = impl.when.evaluate(context);\n                if (!value) {\n                    continue;\n                }\n            }\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        logService.trace(`The Command '${this.id}' was not handled by any implementation.`);\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(controller, args);\n                }\n            }\n        };\n    }\n    static runEditorCommand(accessor, args, precondition, runner) {\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(precondition ?? undefined)) {\n                // precondition does not hold\n                return;\n            }\n            return runner(editorAccessor, editor, args);\n        });\n    }\n    runCommand(accessor, args) {\n        return EditorCommand.runEditorCommand(accessor, args, this.precondition, (accessor, editor, args) => this.runEditorCommand(accessor, editor, args));\n    }\n}\nexport class EditorAction extends EditorCommand {\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    constructor(opts) {\n        super(EditorAction.convertOptions(opts));\n        this.label = opts.label;\n        this.alias = opts.alias;\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 EditorAction\n//#region EditorAction2\nexport class EditorAction2 extends Action2 {\n    run(accessor, ...args) {\n        // Find the editor with text focus or active\n        const codeEditorService = accessor.get(ICodeEditorService);\n        const editor = codeEditorService.getFocusedCodeEditor() || codeEditorService.getActiveCodeEditor();\n        if (!editor) {\n            // well, at least we tried...\n            return;\n        }\n        // precondition does hold\n        return editor.invokeWithinContext((editorAccessor) => {\n            const kbService = editorAccessor.get(IContextKeyService);\n            const logService = editorAccessor.get(ILogService);\n            const enabled = kbService.contextMatchesRules(this.desc.precondition ?? undefined);\n            if (!enabled) {\n                logService.debug(`[EditorAction2] NOT running command because its precondition is FALSE`, this.desc.id, this.desc.precondition?.serialize());\n                return;\n            }\n            return this.runEditorCommand(editorAccessor, editor, ...args);\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 instaService = accessor.get(IInstantiationService);\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 instaService.invokeFunction(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 = instaService.invokeFunction(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 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}\n/**\n * Registers an editor contribution. Editor contributions have a lifecycle which is bound\n * to a specific code editor instance.\n */\nexport function registerEditorContribution(id, ctor, instantiation) {\n    EditorContributionRegistry.INSTANCE.registerEditorContribution(id, ctor, instantiation);\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    static { this.INSTANCE = new EditorContributionRegistry(); }\n    constructor() {\n        this.editorContributions = [];\n        this.diffEditorContributions = [];\n        this.editorActions = [];\n        this.editorCommands = Object.create(null);\n    }\n    registerEditorContribution(id, ctor, instantiation) {\n        this.editorContributions.push({ id, ctor: ctor, instantiation });\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;\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}\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 /* KeybindingWeight.EditorCore */,\n        primary: 2048 /* KeyMod.CtrlCmd */ | 56 /* KeyCode.KeyZ */\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 /* KeybindingWeight.EditorCore */,\n        primary: 2048 /* KeyMod.CtrlCmd */ | 55 /* KeyCode.KeyY */,\n        secondary: [2048 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 56 /* KeyCode.KeyZ */],\n        mac: { primary: 2048 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 56 /* KeyCode.KeyZ */ }\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 /* KeybindingWeight.EditorCore */,\n        kbExpr: null,\n        primary: 2048 /* KeyMod.CtrlCmd */ | 31 /* KeyCode.KeyA */\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 { onUnexpectedError, transformErrorForSerialization } from '../errors.js';\nimport { Emitter } from '../event.js';\nimport { Disposable } from '../lifecycle.js';\nimport { FileAccess } from '../network.js';\nimport { isWeb } from '../platform.js';\nimport * as strings from '../strings.js';\n// ESM-comment-begin\n// const isESM = false;\n// ESM-comment-end\n// ESM-uncomment-begin\nconst isESM = true;\n// ESM-uncomment-end\nconst DEFAULT_CHANNEL = 'default';\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 RequestMessage {\n    constructor(vsWorker, req, channel, method, args) {\n        this.vsWorker = vsWorker;\n        this.req = req;\n        this.channel = channel;\n        this.method = method;\n        this.args = args;\n        this.type = 0 /* MessageType.Request */;\n    }\n}\nclass ReplyMessage {\n    constructor(vsWorker, seq, res, err) {\n        this.vsWorker = vsWorker;\n        this.seq = seq;\n        this.res = res;\n        this.err = err;\n        this.type = 1 /* MessageType.Reply */;\n    }\n}\nclass SubscribeEventMessage {\n    constructor(vsWorker, req, channel, eventName, arg) {\n        this.vsWorker = vsWorker;\n        this.req = req;\n        this.channel = channel;\n        this.eventName = eventName;\n        this.arg = arg;\n        this.type = 2 /* MessageType.SubscribeEvent */;\n    }\n}\nclass EventMessage {\n    constructor(vsWorker, req, event) {\n        this.vsWorker = vsWorker;\n        this.req = req;\n        this.event = event;\n        this.type = 3 /* MessageType.Event */;\n    }\n}\nclass UnsubscribeEventMessage {\n    constructor(vsWorker, req) {\n        this.vsWorker = vsWorker;\n        this.req = req;\n        this.type = 4 /* MessageType.UnsubscribeEvent */;\n    }\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        this._pendingEmitters = new Map();\n        this._pendingEvents = new Map();\n    }\n    setWorkerId(workerId) {\n        this._workerId = workerId;\n    }\n    sendMessage(channel, method, args) {\n        const req = String(++this._lastSentReq);\n        return new Promise((resolve, reject) => {\n            this._pendingReplies[req] = {\n                resolve: resolve,\n                reject: reject\n            };\n            this._send(new RequestMessage(this._workerId, req, channel, method, args));\n        });\n    }\n    listen(channel, eventName, arg) {\n        let req = null;\n        const emitter = new Emitter({\n            onWillAddFirstListener: () => {\n                req = String(++this._lastSentReq);\n                this._pendingEmitters.set(req, emitter);\n                this._send(new SubscribeEventMessage(this._workerId, req, channel, eventName, arg));\n            },\n            onDidRemoveLastListener: () => {\n                this._pendingEmitters.delete(req);\n                this._send(new UnsubscribeEventMessage(this._workerId, req));\n                req = null;\n            }\n        });\n        return emitter.event;\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    createProxyToRemoteChannel(channel, sendMessageBarrier) {\n        const handler = {\n            get: (target, name) => {\n                if (typeof name === 'string' && !target[name]) {\n                    if (propertyIsDynamicEvent(name)) { // onDynamic...\n                        target[name] = (arg) => {\n                            return this.listen(channel, name, arg);\n                        };\n                    }\n                    else if (propertyIsEvent(name)) { // on...\n                        target[name] = this.listen(channel, name, undefined);\n                    }\n                    else if (name.charCodeAt(0) === 36 /* CharCode.DollarSign */) { // $...\n                        target[name] = async (...myArgs) => {\n                            await sendMessageBarrier?.();\n                            return this.sendMessage(channel, name, myArgs);\n                        };\n                    }\n                }\n                return target[name];\n            }\n        };\n        return new Proxy(Object.create(null), handler);\n    }\n    _handleMessage(msg) {\n        switch (msg.type) {\n            case 1 /* MessageType.Reply */:\n                return this._handleReplyMessage(msg);\n            case 0 /* MessageType.Request */:\n                return this._handleRequestMessage(msg);\n            case 2 /* MessageType.SubscribeEvent */:\n                return this._handleSubscribeEventMessage(msg);\n            case 3 /* MessageType.Event */:\n                return this._handleEventMessage(msg);\n            case 4 /* MessageType.UnsubscribeEvent */:\n                return this._handleUnsubscribeEventMessage(msg);\n        }\n    }\n    _handleReplyMessage(replyMessage) {\n        if (!this._pendingReplies[replyMessage.seq]) {\n            console.warn('Got reply to unknown seq');\n            return;\n        }\n        const 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    }\n    _handleRequestMessage(requestMessage) {\n        const req = requestMessage.req;\n        const result = this._handler.handleMessage(requestMessage.channel, requestMessage.method, requestMessage.args);\n        result.then((r) => {\n            this._send(new ReplyMessage(this._workerId, req, r, undefined));\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(new ReplyMessage(this._workerId, req, undefined, transformErrorForSerialization(e)));\n        });\n    }\n    _handleSubscribeEventMessage(msg) {\n        const req = msg.req;\n        const disposable = this._handler.handleEvent(msg.channel, msg.eventName, msg.arg)((event) => {\n            this._send(new EventMessage(this._workerId, req, event));\n        });\n        this._pendingEvents.set(req, disposable);\n    }\n    _handleEventMessage(msg) {\n        if (!this._pendingEmitters.has(msg.req)) {\n            console.warn('Got event for unknown req');\n            return;\n        }\n        this._pendingEmitters.get(msg.req).fire(msg.event);\n    }\n    _handleUnsubscribeEventMessage(msg) {\n        if (!this._pendingEvents.has(msg.req)) {\n            console.warn('Got unsubscribe for unknown req');\n            return;\n        }\n        this._pendingEvents.get(msg.req).dispose();\n        this._pendingEvents.delete(msg.req);\n    }\n    _send(msg) {\n        const transfer = [];\n        if (msg.type === 0 /* MessageType.Request */) {\n            for (let i = 0; i < msg.args.length; i++) {\n                if (msg.args[i] instanceof ArrayBuffer) {\n                    transfer.push(msg.args[i]);\n                }\n            }\n        }\n        else if (msg.type === 1 /* MessageType.Reply */) {\n            if (msg.res instanceof ArrayBuffer) {\n                transfer.push(msg.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, workerDescriptor) {\n        super();\n        this._localChannels = new Map();\n        this._worker = this._register(workerFactory.create({\n            amdModuleId: 'vs/base/common/worker/simpleWorker',\n            esmModuleLocation: workerDescriptor.esmModuleLocation,\n            label: workerDescriptor.label\n        }, (msg) => {\n            this._protocol.handleMessage(msg);\n        }, (err) => {\n            // in Firefox, web workers fail lazily :(\n            // we will reject the proxy\n            onUnexpectedError(err);\n        }));\n        this._protocol = new SimpleWorkerProtocol({\n            sendMessage: (msg, transfer) => {\n                this._worker.postMessage(msg, transfer);\n            },\n            handleMessage: (channel, method, args) => {\n                return this._handleMessage(channel, method, args);\n            },\n            handleEvent: (channel, eventName, arg) => {\n                return this._handleEvent(channel, eventName, arg);\n            }\n        });\n        this._protocol.setWorkerId(this._worker.getId());\n        // Gather loader configuration\n        let loaderConfiguration = null;\n        const globalRequire = globalThis.require;\n        if (typeof globalRequire !== 'undefined' && typeof globalRequire.getConfig === 'function') {\n            // Get the configuration from the Monaco AMD Loader\n            loaderConfiguration = globalRequire.getConfig();\n        }\n        else if (typeof globalThis.requirejs !== 'undefined') {\n            // Get the configuration from requirejs\n            loaderConfiguration = globalThis.requirejs.s.contexts._.config;\n        }\n        // Send initialize message\n        this._onModuleLoaded = this._protocol.sendMessage(DEFAULT_CHANNEL, INITIALIZE, [\n            this._worker.getId(),\n            JSON.parse(JSON.stringify(loaderConfiguration)),\n            workerDescriptor.amdModuleId,\n        ]);\n        this.proxy = this._protocol.createProxyToRemoteChannel(DEFAULT_CHANNEL, async () => { await this._onModuleLoaded; });\n        this._onModuleLoaded.catch((e) => {\n            this._onError('Worker failed to load ' + workerDescriptor.amdModuleId, e);\n        });\n    }\n    _handleMessage(channelName, method, args) {\n        const channel = this._localChannels.get(channelName);\n        if (!channel) {\n            return Promise.reject(new Error(`Missing channel ${channelName} on main thread`));\n        }\n        if (typeof channel[method] !== 'function') {\n            return Promise.reject(new Error(`Missing method ${method} on main thread channel ${channelName}`));\n        }\n        try {\n            return Promise.resolve(channel[method].apply(channel, args));\n        }\n        catch (e) {\n            return Promise.reject(e);\n        }\n    }\n    _handleEvent(channelName, eventName, arg) {\n        const channel = this._localChannels.get(channelName);\n        if (!channel) {\n            throw new Error(`Missing channel ${channelName} on main thread`);\n        }\n        if (propertyIsDynamicEvent(eventName)) {\n            const event = channel[eventName].call(channel, arg);\n            if (typeof event !== 'function') {\n                throw new Error(`Missing dynamic event ${eventName} on main thread channel ${channelName}.`);\n            }\n            return event;\n        }\n        if (propertyIsEvent(eventName)) {\n            const event = channel[eventName];\n            if (typeof event !== 'function') {\n                throw new Error(`Missing event ${eventName} on main thread channel ${channelName}.`);\n            }\n            return event;\n        }\n        throw new Error(`Malformed event name ${eventName}`);\n    }\n    setChannel(channel, handler) {\n        this._localChannels.set(channel, handler);\n    }\n    _onError(message, error) {\n        console.error(message);\n        console.info(error);\n    }\n}\nfunction propertyIsEvent(name) {\n    // Assume a property is an event if it has a form of \"onSomething\"\n    return name[0] === 'o' && name[1] === 'n' && strings.isUpperAsciiLetter(name.charCodeAt(2));\n}\nfunction propertyIsDynamicEvent(name) {\n    // Assume a property is a dynamic event (a method that returns an event) if it has a form of \"onDynamicSomething\"\n    return /^onDynamic/.test(name) && strings.isUpperAsciiLetter(name.charCodeAt(9));\n}\n/**\n * Worker side\n */\nexport class SimpleWorkerServer {\n    constructor(postMessage, requestHandlerFactory) {\n        this._localChannels = new Map();\n        this._remoteChannels = new Map();\n        this._requestHandlerFactory = requestHandlerFactory;\n        this._requestHandler = null;\n        this._protocol = new SimpleWorkerProtocol({\n            sendMessage: (msg, transfer) => {\n                postMessage(msg, transfer);\n            },\n            handleMessage: (channel, method, args) => this._handleMessage(channel, method, args),\n            handleEvent: (channel, eventName, arg) => this._handleEvent(channel, eventName, arg)\n        });\n    }\n    onmessage(msg) {\n        this._protocol.handleMessage(msg);\n    }\n    _handleMessage(channel, method, args) {\n        if (channel === DEFAULT_CHANNEL && method === INITIALIZE) {\n            return this.initialize(args[0], args[1], args[2]);\n        }\n        const requestHandler = (channel === DEFAULT_CHANNEL ? this._requestHandler : this._localChannels.get(channel));\n        if (!requestHandler) {\n            return Promise.reject(new Error(`Missing channel ${channel} on worker thread`));\n        }\n        if (typeof requestHandler[method] !== 'function') {\n            return Promise.reject(new Error(`Missing method ${method} on worker thread channel ${channel}`));\n        }\n        try {\n            return Promise.resolve(requestHandler[method].apply(requestHandler, args));\n        }\n        catch (e) {\n            return Promise.reject(e);\n        }\n    }\n    _handleEvent(channel, eventName, arg) {\n        const requestHandler = (channel === DEFAULT_CHANNEL ? this._requestHandler : this._localChannels.get(channel));\n        if (!requestHandler) {\n            throw new Error(`Missing channel ${channel} on worker thread`);\n        }\n        if (propertyIsDynamicEvent(eventName)) {\n            const event = requestHandler[eventName].call(requestHandler, arg);\n            if (typeof event !== 'function') {\n                throw new Error(`Missing dynamic event ${eventName} on request handler.`);\n            }\n            return event;\n        }\n        if (propertyIsEvent(eventName)) {\n            const event = requestHandler[eventName];\n            if (typeof event !== 'function') {\n                throw new Error(`Missing event ${eventName} on request handler.`);\n            }\n            return event;\n        }\n        throw new Error(`Malformed event name ${eventName}`);\n    }\n    getChannel(channel) {\n        if (!this._remoteChannels.has(channel)) {\n            const inst = this._protocol.createProxyToRemoteChannel(channel);\n            this._remoteChannels.set(channel, inst);\n        }\n        return this._remoteChannels.get(channel);\n    }\n    async initialize(workerId, loaderConfig, moduleId) {\n        this._protocol.setWorkerId(workerId);\n        if (this._requestHandlerFactory) {\n            // static request handler\n            this._requestHandler = this._requestHandlerFactory(this);\n            return;\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            globalThis.require.config(loaderConfig);\n        }\n        if (isESM) {\n            const url = FileAccess.asBrowserUri(`${moduleId}.js`).toString(true);\n            return import(`${url}`).then((module) => {\n                this._requestHandler = module.create(this);\n                if (!this._requestHandler) {\n                    throw new Error(`No RequestHandler!`);\n                }\n            });\n        }\n        return new Promise((resolve, reject) => {\n            // Use the global require to be sure to get the global config\n            // ESM-comment-begin\n            // \t\t\tconst req = (globalThis.require || require);\n            // ESM-comment-end\n            // ESM-uncomment-begin\n            const req = globalThis.require;\n            // ESM-uncomment-end\n            req([moduleId], (module) => {\n                this._requestHandler = module.create(this);\n                if (!this._requestHandler) {\n                    reject(new Error(`No RequestHandler!`));\n                    return;\n                }\n                resolve();\n            }, reject);\n        });\n    }\n}\n/**\n * Defines the worker entry point. Must be exported and named `create`.\n * @skipMangle\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 *--------------------------------------------------------------------------------------------*/\nimport { onUnexpectedError } from '../common/errors.js';\nexport function createTrustedTypesPolicy(policyName, policyOptions) {\n    const monacoEnvironment = globalThis.MonacoEnvironment;\n    if (monacoEnvironment?.createTrustedTypesPolicy) {\n        try {\n            return monacoEnvironment.createTrustedTypesPolicy(policyName, policyOptions);\n        }\n        catch (err) {\n            onUnexpectedError(err);\n            return undefined;\n        }\n    }\n    try {\n        return globalThis.trustedTypes?.createPolicy(policyName, policyOptions);\n    }\n    catch (err) {\n        onUnexpectedError(err);\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 { createTrustedTypesPolicy } from './trustedTypes.js';\nimport { onUnexpectedError } from '../common/errors.js';\nimport { COI, FileAccess } from '../common/network.js';\nimport { logOnceWebWorkerWarning, SimpleWorkerClient } from '../common/worker/simpleWorker.js';\nimport { Disposable, toDisposable } from '../common/lifecycle.js';\nimport { coalesce } from '../common/arrays.js';\nimport { getNLSLanguage, getNLSMessages } from '../../nls.js';\n// ESM-comment-begin\n// const isESM = false;\n// ESM-comment-end\n// ESM-uncomment-begin\nconst isESM = true;\n// ESM-uncomment-end\n// Reuse the trusted types policy defined from worker bootstrap\n// when available.\n// Refs https://github.com/microsoft/vscode/issues/222193\nlet ttPolicy;\nif (typeof self === 'object' && self.constructor && self.constructor.name === 'DedicatedWorkerGlobalScope' && globalThis.workerttPolicy !== undefined) {\n    ttPolicy = globalThis.workerttPolicy;\n}\nelse {\n    ttPolicy = createTrustedTypesPolicy('defaultWorkerFactory', { createScriptURL: value => value });\n}\nfunction getWorker(esmWorkerLocation, label) {\n    const monacoEnvironment = globalThis.MonacoEnvironment;\n    if (monacoEnvironment) {\n        if (typeof monacoEnvironment.getWorker === 'function') {\n            return monacoEnvironment.getWorker('workerMain.js', label);\n        }\n        if (typeof monacoEnvironment.getWorkerUrl === 'function') {\n            const workerUrl = monacoEnvironment.getWorkerUrl('workerMain.js', label);\n            return new Worker(ttPolicy ? ttPolicy.createScriptURL(workerUrl) : workerUrl, { name: label, type: isESM ? 'module' : undefined });\n        }\n    }\n    // ESM-comment-begin\n    // \tif (typeof require === 'function') {\n    // \t\tconst workerMainLocation = require.toUrl('vs/base/worker/workerMain.js'); // explicitly using require.toUrl(), see https://github.com/microsoft/vscode/issues/107440#issuecomment-698982321\n    // \t\tconst factoryModuleId = 'vs/base/worker/defaultWorkerFactory.js';\n    // \t\tconst workerBaseUrl = require.toUrl(factoryModuleId).slice(0, -factoryModuleId.length); // explicitly using require.toUrl(), see https://github.com/microsoft/vscode/issues/107440#issuecomment-698982321\n    // \t\tconst workerUrl = getWorkerBootstrapUrl(label, workerMainLocation, workerBaseUrl);\n    // \t\treturn new Worker(ttPolicy ? ttPolicy.createScriptURL(workerUrl) as unknown as string : workerUrl, { name: label, type: isESM ? 'module' : undefined });\n    // \t}\n    // ESM-comment-end\n    if (esmWorkerLocation) {\n        const workerUrl = getWorkerBootstrapUrl(label, esmWorkerLocation.toString(true));\n        const worker = new Worker(ttPolicy ? ttPolicy.createScriptURL(workerUrl) : workerUrl, { name: label, type: isESM ? 'module' : undefined });\n        if (isESM) {\n            return whenESMWorkerReady(worker);\n        }\n        else {\n            return worker;\n        }\n    }\n    throw new Error(`You must define a function MonacoEnvironment.getWorkerUrl or MonacoEnvironment.getWorker`);\n}\nfunction getWorkerBootstrapUrl(label, workerScriptUrl, workerBaseUrl) {\n    const workerScriptUrlIsAbsolute = /^((http:)|(https:)|(file:)|(vscode-file:))/.test(workerScriptUrl);\n    if (workerScriptUrlIsAbsolute && workerScriptUrl.substring(0, globalThis.origin.length) !== globalThis.origin) {\n        // this is the cross-origin case\n        // i.e. the webpage is running at a different origin than where the scripts are loaded from\n    }\n    else {\n        const start = workerScriptUrl.lastIndexOf('?');\n        const end = workerScriptUrl.lastIndexOf('#', start);\n        const params = start > 0\n            ? new URLSearchParams(workerScriptUrl.substring(start + 1, ~end ? end : undefined))\n            : new URLSearchParams();\n        COI.addSearchParam(params, true, true);\n        const search = params.toString();\n        if (!search) {\n            workerScriptUrl = `${workerScriptUrl}#${label}`;\n        }\n        else {\n            workerScriptUrl = `${workerScriptUrl}?${params.toString()}#${label}`;\n        }\n    }\n    if (!isESM && !workerScriptUrlIsAbsolute) {\n        // we have to convert relative script URLs to the origin because importScripts\n        // does not work unless the script URL is absolute\n        workerScriptUrl = new URL(workerScriptUrl, globalThis.origin).toString();\n    }\n    const blob = new Blob([coalesce([\n            `/*${label}*/`,\n            workerBaseUrl ? `globalThis.MonacoEnvironment = { baseUrl: '${workerBaseUrl}' };` : undefined,\n            `globalThis._VSCODE_NLS_MESSAGES = ${JSON.stringify(getNLSMessages())};`,\n            `globalThis._VSCODE_NLS_LANGUAGE = ${JSON.stringify(getNLSLanguage())};`,\n            `globalThis._VSCODE_FILE_ROOT = '${globalThis._VSCODE_FILE_ROOT}';`,\n            `const ttPolicy = globalThis.trustedTypes?.createPolicy('defaultWorkerFactory', { createScriptURL: value => value });`,\n            `globalThis.workerttPolicy = ttPolicy;`,\n            isESM ? `await import(ttPolicy?.createScriptURL('${workerScriptUrl}') ?? '${workerScriptUrl}');` : `importScripts(ttPolicy?.createScriptURL('${workerScriptUrl}') ?? '${workerScriptUrl}');`,\n            isESM ? `globalThis.postMessage({ type: 'vscode-worker-ready' });` : undefined, // in ESM signal we are ready after the async import\n            `/*${label}*/`\n        ]).join('')], { type: 'application/javascript' });\n    return URL.createObjectURL(blob);\n}\nfunction whenESMWorkerReady(worker) {\n    return new Promise((resolve, reject) => {\n        worker.onmessage = function (e) {\n            if (e.data.type === 'vscode-worker-ready') {\n                worker.onmessage = null;\n                resolve(worker);\n            }\n        };\n        worker.onerror = reject;\n    });\n}\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 extends Disposable {\n    constructor(esmWorkerLocation, amdModuleId, id, label, onMessageCallback, onErrorCallback) {\n        super();\n        this.id = id;\n        this.label = label;\n        const workerOrPromise = getWorker(esmWorkerLocation, label);\n        if (isPromiseLike(workerOrPromise)) {\n            this.worker = workerOrPromise;\n        }\n        else {\n            this.worker = Promise.resolve(workerOrPromise);\n        }\n        this.postMessage(amdModuleId, []);\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        this._register(toDisposable(() => {\n            this.worker?.then(w => {\n                w.onmessage = null;\n                w.onmessageerror = null;\n                w.removeEventListener('error', onErrorCallback);\n                w.terminate();\n            });\n            this.worker = null;\n        }));\n    }\n    getId() {\n        return this.id;\n    }\n    postMessage(message, transfer) {\n        this.worker?.then(w => {\n            try {\n                w.postMessage(message, transfer);\n            }\n            catch (err) {\n                onUnexpectedError(err);\n                onUnexpectedError(new Error(`FAILED to post message to '${this.label}'-worker`, { cause: err }));\n            }\n        });\n    }\n}\nexport class WorkerDescriptor {\n    constructor(amdModuleId, label) {\n        this.amdModuleId = amdModuleId;\n        this.label = label;\n        this.esmModuleLocation = (isESM ? FileAccess.asBrowserUri(`${amdModuleId}.esm.js`) : undefined);\n    }\n}\nclass DefaultWorkerFactory {\n    static { this.LAST_WORKER_ID = 0; }\n    constructor() {\n        this._webWorkerFailedBeforeError = false;\n    }\n    create(desc, onMessageCallback, onErrorCallback) {\n        const workerId = (++DefaultWorkerFactory.LAST_WORKER_ID);\n        if (this._webWorkerFailedBeforeError) {\n            throw this._webWorkerFailedBeforeError;\n        }\n        return new WebWorker(desc.esmModuleLocation, desc.amdModuleId, workerId, desc.label || 'anonymous' + workerId, onMessageCallback, (err) => {\n            logOnceWebWorkerWarning(err);\n            this._webWorkerFailedBeforeError = err;\n            onErrorCallback(err);\n        });\n    }\n}\nexport function createWebWorker(arg0, arg1) {\n    const workerDescriptor = (typeof arg0 === 'string' ? new WorkerDescriptor(arg0, arg1) : arg0);\n    return new SimpleWorkerClient(new DefaultWorkerFactory(), workerDescriptor);\n}\n","/*---------------------------------------------------------------------------------------------\n *  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._neutralCharacter = null;\n        this._neutralCharacterSearched = false;\n        this.open = source.open;\n        this.close = source.close;\n        // initially allowed in all tokens\n        this._inString = true;\n        this._inComment = true;\n        this._inRegEx = true;\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._inString = false;\n                        break;\n                    case 'comment':\n                        this._inComment = false;\n                        break;\n                    case 'regex':\n                        this._inRegEx = false;\n                        break;\n                }\n            }\n        }\n    }\n    isOK(standardToken) {\n        switch (standardToken) {\n            case 0 /* StandardTokenType.Other */:\n                return true;\n            case 1 /* StandardTokenType.Comment */:\n                return this._inComment;\n            case 2 /* StandardTokenType.String */:\n                return this._inString;\n            case 3 /* StandardTokenType.RegEx */:\n                return this._inRegEx;\n        }\n    }\n    shouldAutoClose(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 this.isOK(standardTokenType);\n    }\n    _findNeutralCharacterInRange(fromCharCode, toCharCode) {\n        for (let charCode = fromCharCode; charCode <= toCharCode; charCode++) {\n            const character = String.fromCharCode(charCode);\n            if (!this.open.includes(character) && !this.close.includes(character)) {\n                return character;\n            }\n        }\n        return null;\n    }\n    /**\n     * Find a character in the range [0-9a-zA-Z] that does not appear in the open or close\n     */\n    findNeutralCharacter() {\n        if (!this._neutralCharacterSearched) {\n            this._neutralCharacterSearched = true;\n            if (!this._neutralCharacter) {\n                this._neutralCharacter = this._findNeutralCharacterInRange(48 /* CharCode.Digit0 */, 57 /* CharCode.Digit9 */);\n            }\n            if (!this._neutralCharacter) {\n                this._neutralCharacter = this._findNeutralCharacterInRange(97 /* CharCode.a */, 122 /* CharCode.z */);\n            }\n            if (!this._neutralCharacter) {\n                this._neutralCharacter = this._findNeutralCharacterInRange(65 /* CharCode.A */, 90 /* CharCode.Z */);\n            }\n        }\n        return this._neutralCharacter;\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    static { this.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED_QUOTES = ';:.,=}])> \\n\\t'; }\n    static { this.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED_BRACKETS = '\\'\"`;:.,=}])> \\n\\t'; }\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._autoCloseBeforeForQuotes = typeof config.autoCloseBefore === 'string' ? config.autoCloseBefore : CharacterPairSupport.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED_QUOTES;\n        this._autoCloseBeforeForBrackets = typeof config.autoCloseBefore === 'string' ? config.autoCloseBefore : CharacterPairSupport.DEFAULT_AUTOCLOSE_BEFORE_LANGUAGE_DEFINED_BRACKETS;\n        this._surroundingPairs = config.surroundingPairs || this._autoClosingPairs;\n    }\n    getAutoClosingPairs() {\n        return this._autoClosingPairs;\n    }\n    getAutoCloseBeforeSet(forQuotes) {\n        return (forQuotes ? this._autoCloseBeforeForQuotes : this._autoCloseBeforeForBrackets);\n    }\n    getSurroundingPairs() {\n        return this._surroundingPairs;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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    const tokenCount = context.getCount();\n    const tokenIndex = context.findTokenIndexAtOffset(offset);\n    const 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._scopedLineTokensBrand = undefined;\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        this.languageIdCodec = actual.languageIdCodec;\n    }\n    getLineContent() {\n        const actualLineContent = this._actual.getLineContent();\n        return actualLineContent.substring(this.firstCharOffset, this._lastCharOffset);\n    }\n    getLineLength() {\n        return this._lastCharOffset - this.firstCharOffset;\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    toIViewLineTokens() {\n        return this._actual.sliceAndInflate(this.firstCharOffset, this._lastCharOffset, 0);\n    }\n}\nexport function ignoreBracketsInToken(standardTokenType) {\n    return (standardTokenType & 3 /* IgnoreBracketsInTokens.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 { Lazy } from './lazy.js';\nconst hasBuffer = (typeof Buffer !== 'undefined');\nconst indexOfTable = new Lazy(() => new Uint8Array(256));\nlet textDecoder;\nexport class VSBuffer {\n    /**\n     * When running in a nodejs context, if `actual` is not a nodejs Buffer, the backing store for\n     * the returned `VSBuffer` instance might use a nodejs Buffer allocated from node's Buffer pool,\n     * which is not transferrable.\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    constructor(buffer) {\n        this.buffer = buffer;\n        this.byteLength = this.buffer.byteLength;\n    }\n    toString() {\n        if (hasBuffer) {\n            return this.buffer.toString();\n        }\n        else {\n            if (!textDecoder) {\n                textDecoder = new TextDecoder();\n            }\n            return textDecoder.decode(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] * 2 ** 24\n        + source[offset + 1] * 2 ** 16\n        + source[offset + 2] * 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 * 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 function decodeUTF16LE(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    const 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}\nexport class 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    /**\n     * Append a char code (<2^16)\n     */\n    appendCharCode(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    /**\n     * Append an ASCII char code (<2^8)\n     */\n    appendASCIICharCode(charCode) {\n        if (this._bufferLength === this._capacity) {\n            // buffer is full\n            this._flushBuffer();\n        }\n        this._buffer[this._bufferLength++] = charCode;\n    }\n    appendString(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}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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';\n/**\n * Represents a grouping of colliding bracket pairs.\n *\n * Most of the times this contains a single bracket pair,\n * but sometimes this contains multiple bracket pairs in cases\n * where the same string appears as a closing bracket for multiple\n * bracket pairs, or the same string appears an opening bracket for\n * multiple bracket pairs.\n *\n * e.g. of a group containing a single pair:\n *   open: ['{'], close: ['}']\n *\n * e.g. of a group containing multiple pairs:\n *   open: ['if', 'for'], close: ['end', 'end']\n */\nexport class RichEditBracket {\n    constructor(languageId, index, open, close, forwardRegex, reversedRegex) {\n        this._richEditBracketBrand = undefined;\n        this.languageId = languageId;\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    /**\n     * Check if the provided `text` is an open bracket in this group.\n     */\n    isOpen(text) {\n        return this._openSet.has(text);\n    }\n    /**\n     * Check if the provided `text` is a close bracket in this group.\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}\n/**\n * Groups together brackets that have equal open or close sequences.\n *\n * For example, if the following brackets are defined:\n *   ['IF','END']\n *   ['for','end']\n *   ['{','}']\n *\n * Then the grouped brackets would be:\n *   { open: ['if', 'for'], close: ['end', 'end'] }\n *   { open: ['{'], close: ['}'] }\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        const currentOpen = [];\n        const 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(languageId, _brackets) {\n        this._richEditBracketsBrand = undefined;\n        const brackets = groupFuzzyBrackets(_brackets);\n        this.brackets = brackets.map((b, index) => {\n            return new RichEditBracket(languageId, 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}\n/**\n * Create a regular expression that can be used to search forward in a piece of text\n * for a group of bracket pairs. But this regex must be built in a way in which\n * it is aware of the other bracket pairs defined for the language.\n *\n * For example, if a language contains the following bracket pairs:\n *   ['begin', 'end']\n *   ['if', 'end if']\n * The two bracket pairs do not collide because no open or close brackets are equal.\n * So the function getRegexForBracketPair is called twice, once with\n * the ['begin'], ['end'] group consisting of one bracket pair, and once with\n * the ['if'], ['end if'] group consiting of the other bracket pair.\n *\n * But there could be a situation where an occurrence of 'end if' is mistaken\n * for an occurrence of 'end'.\n *\n * Therefore, for the bracket pair ['begin', 'end'], the regex will also\n * target 'end if'. The regex will be something like:\n *   /(\\bend if\\b)|(\\bend\\b)|(\\bif\\b)/\n *\n * The regex also searches for \"superstrings\" (other brackets that might be mistaken with the current bracket).\n *\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}\n/**\n * Matching a regular expression in JS can only be done \"forwards\". So JS offers natively only\n * methods to find the first match of a regex in a string. But sometimes, it is useful to\n * find the last match of a regex in a string. For such a situation, a nice solution is to\n * simply reverse the string and then search for a reversed regex.\n *\n * This function also has the fine details of `getRegexForBracketPair`. For the same example\n * given above, the regex produced here would look like:\n *   /(\\bfi dne\\b)|(\\bdne\\b)|(\\bfi\\b)/\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}\n/**\n * Creates a regular expression that targets all bracket pairs.\n *\n * e.g. for the bracket pairs:\n *  ['{','}']\n *  ['begin,'end']\n *  ['for','end']\n * the regex would look like:\n *  /(\\{)|(\\})|(\\bbegin\\b)|(\\bend\\b)|(\\bfor\\b)/\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}\n/**\n * Matching a regular expression in JS can only be done \"forwards\". So JS offers natively only\n * methods to find the first match of a regex in a string. But sometimes, it is useful to\n * find the last match of a regex in a string. For such a situation, a nice solution is to\n * simply reverse the string and then search for a reversed regex.\n *\n * e.g. for the bracket pairs:\n *  ['{','}']\n *  ['begin,'end']\n *  ['for','end']\n * the regex would look like:\n *  /(\\{)|(\\})|(\\bnigeb\\b)|(\\bdne\\b)|(\\brof\\b)/\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}\nexport function createBracketOrRegExp(pieces, options) {\n    const regexStr = `(${pieces.map(prepareBracketForRegExp).join(')|(')})`;\n    return strings.createRegExp(regexStr, true, options);\n}\nconst toReversedString = (function () {\n    function reverse(str) {\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    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        const m = reversedText.match(reversedBracketRegex);\n        if (!m) {\n            return null;\n        }\n        const matchOffset = reversedText.length - (m.index || 0);\n        const matchLength = m[0].length;\n        const 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        const m = text.match(bracketRegex);\n        if (!m) {\n            return null;\n        }\n        const matchOffset = m.index || 0;\n        const matchLength = m[0].length;\n        if (matchLength === 0) {\n            return null;\n        }\n        const 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 { distinct } from '../../../../base/common/arrays.js';\nimport { ignoreBracketsInToken } from '../supports.js';\nimport { BracketsUtils } from './richEditBrackets.js';\nexport class BracketElectricCharacterSupport {\n    constructor(richEditBrackets) {\n        this._richEditBrackets = richEditBrackets;\n    }\n    getElectricCharacters() {\n        const 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        return distinct(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 /* IndentConsts.INCREASE_MASK */;\n        }\n        if (this.shouldDecrease(text)) {\n            ret += 2 /* IndentConsts.DECREASE_MASK */;\n        }\n        if (this.shouldIndentNextLine(text)) {\n            ret += 4 /* IndentConsts.INDENT_NEXTLINE_MASK */;\n        }\n        if (this.shouldIgnore(text)) {\n            ret += 8 /* IndentConsts.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 /* EditorAutoIndentStrategy.Advanced */) {\n            for (let i = 0, len = this._regExpRules.length; i < len; i++) {\n                const 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                    if (!obj.reg) {\n                        return true;\n                    }\n                    obj.reg.lastIndex = 0; // To disable the effect of the \"g\" flag.\n                    return obj.reg.test(obj.text);\n                });\n                if (regResult) {\n                    return rule.action;\n                }\n            }\n        }\n        // (2): Special indent-outdent\n        if (autoIndent >= 2 /* EditorAutoIndentStrategy.Brackets */) {\n            if (beforeEnterText.length > 0 && afterEnterText.length > 0) {\n                for (let i = 0, len = this._brackets.length; i < len; i++) {\n                    const 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 /* EditorAutoIndentStrategy.Brackets */) {\n            if (beforeEnterText.length > 0) {\n                for (let i = 0, len = this._brackets.length; i < len; i++) {\n                    const 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 { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IConfigurationService = createDecorator('configurationService');\nexport function toValuesTree(properties, conflictReporter) {\n    const root = Object.create(null);\n    for (const 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        const 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                if (obj === null) {\n                    conflictReporter(`Ignoring ${key} as ${segments.slice(0, i + 1).join('.')} is null`);\n                    return;\n                }\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 getLanguageTagSettingPlainKey(settingKey) {\n    return settingKey.replace(/[\\[\\]]/g, '');\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 ILanguageService = createDecorator('languageService');\n","/*---------------------------------------------------------------------------------------------\n *  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 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, [], Boolean(supportsDelayedInstantiation));\n    }\n    _registry.push([id, ctorOrDescriptor]);\n}\nexport function getSingletonServiceDescriptors() {\n    return _registry;\n}\n","export const Mimes = Object.freeze({\n    text: 'text/plain',\n    binary: 'application/octet-stream',\n    unknown: 'application/unknown',\n    markdown: 'text/markdown',\n    latex: 'text/latex',\n    uriList: 'text/uri-list',\n});\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 platform from '../../registry/common/platform.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 { distinct } from '../../../base/common/arrays.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport * as types from '../../../base/common/types.js';\nimport * as nls from '../../../nls.js';\nimport { getLanguageTagSettingPlainKey } from './configuration.js';\nimport { Extensions as JSONExtensions } from '../../jsonschemas/common/jsonContributionRegistry.js';\nimport { Registry } from '../../registry/common/platform.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.registeredConfigurationDefaults = [];\n        this.overrideIdentifiers = new Set();\n        this._onDidSchemaChange = new Emitter();\n        this._onDidUpdateConfiguration = new Emitter();\n        this.configurationDefaultsOverrides = new Map();\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 = {\n            properties: {},\n            patternProperties: {},\n            additionalProperties: true,\n            allowTrailingCommas: true,\n            allowComments: true\n        };\n        this.configurationProperties = {};\n        this.policyConfigurations = new Map();\n        this.excludedConfigurationProperties = {};\n        contributionRegistry.registerSchema(resourceLanguageSettingsSchemaId, this.resourceLanguageSettingsSchema);\n        this.registerOverridePropertyPatternKey();\n    }\n    registerConfiguration(configuration, validate = true) {\n        this.registerConfigurations([configuration], validate);\n    }\n    registerConfigurations(configurations, validate = true) {\n        const properties = new Set();\n        this.doRegisterConfigurations(configurations, validate, properties);\n        contributionRegistry.registerSchema(resourceLanguageSettingsSchemaId, this.resourceLanguageSettingsSchema);\n        this._onDidSchemaChange.fire();\n        this._onDidUpdateConfiguration.fire({ properties });\n    }\n    registerDefaultConfigurations(configurationDefaults) {\n        const properties = new Set();\n        this.doRegisterDefaultConfigurations(configurationDefaults, properties);\n        this._onDidSchemaChange.fire();\n        this._onDidUpdateConfiguration.fire({ properties, defaultsOverrides: true });\n    }\n    doRegisterDefaultConfigurations(configurationDefaults, bucket) {\n        this.registeredConfigurationDefaults.push(...configurationDefaults);\n        const overrideIdentifiers = [];\n        for (const { overrides, source } of configurationDefaults) {\n            for (const key in overrides) {\n                bucket.add(key);\n                const configurationDefaultOverridesForKey = this.configurationDefaultsOverrides.get(key)\n                    ?? this.configurationDefaultsOverrides.set(key, { configurationDefaultOverrides: [] }).get(key);\n                const value = overrides[key];\n                configurationDefaultOverridesForKey.configurationDefaultOverrides.push({ value, source });\n                // Configuration defaults for Override Identifiers\n                if (OVERRIDE_PROPERTY_REGEX.test(key)) {\n                    const newDefaultOverride = this.mergeDefaultConfigurationsForOverrideIdentifier(key, value, source, configurationDefaultOverridesForKey.configurationDefaultOverrideValue);\n                    if (!newDefaultOverride) {\n                        continue;\n                    }\n                    configurationDefaultOverridesForKey.configurationDefaultOverrideValue = newDefaultOverride;\n                    this.updateDefaultOverrideProperty(key, newDefaultOverride, source);\n                    overrideIdentifiers.push(...overrideIdentifiersFromKey(key));\n                }\n                // Configuration defaults for Configuration Properties\n                else {\n                    const newDefaultOverride = this.mergeDefaultConfigurationsForConfigurationProperty(key, value, source, configurationDefaultOverridesForKey.configurationDefaultOverrideValue);\n                    if (!newDefaultOverride) {\n                        continue;\n                    }\n                    configurationDefaultOverridesForKey.configurationDefaultOverrideValue = newDefaultOverride;\n                    const property = this.configurationProperties[key];\n                    if (property) {\n                        this.updatePropertyDefaultValue(key, property);\n                        this.updateSchema(key, property);\n                    }\n                }\n            }\n        }\n        this.doRegisterOverrideIdentifiers(overrideIdentifiers);\n    }\n    updateDefaultOverrideProperty(key, newDefaultOverride, source) {\n        const property = {\n            type: 'object',\n            default: newDefaultOverride.value,\n            description: nls.localize('defaultLanguageConfiguration.description', \"Configure settings to be overridden for the {0} language.\", getLanguageTagSettingPlainKey(key)),\n            $ref: resourceLanguageSettingsSchemaId,\n            defaultDefaultValue: newDefaultOverride.value,\n            source,\n            defaultValueSource: source\n        };\n        this.configurationProperties[key] = property;\n        this.defaultLanguageConfigurationOverridesNode.properties[key] = property;\n    }\n    mergeDefaultConfigurationsForOverrideIdentifier(overrideIdentifier, configurationValueObject, valueSource, existingDefaultOverride) {\n        const defaultValue = existingDefaultOverride?.value || {};\n        const source = existingDefaultOverride?.source ?? new Map();\n        // This should not happen\n        if (!(source instanceof Map)) {\n            console.error('objectConfigurationSources is not a Map');\n            return undefined;\n        }\n        for (const propertyKey of Object.keys(configurationValueObject)) {\n            const propertyDefaultValue = configurationValueObject[propertyKey];\n            const isObjectSetting = types.isObject(propertyDefaultValue) &&\n                (types.isUndefined(defaultValue[propertyKey]) || types.isObject(defaultValue[propertyKey]));\n            // If the default value is an object, merge the objects and store the source of each keys\n            if (isObjectSetting) {\n                defaultValue[propertyKey] = { ...(defaultValue[propertyKey] ?? {}), ...propertyDefaultValue };\n                // Track the source of each value in the object\n                if (valueSource) {\n                    for (const objectKey in propertyDefaultValue) {\n                        source.set(`${propertyKey}.${objectKey}`, valueSource);\n                    }\n                }\n            }\n            // Primitive values are overridden\n            else {\n                defaultValue[propertyKey] = propertyDefaultValue;\n                if (valueSource) {\n                    source.set(propertyKey, valueSource);\n                }\n                else {\n                    source.delete(propertyKey);\n                }\n            }\n        }\n        return { value: defaultValue, source };\n    }\n    mergeDefaultConfigurationsForConfigurationProperty(propertyKey, value, valuesSource, existingDefaultOverride) {\n        const property = this.configurationProperties[propertyKey];\n        const existingDefaultValue = existingDefaultOverride?.value ?? property?.defaultDefaultValue;\n        let source = valuesSource;\n        const isObjectSetting = types.isObject(value) &&\n            (property !== undefined && property.type === 'object' ||\n                property === undefined && (types.isUndefined(existingDefaultValue) || types.isObject(existingDefaultValue)));\n        // If the default value is an object, merge the objects and store the source of each keys\n        if (isObjectSetting) {\n            source = existingDefaultOverride?.source ?? new Map();\n            // This should not happen\n            if (!(source instanceof Map)) {\n                console.error('defaultValueSource is not a Map');\n                return undefined;\n            }\n            for (const objectKey in value) {\n                if (valuesSource) {\n                    source.set(`${propertyKey}.${objectKey}`, valuesSource);\n                }\n            }\n            value = { ...(types.isObject(existingDefaultValue) ? existingDefaultValue : {}), ...value };\n        }\n        return { value, source };\n    }\n    registerOverrideIdentifiers(overrideIdentifiers) {\n        this.doRegisterOverrideIdentifiers(overrideIdentifiers);\n        this._onDidSchemaChange.fire();\n    }\n    doRegisterOverrideIdentifiers(overrideIdentifiers) {\n        for (const overrideIdentifier of overrideIdentifiers) {\n            this.overrideIdentifiers.add(overrideIdentifier);\n        }\n        this.updateOverridePropertyPatternKey();\n    }\n    doRegisterConfigurations(configurations, validate, bucket) {\n        configurations.forEach(configuration => {\n            this.validateAndRegisterProperties(configuration, validate, configuration.extensionInfo, configuration.restrictedProperties, undefined, bucket);\n            this.configurationContributors.push(configuration);\n            this.registerJSONConfiguration(configuration);\n        });\n    }\n    validateAndRegisterProperties(configuration, validate = true, extensionInfo, restrictedProperties, scope = 3 /* ConfigurationScope.WINDOW */, bucket) {\n        scope = types.isUndefinedOrNull(configuration.scope) ? scope : configuration.scope;\n        const properties = configuration.properties;\n        if (properties) {\n            for (const key in properties) {\n                const property = properties[key];\n                if (validate && validateProperty(key, property)) {\n                    delete properties[key];\n                    continue;\n                }\n                property.source = extensionInfo;\n                // update default value\n                property.defaultDefaultValue = properties[key].default;\n                this.updatePropertyDefaultValue(key, property);\n                // update scope\n                if (OVERRIDE_PROPERTY_REGEX.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) ? !!restrictedProperties?.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                    if (properties[key].policy?.name) {\n                        this.policyConfigurations.set(properties[key].policy.name, key);\n                    }\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                bucket.add(key);\n            }\n        }\n        const subNodes = configuration.allOf;\n        if (subNodes) {\n            for (const node of subNodes) {\n                this.validateAndRegisterProperties(node, validate, extensionInfo, restrictedProperties, scope, bucket);\n            }\n        }\n    }\n    getConfigurationProperties() {\n        return this.configurationProperties;\n    }\n    getPolicyConfigurations() {\n        return this.policyConfigurations;\n    }\n    registerJSONConfiguration(configuration) {\n        const register = (configuration) => {\n            const properties = configuration.properties;\n            if (properties) {\n                for (const key in properties) {\n                    this.updateSchema(key, properties[key]);\n                }\n            }\n            const subNodes = configuration.allOf;\n            subNodes?.forEach(register);\n        };\n        register(configuration);\n    }\n    updateSchema(key, property) {\n        allSettings.properties[key] = property;\n        switch (property.scope) {\n            case 1 /* ConfigurationScope.APPLICATION */:\n                applicationSettings.properties[key] = property;\n                break;\n            case 2 /* ConfigurationScope.MACHINE */:\n                machineSettings.properties[key] = property;\n                break;\n            case 6 /* ConfigurationScope.MACHINE_OVERRIDABLE */:\n                machineOverridableSettings.properties[key] = property;\n                break;\n            case 3 /* ConfigurationScope.WINDOW */:\n                windowSettings.properties[key] = property;\n                break;\n            case 4 /* ConfigurationScope.RESOURCE */:\n                resourceSettings.properties[key] = property;\n                break;\n            case 5 /* ConfigurationScope.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    }\n    registerOverridePropertyPatternKey() {\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        allSettings.patternProperties[OVERRIDE_PROPERTY_PATTERN] = resourceLanguagePropertiesSchema;\n        applicationSettings.patternProperties[OVERRIDE_PROPERTY_PATTERN] = resourceLanguagePropertiesSchema;\n        machineSettings.patternProperties[OVERRIDE_PROPERTY_PATTERN] = resourceLanguagePropertiesSchema;\n        machineOverridableSettings.patternProperties[OVERRIDE_PROPERTY_PATTERN] = resourceLanguagePropertiesSchema;\n        windowSettings.patternProperties[OVERRIDE_PROPERTY_PATTERN] = resourceLanguagePropertiesSchema;\n        resourceSettings.patternProperties[OVERRIDE_PROPERTY_PATTERN] = resourceLanguagePropertiesSchema;\n        this._onDidSchemaChange.fire();\n    }\n    updatePropertyDefaultValue(key, property) {\n        const configurationdefaultOverride = this.configurationDefaultsOverrides.get(key)?.configurationDefaultOverrideValue;\n        let defaultValue = undefined;\n        let defaultSource = undefined;\n        if (configurationdefaultOverride\n            && (!property.disallowConfigurationDefault || !configurationdefaultOverride.source) // Prevent overriding the default value if the property is disallowed to be overridden by configuration defaults from extensions\n        ) {\n            defaultValue = configurationdefaultOverride.value;\n            defaultSource = configurationdefaultOverride.source;\n        }\n        if (types.isUndefined(defaultValue)) {\n            defaultValue = property.defaultDefaultValue;\n            defaultSource = undefined;\n        }\n        if (types.isUndefined(defaultValue)) {\n            defaultValue = getDefaultValue(property.type);\n        }\n        property.default = defaultValue;\n        property.defaultValueSource = defaultSource;\n    }\n}\nconst OVERRIDE_IDENTIFIER_PATTERN = `\\\\[([^\\\\]]+)\\\\]`;\nconst OVERRIDE_IDENTIFIER_REGEX = new RegExp(OVERRIDE_IDENTIFIER_PATTERN, 'g');\nexport const OVERRIDE_PROPERTY_PATTERN = `^(${OVERRIDE_IDENTIFIER_PATTERN})+$`;\nexport const OVERRIDE_PROPERTY_REGEX = new RegExp(OVERRIDE_PROPERTY_PATTERN);\nexport function overrideIdentifiersFromKey(key) {\n    const identifiers = [];\n    if (OVERRIDE_PROPERTY_REGEX.test(key)) {\n        let matches = OVERRIDE_IDENTIFIER_REGEX.exec(key);\n        while (matches?.length) {\n            const identifier = matches[1].trim();\n            if (identifier) {\n                identifiers.push(identifier);\n            }\n            matches = OVERRIDE_IDENTIFIER_REGEX.exec(key);\n        }\n    }\n    return distinct(identifiers);\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, schema) {\n    if (!property.trim()) {\n        return nls.localize('config.property.empty', \"Cannot register an empty property\");\n    }\n    if (OVERRIDE_PROPERTY_REGEX.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    if (schema.policy?.name && configurationRegistry.getPolicyConfigurations().get(schema.policy?.name) !== undefined) {\n        return nls.localize('config.policy.duplicate', \"Cannot register '{0}'. The associated policy {1} is already registered with {2}.\", property, schema.policy?.name, configurationRegistry.getPolicyConfigurations().get(schema.policy?.name));\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 { Emitter } from '../../../base/common/event.js';\nimport { Registry } from '../../../platform/registry/common/platform.js';\nimport { Mimes } from '../../../base/common/mime.js';\nimport { Extensions as ConfigurationExtensions } from '../../../platform/configuration/common/configurationRegistry.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    }\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 this._languages;\n    }\n}\nexport const ModesRegistry = new EditorModesRegistry();\nRegistry.add(Extensions.ModesRegistry, ModesRegistry);\nexport const PLAINTEXT_LANGUAGE_ID = 'plaintext';\nexport const PLAINTEXT_EXTENSION = '.txt';\nModesRegistry.registerLanguage({\n    id: PLAINTEXT_LANGUAGE_ID,\n    extensions: [PLAINTEXT_EXTENSION],\n    aliases: [nls.localize('plainText.alias', \"Plain Text\"), 'text'],\n    mimetypes: [Mimes.text]\n});\nRegistry.as(ConfigurationExtensions.Configuration)\n    .registerDefaultConfigurations([{\n        overrides: {\n            '[plaintext]': {\n                'editor.unicodeHighlight.ambiguousCharacters': false,\n                'editor.unicodeHighlight.invisibleCharacters': 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 { CachedFunction } from '../../../../base/common/cache.js';\nimport { createBracketOrRegExp } from './richEditBrackets.js';\n/**\n * Captures all bracket related configurations for a single language.\n * Immutable.\n*/\nexport class LanguageBracketsConfiguration {\n    constructor(languageId, config) {\n        this.languageId = languageId;\n        const bracketPairs = config.brackets ? filterValidBrackets(config.brackets) : [];\n        const openingBracketInfos = new CachedFunction((bracket) => {\n            const closing = new Set();\n            return {\n                info: new OpeningBracketKind(this, bracket, closing),\n                closing,\n            };\n        });\n        const closingBracketInfos = new CachedFunction((bracket) => {\n            const opening = new Set();\n            const openingColorized = new Set();\n            return {\n                info: new ClosingBracketKind(this, bracket, opening, openingColorized),\n                opening,\n                openingColorized,\n            };\n        });\n        for (const [open, close] of bracketPairs) {\n            const opening = openingBracketInfos.get(open);\n            const closing = closingBracketInfos.get(close);\n            opening.closing.add(closing.info);\n            closing.opening.add(opening.info);\n        }\n        // Treat colorized brackets as brackets, and mark them as colorized.\n        const colorizedBracketPairs = config.colorizedBracketPairs\n            ? filterValidBrackets(config.colorizedBracketPairs)\n            // If not configured: Take all brackets except `<` ... `>`\n            // Many languages set < ... > as bracket pair, even though they also use it as comparison operator.\n            // This leads to problems when colorizing this bracket, so we exclude it if not explicitly configured otherwise.\n            // https://github.com/microsoft/vscode/issues/132476\n            : bracketPairs.filter((p) => !(p[0] === '<' && p[1] === '>'));\n        for (const [open, close] of colorizedBracketPairs) {\n            const opening = openingBracketInfos.get(open);\n            const closing = closingBracketInfos.get(close);\n            opening.closing.add(closing.info);\n            closing.openingColorized.add(opening.info);\n            closing.opening.add(opening.info);\n        }\n        this._openingBrackets = new Map([...openingBracketInfos.cachedValues].map(([k, v]) => [k, v.info]));\n        this._closingBrackets = new Map([...closingBracketInfos.cachedValues].map(([k, v]) => [k, v.info]));\n    }\n    /**\n     * No two brackets have the same bracket text.\n    */\n    get openingBrackets() {\n        return [...this._openingBrackets.values()];\n    }\n    /**\n     * No two brackets have the same bracket text.\n    */\n    get closingBrackets() {\n        return [...this._closingBrackets.values()];\n    }\n    getOpeningBracketInfo(bracketText) {\n        return this._openingBrackets.get(bracketText);\n    }\n    getClosingBracketInfo(bracketText) {\n        return this._closingBrackets.get(bracketText);\n    }\n    getBracketInfo(bracketText) {\n        return this.getOpeningBracketInfo(bracketText) || this.getClosingBracketInfo(bracketText);\n    }\n    getBracketRegExp(options) {\n        const brackets = Array.from([...this._openingBrackets.keys(), ...this._closingBrackets.keys()]);\n        return createBracketOrRegExp(brackets, options);\n    }\n}\nfunction filterValidBrackets(bracketPairs) {\n    return bracketPairs.filter(([open, close]) => open !== '' && close !== '');\n}\nexport class BracketKindBase {\n    constructor(config, bracketText) {\n        this.config = config;\n        this.bracketText = bracketText;\n    }\n    get languageId() {\n        return this.config.languageId;\n    }\n}\nexport class OpeningBracketKind extends BracketKindBase {\n    constructor(config, bracketText, openedBrackets) {\n        super(config, bracketText);\n        this.openedBrackets = openedBrackets;\n        this.isOpeningBracket = true;\n    }\n}\nexport class ClosingBracketKind extends BracketKindBase {\n    constructor(config, bracketText, \n    /**\n     * Non empty array of all opening brackets this bracket closes.\n    */\n    openingBrackets, openingColorizedBrackets) {\n        super(config, bracketText);\n        this.openingBrackets = openingBrackets;\n        this.openingColorizedBrackets = openingColorizedBrackets;\n        this.isOpeningBracket = false;\n    }\n    /**\n     * Checks if this bracket closes the given other bracket.\n     * If the bracket infos come from different configurations, this method will return false.\n    */\n    closes(other) {\n        if (other['config'] !== this.config) {\n            return false;\n        }\n        return this.openingBrackets.has(other);\n    }\n    closesColorized(other) {\n        if (other['config'] !== this.config) {\n            return false;\n        }\n        return this.openingColorizedBrackets.has(other);\n    }\n    getOpeningBrackets() {\n        return [...this.openingBrackets];\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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, toDisposable } from '../../../base/common/lifecycle.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { DEFAULT_WORD_REGEXP, ensureValidWordDefinition } from '../core/wordHelper.js';\nimport { AutoClosingPairs } from './languageConfiguration.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';\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\nimport { ILanguageService } from './language.js';\nimport { registerSingleton } from '../../../platform/instantiation/common/extensions.js';\nimport { PLAINTEXT_LANGUAGE_ID } from './modesRegistry.js';\nimport { LanguageBracketsConfiguration } from './supports/languageBracketsConfiguration.js';\nexport class LanguageConfigurationServiceChangeEvent {\n    constructor(languageId) {\n        this.languageId = languageId;\n    }\n    affects(languageId) {\n        return !this.languageId ? true : this.languageId === languageId;\n    }\n}\nexport const ILanguageConfigurationService = createDecorator('languageConfigurationService');\nlet LanguageConfigurationService = class LanguageConfigurationService extends Disposable {\n    constructor(configurationService, languageService) {\n        super();\n        this.configurationService = configurationService;\n        this.languageService = languageService;\n        this._registry = this._register(new LanguageConfigurationRegistry());\n        this.onDidChangeEmitter = this._register(new Emitter());\n        this.onDidChange = this.onDidChangeEmitter.event;\n        this.configurations = new Map();\n        const languageConfigKeys = new Set(Object.values(customizedLanguageConfigKeys));\n        this._register(this.configurationService.onDidChangeConfiguration((e) => {\n            const globalConfigChanged = e.change.keys.some((k) => languageConfigKeys.has(k));\n            const localConfigChanged = e.change.overrides\n                .filter(([overrideLangName, keys]) => keys.some((k) => languageConfigKeys.has(k)))\n                .map(([overrideLangName]) => overrideLangName);\n            if (globalConfigChanged) {\n                this.configurations.clear();\n                this.onDidChangeEmitter.fire(new LanguageConfigurationServiceChangeEvent(undefined));\n            }\n            else {\n                for (const languageId of localConfigChanged) {\n                    if (this.languageService.isRegisteredLanguageId(languageId)) {\n                        this.configurations.delete(languageId);\n                        this.onDidChangeEmitter.fire(new LanguageConfigurationServiceChangeEvent(languageId));\n                    }\n                }\n            }\n        }));\n        this._register(this._registry.onDidChange((e) => {\n            this.configurations.delete(e.languageId);\n            this.onDidChangeEmitter.fire(new LanguageConfigurationServiceChangeEvent(e.languageId));\n        }));\n    }\n    register(languageId, configuration, priority) {\n        return this._registry.register(languageId, configuration, priority);\n    }\n    getLanguageConfiguration(languageId) {\n        let result = this.configurations.get(languageId);\n        if (!result) {\n            result = computeConfig(languageId, this._registry, this.configurationService, this.languageService);\n            this.configurations.set(languageId, result);\n        }\n        return result;\n    }\n};\nLanguageConfigurationService = __decorate([\n    __param(0, IConfigurationService),\n    __param(1, ILanguageService)\n], LanguageConfigurationService);\nexport { LanguageConfigurationService };\nfunction computeConfig(languageId, registry, configurationService, languageService) {\n    let languageConfig = registry.getLanguageConfiguration(languageId);\n    if (!languageConfig) {\n        if (!languageService.isRegisteredLanguageId(languageId)) {\n            // this happens for the null language, which can be returned by monarch.\n            // Instead of throwing an error, we just return a default config.\n            return new ResolvedLanguageConfiguration(languageId, {});\n        }\n        languageConfig = new ResolvedLanguageConfiguration(languageId, {});\n    }\n    const customizedConfig = getCustomizedLanguageConfig(languageConfig.languageId, configurationService);\n    const data = combineLanguageConfigurations([languageConfig.underlyingConfig, customizedConfig]);\n    const config = new ResolvedLanguageConfiguration(languageConfig.languageId, data);\n    return config;\n}\nconst customizedLanguageConfigKeys = {\n    brackets: 'editor.language.brackets',\n    colorizedBracketPairs: 'editor.language.colorizedBracketPairs'\n};\nfunction getCustomizedLanguageConfig(languageId, configurationService) {\n    const brackets = configurationService.getValue(customizedLanguageConfigKeys.brackets, {\n        overrideIdentifier: languageId,\n    });\n    const colorizedBracketPairs = configurationService.getValue(customizedLanguageConfigKeys.colorizedBracketPairs, {\n        overrideIdentifier: languageId,\n    });\n    return {\n        brackets: validateBracketPairs(brackets),\n        colorizedBracketPairs: validateBracketPairs(colorizedBracketPairs),\n    };\n}\nfunction validateBracketPairs(data) {\n    if (!Array.isArray(data)) {\n        return undefined;\n    }\n    return data.map(pair => {\n        if (!Array.isArray(pair) || pair.length !== 2) {\n            return undefined;\n        }\n        return [pair[0], pair[1]];\n    }).filter((p) => !!p);\n}\nexport function 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}\nclass ComposedLanguageConfiguration {\n    constructor(languageId) {\n        this.languageId = languageId;\n        this._resolved = null;\n        this._entries = [];\n        this._order = 0;\n        this._resolved = null;\n    }\n    register(configuration, priority) {\n        const entry = new LanguageConfigurationContribution(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    getResolvedConfiguration() {\n        if (!this._resolved) {\n            const config = this._resolve();\n            if (config) {\n                this._resolved = new ResolvedLanguageConfiguration(this.languageId, config);\n            }\n        }\n        return this._resolved;\n    }\n    _resolve() {\n        if (this._entries.length === 0) {\n            return null;\n        }\n        this._entries.sort(LanguageConfigurationContribution.cmp);\n        return combineLanguageConfigurations(this._entries.map(e => e.configuration));\n    }\n}\nfunction combineLanguageConfigurations(configs) {\n    let result = {\n        comments: undefined,\n        brackets: undefined,\n        wordPattern: undefined,\n        indentationRules: undefined,\n        onEnterRules: undefined,\n        autoClosingPairs: undefined,\n        surroundingPairs: undefined,\n        autoCloseBefore: undefined,\n        folding: undefined,\n        colorizedBracketPairs: undefined,\n        __electricCharacterSupport: undefined,\n    };\n    for (const entry of configs) {\n        result = {\n            comments: entry.comments || result.comments,\n            brackets: entry.brackets || result.brackets,\n            wordPattern: entry.wordPattern || result.wordPattern,\n            indentationRules: entry.indentationRules || result.indentationRules,\n            onEnterRules: entry.onEnterRules || result.onEnterRules,\n            autoClosingPairs: entry.autoClosingPairs || result.autoClosingPairs,\n            surroundingPairs: entry.surroundingPairs || result.surroundingPairs,\n            autoCloseBefore: entry.autoCloseBefore || result.autoCloseBefore,\n            folding: entry.folding || result.folding,\n            colorizedBracketPairs: entry.colorizedBracketPairs || result.colorizedBracketPairs,\n            __electricCharacterSupport: entry.__electricCharacterSupport || result.__electricCharacterSupport,\n        };\n    }\n    return result;\n}\nclass LanguageConfigurationContribution {\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}\nexport class LanguageConfigurationChangeEvent {\n    constructor(languageId) {\n        this.languageId = languageId;\n    }\n}\nexport class LanguageConfigurationRegistry extends Disposable {\n    constructor() {\n        super();\n        this._entries = new Map();\n        this._onDidChange = this._register(new Emitter());\n        this.onDidChange = this._onDidChange.event;\n        this._register(this.register(PLAINTEXT_LANGUAGE_ID, {\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            colorizedBracketPairs: [],\n            folding: {\n                offSide: true\n            }\n        }, 0));\n    }\n    /**\n     * @param priority Use a higher number for higher priority\n     */\n    register(languageId, configuration, priority = 0) {\n        let entries = this._entries.get(languageId);\n        if (!entries) {\n            entries = new ComposedLanguageConfiguration(languageId);\n            this._entries.set(languageId, entries);\n        }\n        const disposable = entries.register(configuration, priority);\n        this._onDidChange.fire(new LanguageConfigurationChangeEvent(languageId));\n        return toDisposable(() => {\n            disposable.dispose();\n            this._onDidChange.fire(new LanguageConfigurationChangeEvent(languageId));\n        });\n    }\n    getLanguageConfiguration(languageId) {\n        const entries = this._entries.get(languageId);\n        return entries?.getResolvedConfiguration() || null;\n    }\n}\n/**\n * Immutable.\n*/\nexport class ResolvedLanguageConfiguration {\n    constructor(languageId, underlyingConfig) {\n        this.languageId = languageId;\n        this.underlyingConfig = underlyingConfig;\n        this._brackets = null;\n        this._electricCharacter = null;\n        this._onEnterSupport =\n            this.underlyingConfig.brackets ||\n                this.underlyingConfig.indentationRules ||\n                this.underlyingConfig.onEnterRules\n                ? new OnEnterSupport(this.underlyingConfig)\n                : null;\n        this.comments = ResolvedLanguageConfiguration._handleComments(this.underlyingConfig);\n        this.characterPair = new CharacterPairSupport(this.underlyingConfig);\n        this.wordDefinition = this.underlyingConfig.wordPattern || DEFAULT_WORD_REGEXP;\n        this.indentationRules = this.underlyingConfig.indentationRules;\n        if (this.underlyingConfig.indentationRules) {\n            this.indentRulesSupport = new IndentRulesSupport(this.underlyingConfig.indentationRules);\n        }\n        else {\n            this.indentRulesSupport = null;\n        }\n        this.foldingRules = this.underlyingConfig.folding || {};\n        this.bracketsNew = new LanguageBracketsConfiguration(languageId, this.underlyingConfig);\n    }\n    getWordDefinition() {\n        return ensureValidWordDefinition(this.wordDefinition);\n    }\n    get brackets() {\n        if (!this._brackets && this.underlyingConfig.brackets) {\n            this._brackets = new RichEditBrackets(this.languageId, this.underlyingConfig.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    getAutoClosingPairs() {\n        return new AutoClosingPairs(this.characterPair.getAutoClosingPairs());\n    }\n    getAutoCloseBeforeSet(forQuotes) {\n        return this.characterPair.getAutoCloseBeforeSet(forQuotes);\n    }\n    getSurroundingPairs() {\n        return this.characterPair.getSurroundingPairs();\n    }\n    static _handleComments(conf) {\n        const commentRule = conf.comments;\n        if (!commentRule) {\n            return null;\n        }\n        // comment configuration\n        const comments = {};\n        if (commentRule.lineComment) {\n            comments.lineCommentToken = commentRule.lineComment;\n        }\n        if (commentRule.blockComment) {\n            const [blockStart, blockEnd] = commentRule.blockComment;\n            comments.blockCommentStartToken = blockStart;\n            comments.blockCommentEndToken = blockEnd;\n        }\n        return comments;\n    }\n}\nregisterSingleton(ILanguageConfigurationService, LanguageConfigurationService, 1 /* InstantiationType.Delayed */);\n","/*---------------------------------------------------------------------------------------------\n *  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//\nclass Debug {\n    static Assert(condition, message) {\n        if (!condition) {\n            throw new Error(message);\n        }\n    }\n}\nclass 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 * MarkNextChange() 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 /* Constants.MAX_SAFE_SMALL_INTEGER */;\n        this.m_modifiedStart = 1073741824 /* Constants.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 /* Constants.MAX_SAFE_SMALL_INTEGER */;\n        this.m_modifiedStart = 1073741824 /* Constants.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        this._originalSequence = originalSequence;\n        this._modifiedSequence = modifiedSequence;\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    ElementsAreStrictEqual(originalIndex, newIndex) {\n        if (!this.ElementsAreEqual(originalIndex, newIndex)) {\n            return false;\n        }\n        const originalElement = LcsDiff._getStrictElement(this._originalSequence, originalIndex);\n        const modifiedElement = LcsDiff._getStrictElement(this._modifiedSequence, newIndex);\n        return (originalElement === modifiedElement);\n    }\n    static _getStrictElement(sequence, index) {\n        if (typeof sequence.getStrictElement === 'function') {\n            return sequence.getStrictElement(index);\n        }\n        return null;\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 didn'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 /* Constants.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 /* Constants.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 /* LocalConstants.MaxDifferencesHistory */ > 0 && numDifferences <= (1447 /* LocalConstants.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 /* LocalConstants.MaxDifferencesHistory */ > 0 && numDifferences <= (1447 /* LocalConstants.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 quitting 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 /* LocalConstants.MaxDifferencesHistory */ > 0 && numDifferences <= (1447 /* LocalConstants.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 /* LocalConstants.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                const startStrictEqual = this.ElementsAreStrictEqual(change.originalStart, change.modifiedStart);\n                const endStrictEqual = this.ElementsAreStrictEqual(change.originalStart + change.originalLength, change.modifiedStart + change.modifiedLength);\n                if (endStrictEqual && !startStrictEqual) {\n                    // moving the change down would create an equal change, but the elements are not strict equal\n                    break;\n                }\n                change.originalStart++;\n                change.modifiedStart++;\n            }\n            const 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        const 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","/*---------------------------------------------------------------------------------------------\n *  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 /* Constants.MAX_UINT_8 */) {\n        return 255 /* Constants.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 /* Constants.MAX_UINT_32 */) {\n        return 4294967295 /* Constants.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 { 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        const defaultValue = toUint8(_defaultValue);\n        this._defaultValue = defaultValue;\n        this._asciiMap = CharacterClassifier._createAsciiMap(defaultValue);\n        this._map = new Map();\n    }\n    static _createAsciiMap(defaultValue) {\n        const asciiMap = new Uint8Array(256);\n        asciiMap.fill(defaultValue);\n        return asciiMap;\n    }\n    set(charCode, _value) {\n        const 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    clear() {\n        this._asciiMap.fill(this._defaultValue);\n        this._map.clear();\n    }\n}\nexport class CharacterSet {\n    constructor() {\n        this._actual = new CharacterClassifier(0 /* Boolean.False */);\n    }\n    add(charCode) {\n        this._actual.set(charCode, 1 /* Boolean.True */);\n    }\n    has(charCode) {\n        return (this._actual.get(charCode) === 1 /* Boolean.True */);\n    }\n    clear() {\n        return this._actual.clear();\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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';\nclass 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 /* State.Invalid */;\n        for (let i = 0, len = edges.length; i < len; i++) {\n            const [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        const states = new Uint8Matrix(maxState, maxCharCode, 0 /* State.Invalid */);\n        for (let i = 0, len = edges.length; i < len; i++) {\n            const [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 /* State.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 /* State.Start */, 104 /* CharCode.h */, 2 /* State.H */],\n            [1 /* State.Start */, 72 /* CharCode.H */, 2 /* State.H */],\n            [1 /* State.Start */, 102 /* CharCode.f */, 6 /* State.F */],\n            [1 /* State.Start */, 70 /* CharCode.F */, 6 /* State.F */],\n            [2 /* State.H */, 116 /* CharCode.t */, 3 /* State.HT */],\n            [2 /* State.H */, 84 /* CharCode.T */, 3 /* State.HT */],\n            [3 /* State.HT */, 116 /* CharCode.t */, 4 /* State.HTT */],\n            [3 /* State.HT */, 84 /* CharCode.T */, 4 /* State.HTT */],\n            [4 /* State.HTT */, 112 /* CharCode.p */, 5 /* State.HTTP */],\n            [4 /* State.HTT */, 80 /* CharCode.P */, 5 /* State.HTTP */],\n            [5 /* State.HTTP */, 115 /* CharCode.s */, 9 /* State.BeforeColon */],\n            [5 /* State.HTTP */, 83 /* CharCode.S */, 9 /* State.BeforeColon */],\n            [5 /* State.HTTP */, 58 /* CharCode.Colon */, 10 /* State.AfterColon */],\n            [6 /* State.F */, 105 /* CharCode.i */, 7 /* State.FI */],\n            [6 /* State.F */, 73 /* CharCode.I */, 7 /* State.FI */],\n            [7 /* State.FI */, 108 /* CharCode.l */, 8 /* State.FIL */],\n            [7 /* State.FI */, 76 /* CharCode.L */, 8 /* State.FIL */],\n            [8 /* State.FIL */, 101 /* CharCode.e */, 9 /* State.BeforeColon */],\n            [8 /* State.FIL */, 69 /* CharCode.E */, 9 /* State.BeforeColon */],\n            [9 /* State.BeforeColon */, 58 /* CharCode.Colon */, 10 /* State.AfterColon */],\n            [10 /* State.AfterColon */, 47 /* CharCode.Slash */, 11 /* State.AlmostThere */],\n            [11 /* State.AlmostThere */, 47 /* CharCode.Slash */, 12 /* State.End */],\n        ]);\n    }\n    return _stateMachine;\n}\nlet _classifier = null;\nfunction getClassifier() {\n    if (_classifier === null) {\n        _classifier = new CharacterClassifier(0 /* CharacterClass.None */);\n        // allow-any-unicode-next-line\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 /* CharacterClass.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 /* CharacterClass.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 /* CharacterClass.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 /* CharCode.OpenParen */ && lastCharCodeInLink === 41 /* CharCode.CloseParen */)\n                || (charCodeBeforeLink === 91 /* CharCode.OpenSquareBracket */ && lastCharCodeInLink === 93 /* CharCode.CloseSquareBracket */)\n                || (charCodeBeforeLink === 123 /* CharCode.OpenCurlyBrace */ && lastCharCodeInLink === 125 /* CharCode.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        const 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 /* State.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 /* State.Accept */) {\n                    let chClass;\n                    switch (chCode) {\n                        case 40 /* CharCode.OpenParen */:\n                            hasOpenParens = true;\n                            chClass = 0 /* CharacterClass.None */;\n                            break;\n                        case 41 /* CharCode.CloseParen */:\n                            chClass = (hasOpenParens ? 0 /* CharacterClass.None */ : 1 /* CharacterClass.ForceTermination */);\n                            break;\n                        case 91 /* CharCode.OpenSquareBracket */:\n                            inSquareBrackets = true;\n                            hasOpenSquareBracket = true;\n                            chClass = 0 /* CharacterClass.None */;\n                            break;\n                        case 93 /* CharCode.CloseSquareBracket */:\n                            inSquareBrackets = false;\n                            chClass = (hasOpenSquareBracket ? 0 /* CharacterClass.None */ : 1 /* CharacterClass.ForceTermination */);\n                            break;\n                        case 123 /* CharCode.OpenCurlyBrace */:\n                            hasOpenCurlyBracket = true;\n                            chClass = 0 /* CharacterClass.None */;\n                            break;\n                        case 125 /* CharCode.CloseCurlyBrace */:\n                            chClass = (hasOpenCurlyBracket ? 0 /* CharacterClass.None */ : 1 /* CharacterClass.ForceTermination */);\n                            break;\n                        // The following three rules make it that ' or \" or ` are allowed inside links\n                        // only if the link is wrapped by some other quote character\n                        case 39 /* CharCode.SingleQuote */:\n                        case 34 /* CharCode.DoubleQuote */:\n                        case 96 /* CharCode.BackTick */:\n                            if (linkBeginChCode === chCode) {\n                                chClass = 1 /* CharacterClass.ForceTermination */;\n                            }\n                            else if (linkBeginChCode === 39 /* CharCode.SingleQuote */ || linkBeginChCode === 34 /* CharCode.DoubleQuote */ || linkBeginChCode === 96 /* CharCode.BackTick */) {\n                                chClass = 0 /* CharacterClass.None */;\n                            }\n                            else {\n                                chClass = 1 /* CharacterClass.ForceTermination */;\n                            }\n                            break;\n                        case 42 /* CharCode.Asterisk */:\n                            // `*` terminates a link if the link began with `*`\n                            chClass = (linkBeginChCode === 42 /* CharCode.Asterisk */) ? 1 /* CharacterClass.ForceTermination */ : 0 /* CharacterClass.None */;\n                            break;\n                        case 124 /* CharCode.Pipe */:\n                            // `|` terminates a link if the link began with `|`\n                            chClass = (linkBeginChCode === 124 /* CharCode.Pipe */) ? 1 /* CharacterClass.ForceTermination */ : 0 /* CharacterClass.None */;\n                            break;\n                        case 32 /* CharCode.Space */:\n                            // ` ` allow space in between [ and ]\n                            chClass = (inSquareBrackets ? 0 /* CharacterClass.None */ : 1 /* CharacterClass.ForceTermination */);\n                            break;\n                        default:\n                            chClass = classifier.get(chCode);\n                    }\n                    // Check if character terminates link\n                    if (chClass === 1 /* CharacterClass.ForceTermination */) {\n                        result.push(LinkComputer._createLink(classifier, line, i, linkBeginIndex, j));\n                        resetStateMachine = true;\n                    }\n                }\n                else if (state === 12 /* State.End */) {\n                    let chClass;\n                    if (chCode === 91 /* CharCode.OpenSquareBracket */) {\n                        // Allow for the authority part to contain ipv6 addresses which contain [ and ]\n                        hasOpenSquareBracket = true;\n                        chClass = 0 /* CharacterClass.None */;\n                    }\n                    else {\n                        chClass = classifier.get(chCode);\n                    }\n                    // Check if character terminates link\n                    if (chClass === 1 /* CharacterClass.ForceTermination */) {\n                        resetStateMachine = true;\n                    }\n                    else {\n                        state = 13 /* State.Accept */;\n                    }\n                }\n                else {\n                    state = stateMachine.nextState(state, chCode);\n                    if (state === 0 /* State.Invalid */) {\n                        resetStateMachine = true;\n                    }\n                }\n                if (resetStateMachine) {\n                    state = 1 /* State.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 /* State.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    static { this.INSTANCE = new BasicInplaceReplace(); }\n    navigateValueSet(range1, text1, range2, text2, up) {\n        if (range1 && text1) {\n            const result = this.doNavigateValueSet(text1, up);\n            if (result) {\n                return {\n                    range: range1,\n                    value: result\n                };\n            }\n        }\n        if (range2 && text2) {\n            const 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        const 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        const precision = Math.pow(10, value.length - (value.lastIndexOf('.') + 1));\n        let n1 = Number(value);\n        const 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}\n","/*---------------------------------------------------------------------------------------------\n *  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 EditorWorkerHost {\n    static { this.CHANNEL_NAME = 'editorWorkerHost'; }\n    static getChannel(workerServer) {\n        return workerServer.getChannel(EditorWorkerHost.CHANNEL_NAME);\n    }\n    static setChannel(workerClient, obj) {\n        workerClient.setChannel(EditorWorkerHost.CHANNEL_NAME, obj);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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;\nclass ResourceMapEntry {\n    constructor(uri, value) {\n        this.uri = uri;\n        this.value = value;\n    }\n}\nfunction isEntries(arg) {\n    return Array.isArray(arg);\n}\nexport class ResourceMap {\n    static { this.defaultToKey = (resource) => resource.toString(); }\n    constructor(arg, toKey) {\n        this[_a] = 'ResourceMap';\n        if (arg instanceof ResourceMap) {\n            this.map = new Map(arg.map);\n            this.toKey = toKey ?? ResourceMap.defaultToKey;\n        }\n        else if (isEntries(arg)) {\n            this.map = new Map();\n            this.toKey = toKey ?? ResourceMap.defaultToKey;\n            for (const [resource, value] of arg) {\n                this.set(resource, value);\n            }\n        }\n        else {\n            this.map = new Map();\n            this.toKey = arg ?? ResourceMap.defaultToKey;\n        }\n    }\n    set(resource, value) {\n        this.map.set(this.toKey(resource), new ResourceMapEntry(resource, value));\n        return this;\n    }\n    get(resource) {\n        return this.map.get(this.toKey(resource))?.value;\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 (const [_, entry] of this.map) {\n            clb(entry.value, entry.uri, this);\n        }\n    }\n    *values() {\n        for (const entry of this.map.values()) {\n            yield entry.value;\n        }\n    }\n    *keys() {\n        for (const entry of this.map.values()) {\n            yield entry.uri;\n        }\n    }\n    *entries() {\n        for (const entry of this.map.values()) {\n            yield [entry.uri, entry.value];\n        }\n    }\n    *[(_a = Symbol.toStringTag, Symbol.iterator)]() {\n        for (const [, entry] of this.map) {\n            yield [entry.uri, entry.value];\n        }\n    }\n}\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        return this._head?.value;\n    }\n    get last() {\n        return this._tail?.value;\n    }\n    has(key) {\n        return this._map.has(key);\n    }\n    get(key, touch = 0 /* Touch.None */) {\n        const item = this._map.get(key);\n        if (!item) {\n            return undefined;\n        }\n        if (touch !== 0 /* Touch.None */) {\n            this.touch(item, touch);\n        }\n        return item.value;\n    }\n    set(key, value, touch = 0 /* Touch.None */) {\n        let item = this._map.get(key);\n        if (item) {\n            item.value = value;\n            if (touch !== 0 /* Touch.None */) {\n                this.touch(item, touch);\n            }\n        }\n        else {\n            item = { key, value, next: undefined, previous: undefined };\n            switch (touch) {\n                case 0 /* Touch.None */:\n                    this.addItemLast(item);\n                    break;\n                case 1 /* Touch.AsOld */:\n                    this.addItemFirst(item);\n                    break;\n                case 2 /* Touch.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    trimNew(newSize) {\n        if (newSize >= this.size) {\n            return;\n        }\n        if (newSize === 0) {\n            this.clear();\n            return;\n        }\n        let current = this._tail;\n        let currentSize = this.size;\n        while (current && currentSize > newSize) {\n            this._map.delete(current.key);\n            current = current.previous;\n            currentSize--;\n        }\n        this._tail = current;\n        this._size = currentSize;\n        if (current) {\n            current.next = 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 /* Touch.AsOld */ && touch !== 2 /* Touch.AsNew */)) {\n            return;\n        }\n        if (touch === 1 /* Touch.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 /* Touch.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}\nclass Cache 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 /* Touch.AsNew */) {\n        return super.get(key, touch);\n    }\n    peek(key) {\n        return super.get(key, 0 /* Touch.None */);\n    }\n    set(key, value) {\n        super.set(key, value, 2 /* Touch.AsNew */);\n        return this;\n    }\n    checkTrim() {\n        if (this.size > this._limit) {\n            this.trim(Math.round(this._limit * this._ratio));\n        }\n    }\n}\nexport class LRUCache extends Cache {\n    constructor(limit, ratio = 1) {\n        super(limit, ratio);\n    }\n    trim(newSize) {\n        this.trimOld(newSize);\n    }\n    set(key, value) {\n        super.set(key, value);\n        this.checkTrim();\n        return this;\n    }\n}\n/**\n * A map that allows access both by keys and values.\n * **NOTE**: values need to be unique.\n */\nexport class BidirectionalMap {\n    constructor(entries) {\n        this._m1 = new Map();\n        this._m2 = new Map();\n        if (entries) {\n            for (const [key, value] of entries) {\n                this.set(key, value);\n            }\n        }\n    }\n    clear() {\n        this._m1.clear();\n        this._m2.clear();\n    }\n    set(key, value) {\n        this._m1.set(key, value);\n        this._m2.set(value, key);\n    }\n    get(key) {\n        return this._m1.get(key);\n    }\n    getKey(value) {\n        return this._m2.get(value);\n    }\n    delete(key) {\n        const value = this._m1.get(key);\n        if (value === undefined) {\n            return false;\n        }\n        this._m1.delete(key);\n        this._m2.delete(value);\n        return true;\n    }\n    keys() {\n        return this._m1.keys();\n    }\n    values() {\n        return this._m1.values();\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    get(key) {\n        const values = this.map.get(key);\n        if (!values) {\n            return new Set();\n        }\n        return values;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 '../../../base/common/map.js';\nimport { CharacterClassifier } from './characterClassifier.js';\nexport class WordCharacterClassifier extends CharacterClassifier {\n    constructor(wordSeparators, intlSegmenterLocales) {\n        super(0 /* WordCharacterClass.Regular */);\n        this._segmenter = null;\n        this._cachedLine = null;\n        this._cachedSegments = [];\n        this.intlSegmenterLocales = intlSegmenterLocales;\n        if (this.intlSegmenterLocales.length > 0) {\n            this._segmenter = new Intl.Segmenter(this.intlSegmenterLocales, { granularity: 'word' });\n        }\n        else {\n            this._segmenter = null;\n        }\n        for (let i = 0, len = wordSeparators.length; i < len; i++) {\n            this.set(wordSeparators.charCodeAt(i), 2 /* WordCharacterClass.WordSeparator */);\n        }\n        this.set(32 /* CharCode.Space */, 1 /* WordCharacterClass.Whitespace */);\n        this.set(9 /* CharCode.Tab */, 1 /* WordCharacterClass.Whitespace */);\n    }\n    findPrevIntlWordBeforeOrAtOffset(line, offset) {\n        let candidate = null;\n        for (const segment of this._getIntlSegmenterWordsOnLine(line)) {\n            if (segment.index > offset) {\n                break;\n            }\n            candidate = segment;\n        }\n        return candidate;\n    }\n    findNextIntlWordAtOrAfterOffset(lineContent, offset) {\n        for (const segment of this._getIntlSegmenterWordsOnLine(lineContent)) {\n            if (segment.index < offset) {\n                continue;\n            }\n            return segment;\n        }\n        return null;\n    }\n    _getIntlSegmenterWordsOnLine(line) {\n        if (!this._segmenter) {\n            return [];\n        }\n        // Check if the line has changed from the previous call\n        if (this._cachedLine === line) {\n            return this._cachedSegments;\n        }\n        // Update the cache with the new line\n        this._cachedLine = line;\n        this._cachedSegments = this._filterWordSegments(this._segmenter.segment(line));\n        return this._cachedSegments;\n    }\n    _filterWordSegments(segments) {\n        const result = [];\n        for (const segment of segments) {\n            if (this._isWordLike(segment)) {\n                result.push(segment);\n            }\n        }\n        return result;\n    }\n    _isWordLike(segment) {\n        if (segment.isWordLike) {\n            return true;\n        }\n        return false;\n    }\n}\nconst wordClassifierCache = new LRUCache(10);\nexport function getMapForWordSeparators(wordSeparators, intlSegmenterLocales) {\n    const key = `${wordSeparators}/${intlSegmenterLocales.join(',')}`;\n    let result = wordClassifierCache.get(key);\n    if (!result) {\n        result = new WordCharacterClassifier(wordSeparators, intlSegmenterLocales);\n        wordClassifierCache.set(key, 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 { equals } from '../../base/common/objects.js';\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 * Vertical Lane in the glyph margin of the editor.\n */\nexport var GlyphMarginLane;\n(function (GlyphMarginLane) {\n    GlyphMarginLane[GlyphMarginLane[\"Left\"] = 1] = \"Left\";\n    GlyphMarginLane[GlyphMarginLane[\"Center\"] = 2] = \"Center\";\n    GlyphMarginLane[GlyphMarginLane[\"Right\"] = 3] = \"Right\";\n})(GlyphMarginLane || (GlyphMarginLane = {}));\nexport var InjectedTextCursorStops;\n(function (InjectedTextCursorStops) {\n    InjectedTextCursorStops[InjectedTextCursorStops[\"Both\"] = 0] = \"Both\";\n    InjectedTextCursorStops[InjectedTextCursorStops[\"Right\"] = 1] = \"Right\";\n    InjectedTextCursorStops[InjectedTextCursorStops[\"Left\"] = 2] = \"Left\";\n    InjectedTextCursorStops[InjectedTextCursorStops[\"None\"] = 3] = \"None\";\n})(InjectedTextCursorStops || (InjectedTextCursorStops = {}));\nexport class TextModelResolvedOptions {\n    get originalIndentSize() {\n        return this._indentSizeIsTabSize ? 'tabSize' : this.indentSize;\n    }\n    /**\n     * @internal\n     */\n    constructor(src) {\n        this._textModelResolvedOptionsBrand = undefined;\n        this.tabSize = Math.max(1, src.tabSize | 0);\n        if (src.indentSize === 'tabSize') {\n            this.indentSize = this.tabSize;\n            this._indentSizeIsTabSize = true;\n        }\n        else {\n            this.indentSize = Math.max(1, src.indentSize | 0);\n            this._indentSizeIsTabSize = false;\n        }\n        this.insertSpaces = Boolean(src.insertSpaces);\n        this.defaultEOL = src.defaultEOL | 0;\n        this.trimAutoWhitespace = Boolean(src.trimAutoWhitespace);\n        this.bracketPairColorizationOptions = src.bracketPairColorizationOptions;\n    }\n    /**\n     * @internal\n     */\n    equals(other) {\n        return (this.tabSize === other.tabSize\n            && this._indentSizeIsTabSize === other._indentSizeIsTabSize\n            && this.indentSize === other.indentSize\n            && this.insertSpaces === other.insertSpaces\n            && this.defaultEOL === other.defaultEOL\n            && this.trimAutoWhitespace === other.trimAutoWhitespace\n            && equals(this.bracketPairColorizationOptions, other.bracketPairColorizationOptions));\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._findMatchBrand = undefined;\n        this.range = range;\n        this.matches = matches;\n    }\n}\n/**\n * @internal\n */\nexport function isITextSnapshot(obj) {\n    return (obj && typeof obj.read === 'function');\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 SearchData {\n    constructor(regex, wordSeparators, simpleSearch) {\n        this.regex = regex;\n        this.wordSeparators = wordSeparators;\n        this.simpleSearch = simpleSearch;\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 * @internal\n */\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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { getMapForWordSeparators } from '../core/wordCharacterClassifier.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { FindMatch, SearchData } 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 === 10 /* CharCode.LineFeed */) {\n            return true;\n        }\n        if (chCode === 92 /* CharCode.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 /* CharCode.n */ || nextChCode === 114 /* CharCode.r */ || nextChCode === 87 /* CharCode.W */) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\nexport function createFindMatch(range, rawMatches, captureMatches) {\n    if (!captureMatches) {\n        return new FindMatch(range, null);\n    }\n    const 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        const lineFeedsOffsets = [];\n        let lineFeedsOffsetsLen = 0;\n        for (let i = 0, textLen = text.length; i < textLen; i++) {\n            if (text.charCodeAt(i) === 10 /* CharCode.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            const lineFeedCountBeforeEndOfMatch = lfCounter.findLineFeedCountBeforeOffset(matchIndex + match0.length);\n            const 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 /* EndOfLinePreference.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 /* EndOfLinePreference.LF */);\n        const lfCounter = (model.getEOL() === '\\r\\n' ? new LineFeedCounter(text) : null);\n        searcher.reset(searchStart.column - 1);\n        const 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 /* WordCharacterClass.Regular */) {\n        // The character before the match is a word separator\n        return true;\n    }\n    if (charBefore === 13 /* CharCode.CarriageReturn */ || charBefore === 10 /* CharCode.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 /* WordCharacterClass.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 /* WordCharacterClass.Regular */) {\n        // The character after the match is a word separator\n        return true;\n    }\n    if (charAfter === 13 /* CharCode.CarriageReturn */ || charAfter === 10 /* CharCode.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 /* WordCharacterClass.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 { Range } from '../core/range.js';\nimport { Searcher } from '../model/textModelSearch.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { assertNever } from '../../../base/common/assert.js';\nimport { DEFAULT_WORD_REGEXP, getWordAtText } from '../core/wordHelper.js';\nexport class UnicodeTextModelHighlighter {\n    static computeUnicodeHighlights(model, options, range) {\n        const startLine = range ? range.startLineNumber : 1;\n        const endLine = range ? range.endLineNumber : model.getLineCount();\n        const codePointHighlighter = new CodePointHighlighter(options);\n        const candidates = codePointHighlighter.getCandidateCodePoints();\n        let regex;\n        if (candidates === 'allNonBasicAscii') {\n            regex = new RegExp('[^\\\\t\\\\n\\\\r\\\\x20-\\\\x7E]', 'g');\n        }\n        else {\n            regex = new RegExp(`${buildRegExpCharClassExpr(Array.from(candidates))}`, 'g');\n        }\n        const searcher = new Searcher(null, regex);\n        const ranges = [];\n        let hasMore = false;\n        let m;\n        let ambiguousCharacterCount = 0;\n        let invisibleCharacterCount = 0;\n        let nonBasicAsciiCharacterCount = 0;\n        forLoop: for (let lineNumber = startLine, lineCount = endLine; lineNumber <= lineCount; lineNumber++) {\n            const lineContent = model.getLineContent(lineNumber);\n            const lineLength = lineContent.length;\n            // Reset regex to search from the beginning\n            searcher.reset(0);\n            do {\n                m = searcher.next(lineContent);\n                if (m) {\n                    let startIndex = m.index;\n                    let endIndex = m.index + m[0].length;\n                    // Extend range to entire code point\n                    if (startIndex > 0) {\n                        const charCodeBefore = lineContent.charCodeAt(startIndex - 1);\n                        if (strings.isHighSurrogate(charCodeBefore)) {\n                            startIndex--;\n                        }\n                    }\n                    if (endIndex + 1 < lineLength) {\n                        const charCodeBefore = lineContent.charCodeAt(endIndex - 1);\n                        if (strings.isHighSurrogate(charCodeBefore)) {\n                            endIndex++;\n                        }\n                    }\n                    const str = lineContent.substring(startIndex, endIndex);\n                    let word = getWordAtText(startIndex + 1, DEFAULT_WORD_REGEXP, lineContent, 0);\n                    if (word && word.endColumn <= startIndex + 1) {\n                        // The word does not include the problematic character, ignore the word\n                        word = null;\n                    }\n                    const highlightReason = codePointHighlighter.shouldHighlightNonBasicASCII(str, word ? word.word : null);\n                    if (highlightReason !== 0 /* SimpleHighlightReason.None */) {\n                        if (highlightReason === 3 /* SimpleHighlightReason.Ambiguous */) {\n                            ambiguousCharacterCount++;\n                        }\n                        else if (highlightReason === 2 /* SimpleHighlightReason.Invisible */) {\n                            invisibleCharacterCount++;\n                        }\n                        else if (highlightReason === 1 /* SimpleHighlightReason.NonBasicASCII */) {\n                            nonBasicAsciiCharacterCount++;\n                        }\n                        else {\n                            assertNever(highlightReason);\n                        }\n                        const MAX_RESULT_LENGTH = 1000;\n                        if (ranges.length >= MAX_RESULT_LENGTH) {\n                            hasMore = true;\n                            break forLoop;\n                        }\n                        ranges.push(new Range(lineNumber, startIndex + 1, lineNumber, endIndex + 1));\n                    }\n                }\n            } while (m);\n        }\n        return {\n            ranges,\n            hasMore,\n            ambiguousCharacterCount,\n            invisibleCharacterCount,\n            nonBasicAsciiCharacterCount\n        };\n    }\n    static computeUnicodeHighlightReason(char, options) {\n        const codePointHighlighter = new CodePointHighlighter(options);\n        const reason = codePointHighlighter.shouldHighlightNonBasicASCII(char, null);\n        switch (reason) {\n            case 0 /* SimpleHighlightReason.None */:\n                return null;\n            case 2 /* SimpleHighlightReason.Invisible */:\n                return { kind: 1 /* UnicodeHighlighterReasonKind.Invisible */ };\n            case 3 /* SimpleHighlightReason.Ambiguous */: {\n                const codePoint = char.codePointAt(0);\n                const primaryConfusable = codePointHighlighter.ambiguousCharacters.getPrimaryConfusable(codePoint);\n                const notAmbiguousInLocales = strings.AmbiguousCharacters.getLocales().filter((l) => !strings.AmbiguousCharacters.getInstance(new Set([...options.allowedLocales, l])).isAmbiguous(codePoint));\n                return { kind: 0 /* UnicodeHighlighterReasonKind.Ambiguous */, confusableWith: String.fromCodePoint(primaryConfusable), notAmbiguousInLocales };\n            }\n            case 1 /* SimpleHighlightReason.NonBasicASCII */:\n                return { kind: 2 /* UnicodeHighlighterReasonKind.NonBasicAscii */ };\n        }\n    }\n}\nfunction buildRegExpCharClassExpr(codePoints, flags) {\n    const src = `[${strings.escapeRegExpCharacters(codePoints.map((i) => String.fromCodePoint(i)).join(''))}]`;\n    return src;\n}\nclass CodePointHighlighter {\n    constructor(options) {\n        this.options = options;\n        this.allowedCodePoints = new Set(options.allowedCodePoints);\n        this.ambiguousCharacters = strings.AmbiguousCharacters.getInstance(new Set(options.allowedLocales));\n    }\n    getCandidateCodePoints() {\n        if (this.options.nonBasicASCII) {\n            return 'allNonBasicAscii';\n        }\n        const set = new Set();\n        if (this.options.invisibleCharacters) {\n            for (const cp of strings.InvisibleCharacters.codePoints) {\n                if (!isAllowedInvisibleCharacter(String.fromCodePoint(cp))) {\n                    set.add(cp);\n                }\n            }\n        }\n        if (this.options.ambiguousCharacters) {\n            for (const cp of this.ambiguousCharacters.getConfusableCodePoints()) {\n                set.add(cp);\n            }\n        }\n        for (const cp of this.allowedCodePoints) {\n            set.delete(cp);\n        }\n        return set;\n    }\n    shouldHighlightNonBasicASCII(character, wordContext) {\n        const codePoint = character.codePointAt(0);\n        if (this.allowedCodePoints.has(codePoint)) {\n            return 0 /* SimpleHighlightReason.None */;\n        }\n        if (this.options.nonBasicASCII) {\n            return 1 /* SimpleHighlightReason.NonBasicASCII */;\n        }\n        let hasBasicASCIICharacters = false;\n        let hasNonConfusableNonBasicAsciiCharacter = false;\n        if (wordContext) {\n            for (const char of wordContext) {\n                const codePoint = char.codePointAt(0);\n                const isBasicASCII = strings.isBasicASCII(char);\n                hasBasicASCIICharacters = hasBasicASCIICharacters || isBasicASCII;\n                if (!isBasicASCII &&\n                    !this.ambiguousCharacters.isAmbiguous(codePoint) &&\n                    !strings.InvisibleCharacters.isInvisibleCharacter(codePoint)) {\n                    hasNonConfusableNonBasicAsciiCharacter = true;\n                }\n            }\n        }\n        if (\n        /* Don't allow mixing weird looking characters with ASCII */ !hasBasicASCIICharacters &&\n            /* Is there an obviously weird looking character? */ hasNonConfusableNonBasicAsciiCharacter) {\n            return 0 /* SimpleHighlightReason.None */;\n        }\n        if (this.options.invisibleCharacters) {\n            // TODO check for emojis\n            if (!isAllowedInvisibleCharacter(character) && strings.InvisibleCharacters.isInvisibleCharacter(codePoint)) {\n                return 2 /* SimpleHighlightReason.Invisible */;\n            }\n        }\n        if (this.options.ambiguousCharacters) {\n            if (this.ambiguousCharacters.isAmbiguous(codePoint)) {\n                return 3 /* SimpleHighlightReason.Ambiguous */;\n            }\n        }\n        return 0 /* SimpleHighlightReason.None */;\n    }\n}\nfunction isAllowedInvisibleCharacter(character) {\n    return character === ' ' || character === '\\n' || character === '\\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 *--------------------------------------------------------------------------------------------*/\nexport class LinesDiff {\n    constructor(changes, \n    /**\n     * Sorted by original line ranges.\n     * The original line ranges and the modified line ranges must be disjoint (but can be touching).\n     */\n    moves, \n    /**\n     * Indicates if the time out was reached.\n     * In that case, the diffs might be an approximation and the user should be asked to rerun the diff with more time.\n     */\n    hitTimeout) {\n        this.changes = changes;\n        this.moves = moves;\n        this.hitTimeout = hitTimeout;\n    }\n}\nexport class MovedText {\n    constructor(lineRangeMapping, changes) {\n        this.lineRangeMapping = lineRangeMapping;\n        this.changes = changes;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { BugIndicatingError } from '../../../base/common/errors.js';\n/**\n * A range of offsets (0-based).\n*/\nexport class OffsetRange {\n    static addRange(range, sortedRanges) {\n        let i = 0;\n        while (i < sortedRanges.length && sortedRanges[i].endExclusive < range.start) {\n            i++;\n        }\n        let j = i;\n        while (j < sortedRanges.length && sortedRanges[j].start <= range.endExclusive) {\n            j++;\n        }\n        if (i === j) {\n            sortedRanges.splice(i, 0, range);\n        }\n        else {\n            const start = Math.min(range.start, sortedRanges[i].start);\n            const end = Math.max(range.endExclusive, sortedRanges[j - 1].endExclusive);\n            sortedRanges.splice(i, j - i, new OffsetRange(start, end));\n        }\n    }\n    static tryCreate(start, endExclusive) {\n        if (start > endExclusive) {\n            return undefined;\n        }\n        return new OffsetRange(start, endExclusive);\n    }\n    static ofLength(length) {\n        return new OffsetRange(0, length);\n    }\n    static ofStartAndLength(start, length) {\n        return new OffsetRange(start, start + length);\n    }\n    constructor(start, endExclusive) {\n        this.start = start;\n        this.endExclusive = endExclusive;\n        if (start > endExclusive) {\n            throw new BugIndicatingError(`Invalid range: ${this.toString()}`);\n        }\n    }\n    get isEmpty() {\n        return this.start === this.endExclusive;\n    }\n    delta(offset) {\n        return new OffsetRange(this.start + offset, this.endExclusive + offset);\n    }\n    deltaStart(offset) {\n        return new OffsetRange(this.start + offset, this.endExclusive);\n    }\n    deltaEnd(offset) {\n        return new OffsetRange(this.start, this.endExclusive + offset);\n    }\n    get length() {\n        return this.endExclusive - this.start;\n    }\n    toString() {\n        return `[${this.start}, ${this.endExclusive})`;\n    }\n    contains(offset) {\n        return this.start <= offset && offset < this.endExclusive;\n    }\n    /**\n     * for all numbers n: range1.contains(n) or range2.contains(n) => range1.join(range2).contains(n)\n     * The joined range is the smallest range that contains both ranges.\n     */\n    join(other) {\n        return new OffsetRange(Math.min(this.start, other.start), Math.max(this.endExclusive, other.endExclusive));\n    }\n    /**\n     * for all numbers n: range1.contains(n) and range2.contains(n) <=> range1.intersect(range2).contains(n)\n     *\n     * The resulting range is empty if the ranges do not intersect, but touch.\n     * If the ranges don't even touch, the result is undefined.\n     */\n    intersect(other) {\n        const start = Math.max(this.start, other.start);\n        const end = Math.min(this.endExclusive, other.endExclusive);\n        if (start <= end) {\n            return new OffsetRange(start, end);\n        }\n        return undefined;\n    }\n    intersects(other) {\n        const start = Math.max(this.start, other.start);\n        const end = Math.min(this.endExclusive, other.endExclusive);\n        return start < end;\n    }\n    isBefore(other) {\n        return this.endExclusive <= other.start;\n    }\n    isAfter(other) {\n        return this.start >= other.endExclusive;\n    }\n    slice(arr) {\n        return arr.slice(this.start, this.endExclusive);\n    }\n    substring(str) {\n        return str.substring(this.start, this.endExclusive);\n    }\n    /**\n     * Returns the given value if it is contained in this instance, otherwise the closest value that is contained.\n     * The range must not be empty.\n     */\n    clip(value) {\n        if (this.isEmpty) {\n            throw new BugIndicatingError(`Invalid clipping range: ${this.toString()}`);\n        }\n        return Math.max(this.start, Math.min(this.endExclusive - 1, value));\n    }\n    /**\n     * Returns `r := value + k * length` such that `r` is contained in this range.\n     * The range must not be empty.\n     *\n     * E.g. `[5, 10).clipCyclic(10) === 5`, `[5, 10).clipCyclic(11) === 6` and `[5, 10).clipCyclic(4) === 9`.\n     */\n    clipCyclic(value) {\n        if (this.isEmpty) {\n            throw new BugIndicatingError(`Invalid clipping range: ${this.toString()}`);\n        }\n        if (value < this.start) {\n            return this.endExclusive - ((this.start - value) % this.length);\n        }\n        if (value >= this.endExclusive) {\n            return this.start + ((value - this.start) % this.length);\n        }\n        return value;\n    }\n    forEach(f) {\n        for (let i = this.start; i < this.endExclusive; i++) {\n            f(i);\n        }\n    }\n}\nexport class OffsetRangeSet {\n    constructor() {\n        this._sortedRanges = [];\n    }\n    addRange(range) {\n        let i = 0;\n        while (i < this._sortedRanges.length && this._sortedRanges[i].endExclusive < range.start) {\n            i++;\n        }\n        let j = i;\n        while (j < this._sortedRanges.length && this._sortedRanges[j].start <= range.endExclusive) {\n            j++;\n        }\n        if (i === j) {\n            this._sortedRanges.splice(i, 0, range);\n        }\n        else {\n            const start = Math.min(range.start, this._sortedRanges[i].start);\n            const end = Math.max(range.endExclusive, this._sortedRanges[j - 1].endExclusive);\n            this._sortedRanges.splice(i, j - i, new OffsetRange(start, end));\n        }\n    }\n    toString() {\n        return this._sortedRanges.map(r => r.toString()).join(', ');\n    }\n    /**\n     * Returns of there is a value that is contained in this instance and the given range.\n     */\n    intersectsStrict(other) {\n        // TODO use binary search\n        let i = 0;\n        while (i < this._sortedRanges.length && this._sortedRanges[i].endExclusive <= other.start) {\n            i++;\n        }\n        return i < this._sortedRanges.length && this._sortedRanges[i].start < other.endExclusive;\n    }\n    intersectWithRange(other) {\n        // TODO use binary search + slice\n        const result = new OffsetRangeSet();\n        for (const range of this._sortedRanges) {\n            const intersection = range.intersect(other);\n            if (intersection) {\n                result.addRange(intersection);\n            }\n        }\n        return result;\n    }\n    intersectWithRangeLength(other) {\n        return this.intersectWithRange(other).length;\n    }\n    get length() {\n        return this._sortedRanges.reduce((prev, cur) => prev + cur.length, 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 *--------------------------------------------------------------------------------------------*/\nexport function findLast(array, predicate) {\n    const idx = findLastIdx(array, predicate);\n    if (idx === -1) {\n        return undefined;\n    }\n    return array[idx];\n}\nexport function findLastIdx(array, predicate, fromIndex = array.length - 1) {\n    for (let i = fromIndex; i >= 0; i--) {\n        const element = array[i];\n        if (predicate(element)) {\n            return i;\n        }\n    }\n    return -1;\n}\n/**\n * Finds the last item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n *\n * @returns `undefined` if no item matches, otherwise the last item that matches the predicate.\n */\nexport function findLastMonotonous(array, predicate) {\n    const idx = findLastIdxMonotonous(array, predicate);\n    return idx === -1 ? undefined : array[idx];\n}\n/**\n * Finds the last item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n *\n * @returns `startIdx - 1` if predicate is false for all items, otherwise the index of the last item that matches the predicate.\n */\nexport function findLastIdxMonotonous(array, predicate, startIdx = 0, endIdxEx = array.length) {\n    let i = startIdx;\n    let j = endIdxEx;\n    while (i < j) {\n        const k = Math.floor((i + j) / 2);\n        if (predicate(array[k])) {\n            i = k + 1;\n        }\n        else {\n            j = k;\n        }\n    }\n    return i - 1;\n}\n/**\n * Finds the first item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[false, ..., false, true, ..., true]`!\n *\n * @returns `undefined` if no item matches, otherwise the first item that matches the predicate.\n */\nexport function findFirstMonotonous(array, predicate) {\n    const idx = findFirstIdxMonotonousOrArrLen(array, predicate);\n    return idx === array.length ? undefined : array[idx];\n}\n/**\n * Finds the first item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[false, ..., false, true, ..., true]`!\n *\n * @returns `endIdxEx` if predicate is false for all items, otherwise the index of the first item that matches the predicate.\n */\nexport function findFirstIdxMonotonousOrArrLen(array, predicate, startIdx = 0, endIdxEx = array.length) {\n    let i = startIdx;\n    let j = endIdxEx;\n    while (i < j) {\n        const k = Math.floor((i + j) / 2);\n        if (predicate(array[k])) {\n            j = k;\n        }\n        else {\n            i = k + 1;\n        }\n    }\n    return i;\n}\n/**\n * Use this when\n * * You have a sorted array\n * * You query this array with a monotonous predicate to find the last item that has a certain property.\n * * You query this array multiple times with monotonous predicates that get weaker and weaker.\n */\nexport class MonotonousArray {\n    static { this.assertInvariants = false; }\n    constructor(_array) {\n        this._array = _array;\n        this._findLastMonotonousLastIdx = 0;\n    }\n    /**\n     * The predicate must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n     * For subsequent calls, current predicate must be weaker than (or equal to) the previous predicate, i.e. more entries must be `true`.\n     */\n    findLastMonotonous(predicate) {\n        if (MonotonousArray.assertInvariants) {\n            if (this._prevFindLastPredicate) {\n                for (const item of this._array) {\n                    if (this._prevFindLastPredicate(item) && !predicate(item)) {\n                        throw new Error('MonotonousArray: current predicate must be weaker than (or equal to) the previous predicate.');\n                    }\n                }\n            }\n            this._prevFindLastPredicate = predicate;\n        }\n        const idx = findLastIdxMonotonous(this._array, predicate, this._findLastMonotonousLastIdx);\n        this._findLastMonotonousLastIdx = idx + 1;\n        return idx === -1 ? undefined : this._array[idx];\n    }\n}\n/**\n * Returns the first item that is equal to or greater than every other item.\n*/\nexport function findFirstMax(array, comparator) {\n    if (array.length === 0) {\n        return undefined;\n    }\n    let max = array[0];\n    for (let i = 1; i < array.length; i++) {\n        const item = array[i];\n        if (comparator(item, max) > 0) {\n            max = item;\n        }\n    }\n    return max;\n}\n/**\n * Returns the last item that is equal to or greater than every other item.\n*/\nexport function findLastMax(array, comparator) {\n    if (array.length === 0) {\n        return undefined;\n    }\n    let max = array[0];\n    for (let i = 1; i < array.length; i++) {\n        const item = array[i];\n        if (comparator(item, max) >= 0) {\n            max = item;\n        }\n    }\n    return max;\n}\n/**\n * Returns the first item that is equal to or less than every other item.\n*/\nexport function findFirstMin(array, comparator) {\n    return findFirstMax(array, (a, b) => -comparator(a, b));\n}\nexport function findMaxIdx(array, comparator) {\n    if (array.length === 0) {\n        return -1;\n    }\n    let maxIdx = 0;\n    for (let i = 1; i < array.length; i++) {\n        const item = array[i];\n        if (comparator(item, array[maxIdx]) > 0) {\n            maxIdx = i;\n        }\n    }\n    return maxIdx;\n}\n/**\n * Returns the first mapped value of the array which is not undefined.\n */\nexport function mapFindFirst(items, mapFn) {\n    for (const value of items) {\n        const mapped = mapFn(value);\n        if (mapped !== undefined) {\n            return mapped;\n        }\n    }\n    return 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 { BugIndicatingError } from '../../../base/common/errors.js';\nimport { OffsetRange } from './offsetRange.js';\nimport { Range } from './range.js';\nimport { findFirstIdxMonotonousOrArrLen, findLastIdxMonotonous, findLastMonotonous } from '../../../base/common/arraysFind.js';\n/**\n * A range of lines (1-based).\n */\nexport class LineRange {\n    static fromRangeInclusive(range) {\n        return new LineRange(range.startLineNumber, range.endLineNumber + 1);\n    }\n    /**\n     * @param lineRanges An array of sorted line ranges.\n     */\n    static joinMany(lineRanges) {\n        if (lineRanges.length === 0) {\n            return [];\n        }\n        let result = new LineRangeSet(lineRanges[0].slice());\n        for (let i = 1; i < lineRanges.length; i++) {\n            result = result.getUnion(new LineRangeSet(lineRanges[i].slice()));\n        }\n        return result.ranges;\n    }\n    static join(lineRanges) {\n        if (lineRanges.length === 0) {\n            throw new BugIndicatingError('lineRanges cannot be empty');\n        }\n        let startLineNumber = lineRanges[0].startLineNumber;\n        let endLineNumberExclusive = lineRanges[0].endLineNumberExclusive;\n        for (let i = 1; i < lineRanges.length; i++) {\n            startLineNumber = Math.min(startLineNumber, lineRanges[i].startLineNumber);\n            endLineNumberExclusive = Math.max(endLineNumberExclusive, lineRanges[i].endLineNumberExclusive);\n        }\n        return new LineRange(startLineNumber, endLineNumberExclusive);\n    }\n    static ofLength(startLineNumber, length) {\n        return new LineRange(startLineNumber, startLineNumber + length);\n    }\n    /**\n     * @internal\n     */\n    static deserialize(lineRange) {\n        return new LineRange(lineRange[0], lineRange[1]);\n    }\n    constructor(startLineNumber, endLineNumberExclusive) {\n        if (startLineNumber > endLineNumberExclusive) {\n            throw new BugIndicatingError(`startLineNumber ${startLineNumber} cannot be after endLineNumberExclusive ${endLineNumberExclusive}`);\n        }\n        this.startLineNumber = startLineNumber;\n        this.endLineNumberExclusive = endLineNumberExclusive;\n    }\n    /**\n     * Indicates if this line range contains the given line number.\n     */\n    contains(lineNumber) {\n        return this.startLineNumber <= lineNumber && lineNumber < this.endLineNumberExclusive;\n    }\n    /**\n     * Indicates if this line range is empty.\n     */\n    get isEmpty() {\n        return this.startLineNumber === this.endLineNumberExclusive;\n    }\n    /**\n     * Moves this line range by the given offset of line numbers.\n     */\n    delta(offset) {\n        return new LineRange(this.startLineNumber + offset, this.endLineNumberExclusive + offset);\n    }\n    deltaLength(offset) {\n        return new LineRange(this.startLineNumber, this.endLineNumberExclusive + offset);\n    }\n    /**\n     * The number of lines this line range spans.\n     */\n    get length() {\n        return this.endLineNumberExclusive - this.startLineNumber;\n    }\n    /**\n     * Creates a line range that combines this and the given line range.\n     */\n    join(other) {\n        return new LineRange(Math.min(this.startLineNumber, other.startLineNumber), Math.max(this.endLineNumberExclusive, other.endLineNumberExclusive));\n    }\n    toString() {\n        return `[${this.startLineNumber},${this.endLineNumberExclusive})`;\n    }\n    /**\n     * The resulting range is empty if the ranges do not intersect, but touch.\n     * If the ranges don't even touch, the result is undefined.\n     */\n    intersect(other) {\n        const startLineNumber = Math.max(this.startLineNumber, other.startLineNumber);\n        const endLineNumberExclusive = Math.min(this.endLineNumberExclusive, other.endLineNumberExclusive);\n        if (startLineNumber <= endLineNumberExclusive) {\n            return new LineRange(startLineNumber, endLineNumberExclusive);\n        }\n        return undefined;\n    }\n    intersectsStrict(other) {\n        return this.startLineNumber < other.endLineNumberExclusive && other.startLineNumber < this.endLineNumberExclusive;\n    }\n    overlapOrTouch(other) {\n        return this.startLineNumber <= other.endLineNumberExclusive && other.startLineNumber <= this.endLineNumberExclusive;\n    }\n    equals(b) {\n        return this.startLineNumber === b.startLineNumber && this.endLineNumberExclusive === b.endLineNumberExclusive;\n    }\n    toInclusiveRange() {\n        if (this.isEmpty) {\n            return null;\n        }\n        return new Range(this.startLineNumber, 1, this.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER);\n    }\n    /**\n     * @deprecated Using this function is discouraged because it might lead to bugs: The end position is not guaranteed to be a valid position!\n    */\n    toExclusiveRange() {\n        return new Range(this.startLineNumber, 1, this.endLineNumberExclusive, 1);\n    }\n    mapToLineArray(f) {\n        const result = [];\n        for (let lineNumber = this.startLineNumber; lineNumber < this.endLineNumberExclusive; lineNumber++) {\n            result.push(f(lineNumber));\n        }\n        return result;\n    }\n    forEach(f) {\n        for (let lineNumber = this.startLineNumber; lineNumber < this.endLineNumberExclusive; lineNumber++) {\n            f(lineNumber);\n        }\n    }\n    /**\n     * @internal\n     */\n    serialize() {\n        return [this.startLineNumber, this.endLineNumberExclusive];\n    }\n    includes(lineNumber) {\n        return this.startLineNumber <= lineNumber && lineNumber < this.endLineNumberExclusive;\n    }\n    /**\n     * Converts this 1-based line range to a 0-based offset range (subtracts 1!).\n     * @internal\n     */\n    toOffsetRange() {\n        return new OffsetRange(this.startLineNumber - 1, this.endLineNumberExclusive - 1);\n    }\n}\nexport class LineRangeSet {\n    constructor(\n    /**\n     * Sorted by start line number.\n     * No two line ranges are touching or intersecting.\n     */\n    _normalizedRanges = []) {\n        this._normalizedRanges = _normalizedRanges;\n    }\n    get ranges() {\n        return this._normalizedRanges;\n    }\n    addRange(range) {\n        if (range.length === 0) {\n            return;\n        }\n        // Idea: Find joinRange such that:\n        // replaceRange = _normalizedRanges.replaceRange(joinRange, range.joinAll(joinRange.map(idx => this._normalizedRanges[idx])))\n        // idx of first element that touches range or that is after range\n        const joinRangeStartIdx = findFirstIdxMonotonousOrArrLen(this._normalizedRanges, r => r.endLineNumberExclusive >= range.startLineNumber);\n        // idx of element after { last element that touches range or that is before range }\n        const joinRangeEndIdxExclusive = findLastIdxMonotonous(this._normalizedRanges, r => r.startLineNumber <= range.endLineNumberExclusive) + 1;\n        if (joinRangeStartIdx === joinRangeEndIdxExclusive) {\n            // If there is no element that touches range, then joinRangeStartIdx === joinRangeEndIdxExclusive and that value is the index of the element after range\n            this._normalizedRanges.splice(joinRangeStartIdx, 0, range);\n        }\n        else if (joinRangeStartIdx === joinRangeEndIdxExclusive - 1) {\n            // Else, there is an element that touches range and in this case it is both the first and last element. Thus we can replace it\n            const joinRange = this._normalizedRanges[joinRangeStartIdx];\n            this._normalizedRanges[joinRangeStartIdx] = joinRange.join(range);\n        }\n        else {\n            // First and last element are different - we need to replace the entire range\n            const joinRange = this._normalizedRanges[joinRangeStartIdx].join(this._normalizedRanges[joinRangeEndIdxExclusive - 1]).join(range);\n            this._normalizedRanges.splice(joinRangeStartIdx, joinRangeEndIdxExclusive - joinRangeStartIdx, joinRange);\n        }\n    }\n    contains(lineNumber) {\n        const rangeThatStartsBeforeEnd = findLastMonotonous(this._normalizedRanges, r => r.startLineNumber <= lineNumber);\n        return !!rangeThatStartsBeforeEnd && rangeThatStartsBeforeEnd.endLineNumberExclusive > lineNumber;\n    }\n    intersects(range) {\n        const rangeThatStartsBeforeEnd = findLastMonotonous(this._normalizedRanges, r => r.startLineNumber < range.endLineNumberExclusive);\n        return !!rangeThatStartsBeforeEnd && rangeThatStartsBeforeEnd.endLineNumberExclusive > range.startLineNumber;\n    }\n    getUnion(other) {\n        if (this._normalizedRanges.length === 0) {\n            return other;\n        }\n        if (other._normalizedRanges.length === 0) {\n            return this;\n        }\n        const result = [];\n        let i1 = 0;\n        let i2 = 0;\n        let current = null;\n        while (i1 < this._normalizedRanges.length || i2 < other._normalizedRanges.length) {\n            let next = null;\n            if (i1 < this._normalizedRanges.length && i2 < other._normalizedRanges.length) {\n                const lineRange1 = this._normalizedRanges[i1];\n                const lineRange2 = other._normalizedRanges[i2];\n                if (lineRange1.startLineNumber < lineRange2.startLineNumber) {\n                    next = lineRange1;\n                    i1++;\n                }\n                else {\n                    next = lineRange2;\n                    i2++;\n                }\n            }\n            else if (i1 < this._normalizedRanges.length) {\n                next = this._normalizedRanges[i1];\n                i1++;\n            }\n            else {\n                next = other._normalizedRanges[i2];\n                i2++;\n            }\n            if (current === null) {\n                current = next;\n            }\n            else {\n                if (current.endLineNumberExclusive >= next.startLineNumber) {\n                    // merge\n                    current = new LineRange(current.startLineNumber, Math.max(current.endLineNumberExclusive, next.endLineNumberExclusive));\n                }\n                else {\n                    // push\n                    result.push(current);\n                    current = next;\n                }\n            }\n        }\n        if (current !== null) {\n            result.push(current);\n        }\n        return new LineRangeSet(result);\n    }\n    /**\n     * Subtracts all ranges in this set from `range` and returns the result.\n     */\n    subtractFrom(range) {\n        // idx of first element that touches range or that is after range\n        const joinRangeStartIdx = findFirstIdxMonotonousOrArrLen(this._normalizedRanges, r => r.endLineNumberExclusive >= range.startLineNumber);\n        // idx of element after { last element that touches range or that is before range }\n        const joinRangeEndIdxExclusive = findLastIdxMonotonous(this._normalizedRanges, r => r.startLineNumber <= range.endLineNumberExclusive) + 1;\n        if (joinRangeStartIdx === joinRangeEndIdxExclusive) {\n            return new LineRangeSet([range]);\n        }\n        const result = [];\n        let startLineNumber = range.startLineNumber;\n        for (let i = joinRangeStartIdx; i < joinRangeEndIdxExclusive; i++) {\n            const r = this._normalizedRanges[i];\n            if (r.startLineNumber > startLineNumber) {\n                result.push(new LineRange(startLineNumber, r.startLineNumber));\n            }\n            startLineNumber = r.endLineNumberExclusive;\n        }\n        if (startLineNumber < range.endLineNumberExclusive) {\n            result.push(new LineRange(startLineNumber, range.endLineNumberExclusive));\n        }\n        return new LineRangeSet(result);\n    }\n    toString() {\n        return this._normalizedRanges.map(r => r.toString()).join(', ');\n    }\n    getIntersection(other) {\n        const result = [];\n        let i1 = 0;\n        let i2 = 0;\n        while (i1 < this._normalizedRanges.length && i2 < other._normalizedRanges.length) {\n            const r1 = this._normalizedRanges[i1];\n            const r2 = other._normalizedRanges[i2];\n            const i = r1.intersect(r2);\n            if (i && !i.isEmpty) {\n                result.push(i);\n            }\n            if (r1.endLineNumberExclusive < r2.endLineNumberExclusive) {\n                i1++;\n            }\n            else {\n                i2++;\n            }\n        }\n        return new LineRangeSet(result);\n    }\n    getWithDelta(value) {\n        return new LineRangeSet(this._normalizedRanges.map(r => r.delta(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 { Position } from './position.js';\nimport { Range } from './range.js';\n/**\n * Represents a non-negative length of text in terms of line and column count.\n*/\nexport class TextLength {\n    static { this.zero = new TextLength(0, 0); }\n    static betweenPositions(position1, position2) {\n        if (position1.lineNumber === position2.lineNumber) {\n            return new TextLength(0, position2.column - position1.column);\n        }\n        else {\n            return new TextLength(position2.lineNumber - position1.lineNumber, position2.column - 1);\n        }\n    }\n    static ofRange(range) {\n        return TextLength.betweenPositions(range.getStartPosition(), range.getEndPosition());\n    }\n    static ofText(text) {\n        let line = 0;\n        let column = 0;\n        for (const c of text) {\n            if (c === '\\n') {\n                line++;\n                column = 0;\n            }\n            else {\n                column++;\n            }\n        }\n        return new TextLength(line, column);\n    }\n    constructor(lineCount, columnCount) {\n        this.lineCount = lineCount;\n        this.columnCount = columnCount;\n    }\n    isGreaterThanOrEqualTo(other) {\n        if (this.lineCount !== other.lineCount) {\n            return this.lineCount > other.lineCount;\n        }\n        return this.columnCount >= other.columnCount;\n    }\n    createRange(startPosition) {\n        if (this.lineCount === 0) {\n            return new Range(startPosition.lineNumber, startPosition.column, startPosition.lineNumber, startPosition.column + this.columnCount);\n        }\n        else {\n            return new Range(startPosition.lineNumber, startPosition.column, startPosition.lineNumber + this.lineCount, this.columnCount + 1);\n        }\n    }\n    addToPosition(position) {\n        if (this.lineCount === 0) {\n            return new Position(position.lineNumber, position.column + this.columnCount);\n        }\n        else {\n            return new Position(position.lineNumber + this.lineCount, this.columnCount + 1);\n        }\n    }\n    toString() {\n        return `${this.lineCount},${this.columnCount}`;\n    }\n}\n","import { OffsetRange } from './offsetRange.js';\nimport { TextLength } from './textLength.js';\nexport class PositionOffsetTransformer {\n    constructor(text) {\n        this.text = text;\n        this.lineStartOffsetByLineIdx = [];\n        this.lineStartOffsetByLineIdx.push(0);\n        for (let i = 0; i < text.length; i++) {\n            if (text.charAt(i) === '\\n') {\n                this.lineStartOffsetByLineIdx.push(i + 1);\n            }\n        }\n    }\n    getOffset(position) {\n        return this.lineStartOffsetByLineIdx[position.lineNumber - 1] + position.column - 1;\n    }\n    getOffsetRange(range) {\n        return new OffsetRange(this.getOffset(range.getStartPosition()), this.getOffset(range.getEndPosition()));\n    }\n    get textLength() {\n        const lineIdx = this.lineStartOffsetByLineIdx.length - 1;\n        return new TextLength(lineIdx, this.text.length - this.lineStartOffsetByLineIdx[lineIdx]);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { assertFn, checkAdjacentItems } from '../../../base/common/assert.js';\nimport { BugIndicatingError } from '../../../base/common/errors.js';\nimport { Position } from './position.js';\nimport { PositionOffsetTransformer } from './positionToOffset.js';\nimport { Range } from './range.js';\nimport { TextLength } from './textLength.js';\nexport class TextEdit {\n    constructor(edits) {\n        this.edits = edits;\n        assertFn(() => checkAdjacentItems(edits, (a, b) => a.range.getEndPosition().isBeforeOrEqual(b.range.getStartPosition())));\n    }\n    apply(text) {\n        let result = '';\n        let lastEditEnd = new Position(1, 1);\n        for (const edit of this.edits) {\n            const editRange = edit.range;\n            const editStart = editRange.getStartPosition();\n            const editEnd = editRange.getEndPosition();\n            const r = rangeFromPositions(lastEditEnd, editStart);\n            if (!r.isEmpty()) {\n                result += text.getValueOfRange(r);\n            }\n            result += edit.text;\n            lastEditEnd = editEnd;\n        }\n        const r = rangeFromPositions(lastEditEnd, text.endPositionExclusive);\n        if (!r.isEmpty()) {\n            result += text.getValueOfRange(r);\n        }\n        return result;\n    }\n    applyToString(str) {\n        const strText = new StringText(str);\n        return this.apply(strText);\n    }\n    getNewRanges() {\n        const newRanges = [];\n        let previousEditEndLineNumber = 0;\n        let lineOffset = 0;\n        let columnOffset = 0;\n        for (const edit of this.edits) {\n            const textLength = TextLength.ofText(edit.text);\n            const newRangeStart = Position.lift({\n                lineNumber: edit.range.startLineNumber + lineOffset,\n                column: edit.range.startColumn + (edit.range.startLineNumber === previousEditEndLineNumber ? columnOffset : 0)\n            });\n            const newRange = textLength.createRange(newRangeStart);\n            newRanges.push(newRange);\n            lineOffset = newRange.endLineNumber - edit.range.endLineNumber;\n            columnOffset = newRange.endColumn - edit.range.endColumn;\n            previousEditEndLineNumber = edit.range.endLineNumber;\n        }\n        return newRanges;\n    }\n}\nexport class SingleTextEdit {\n    constructor(range, text) {\n        this.range = range;\n        this.text = text;\n    }\n    toSingleEditOperation() {\n        return {\n            range: this.range,\n            text: this.text,\n        };\n    }\n}\nfunction rangeFromPositions(start, end) {\n    if (start.lineNumber === end.lineNumber && start.column === Number.MAX_SAFE_INTEGER) {\n        return Range.fromPositions(end, end);\n    }\n    else if (!start.isBeforeOrEqual(end)) {\n        throw new BugIndicatingError('start must be before end');\n    }\n    return new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n}\nexport class AbstractText {\n    get endPositionExclusive() {\n        return this.length.addToPosition(new Position(1, 1));\n    }\n}\nexport class StringText extends AbstractText {\n    constructor(value) {\n        super();\n        this.value = value;\n        this._t = new PositionOffsetTransformer(this.value);\n    }\n    getValueOfRange(range) {\n        return this._t.getOffsetRange(range).substring(this.value);\n    }\n    get length() {\n        return this._t.textLength;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { BugIndicatingError } from '../../../base/common/errors.js';\nimport { LineRange } from '../core/lineRange.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { SingleTextEdit } from '../core/textEdit.js';\n/**\n * Maps a line range in the original text model to a line range in the modified text model.\n */\nexport class LineRangeMapping {\n    static inverse(mapping, originalLineCount, modifiedLineCount) {\n        const result = [];\n        let lastOriginalEndLineNumber = 1;\n        let lastModifiedEndLineNumber = 1;\n        for (const m of mapping) {\n            const r = new LineRangeMapping(new LineRange(lastOriginalEndLineNumber, m.original.startLineNumber), new LineRange(lastModifiedEndLineNumber, m.modified.startLineNumber));\n            if (!r.modified.isEmpty) {\n                result.push(r);\n            }\n            lastOriginalEndLineNumber = m.original.endLineNumberExclusive;\n            lastModifiedEndLineNumber = m.modified.endLineNumberExclusive;\n        }\n        const r = new LineRangeMapping(new LineRange(lastOriginalEndLineNumber, originalLineCount + 1), new LineRange(lastModifiedEndLineNumber, modifiedLineCount + 1));\n        if (!r.modified.isEmpty) {\n            result.push(r);\n        }\n        return result;\n    }\n    static clip(mapping, originalRange, modifiedRange) {\n        const result = [];\n        for (const m of mapping) {\n            const original = m.original.intersect(originalRange);\n            const modified = m.modified.intersect(modifiedRange);\n            if (original && !original.isEmpty && modified && !modified.isEmpty) {\n                result.push(new LineRangeMapping(original, modified));\n            }\n        }\n        return result;\n    }\n    constructor(originalRange, modifiedRange) {\n        this.original = originalRange;\n        this.modified = modifiedRange;\n    }\n    toString() {\n        return `{${this.original.toString()}->${this.modified.toString()}}`;\n    }\n    flip() {\n        return new LineRangeMapping(this.modified, this.original);\n    }\n    join(other) {\n        return new LineRangeMapping(this.original.join(other.original), this.modified.join(other.modified));\n    }\n    /**\n     * This method assumes that the LineRangeMapping describes a valid diff!\n     * I.e. if one range is empty, the other range cannot be the entire document.\n     * It avoids various problems when the line range points to non-existing line-numbers.\n    */\n    toRangeMapping() {\n        const origInclusiveRange = this.original.toInclusiveRange();\n        const modInclusiveRange = this.modified.toInclusiveRange();\n        if (origInclusiveRange && modInclusiveRange) {\n            return new RangeMapping(origInclusiveRange, modInclusiveRange);\n        }\n        else if (this.original.startLineNumber === 1 || this.modified.startLineNumber === 1) {\n            if (!(this.modified.startLineNumber === 1 && this.original.startLineNumber === 1)) {\n                // If one line range starts at 1, the other one must start at 1 as well.\n                throw new BugIndicatingError('not a valid diff');\n            }\n            // Because one range is empty and both ranges start at line 1, none of the ranges can cover all lines.\n            // Thus, `endLineNumberExclusive` is a valid line number.\n            return new RangeMapping(new Range(this.original.startLineNumber, 1, this.original.endLineNumberExclusive, 1), new Range(this.modified.startLineNumber, 1, this.modified.endLineNumberExclusive, 1));\n        }\n        else {\n            // We can assume here that both startLineNumbers are greater than 1.\n            return new RangeMapping(new Range(this.original.startLineNumber - 1, Number.MAX_SAFE_INTEGER, this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), new Range(this.modified.startLineNumber - 1, Number.MAX_SAFE_INTEGER, this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER));\n        }\n    }\n    /**\n     * This method assumes that the LineRangeMapping describes a valid diff!\n     * I.e. if one range is empty, the other range cannot be the entire document.\n     * It avoids various problems when the line range points to non-existing line-numbers.\n    */\n    toRangeMapping2(original, modified) {\n        if (isValidLineNumber(this.original.endLineNumberExclusive, original)\n            && isValidLineNumber(this.modified.endLineNumberExclusive, modified)) {\n            return new RangeMapping(new Range(this.original.startLineNumber, 1, this.original.endLineNumberExclusive, 1), new Range(this.modified.startLineNumber, 1, this.modified.endLineNumberExclusive, 1));\n        }\n        if (!this.original.isEmpty && !this.modified.isEmpty) {\n            return new RangeMapping(Range.fromPositions(new Position(this.original.startLineNumber, 1), normalizePosition(new Position(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), original)), Range.fromPositions(new Position(this.modified.startLineNumber, 1), normalizePosition(new Position(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), modified)));\n        }\n        if (this.original.startLineNumber > 1 && this.modified.startLineNumber > 1) {\n            return new RangeMapping(Range.fromPositions(normalizePosition(new Position(this.original.startLineNumber - 1, Number.MAX_SAFE_INTEGER), original), normalizePosition(new Position(this.original.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), original)), Range.fromPositions(normalizePosition(new Position(this.modified.startLineNumber - 1, Number.MAX_SAFE_INTEGER), modified), normalizePosition(new Position(this.modified.endLineNumberExclusive - 1, Number.MAX_SAFE_INTEGER), modified)));\n        }\n        // Situation now: one range is empty and one range touches the last line and one range starts at line 1.\n        // I don't think this can happen.\n        throw new BugIndicatingError();\n    }\n}\nfunction normalizePosition(position, content) {\n    if (position.lineNumber < 1) {\n        return new Position(1, 1);\n    }\n    if (position.lineNumber > content.length) {\n        return new Position(content.length, content[content.length - 1].length + 1);\n    }\n    const line = content[position.lineNumber - 1];\n    if (position.column > line.length + 1) {\n        return new Position(position.lineNumber, line.length + 1);\n    }\n    return position;\n}\nfunction isValidLineNumber(lineNumber, lines) {\n    return lineNumber >= 1 && lineNumber <= lines.length;\n}\n/**\n * Maps a line range in the original text model to a line range in the modified text model.\n * Also contains inner range mappings.\n */\nexport class DetailedLineRangeMapping extends LineRangeMapping {\n    static fromRangeMappings(rangeMappings) {\n        const originalRange = LineRange.join(rangeMappings.map(r => LineRange.fromRangeInclusive(r.originalRange)));\n        const modifiedRange = LineRange.join(rangeMappings.map(r => LineRange.fromRangeInclusive(r.modifiedRange)));\n        return new DetailedLineRangeMapping(originalRange, modifiedRange, rangeMappings);\n    }\n    constructor(originalRange, modifiedRange, innerChanges) {\n        super(originalRange, modifiedRange);\n        this.innerChanges = innerChanges;\n    }\n    flip() {\n        return new DetailedLineRangeMapping(this.modified, this.original, this.innerChanges?.map(c => c.flip()));\n    }\n    withInnerChangesFromLineRanges() {\n        return new DetailedLineRangeMapping(this.original, this.modified, [this.toRangeMapping()]);\n    }\n}\n/**\n * Maps a range in the original text model to a range in the modified text model.\n */\nexport class RangeMapping {\n    static assertSorted(rangeMappings) {\n        for (let i = 1; i < rangeMappings.length; i++) {\n            const previous = rangeMappings[i - 1];\n            const current = rangeMappings[i];\n            if (!(previous.originalRange.getEndPosition().isBeforeOrEqual(current.originalRange.getStartPosition())\n                && previous.modifiedRange.getEndPosition().isBeforeOrEqual(current.modifiedRange.getStartPosition()))) {\n                throw new BugIndicatingError('Range mappings must be sorted');\n            }\n        }\n    }\n    constructor(originalRange, modifiedRange) {\n        this.originalRange = originalRange;\n        this.modifiedRange = modifiedRange;\n    }\n    toString() {\n        return `{${this.originalRange.toString()}->${this.modifiedRange.toString()}}`;\n    }\n    flip() {\n        return new RangeMapping(this.modifiedRange, this.originalRange);\n    }\n    /**\n     * Creates a single text edit that describes the change from the original to the modified text.\n    */\n    toTextEdit(modified) {\n        const newText = modified.getValueOfRange(this.modifiedRange);\n        return new SingleTextEdit(this.originalRange, newText);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { LinesDiff } from './linesDiffComputer.js';\nimport { RangeMapping, DetailedLineRangeMapping } from './rangeMapping.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { Range } from '../core/range.js';\nimport { assertFn, checkAdjacentItems } from '../../../base/common/assert.js';\nimport { LineRange } from '../core/lineRange.js';\nconst MINIMUM_MATCHING_CHARACTER_LENGTH = 3;\nexport class LegacyLinesDiffComputer {\n    computeDiff(originalLines, modifiedLines, options) {\n        const diffComputer = new DiffComputer(originalLines, modifiedLines, {\n            maxComputationTime: options.maxComputationTimeMs,\n            shouldIgnoreTrimWhitespace: options.ignoreTrimWhitespace,\n            shouldComputeCharChanges: true,\n            shouldMakePrettyDiff: true,\n            shouldPostProcessCharChanges: true,\n        });\n        const result = diffComputer.computeDiff();\n        const changes = [];\n        let lastChange = null;\n        for (const c of result.changes) {\n            let originalRange;\n            if (c.originalEndLineNumber === 0) {\n                // Insertion\n                originalRange = new LineRange(c.originalStartLineNumber + 1, c.originalStartLineNumber + 1);\n            }\n            else {\n                originalRange = new LineRange(c.originalStartLineNumber, c.originalEndLineNumber + 1);\n            }\n            let modifiedRange;\n            if (c.modifiedEndLineNumber === 0) {\n                // Deletion\n                modifiedRange = new LineRange(c.modifiedStartLineNumber + 1, c.modifiedStartLineNumber + 1);\n            }\n            else {\n                modifiedRange = new LineRange(c.modifiedStartLineNumber, c.modifiedEndLineNumber + 1);\n            }\n            let change = new DetailedLineRangeMapping(originalRange, modifiedRange, c.charChanges?.map(c => new RangeMapping(new Range(c.originalStartLineNumber, c.originalStartColumn, c.originalEndLineNumber, c.originalEndColumn), new Range(c.modifiedStartLineNumber, c.modifiedStartColumn, c.modifiedEndLineNumber, c.modifiedEndColumn))));\n            if (lastChange) {\n                if (lastChange.modified.endLineNumberExclusive === change.modified.startLineNumber\n                    || lastChange.original.endLineNumberExclusive === change.original.startLineNumber) {\n                    // join touching diffs. Probably moving diffs up/down in the algorithm causes touching diffs.\n                    change = new DetailedLineRangeMapping(lastChange.original.join(change.original), lastChange.modified.join(change.modified), lastChange.innerChanges && change.innerChanges ?\n                        lastChange.innerChanges.concat(change.innerChanges) : undefined);\n                    changes.pop();\n                }\n            }\n            changes.push(change);\n            lastChange = change;\n        }\n        assertFn(() => {\n            return checkAdjacentItems(changes, (m1, m2) => m2.original.startLineNumber - m1.original.endLineNumberExclusive === m2.modified.startLineNumber - m1.modified.endLineNumberExclusive &&\n                // There has to be an unchanged line in between (otherwise both diffs should have been joined)\n                m1.original.endLineNumberExclusive < m2.original.startLineNumber &&\n                m1.modified.endLineNumberExclusive < m2.modified.startLineNumber);\n        });\n        return new LinesDiff(changes, [], result.quitEarly);\n    }\n}\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    getStrictElement(index) {\n        return this.lines[index];\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            if (!shouldIgnoreTrimWhitespace && index < endIndex) {\n                // Add \\n if trim whitespace is not ignored\n                charCodes[len] = 10 /* CharCode.LineFeed */;\n                lineNumbers[len] = index + 1;\n                columns[len] = lineContent.length + 1;\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    toString() {\n        return ('[' + this._charCodes.map((s, idx) => (s === 10 /* CharCode.LineFeed */ ? '\\\\n' : String.fromCharCode(s)) + `-(${this._lineNumbers[idx]},${this._columns[idx]})`).join(', ') + ']');\n    }\n    _assertIndex(index, arr) {\n        if (index < 0 || index >= arr.length) {\n            throw new Error(`Illegal index`);\n        }\n    }\n    getElements() {\n        return this._charCodes;\n    }\n    getStartLineNumber(i) {\n        if (i > 0 && i === this._lineNumbers.length) {\n            // the start line number of the element after the last element\n            // is the end line number of the last element\n            return this.getEndLineNumber(i - 1);\n        }\n        this._assertIndex(i, this._lineNumbers);\n        return this._lineNumbers[i];\n    }\n    getEndLineNumber(i) {\n        if (i === -1) {\n            // the end line number of the element before the first element\n            // is the start line number of the first element\n            return this.getStartLineNumber(i + 1);\n        }\n        this._assertIndex(i, this._lineNumbers);\n        if (this._charCodes[i] === 10 /* CharCode.LineFeed */) {\n            return this._lineNumbers[i] + 1;\n        }\n        return this._lineNumbers[i];\n    }\n    getStartColumn(i) {\n        if (i > 0 && i === this._columns.length) {\n            // the start column of the element after the last element\n            // is the end column of the last element\n            return this.getEndColumn(i - 1);\n        }\n        this._assertIndex(i, this._columns);\n        return this._columns[i];\n    }\n    getEndColumn(i) {\n        if (i === -1) {\n            // the end column of the element before the first element\n            // is the start column of the first element\n            return this.getStartColumn(i + 1);\n        }\n        this._assertIndex(i, this._columns);\n        if (this._charCodes[i] === 10 /* CharCode.LineFeed */) {\n            return 1;\n        }\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        const originalStartLineNumber = originalCharSequence.getStartLineNumber(diffChange.originalStart);\n        const originalStartColumn = originalCharSequence.getStartColumn(diffChange.originalStart);\n        const originalEndLineNumber = originalCharSequence.getEndLineNumber(diffChange.originalStart + diffChange.originalLength - 1);\n        const originalEndColumn = originalCharSequence.getEndColumn(diffChange.originalStart + diffChange.originalLength - 1);\n        const modifiedStartLineNumber = modifiedCharSequence.getStartLineNumber(diffChange.modifiedStart);\n        const modifiedStartColumn = modifiedCharSequence.getStartColumn(diffChange.modifiedStart);\n        const modifiedEndLineNumber = modifiedCharSequence.getEndLineNumber(diffChange.modifiedStart + diffChange.modifiedLength - 1);\n        const modifiedEndColumn = modifiedCharSequence.getEndColumn(diffChange.modifiedStart + diffChange.modifiedLength - 1);\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            if (originalCharSequence.getElements().length > 0 && modifiedCharSequence.getElements().length > 0) {\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        }\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: undefined\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: undefined\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 === originalLineNumber && 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        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 { forEachAdjacent } from '../../../../../base/common/arrays.js';\nimport { BugIndicatingError } from '../../../../../base/common/errors.js';\nimport { OffsetRange } from '../../../core/offsetRange.js';\nexport class DiffAlgorithmResult {\n    static trivial(seq1, seq2) {\n        return new DiffAlgorithmResult([new SequenceDiff(OffsetRange.ofLength(seq1.length), OffsetRange.ofLength(seq2.length))], false);\n    }\n    static trivialTimedOut(seq1, seq2) {\n        return new DiffAlgorithmResult([new SequenceDiff(OffsetRange.ofLength(seq1.length), OffsetRange.ofLength(seq2.length))], true);\n    }\n    constructor(diffs, \n    /**\n     * Indicates if the time out was reached.\n     * In that case, the diffs might be an approximation and the user should be asked to rerun the diff with more time.\n     */\n    hitTimeout) {\n        this.diffs = diffs;\n        this.hitTimeout = hitTimeout;\n    }\n}\nexport class SequenceDiff {\n    static invert(sequenceDiffs, doc1Length) {\n        const result = [];\n        forEachAdjacent(sequenceDiffs, (a, b) => {\n            result.push(SequenceDiff.fromOffsetPairs(a ? a.getEndExclusives() : OffsetPair.zero, b ? b.getStarts() : new OffsetPair(doc1Length, (a ? a.seq2Range.endExclusive - a.seq1Range.endExclusive : 0) + doc1Length)));\n        });\n        return result;\n    }\n    static fromOffsetPairs(start, endExclusive) {\n        return new SequenceDiff(new OffsetRange(start.offset1, endExclusive.offset1), new OffsetRange(start.offset2, endExclusive.offset2));\n    }\n    static assertSorted(sequenceDiffs) {\n        let last = undefined;\n        for (const cur of sequenceDiffs) {\n            if (last) {\n                if (!(last.seq1Range.endExclusive <= cur.seq1Range.start && last.seq2Range.endExclusive <= cur.seq2Range.start)) {\n                    throw new BugIndicatingError('Sequence diffs must be sorted');\n                }\n            }\n            last = cur;\n        }\n    }\n    constructor(seq1Range, seq2Range) {\n        this.seq1Range = seq1Range;\n        this.seq2Range = seq2Range;\n    }\n    swap() {\n        return new SequenceDiff(this.seq2Range, this.seq1Range);\n    }\n    toString() {\n        return `${this.seq1Range} <-> ${this.seq2Range}`;\n    }\n    join(other) {\n        return new SequenceDiff(this.seq1Range.join(other.seq1Range), this.seq2Range.join(other.seq2Range));\n    }\n    delta(offset) {\n        if (offset === 0) {\n            return this;\n        }\n        return new SequenceDiff(this.seq1Range.delta(offset), this.seq2Range.delta(offset));\n    }\n    deltaStart(offset) {\n        if (offset === 0) {\n            return this;\n        }\n        return new SequenceDiff(this.seq1Range.deltaStart(offset), this.seq2Range.deltaStart(offset));\n    }\n    deltaEnd(offset) {\n        if (offset === 0) {\n            return this;\n        }\n        return new SequenceDiff(this.seq1Range.deltaEnd(offset), this.seq2Range.deltaEnd(offset));\n    }\n    intersect(other) {\n        const i1 = this.seq1Range.intersect(other.seq1Range);\n        const i2 = this.seq2Range.intersect(other.seq2Range);\n        if (!i1 || !i2) {\n            return undefined;\n        }\n        return new SequenceDiff(i1, i2);\n    }\n    getStarts() {\n        return new OffsetPair(this.seq1Range.start, this.seq2Range.start);\n    }\n    getEndExclusives() {\n        return new OffsetPair(this.seq1Range.endExclusive, this.seq2Range.endExclusive);\n    }\n}\nexport class OffsetPair {\n    static { this.zero = new OffsetPair(0, 0); }\n    static { this.max = new OffsetPair(Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER); }\n    constructor(offset1, offset2) {\n        this.offset1 = offset1;\n        this.offset2 = offset2;\n    }\n    toString() {\n        return `${this.offset1} <-> ${this.offset2}`;\n    }\n    delta(offset) {\n        if (offset === 0) {\n            return this;\n        }\n        return new OffsetPair(this.offset1 + offset, this.offset2 + offset);\n    }\n    equals(other) {\n        return this.offset1 === other.offset1 && this.offset2 === other.offset2;\n    }\n}\nexport class InfiniteTimeout {\n    static { this.instance = new InfiniteTimeout(); }\n    isValid() {\n        return true;\n    }\n}\nexport class DateTimeout {\n    constructor(timeout) {\n        this.timeout = timeout;\n        this.startTime = Date.now();\n        this.valid = true;\n        if (timeout <= 0) {\n            throw new BugIndicatingError('timeout must be positive');\n        }\n    }\n    // Recommendation: Set a log-point `{this.disable()}` in the body\n    isValid() {\n        const valid = Date.now() - this.startTime < this.timeout;\n        if (!valid && this.valid) {\n            this.valid = false; // timeout reached\n            // eslint-disable-next-line no-debugger\n            debugger; // WARNING: Most likely debugging caused the timeout. Call `this.disable()` to continue without timing out.\n        }\n        return this.valid;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 Array2D {\n    constructor(width, height) {\n        this.width = width;\n        this.height = height;\n        this.array = [];\n        this.array = new Array(width * height);\n    }\n    get(x, y) {\n        return this.array[x + y * this.width];\n    }\n    set(x, y, value) {\n        this.array[x + y * this.width] = value;\n    }\n}\nexport function isSpace(charCode) {\n    return charCode === 32 /* CharCode.Space */ || charCode === 9 /* CharCode.Tab */;\n}\nexport class LineRangeFragment {\n    static { this.chrKeys = new Map(); }\n    static getKey(chr) {\n        let key = this.chrKeys.get(chr);\n        if (key === undefined) {\n            key = this.chrKeys.size;\n            this.chrKeys.set(chr, key);\n        }\n        return key;\n    }\n    constructor(range, lines, source) {\n        this.range = range;\n        this.lines = lines;\n        this.source = source;\n        this.histogram = [];\n        let counter = 0;\n        for (let i = range.startLineNumber - 1; i < range.endLineNumberExclusive - 1; i++) {\n            const line = lines[i];\n            for (let j = 0; j < line.length; j++) {\n                counter++;\n                const chr = line[j];\n                const key = LineRangeFragment.getKey(chr);\n                this.histogram[key] = (this.histogram[key] || 0) + 1;\n            }\n            counter++;\n            const key = LineRangeFragment.getKey('\\n');\n            this.histogram[key] = (this.histogram[key] || 0) + 1;\n        }\n        this.totalCount = counter;\n    }\n    computeSimilarity(other) {\n        let sumDifferences = 0;\n        const maxLength = Math.max(this.histogram.length, other.histogram.length);\n        for (let i = 0; i < maxLength; i++) {\n            sumDifferences += Math.abs((this.histogram[i] ?? 0) - (other.histogram[i] ?? 0));\n        }\n        return 1 - (sumDifferences / (this.totalCount + other.totalCount));\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { OffsetRange } from '../../../core/offsetRange.js';\nimport { SequenceDiff, InfiniteTimeout, DiffAlgorithmResult } from './diffAlgorithm.js';\nimport { Array2D } from '../utils.js';\n/**\n * A O(MN) diffing algorithm that supports a score function.\n * The algorithm can be improved by processing the 2d array diagonally.\n*/\nexport class DynamicProgrammingDiffing {\n    compute(sequence1, sequence2, timeout = InfiniteTimeout.instance, equalityScore) {\n        if (sequence1.length === 0 || sequence2.length === 0) {\n            return DiffAlgorithmResult.trivial(sequence1, sequence2);\n        }\n        /**\n         * lcsLengths.get(i, j): Length of the longest common subsequence of sequence1.substring(0, i + 1) and sequence2.substring(0, j + 1).\n         */\n        const lcsLengths = new Array2D(sequence1.length, sequence2.length);\n        const directions = new Array2D(sequence1.length, sequence2.length);\n        const lengths = new Array2D(sequence1.length, sequence2.length);\n        // ==== Initializing lcsLengths ====\n        for (let s1 = 0; s1 < sequence1.length; s1++) {\n            for (let s2 = 0; s2 < sequence2.length; s2++) {\n                if (!timeout.isValid()) {\n                    return DiffAlgorithmResult.trivialTimedOut(sequence1, sequence2);\n                }\n                const horizontalLen = s1 === 0 ? 0 : lcsLengths.get(s1 - 1, s2);\n                const verticalLen = s2 === 0 ? 0 : lcsLengths.get(s1, s2 - 1);\n                let extendedSeqScore;\n                if (sequence1.getElement(s1) === sequence2.getElement(s2)) {\n                    if (s1 === 0 || s2 === 0) {\n                        extendedSeqScore = 0;\n                    }\n                    else {\n                        extendedSeqScore = lcsLengths.get(s1 - 1, s2 - 1);\n                    }\n                    if (s1 > 0 && s2 > 0 && directions.get(s1 - 1, s2 - 1) === 3) {\n                        // Prefer consecutive diagonals\n                        extendedSeqScore += lengths.get(s1 - 1, s2 - 1);\n                    }\n                    extendedSeqScore += (equalityScore ? equalityScore(s1, s2) : 1);\n                }\n                else {\n                    extendedSeqScore = -1;\n                }\n                const newValue = Math.max(horizontalLen, verticalLen, extendedSeqScore);\n                if (newValue === extendedSeqScore) {\n                    // Prefer diagonals\n                    const prevLen = s1 > 0 && s2 > 0 ? lengths.get(s1 - 1, s2 - 1) : 0;\n                    lengths.set(s1, s2, prevLen + 1);\n                    directions.set(s1, s2, 3);\n                }\n                else if (newValue === horizontalLen) {\n                    lengths.set(s1, s2, 0);\n                    directions.set(s1, s2, 1);\n                }\n                else if (newValue === verticalLen) {\n                    lengths.set(s1, s2, 0);\n                    directions.set(s1, s2, 2);\n                }\n                lcsLengths.set(s1, s2, newValue);\n            }\n        }\n        // ==== Backtracking ====\n        const result = [];\n        let lastAligningPosS1 = sequence1.length;\n        let lastAligningPosS2 = sequence2.length;\n        function reportDecreasingAligningPositions(s1, s2) {\n            if (s1 + 1 !== lastAligningPosS1 || s2 + 1 !== lastAligningPosS2) {\n                result.push(new SequenceDiff(new OffsetRange(s1 + 1, lastAligningPosS1), new OffsetRange(s2 + 1, lastAligningPosS2)));\n            }\n            lastAligningPosS1 = s1;\n            lastAligningPosS2 = s2;\n        }\n        let s1 = sequence1.length - 1;\n        let s2 = sequence2.length - 1;\n        while (s1 >= 0 && s2 >= 0) {\n            if (directions.get(s1, s2) === 3) {\n                reportDecreasingAligningPositions(s1, s2);\n                s1--;\n                s2--;\n            }\n            else {\n                if (directions.get(s1, s2) === 1) {\n                    s1--;\n                }\n                else {\n                    s2--;\n                }\n            }\n        }\n        reportDecreasingAligningPositions(-1, -1);\n        result.reverse();\n        return new DiffAlgorithmResult(result, 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 *--------------------------------------------------------------------------------------------*/\nimport { OffsetRange } from '../../../core/offsetRange.js';\nimport { DiffAlgorithmResult, InfiniteTimeout, SequenceDiff } from './diffAlgorithm.js';\n/**\n * An O(ND) diff algorithm that has a quadratic space worst-case complexity.\n*/\nexport class MyersDiffAlgorithm {\n    compute(seq1, seq2, timeout = InfiniteTimeout.instance) {\n        // These are common special cases.\n        // The early return improves performance dramatically.\n        if (seq1.length === 0 || seq2.length === 0) {\n            return DiffAlgorithmResult.trivial(seq1, seq2);\n        }\n        const seqX = seq1; // Text on the x axis\n        const seqY = seq2; // Text on the y axis\n        function getXAfterSnake(x, y) {\n            while (x < seqX.length && y < seqY.length && seqX.getElement(x) === seqY.getElement(y)) {\n                x++;\n                y++;\n            }\n            return x;\n        }\n        let d = 0;\n        // V[k]: X value of longest d-line that ends in diagonal k.\n        // d-line: path from (0,0) to (x,y) that uses exactly d non-diagonals.\n        // diagonal k: Set of points (x,y) with x-y = k.\n        // k=1 -> (1,0),(2,1)\n        const V = new FastInt32Array();\n        V.set(0, getXAfterSnake(0, 0));\n        const paths = new FastArrayNegativeIndices();\n        paths.set(0, V.get(0) === 0 ? null : new SnakePath(null, 0, 0, V.get(0)));\n        let k = 0;\n        loop: while (true) {\n            d++;\n            if (!timeout.isValid()) {\n                return DiffAlgorithmResult.trivialTimedOut(seqX, seqY);\n            }\n            // The paper has `for (k = -d; k <= d; k += 2)`, but we can ignore diagonals that cannot influence the result.\n            const lowerBound = -Math.min(d, seqY.length + (d % 2));\n            const upperBound = Math.min(d, seqX.length + (d % 2));\n            for (k = lowerBound; k <= upperBound; k += 2) {\n                let step = 0;\n                // We can use the X values of (d-1)-lines to compute X value of the longest d-lines.\n                const maxXofDLineTop = k === upperBound ? -1 : V.get(k + 1); // We take a vertical non-diagonal (add a symbol in seqX)\n                const maxXofDLineLeft = k === lowerBound ? -1 : V.get(k - 1) + 1; // We take a horizontal non-diagonal (+1 x) (delete a symbol in seqX)\n                step++;\n                const x = Math.min(Math.max(maxXofDLineTop, maxXofDLineLeft), seqX.length);\n                const y = x - k;\n                step++;\n                if (x > seqX.length || y > seqY.length) {\n                    // This diagonal is irrelevant for the result.\n                    // TODO: Don't pay the cost for this in the next iteration.\n                    continue;\n                }\n                const newMaxX = getXAfterSnake(x, y);\n                V.set(k, newMaxX);\n                const lastPath = x === maxXofDLineTop ? paths.get(k + 1) : paths.get(k - 1);\n                paths.set(k, newMaxX !== x ? new SnakePath(lastPath, x, y, newMaxX - x) : lastPath);\n                if (V.get(k) === seqX.length && V.get(k) - k === seqY.length) {\n                    break loop;\n                }\n            }\n        }\n        let path = paths.get(k);\n        const result = [];\n        let lastAligningPosS1 = seqX.length;\n        let lastAligningPosS2 = seqY.length;\n        while (true) {\n            const endX = path ? path.x + path.length : 0;\n            const endY = path ? path.y + path.length : 0;\n            if (endX !== lastAligningPosS1 || endY !== lastAligningPosS2) {\n                result.push(new SequenceDiff(new OffsetRange(endX, lastAligningPosS1), new OffsetRange(endY, lastAligningPosS2)));\n            }\n            if (!path) {\n                break;\n            }\n            lastAligningPosS1 = path.x;\n            lastAligningPosS2 = path.y;\n            path = path.prev;\n        }\n        result.reverse();\n        return new DiffAlgorithmResult(result, false);\n    }\n}\nclass SnakePath {\n    constructor(prev, x, y, length) {\n        this.prev = prev;\n        this.x = x;\n        this.y = y;\n        this.length = length;\n    }\n}\n/**\n * An array that supports fast negative indices.\n*/\nclass FastInt32Array {\n    constructor() {\n        this.positiveArr = new Int32Array(10);\n        this.negativeArr = new Int32Array(10);\n    }\n    get(idx) {\n        if (idx < 0) {\n            idx = -idx - 1;\n            return this.negativeArr[idx];\n        }\n        else {\n            return this.positiveArr[idx];\n        }\n    }\n    set(idx, value) {\n        if (idx < 0) {\n            idx = -idx - 1;\n            if (idx >= this.negativeArr.length) {\n                const arr = this.negativeArr;\n                this.negativeArr = new Int32Array(arr.length * 2);\n                this.negativeArr.set(arr);\n            }\n            this.negativeArr[idx] = value;\n        }\n        else {\n            if (idx >= this.positiveArr.length) {\n                const arr = this.positiveArr;\n                this.positiveArr = new Int32Array(arr.length * 2);\n                this.positiveArr.set(arr);\n            }\n            this.positiveArr[idx] = value;\n        }\n    }\n}\n/**\n * An array that supports fast negative indices.\n*/\nclass FastArrayNegativeIndices {\n    constructor() {\n        this.positiveArr = [];\n        this.negativeArr = [];\n    }\n    get(idx) {\n        if (idx < 0) {\n            idx = -idx - 1;\n            return this.negativeArr[idx];\n        }\n        else {\n            return this.positiveArr[idx];\n        }\n    }\n    set(idx, value) {\n        if (idx < 0) {\n            idx = -idx - 1;\n            this.negativeArr[idx] = value;\n        }\n        else {\n            this.positiveArr[idx] = value;\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 { findLastIdxMonotonous, findLastMonotonous, findFirstMonotonous } from '../../../../base/common/arraysFind.js';\nimport { OffsetRange } from '../../core/offsetRange.js';\nimport { Position } from '../../core/position.js';\nimport { Range } from '../../core/range.js';\nimport { isSpace } from './utils.js';\nexport class LinesSliceCharSequence {\n    constructor(lines, range, considerWhitespaceChanges) {\n        this.lines = lines;\n        this.range = range;\n        this.considerWhitespaceChanges = considerWhitespaceChanges;\n        this.elements = [];\n        this.firstElementOffsetByLineIdx = [];\n        this.lineStartOffsets = [];\n        this.trimmedWsLengthsByLineIdx = [];\n        this.firstElementOffsetByLineIdx.push(0);\n        for (let lineNumber = this.range.startLineNumber; lineNumber <= this.range.endLineNumber; lineNumber++) {\n            let line = lines[lineNumber - 1];\n            let lineStartOffset = 0;\n            if (lineNumber === this.range.startLineNumber && this.range.startColumn > 1) {\n                lineStartOffset = this.range.startColumn - 1;\n                line = line.substring(lineStartOffset);\n            }\n            this.lineStartOffsets.push(lineStartOffset);\n            let trimmedWsLength = 0;\n            if (!considerWhitespaceChanges) {\n                const trimmedStartLine = line.trimStart();\n                trimmedWsLength = line.length - trimmedStartLine.length;\n                line = trimmedStartLine.trimEnd();\n            }\n            this.trimmedWsLengthsByLineIdx.push(trimmedWsLength);\n            const lineLength = lineNumber === this.range.endLineNumber ? Math.min(this.range.endColumn - 1 - lineStartOffset - trimmedWsLength, line.length) : line.length;\n            for (let i = 0; i < lineLength; i++) {\n                this.elements.push(line.charCodeAt(i));\n            }\n            if (lineNumber < this.range.endLineNumber) {\n                this.elements.push('\\n'.charCodeAt(0));\n                this.firstElementOffsetByLineIdx.push(this.elements.length);\n            }\n        }\n    }\n    toString() {\n        return `Slice: \"${this.text}\"`;\n    }\n    get text() {\n        return this.getText(new OffsetRange(0, this.length));\n    }\n    getText(range) {\n        return this.elements.slice(range.start, range.endExclusive).map(e => String.fromCharCode(e)).join('');\n    }\n    getElement(offset) {\n        return this.elements[offset];\n    }\n    get length() {\n        return this.elements.length;\n    }\n    getBoundaryScore(length) {\n        //   a   b   c   ,           d   e   f\n        // 11  0   0   12  15  6   13  0   0   11\n        const prevCategory = getCategory(length > 0 ? this.elements[length - 1] : -1);\n        const nextCategory = getCategory(length < this.elements.length ? this.elements[length] : -1);\n        if (prevCategory === 7 /* CharBoundaryCategory.LineBreakCR */ && nextCategory === 8 /* CharBoundaryCategory.LineBreakLF */) {\n            // don't break between \\r and \\n\n            return 0;\n        }\n        if (prevCategory === 8 /* CharBoundaryCategory.LineBreakLF */) {\n            // prefer the linebreak before the change\n            return 150;\n        }\n        let score = 0;\n        if (prevCategory !== nextCategory) {\n            score += 10;\n            if (prevCategory === 0 /* CharBoundaryCategory.WordLower */ && nextCategory === 1 /* CharBoundaryCategory.WordUpper */) {\n                score += 1;\n            }\n        }\n        score += getCategoryBoundaryScore(prevCategory);\n        score += getCategoryBoundaryScore(nextCategory);\n        return score;\n    }\n    translateOffset(offset, preference = 'right') {\n        // find smallest i, so that lineBreakOffsets[i] <= offset using binary search\n        const i = findLastIdxMonotonous(this.firstElementOffsetByLineIdx, (value) => value <= offset);\n        const lineOffset = offset - this.firstElementOffsetByLineIdx[i];\n        return new Position(this.range.startLineNumber + i, 1 + this.lineStartOffsets[i] + lineOffset + ((lineOffset === 0 && preference === 'left') ? 0 : this.trimmedWsLengthsByLineIdx[i]));\n    }\n    translateRange(range) {\n        const pos1 = this.translateOffset(range.start, 'right');\n        const pos2 = this.translateOffset(range.endExclusive, 'left');\n        if (pos2.isBefore(pos1)) {\n            return Range.fromPositions(pos2, pos2);\n        }\n        return Range.fromPositions(pos1, pos2);\n    }\n    /**\n     * Finds the word that contains the character at the given offset\n     */\n    findWordContaining(offset) {\n        if (offset < 0 || offset >= this.elements.length) {\n            return undefined;\n        }\n        if (!isWordChar(this.elements[offset])) {\n            return undefined;\n        }\n        // find start\n        let start = offset;\n        while (start > 0 && isWordChar(this.elements[start - 1])) {\n            start--;\n        }\n        // find end\n        let end = offset;\n        while (end < this.elements.length && isWordChar(this.elements[end])) {\n            end++;\n        }\n        return new OffsetRange(start, end);\n    }\n    countLinesIn(range) {\n        return this.translateOffset(range.endExclusive).lineNumber - this.translateOffset(range.start).lineNumber;\n    }\n    isStronglyEqual(offset1, offset2) {\n        return this.elements[offset1] === this.elements[offset2];\n    }\n    extendToFullLines(range) {\n        const start = findLastMonotonous(this.firstElementOffsetByLineIdx, x => x <= range.start) ?? 0;\n        const end = findFirstMonotonous(this.firstElementOffsetByLineIdx, x => range.endExclusive <= x) ?? this.elements.length;\n        return new OffsetRange(start, end);\n    }\n}\nfunction isWordChar(charCode) {\n    return charCode >= 97 /* CharCode.a */ && charCode <= 122 /* CharCode.z */\n        || charCode >= 65 /* CharCode.A */ && charCode <= 90 /* CharCode.Z */\n        || charCode >= 48 /* CharCode.Digit0 */ && charCode <= 57 /* CharCode.Digit9 */;\n}\nconst score = {\n    [0 /* CharBoundaryCategory.WordLower */]: 0,\n    [1 /* CharBoundaryCategory.WordUpper */]: 0,\n    [2 /* CharBoundaryCategory.WordNumber */]: 0,\n    [3 /* CharBoundaryCategory.End */]: 10,\n    [4 /* CharBoundaryCategory.Other */]: 2,\n    [5 /* CharBoundaryCategory.Separator */]: 30,\n    [6 /* CharBoundaryCategory.Space */]: 3,\n    [7 /* CharBoundaryCategory.LineBreakCR */]: 10,\n    [8 /* CharBoundaryCategory.LineBreakLF */]: 10,\n};\nfunction getCategoryBoundaryScore(category) {\n    return score[category];\n}\nfunction getCategory(charCode) {\n    if (charCode === 10 /* CharCode.LineFeed */) {\n        return 8 /* CharBoundaryCategory.LineBreakLF */;\n    }\n    else if (charCode === 13 /* CharCode.CarriageReturn */) {\n        return 7 /* CharBoundaryCategory.LineBreakCR */;\n    }\n    else if (isSpace(charCode)) {\n        return 6 /* CharBoundaryCategory.Space */;\n    }\n    else if (charCode >= 97 /* CharCode.a */ && charCode <= 122 /* CharCode.z */) {\n        return 0 /* CharBoundaryCategory.WordLower */;\n    }\n    else if (charCode >= 65 /* CharCode.A */ && charCode <= 90 /* CharCode.Z */) {\n        return 1 /* CharBoundaryCategory.WordUpper */;\n    }\n    else if (charCode >= 48 /* CharCode.Digit0 */ && charCode <= 57 /* CharCode.Digit9 */) {\n        return 2 /* CharBoundaryCategory.WordNumber */;\n    }\n    else if (charCode === -1) {\n        return 3 /* CharBoundaryCategory.End */;\n    }\n    else if (charCode === 44 /* CharCode.Comma */ || charCode === 59 /* CharCode.Semicolon */) {\n        return 5 /* CharBoundaryCategory.Separator */;\n    }\n    else {\n        return 4 /* CharBoundaryCategory.Other */;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { SequenceDiff } from './algorithms/diffAlgorithm.js';\nimport { LineRangeMapping } from '../rangeMapping.js';\nimport { pushMany, compareBy, numberComparator, reverseOrder } from '../../../../base/common/arrays.js';\nimport { MonotonousArray, findLastMonotonous } from '../../../../base/common/arraysFind.js';\nimport { SetMap } from '../../../../base/common/map.js';\nimport { LineRange, LineRangeSet } from '../../core/lineRange.js';\nimport { LinesSliceCharSequence } from './linesSliceCharSequence.js';\nimport { LineRangeFragment, isSpace } from './utils.js';\nimport { MyersDiffAlgorithm } from './algorithms/myersDiffAlgorithm.js';\nimport { Range } from '../../core/range.js';\nexport function computeMovedLines(changes, originalLines, modifiedLines, hashedOriginalLines, hashedModifiedLines, timeout) {\n    let { moves, excludedChanges } = computeMovesFromSimpleDeletionsToSimpleInsertions(changes, originalLines, modifiedLines, timeout);\n    if (!timeout.isValid()) {\n        return [];\n    }\n    const filteredChanges = changes.filter(c => !excludedChanges.has(c));\n    const unchangedMoves = computeUnchangedMoves(filteredChanges, hashedOriginalLines, hashedModifiedLines, originalLines, modifiedLines, timeout);\n    pushMany(moves, unchangedMoves);\n    moves = joinCloseConsecutiveMoves(moves);\n    // Ignore too short moves\n    moves = moves.filter(current => {\n        const lines = current.original.toOffsetRange().slice(originalLines).map(l => l.trim());\n        const originalText = lines.join('\\n');\n        return originalText.length >= 15 && countWhere(lines, l => l.length >= 2) >= 2;\n    });\n    moves = removeMovesInSameDiff(changes, moves);\n    return moves;\n}\nfunction countWhere(arr, predicate) {\n    let count = 0;\n    for (const t of arr) {\n        if (predicate(t)) {\n            count++;\n        }\n    }\n    return count;\n}\nfunction computeMovesFromSimpleDeletionsToSimpleInsertions(changes, originalLines, modifiedLines, timeout) {\n    const moves = [];\n    const deletions = changes\n        .filter(c => c.modified.isEmpty && c.original.length >= 3)\n        .map(d => new LineRangeFragment(d.original, originalLines, d));\n    const insertions = new Set(changes\n        .filter(c => c.original.isEmpty && c.modified.length >= 3)\n        .map(d => new LineRangeFragment(d.modified, modifiedLines, d)));\n    const excludedChanges = new Set();\n    for (const deletion of deletions) {\n        let highestSimilarity = -1;\n        let best;\n        for (const insertion of insertions) {\n            const similarity = deletion.computeSimilarity(insertion);\n            if (similarity > highestSimilarity) {\n                highestSimilarity = similarity;\n                best = insertion;\n            }\n        }\n        if (highestSimilarity > 0.90 && best) {\n            insertions.delete(best);\n            moves.push(new LineRangeMapping(deletion.range, best.range));\n            excludedChanges.add(deletion.source);\n            excludedChanges.add(best.source);\n        }\n        if (!timeout.isValid()) {\n            return { moves, excludedChanges };\n        }\n    }\n    return { moves, excludedChanges };\n}\nfunction computeUnchangedMoves(changes, hashedOriginalLines, hashedModifiedLines, originalLines, modifiedLines, timeout) {\n    const moves = [];\n    const original3LineHashes = new SetMap();\n    for (const change of changes) {\n        for (let i = change.original.startLineNumber; i < change.original.endLineNumberExclusive - 2; i++) {\n            const key = `${hashedOriginalLines[i - 1]}:${hashedOriginalLines[i + 1 - 1]}:${hashedOriginalLines[i + 2 - 1]}`;\n            original3LineHashes.add(key, { range: new LineRange(i, i + 3) });\n        }\n    }\n    const possibleMappings = [];\n    changes.sort(compareBy(c => c.modified.startLineNumber, numberComparator));\n    for (const change of changes) {\n        let lastMappings = [];\n        for (let i = change.modified.startLineNumber; i < change.modified.endLineNumberExclusive - 2; i++) {\n            const key = `${hashedModifiedLines[i - 1]}:${hashedModifiedLines[i + 1 - 1]}:${hashedModifiedLines[i + 2 - 1]}`;\n            const currentModifiedRange = new LineRange(i, i + 3);\n            const nextMappings = [];\n            original3LineHashes.forEach(key, ({ range }) => {\n                for (const lastMapping of lastMappings) {\n                    // does this match extend some last match?\n                    if (lastMapping.originalLineRange.endLineNumberExclusive + 1 === range.endLineNumberExclusive &&\n                        lastMapping.modifiedLineRange.endLineNumberExclusive + 1 === currentModifiedRange.endLineNumberExclusive) {\n                        lastMapping.originalLineRange = new LineRange(lastMapping.originalLineRange.startLineNumber, range.endLineNumberExclusive);\n                        lastMapping.modifiedLineRange = new LineRange(lastMapping.modifiedLineRange.startLineNumber, currentModifiedRange.endLineNumberExclusive);\n                        nextMappings.push(lastMapping);\n                        return;\n                    }\n                }\n                const mapping = {\n                    modifiedLineRange: currentModifiedRange,\n                    originalLineRange: range,\n                };\n                possibleMappings.push(mapping);\n                nextMappings.push(mapping);\n            });\n            lastMappings = nextMappings;\n        }\n        if (!timeout.isValid()) {\n            return [];\n        }\n    }\n    possibleMappings.sort(reverseOrder(compareBy(m => m.modifiedLineRange.length, numberComparator)));\n    const modifiedSet = new LineRangeSet();\n    const originalSet = new LineRangeSet();\n    for (const mapping of possibleMappings) {\n        const diffOrigToMod = mapping.modifiedLineRange.startLineNumber - mapping.originalLineRange.startLineNumber;\n        const modifiedSections = modifiedSet.subtractFrom(mapping.modifiedLineRange);\n        const originalTranslatedSections = originalSet.subtractFrom(mapping.originalLineRange).getWithDelta(diffOrigToMod);\n        const modifiedIntersectedSections = modifiedSections.getIntersection(originalTranslatedSections);\n        for (const s of modifiedIntersectedSections.ranges) {\n            if (s.length < 3) {\n                continue;\n            }\n            const modifiedLineRange = s;\n            const originalLineRange = s.delta(-diffOrigToMod);\n            moves.push(new LineRangeMapping(originalLineRange, modifiedLineRange));\n            modifiedSet.addRange(modifiedLineRange);\n            originalSet.addRange(originalLineRange);\n        }\n    }\n    moves.sort(compareBy(m => m.original.startLineNumber, numberComparator));\n    const monotonousChanges = new MonotonousArray(changes);\n    for (let i = 0; i < moves.length; i++) {\n        const move = moves[i];\n        const firstTouchingChangeOrig = monotonousChanges.findLastMonotonous(c => c.original.startLineNumber <= move.original.startLineNumber);\n        const firstTouchingChangeMod = findLastMonotonous(changes, c => c.modified.startLineNumber <= move.modified.startLineNumber);\n        const linesAbove = Math.max(move.original.startLineNumber - firstTouchingChangeOrig.original.startLineNumber, move.modified.startLineNumber - firstTouchingChangeMod.modified.startLineNumber);\n        const lastTouchingChangeOrig = monotonousChanges.findLastMonotonous(c => c.original.startLineNumber < move.original.endLineNumberExclusive);\n        const lastTouchingChangeMod = findLastMonotonous(changes, c => c.modified.startLineNumber < move.modified.endLineNumberExclusive);\n        const linesBelow = Math.max(lastTouchingChangeOrig.original.endLineNumberExclusive - move.original.endLineNumberExclusive, lastTouchingChangeMod.modified.endLineNumberExclusive - move.modified.endLineNumberExclusive);\n        let extendToTop;\n        for (extendToTop = 0; extendToTop < linesAbove; extendToTop++) {\n            const origLine = move.original.startLineNumber - extendToTop - 1;\n            const modLine = move.modified.startLineNumber - extendToTop - 1;\n            if (origLine > originalLines.length || modLine > modifiedLines.length) {\n                break;\n            }\n            if (modifiedSet.contains(modLine) || originalSet.contains(origLine)) {\n                break;\n            }\n            if (!areLinesSimilar(originalLines[origLine - 1], modifiedLines[modLine - 1], timeout)) {\n                break;\n            }\n        }\n        if (extendToTop > 0) {\n            originalSet.addRange(new LineRange(move.original.startLineNumber - extendToTop, move.original.startLineNumber));\n            modifiedSet.addRange(new LineRange(move.modified.startLineNumber - extendToTop, move.modified.startLineNumber));\n        }\n        let extendToBottom;\n        for (extendToBottom = 0; extendToBottom < linesBelow; extendToBottom++) {\n            const origLine = move.original.endLineNumberExclusive + extendToBottom;\n            const modLine = move.modified.endLineNumberExclusive + extendToBottom;\n            if (origLine > originalLines.length || modLine > modifiedLines.length) {\n                break;\n            }\n            if (modifiedSet.contains(modLine) || originalSet.contains(origLine)) {\n                break;\n            }\n            if (!areLinesSimilar(originalLines[origLine - 1], modifiedLines[modLine - 1], timeout)) {\n                break;\n            }\n        }\n        if (extendToBottom > 0) {\n            originalSet.addRange(new LineRange(move.original.endLineNumberExclusive, move.original.endLineNumberExclusive + extendToBottom));\n            modifiedSet.addRange(new LineRange(move.modified.endLineNumberExclusive, move.modified.endLineNumberExclusive + extendToBottom));\n        }\n        if (extendToTop > 0 || extendToBottom > 0) {\n            moves[i] = new LineRangeMapping(new LineRange(move.original.startLineNumber - extendToTop, move.original.endLineNumberExclusive + extendToBottom), new LineRange(move.modified.startLineNumber - extendToTop, move.modified.endLineNumberExclusive + extendToBottom));\n        }\n    }\n    return moves;\n}\nfunction areLinesSimilar(line1, line2, timeout) {\n    if (line1.trim() === line2.trim()) {\n        return true;\n    }\n    if (line1.length > 300 && line2.length > 300) {\n        return false;\n    }\n    const myersDiffingAlgorithm = new MyersDiffAlgorithm();\n    const result = myersDiffingAlgorithm.compute(new LinesSliceCharSequence([line1], new Range(1, 1, 1, line1.length), false), new LinesSliceCharSequence([line2], new Range(1, 1, 1, line2.length), false), timeout);\n    let commonNonSpaceCharCount = 0;\n    const inverted = SequenceDiff.invert(result.diffs, line1.length);\n    for (const seq of inverted) {\n        seq.seq1Range.forEach(idx => {\n            if (!isSpace(line1.charCodeAt(idx))) {\n                commonNonSpaceCharCount++;\n            }\n        });\n    }\n    function countNonWsChars(str) {\n        let count = 0;\n        for (let i = 0; i < line1.length; i++) {\n            if (!isSpace(str.charCodeAt(i))) {\n                count++;\n            }\n        }\n        return count;\n    }\n    const longerLineLength = countNonWsChars(line1.length > line2.length ? line1 : line2);\n    const r = commonNonSpaceCharCount / longerLineLength > 0.6 && longerLineLength > 10;\n    return r;\n}\nfunction joinCloseConsecutiveMoves(moves) {\n    if (moves.length === 0) {\n        return moves;\n    }\n    moves.sort(compareBy(m => m.original.startLineNumber, numberComparator));\n    const result = [moves[0]];\n    for (let i = 1; i < moves.length; i++) {\n        const last = result[result.length - 1];\n        const current = moves[i];\n        const originalDist = current.original.startLineNumber - last.original.endLineNumberExclusive;\n        const modifiedDist = current.modified.startLineNumber - last.modified.endLineNumberExclusive;\n        const currentMoveAfterLast = originalDist >= 0 && modifiedDist >= 0;\n        if (currentMoveAfterLast && originalDist + modifiedDist <= 2) {\n            result[result.length - 1] = last.join(current);\n            continue;\n        }\n        result.push(current);\n    }\n    return result;\n}\nfunction removeMovesInSameDiff(changes, moves) {\n    const changesMonotonous = new MonotonousArray(changes);\n    moves = moves.filter(m => {\n        const diffBeforeEndOfMoveOriginal = changesMonotonous.findLastMonotonous(c => c.original.startLineNumber < m.original.endLineNumberExclusive)\n            || new LineRangeMapping(new LineRange(1, 1), new LineRange(1, 1));\n        const diffBeforeEndOfMoveModified = findLastMonotonous(changes, c => c.modified.startLineNumber < m.modified.endLineNumberExclusive);\n        const differentDiffs = diffBeforeEndOfMoveOriginal !== diffBeforeEndOfMoveModified;\n        return differentDiffs;\n    });\n    return moves;\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { forEachWithNeighbors } from '../../../../base/common/arrays.js';\nimport { OffsetRange } from '../../core/offsetRange.js';\nimport { OffsetPair, SequenceDiff } from './algorithms/diffAlgorithm.js';\nexport function optimizeSequenceDiffs(sequence1, sequence2, sequenceDiffs) {\n    let result = sequenceDiffs;\n    result = joinSequenceDiffsByShifting(sequence1, sequence2, result);\n    // Sometimes, calling this function twice improves the result.\n    // Uncomment the second invocation and run the tests to see the difference.\n    result = joinSequenceDiffsByShifting(sequence1, sequence2, result);\n    result = shiftSequenceDiffs(sequence1, sequence2, result);\n    return result;\n}\n/**\n * This function fixes issues like this:\n * ```\n * import { Baz, Bar } from \"foo\";\n * ```\n * <->\n * ```\n * import { Baz, Bar, Foo } from \"foo\";\n * ```\n * Computed diff: [ {Add \",\" after Bar}, {Add \"Foo \" after space} }\n * Improved diff: [{Add \", Foo\" after Bar}]\n */\nfunction joinSequenceDiffsByShifting(sequence1, sequence2, sequenceDiffs) {\n    if (sequenceDiffs.length === 0) {\n        return sequenceDiffs;\n    }\n    const result = [];\n    result.push(sequenceDiffs[0]);\n    // First move them all to the left as much as possible and join them if possible\n    for (let i = 1; i < sequenceDiffs.length; i++) {\n        const prevResult = result[result.length - 1];\n        let cur = sequenceDiffs[i];\n        if (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) {\n            const length = cur.seq1Range.start - prevResult.seq1Range.endExclusive;\n            let d;\n            for (d = 1; d <= length; d++) {\n                if (sequence1.getElement(cur.seq1Range.start - d) !== sequence1.getElement(cur.seq1Range.endExclusive - d) ||\n                    sequence2.getElement(cur.seq2Range.start - d) !== sequence2.getElement(cur.seq2Range.endExclusive - d)) {\n                    break;\n                }\n            }\n            d--;\n            if (d === length) {\n                // Merge previous and current diff\n                result[result.length - 1] = new SequenceDiff(new OffsetRange(prevResult.seq1Range.start, cur.seq1Range.endExclusive - length), new OffsetRange(prevResult.seq2Range.start, cur.seq2Range.endExclusive - length));\n                continue;\n            }\n            cur = cur.delta(-d);\n        }\n        result.push(cur);\n    }\n    const result2 = [];\n    // Then move them all to the right and join them again if possible\n    for (let i = 0; i < result.length - 1; i++) {\n        const nextResult = result[i + 1];\n        let cur = result[i];\n        if (cur.seq1Range.isEmpty || cur.seq2Range.isEmpty) {\n            const length = nextResult.seq1Range.start - cur.seq1Range.endExclusive;\n            let d;\n            for (d = 0; d < length; d++) {\n                if (!sequence1.isStronglyEqual(cur.seq1Range.start + d, cur.seq1Range.endExclusive + d) ||\n                    !sequence2.isStronglyEqual(cur.seq2Range.start + d, cur.seq2Range.endExclusive + d)) {\n                    break;\n                }\n            }\n            if (d === length) {\n                // Merge previous and current diff, write to result!\n                result[i + 1] = new SequenceDiff(new OffsetRange(cur.seq1Range.start + length, nextResult.seq1Range.endExclusive), new OffsetRange(cur.seq2Range.start + length, nextResult.seq2Range.endExclusive));\n                continue;\n            }\n            if (d > 0) {\n                cur = cur.delta(d);\n            }\n        }\n        result2.push(cur);\n    }\n    if (result.length > 0) {\n        result2.push(result[result.length - 1]);\n    }\n    return result2;\n}\n// align character level diffs at whitespace characters\n// import { IBar } from \"foo\";\n// import { I[Arr, I]Bar } from \"foo\";\n// ->\n// import { [IArr, ]IBar } from \"foo\";\n// import { ITransaction, observableValue, transaction } from 'vs/base/common/observable';\n// import { ITransaction, observable[FromEvent, observable]Value, transaction } from 'vs/base/common/observable';\n// ->\n// import { ITransaction, [observableFromEvent, ]observableValue, transaction } from 'vs/base/common/observable';\n// collectBrackets(level + 1, levelPerBracketType);\n// collectBrackets(level + 1, levelPerBracket[ + 1, levelPerBracket]Type);\n// ->\n// collectBrackets(level + 1, [levelPerBracket + 1, ]levelPerBracketType);\nfunction shiftSequenceDiffs(sequence1, sequence2, sequenceDiffs) {\n    if (!sequence1.getBoundaryScore || !sequence2.getBoundaryScore) {\n        return sequenceDiffs;\n    }\n    for (let i = 0; i < sequenceDiffs.length; i++) {\n        const prevDiff = (i > 0 ? sequenceDiffs[i - 1] : undefined);\n        const diff = sequenceDiffs[i];\n        const nextDiff = (i + 1 < sequenceDiffs.length ? sequenceDiffs[i + 1] : undefined);\n        const seq1ValidRange = new OffsetRange(prevDiff ? prevDiff.seq1Range.endExclusive + 1 : 0, nextDiff ? nextDiff.seq1Range.start - 1 : sequence1.length);\n        const seq2ValidRange = new OffsetRange(prevDiff ? prevDiff.seq2Range.endExclusive + 1 : 0, nextDiff ? nextDiff.seq2Range.start - 1 : sequence2.length);\n        if (diff.seq1Range.isEmpty) {\n            sequenceDiffs[i] = shiftDiffToBetterPosition(diff, sequence1, sequence2, seq1ValidRange, seq2ValidRange);\n        }\n        else if (diff.seq2Range.isEmpty) {\n            sequenceDiffs[i] = shiftDiffToBetterPosition(diff.swap(), sequence2, sequence1, seq2ValidRange, seq1ValidRange).swap();\n        }\n    }\n    return sequenceDiffs;\n}\nfunction shiftDiffToBetterPosition(diff, sequence1, sequence2, seq1ValidRange, seq2ValidRange) {\n    const maxShiftLimit = 100; // To prevent performance issues\n    // don't touch previous or next!\n    let deltaBefore = 1;\n    while (diff.seq1Range.start - deltaBefore >= seq1ValidRange.start &&\n        diff.seq2Range.start - deltaBefore >= seq2ValidRange.start &&\n        sequence2.isStronglyEqual(diff.seq2Range.start - deltaBefore, diff.seq2Range.endExclusive - deltaBefore) && deltaBefore < maxShiftLimit) {\n        deltaBefore++;\n    }\n    deltaBefore--;\n    let deltaAfter = 0;\n    while (diff.seq1Range.start + deltaAfter < seq1ValidRange.endExclusive &&\n        diff.seq2Range.endExclusive + deltaAfter < seq2ValidRange.endExclusive &&\n        sequence2.isStronglyEqual(diff.seq2Range.start + deltaAfter, diff.seq2Range.endExclusive + deltaAfter) && deltaAfter < maxShiftLimit) {\n        deltaAfter++;\n    }\n    if (deltaBefore === 0 && deltaAfter === 0) {\n        return diff;\n    }\n    // Visualize `[sequence1.text, diff.seq1Range.start + deltaAfter]`\n    // and `[sequence2.text, diff.seq2Range.start + deltaAfter, diff.seq2Range.endExclusive + deltaAfter]`\n    let bestDelta = 0;\n    let bestScore = -1;\n    // find best scored delta\n    for (let delta = -deltaBefore; delta <= deltaAfter; delta++) {\n        const seq2OffsetStart = diff.seq2Range.start + delta;\n        const seq2OffsetEndExclusive = diff.seq2Range.endExclusive + delta;\n        const seq1Offset = diff.seq1Range.start + delta;\n        const score = sequence1.getBoundaryScore(seq1Offset) + sequence2.getBoundaryScore(seq2OffsetStart) + sequence2.getBoundaryScore(seq2OffsetEndExclusive);\n        if (score > bestScore) {\n            bestScore = score;\n            bestDelta = delta;\n        }\n    }\n    return diff.delta(bestDelta);\n}\nexport function removeShortMatches(sequence1, sequence2, sequenceDiffs) {\n    const result = [];\n    for (const s of sequenceDiffs) {\n        const last = result[result.length - 1];\n        if (!last) {\n            result.push(s);\n            continue;\n        }\n        if (s.seq1Range.start - last.seq1Range.endExclusive <= 2 || s.seq2Range.start - last.seq2Range.endExclusive <= 2) {\n            result[result.length - 1] = new SequenceDiff(last.seq1Range.join(s.seq1Range), last.seq2Range.join(s.seq2Range));\n        }\n        else {\n            result.push(s);\n        }\n    }\n    return result;\n}\nexport function extendDiffsToEntireWordIfAppropriate(sequence1, sequence2, sequenceDiffs) {\n    const equalMappings = SequenceDiff.invert(sequenceDiffs, sequence1.length);\n    const additional = [];\n    let lastPoint = new OffsetPair(0, 0);\n    function scanWord(pair, equalMapping) {\n        if (pair.offset1 < lastPoint.offset1 || pair.offset2 < lastPoint.offset2) {\n            return;\n        }\n        const w1 = sequence1.findWordContaining(pair.offset1);\n        const w2 = sequence2.findWordContaining(pair.offset2);\n        if (!w1 || !w2) {\n            return;\n        }\n        let w = new SequenceDiff(w1, w2);\n        const equalPart = w.intersect(equalMapping);\n        let equalChars1 = equalPart.seq1Range.length;\n        let equalChars2 = equalPart.seq2Range.length;\n        // The words do not touch previous equals mappings, as we would have processed them already.\n        // But they might touch the next ones.\n        while (equalMappings.length > 0) {\n            const next = equalMappings[0];\n            const intersects = next.seq1Range.intersects(w.seq1Range) || next.seq2Range.intersects(w.seq2Range);\n            if (!intersects) {\n                break;\n            }\n            const v1 = sequence1.findWordContaining(next.seq1Range.start);\n            const v2 = sequence2.findWordContaining(next.seq2Range.start);\n            // Because there is an intersection, we know that the words are not empty.\n            const v = new SequenceDiff(v1, v2);\n            const equalPart = v.intersect(next);\n            equalChars1 += equalPart.seq1Range.length;\n            equalChars2 += equalPart.seq2Range.length;\n            w = w.join(v);\n            if (w.seq1Range.endExclusive >= next.seq1Range.endExclusive) {\n                // The word extends beyond the next equal mapping.\n                equalMappings.shift();\n            }\n            else {\n                break;\n            }\n        }\n        if (equalChars1 + equalChars2 < (w.seq1Range.length + w.seq2Range.length) * 2 / 3) {\n            additional.push(w);\n        }\n        lastPoint = w.getEndExclusives();\n    }\n    while (equalMappings.length > 0) {\n        const next = equalMappings.shift();\n        if (next.seq1Range.isEmpty) {\n            continue;\n        }\n        scanWord(next.getStarts(), next);\n        // The equal parts are not empty, so -1 gives us a character that is equal in both parts.\n        scanWord(next.getEndExclusives().delta(-1), next);\n    }\n    const merged = mergeSequenceDiffs(sequenceDiffs, additional);\n    return merged;\n}\nfunction mergeSequenceDiffs(sequenceDiffs1, sequenceDiffs2) {\n    const result = [];\n    while (sequenceDiffs1.length > 0 || sequenceDiffs2.length > 0) {\n        const sd1 = sequenceDiffs1[0];\n        const sd2 = sequenceDiffs2[0];\n        let next;\n        if (sd1 && (!sd2 || sd1.seq1Range.start < sd2.seq1Range.start)) {\n            next = sequenceDiffs1.shift();\n        }\n        else {\n            next = sequenceDiffs2.shift();\n        }\n        if (result.length > 0 && result[result.length - 1].seq1Range.endExclusive >= next.seq1Range.start) {\n            result[result.length - 1] = result[result.length - 1].join(next);\n        }\n        else {\n            result.push(next);\n        }\n    }\n    return result;\n}\nexport function removeVeryShortMatchingLinesBetweenDiffs(sequence1, _sequence2, sequenceDiffs) {\n    let diffs = sequenceDiffs;\n    if (diffs.length === 0) {\n        return diffs;\n    }\n    let counter = 0;\n    let shouldRepeat;\n    do {\n        shouldRepeat = false;\n        const result = [\n            diffs[0]\n        ];\n        for (let i = 1; i < diffs.length; i++) {\n            const cur = diffs[i];\n            const lastResult = result[result.length - 1];\n            function shouldJoinDiffs(before, after) {\n                const unchangedRange = new OffsetRange(lastResult.seq1Range.endExclusive, cur.seq1Range.start);\n                const unchangedText = sequence1.getText(unchangedRange);\n                const unchangedTextWithoutWs = unchangedText.replace(/\\s/g, '');\n                if (unchangedTextWithoutWs.length <= 4\n                    && (before.seq1Range.length + before.seq2Range.length > 5 || after.seq1Range.length + after.seq2Range.length > 5)) {\n                    return true;\n                }\n                return false;\n            }\n            const shouldJoin = shouldJoinDiffs(lastResult, cur);\n            if (shouldJoin) {\n                shouldRepeat = true;\n                result[result.length - 1] = result[result.length - 1].join(cur);\n            }\n            else {\n                result.push(cur);\n            }\n        }\n        diffs = result;\n    } while (counter++ < 10 && shouldRepeat);\n    return diffs;\n}\nexport function removeVeryShortMatchingTextBetweenLongDiffs(sequence1, sequence2, sequenceDiffs) {\n    let diffs = sequenceDiffs;\n    if (diffs.length === 0) {\n        return diffs;\n    }\n    let counter = 0;\n    let shouldRepeat;\n    do {\n        shouldRepeat = false;\n        const result = [\n            diffs[0]\n        ];\n        for (let i = 1; i < diffs.length; i++) {\n            const cur = diffs[i];\n            const lastResult = result[result.length - 1];\n            function shouldJoinDiffs(before, after) {\n                const unchangedRange = new OffsetRange(lastResult.seq1Range.endExclusive, cur.seq1Range.start);\n                const unchangedLineCount = sequence1.countLinesIn(unchangedRange);\n                if (unchangedLineCount > 5 || unchangedRange.length > 500) {\n                    return false;\n                }\n                const unchangedText = sequence1.getText(unchangedRange).trim();\n                if (unchangedText.length > 20 || unchangedText.split(/\\r\\n|\\r|\\n/).length > 1) {\n                    return false;\n                }\n                const beforeLineCount1 = sequence1.countLinesIn(before.seq1Range);\n                const beforeSeq1Length = before.seq1Range.length;\n                const beforeLineCount2 = sequence2.countLinesIn(before.seq2Range);\n                const beforeSeq2Length = before.seq2Range.length;\n                const afterLineCount1 = sequence1.countLinesIn(after.seq1Range);\n                const afterSeq1Length = after.seq1Range.length;\n                const afterLineCount2 = sequence2.countLinesIn(after.seq2Range);\n                const afterSeq2Length = after.seq2Range.length;\n                // TODO: Maybe a neural net can be used to derive the result from these numbers\n                const max = 2 * 40 + 50;\n                function cap(v) {\n                    return Math.min(v, max);\n                }\n                if (Math.pow(Math.pow(cap(beforeLineCount1 * 40 + beforeSeq1Length), 1.5) + Math.pow(cap(beforeLineCount2 * 40 + beforeSeq2Length), 1.5), 1.5)\n                    + Math.pow(Math.pow(cap(afterLineCount1 * 40 + afterSeq1Length), 1.5) + Math.pow(cap(afterLineCount2 * 40 + afterSeq2Length), 1.5), 1.5) > ((max ** 1.5) ** 1.5) * 1.3) {\n                    return true;\n                }\n                return false;\n            }\n            const shouldJoin = shouldJoinDiffs(lastResult, cur);\n            if (shouldJoin) {\n                shouldRepeat = true;\n                result[result.length - 1] = result[result.length - 1].join(cur);\n            }\n            else {\n                result.push(cur);\n            }\n        }\n        diffs = result;\n    } while (counter++ < 10 && shouldRepeat);\n    const newDiffs = [];\n    // Remove short suffixes/prefixes\n    forEachWithNeighbors(diffs, (prev, cur, next) => {\n        let newDiff = cur;\n        function shouldMarkAsChanged(text) {\n            return text.length > 0 && text.trim().length <= 3 && cur.seq1Range.length + cur.seq2Range.length > 100;\n        }\n        const fullRange1 = sequence1.extendToFullLines(cur.seq1Range);\n        const prefix = sequence1.getText(new OffsetRange(fullRange1.start, cur.seq1Range.start));\n        if (shouldMarkAsChanged(prefix)) {\n            newDiff = newDiff.deltaStart(-prefix.length);\n        }\n        const suffix = sequence1.getText(new OffsetRange(cur.seq1Range.endExclusive, fullRange1.endExclusive));\n        if (shouldMarkAsChanged(suffix)) {\n            newDiff = newDiff.deltaEnd(suffix.length);\n        }\n        const availableSpace = SequenceDiff.fromOffsetPairs(prev ? prev.getEndExclusives() : OffsetPair.zero, next ? next.getStarts() : OffsetPair.max);\n        const result = newDiff.intersect(availableSpace);\n        if (newDiffs.length > 0 && result.getStarts().equals(newDiffs[newDiffs.length - 1].getEndExclusives())) {\n            newDiffs[newDiffs.length - 1] = newDiffs[newDiffs.length - 1].join(result);\n        }\n        else {\n            newDiffs.push(result);\n        }\n    });\n    return newDiffs;\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 LineSequence {\n    constructor(trimmedHash, lines) {\n        this.trimmedHash = trimmedHash;\n        this.lines = lines;\n    }\n    getElement(offset) {\n        return this.trimmedHash[offset];\n    }\n    get length() {\n        return this.trimmedHash.length;\n    }\n    getBoundaryScore(length) {\n        const indentationBefore = length === 0 ? 0 : getIndentation(this.lines[length - 1]);\n        const indentationAfter = length === this.lines.length ? 0 : getIndentation(this.lines[length]);\n        return 1000 - (indentationBefore + indentationAfter);\n    }\n    getText(range) {\n        return this.lines.slice(range.start, range.endExclusive).join('\\n');\n    }\n    isStronglyEqual(offset1, offset2) {\n        return this.lines[offset1] === this.lines[offset2];\n    }\n}\nfunction getIndentation(str) {\n    let i = 0;\n    while (i < str.length && (str.charCodeAt(i) === 32 /* CharCode.Space */ || str.charCodeAt(i) === 9 /* CharCode.Tab */)) {\n        i++;\n    }\n    return i;\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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, groupAdjacentBy } from '../../../../base/common/arrays.js';\nimport { assertFn, checkAdjacentItems } from '../../../../base/common/assert.js';\nimport { LineRange } from '../../core/lineRange.js';\nimport { OffsetRange } from '../../core/offsetRange.js';\nimport { Range } from '../../core/range.js';\nimport { DateTimeout, InfiniteTimeout, SequenceDiff } from './algorithms/diffAlgorithm.js';\nimport { DynamicProgrammingDiffing } from './algorithms/dynamicProgrammingDiffing.js';\nimport { MyersDiffAlgorithm } from './algorithms/myersDiffAlgorithm.js';\nimport { computeMovedLines } from './computeMovedLines.js';\nimport { extendDiffsToEntireWordIfAppropriate, optimizeSequenceDiffs, removeShortMatches, removeVeryShortMatchingLinesBetweenDiffs, removeVeryShortMatchingTextBetweenLongDiffs } from './heuristicSequenceOptimizations.js';\nimport { LineSequence } from './lineSequence.js';\nimport { LinesSliceCharSequence } from './linesSliceCharSequence.js';\nimport { LinesDiff, MovedText } from '../linesDiffComputer.js';\nimport { DetailedLineRangeMapping, LineRangeMapping, RangeMapping } from '../rangeMapping.js';\nexport class DefaultLinesDiffComputer {\n    constructor() {\n        this.dynamicProgrammingDiffing = new DynamicProgrammingDiffing();\n        this.myersDiffingAlgorithm = new MyersDiffAlgorithm();\n    }\n    computeDiff(originalLines, modifiedLines, options) {\n        if (originalLines.length <= 1 && equals(originalLines, modifiedLines, (a, b) => a === b)) {\n            return new LinesDiff([], [], false);\n        }\n        if (originalLines.length === 1 && originalLines[0].length === 0 || modifiedLines.length === 1 && modifiedLines[0].length === 0) {\n            return new LinesDiff([\n                new DetailedLineRangeMapping(new LineRange(1, originalLines.length + 1), new LineRange(1, modifiedLines.length + 1), [\n                    new RangeMapping(new Range(1, 1, originalLines.length, originalLines[originalLines.length - 1].length + 1), new Range(1, 1, modifiedLines.length, modifiedLines[modifiedLines.length - 1].length + 1))\n                ])\n            ], [], false);\n        }\n        const timeout = options.maxComputationTimeMs === 0 ? InfiniteTimeout.instance : new DateTimeout(options.maxComputationTimeMs);\n        const considerWhitespaceChanges = !options.ignoreTrimWhitespace;\n        const perfectHashes = new Map();\n        function getOrCreateHash(text) {\n            let hash = perfectHashes.get(text);\n            if (hash === undefined) {\n                hash = perfectHashes.size;\n                perfectHashes.set(text, hash);\n            }\n            return hash;\n        }\n        const originalLinesHashes = originalLines.map((l) => getOrCreateHash(l.trim()));\n        const modifiedLinesHashes = modifiedLines.map((l) => getOrCreateHash(l.trim()));\n        const sequence1 = new LineSequence(originalLinesHashes, originalLines);\n        const sequence2 = new LineSequence(modifiedLinesHashes, modifiedLines);\n        const lineAlignmentResult = (() => {\n            if (sequence1.length + sequence2.length < 1700) {\n                // Use the improved algorithm for small files\n                return this.dynamicProgrammingDiffing.compute(sequence1, sequence2, timeout, (offset1, offset2) => originalLines[offset1] === modifiedLines[offset2]\n                    ? modifiedLines[offset2].length === 0\n                        ? 0.1\n                        : 1 + Math.log(1 + modifiedLines[offset2].length)\n                    : 0.99);\n            }\n            return this.myersDiffingAlgorithm.compute(sequence1, sequence2, timeout);\n        })();\n        let lineAlignments = lineAlignmentResult.diffs;\n        let hitTimeout = lineAlignmentResult.hitTimeout;\n        lineAlignments = optimizeSequenceDiffs(sequence1, sequence2, lineAlignments);\n        lineAlignments = removeVeryShortMatchingLinesBetweenDiffs(sequence1, sequence2, lineAlignments);\n        const alignments = [];\n        const scanForWhitespaceChanges = (equalLinesCount) => {\n            if (!considerWhitespaceChanges) {\n                return;\n            }\n            for (let i = 0; i < equalLinesCount; i++) {\n                const seq1Offset = seq1LastStart + i;\n                const seq2Offset = seq2LastStart + i;\n                if (originalLines[seq1Offset] !== modifiedLines[seq2Offset]) {\n                    // This is because of whitespace changes, diff these lines\n                    const characterDiffs = this.refineDiff(originalLines, modifiedLines, new SequenceDiff(new OffsetRange(seq1Offset, seq1Offset + 1), new OffsetRange(seq2Offset, seq2Offset + 1)), timeout, considerWhitespaceChanges);\n                    for (const a of characterDiffs.mappings) {\n                        alignments.push(a);\n                    }\n                    if (characterDiffs.hitTimeout) {\n                        hitTimeout = true;\n                    }\n                }\n            }\n        };\n        let seq1LastStart = 0;\n        let seq2LastStart = 0;\n        for (const diff of lineAlignments) {\n            assertFn(() => diff.seq1Range.start - seq1LastStart === diff.seq2Range.start - seq2LastStart);\n            const equalLinesCount = diff.seq1Range.start - seq1LastStart;\n            scanForWhitespaceChanges(equalLinesCount);\n            seq1LastStart = diff.seq1Range.endExclusive;\n            seq2LastStart = diff.seq2Range.endExclusive;\n            const characterDiffs = this.refineDiff(originalLines, modifiedLines, diff, timeout, considerWhitespaceChanges);\n            if (characterDiffs.hitTimeout) {\n                hitTimeout = true;\n            }\n            for (const a of characterDiffs.mappings) {\n                alignments.push(a);\n            }\n        }\n        scanForWhitespaceChanges(originalLines.length - seq1LastStart);\n        const changes = lineRangeMappingFromRangeMappings(alignments, originalLines, modifiedLines);\n        let moves = [];\n        if (options.computeMoves) {\n            moves = this.computeMoves(changes, originalLines, modifiedLines, originalLinesHashes, modifiedLinesHashes, timeout, considerWhitespaceChanges);\n        }\n        // Make sure all ranges are valid\n        assertFn(() => {\n            function validatePosition(pos, lines) {\n                if (pos.lineNumber < 1 || pos.lineNumber > lines.length) {\n                    return false;\n                }\n                const line = lines[pos.lineNumber - 1];\n                if (pos.column < 1 || pos.column > line.length + 1) {\n                    return false;\n                }\n                return true;\n            }\n            function validateRange(range, lines) {\n                if (range.startLineNumber < 1 || range.startLineNumber > lines.length + 1) {\n                    return false;\n                }\n                if (range.endLineNumberExclusive < 1 || range.endLineNumberExclusive > lines.length + 1) {\n                    return false;\n                }\n                return true;\n            }\n            for (const c of changes) {\n                if (!c.innerChanges) {\n                    return false;\n                }\n                for (const ic of c.innerChanges) {\n                    const valid = validatePosition(ic.modifiedRange.getStartPosition(), modifiedLines) && validatePosition(ic.modifiedRange.getEndPosition(), modifiedLines) &&\n                        validatePosition(ic.originalRange.getStartPosition(), originalLines) && validatePosition(ic.originalRange.getEndPosition(), originalLines);\n                    if (!valid) {\n                        return false;\n                    }\n                }\n                if (!validateRange(c.modified, modifiedLines) || !validateRange(c.original, originalLines)) {\n                    return false;\n                }\n            }\n            return true;\n        });\n        return new LinesDiff(changes, moves, hitTimeout);\n    }\n    computeMoves(changes, originalLines, modifiedLines, hashedOriginalLines, hashedModifiedLines, timeout, considerWhitespaceChanges) {\n        const moves = computeMovedLines(changes, originalLines, modifiedLines, hashedOriginalLines, hashedModifiedLines, timeout);\n        const movesWithDiffs = moves.map(m => {\n            const moveChanges = this.refineDiff(originalLines, modifiedLines, new SequenceDiff(m.original.toOffsetRange(), m.modified.toOffsetRange()), timeout, considerWhitespaceChanges);\n            const mappings = lineRangeMappingFromRangeMappings(moveChanges.mappings, originalLines, modifiedLines, true);\n            return new MovedText(m, mappings);\n        });\n        return movesWithDiffs;\n    }\n    refineDiff(originalLines, modifiedLines, diff, timeout, considerWhitespaceChanges) {\n        const lineRangeMapping = toLineRangeMapping(diff);\n        const rangeMapping = lineRangeMapping.toRangeMapping2(originalLines, modifiedLines);\n        const slice1 = new LinesSliceCharSequence(originalLines, rangeMapping.originalRange, considerWhitespaceChanges);\n        const slice2 = new LinesSliceCharSequence(modifiedLines, rangeMapping.modifiedRange, considerWhitespaceChanges);\n        const diffResult = slice1.length + slice2.length < 500\n            ? this.dynamicProgrammingDiffing.compute(slice1, slice2, timeout)\n            : this.myersDiffingAlgorithm.compute(slice1, slice2, timeout);\n        const check = false;\n        let diffs = diffResult.diffs;\n        if (check) {\n            SequenceDiff.assertSorted(diffs);\n        }\n        diffs = optimizeSequenceDiffs(slice1, slice2, diffs);\n        if (check) {\n            SequenceDiff.assertSorted(diffs);\n        }\n        diffs = extendDiffsToEntireWordIfAppropriate(slice1, slice2, diffs);\n        if (check) {\n            SequenceDiff.assertSorted(diffs);\n        }\n        diffs = removeShortMatches(slice1, slice2, diffs);\n        if (check) {\n            SequenceDiff.assertSorted(diffs);\n        }\n        diffs = removeVeryShortMatchingTextBetweenLongDiffs(slice1, slice2, diffs);\n        if (check) {\n            SequenceDiff.assertSorted(diffs);\n        }\n        const result = diffs.map((d) => new RangeMapping(slice1.translateRange(d.seq1Range), slice2.translateRange(d.seq2Range)));\n        if (check) {\n            RangeMapping.assertSorted(result);\n        }\n        // Assert: result applied on original should be the same as diff applied to original\n        return {\n            mappings: result,\n            hitTimeout: diffResult.hitTimeout,\n        };\n    }\n}\nexport function lineRangeMappingFromRangeMappings(alignments, originalLines, modifiedLines, dontAssertStartLine = false) {\n    const changes = [];\n    for (const g of groupAdjacentBy(alignments.map(a => getLineRangeMapping(a, originalLines, modifiedLines)), (a1, a2) => a1.original.overlapOrTouch(a2.original)\n        || a1.modified.overlapOrTouch(a2.modified))) {\n        const first = g[0];\n        const last = g[g.length - 1];\n        changes.push(new DetailedLineRangeMapping(first.original.join(last.original), first.modified.join(last.modified), g.map(a => a.innerChanges[0])));\n    }\n    assertFn(() => {\n        if (!dontAssertStartLine && changes.length > 0) {\n            if (changes[0].modified.startLineNumber !== changes[0].original.startLineNumber) {\n                return false;\n            }\n            if (modifiedLines.length - changes[changes.length - 1].modified.endLineNumberExclusive !== originalLines.length - changes[changes.length - 1].original.endLineNumberExclusive) {\n                return false;\n            }\n        }\n        return checkAdjacentItems(changes, (m1, m2) => m2.original.startLineNumber - m1.original.endLineNumberExclusive === m2.modified.startLineNumber - m1.modified.endLineNumberExclusive &&\n            // There has to be an unchanged line in between (otherwise both diffs should have been joined)\n            m1.original.endLineNumberExclusive < m2.original.startLineNumber &&\n            m1.modified.endLineNumberExclusive < m2.modified.startLineNumber);\n    });\n    return changes;\n}\nexport function getLineRangeMapping(rangeMapping, originalLines, modifiedLines) {\n    let lineStartDelta = 0;\n    let lineEndDelta = 0;\n    // rangeMapping describes the edit that replaces `rangeMapping.originalRange` with `newText := getText(modifiedLines, rangeMapping.modifiedRange)`.\n    // original: ]xxx \\n <- this line is not modified\n    // modified: ]xx  \\n\n    if (rangeMapping.modifiedRange.endColumn === 1 && rangeMapping.originalRange.endColumn === 1\n        && rangeMapping.originalRange.startLineNumber + lineStartDelta <= rangeMapping.originalRange.endLineNumber\n        && rangeMapping.modifiedRange.startLineNumber + lineStartDelta <= rangeMapping.modifiedRange.endLineNumber) {\n        // We can only do this if the range is not empty yet\n        lineEndDelta = -1;\n    }\n    // original: xxx[ \\n <- this line is not modified\n    // modified: xxx[ \\n\n    if (rangeMapping.modifiedRange.startColumn - 1 >= modifiedLines[rangeMapping.modifiedRange.startLineNumber - 1].length\n        && rangeMapping.originalRange.startColumn - 1 >= originalLines[rangeMapping.originalRange.startLineNumber - 1].length\n        && rangeMapping.originalRange.startLineNumber <= rangeMapping.originalRange.endLineNumber + lineEndDelta\n        && rangeMapping.modifiedRange.startLineNumber <= rangeMapping.modifiedRange.endLineNumber + lineEndDelta) {\n        // We can only do this if the range is not empty yet\n        lineStartDelta = 1;\n    }\n    const originalLineRange = new LineRange(rangeMapping.originalRange.startLineNumber + lineStartDelta, rangeMapping.originalRange.endLineNumber + 1 + lineEndDelta);\n    const modifiedLineRange = new LineRange(rangeMapping.modifiedRange.startLineNumber + lineStartDelta, rangeMapping.modifiedRange.endLineNumber + 1 + lineEndDelta);\n    return new DetailedLineRangeMapping(originalLineRange, modifiedLineRange, [rangeMapping]);\n}\nfunction toLineRangeMapping(sequenceDiff) {\n    return new LineRangeMapping(new LineRange(sequenceDiff.seq1Range.start + 1, sequenceDiff.seq1Range.endExclusive + 1), new LineRange(sequenceDiff.seq2Range.start + 1, sequenceDiff.seq2Range.endExclusive + 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 { LegacyLinesDiffComputer } from './legacyLinesDiffComputer.js';\nimport { DefaultLinesDiffComputer } from './defaultLinesDiffComputer/defaultLinesDiffComputer.js';\nexport const linesDiffComputers = {\n    getLegacy: () => new LegacyLinesDiffComputer(),\n    getDefault: () => new DefaultLinesDiffComputer(),\n};\n","/*---------------------------------------------------------------------------------------------\n *  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._rgbaBrand = undefined;\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._hslaBrand = undefined;\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._hsvaBrand = undefined;\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    static fromHex(hex) {\n        return Color.Format.CSS.parseHex(hex) || Color.red;\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.equals(b);\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    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    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    makeOpaque(opaqueBackground) {\n        if (this.isOpaque() || opaqueBackground.rgba.a !== 1) {\n            // only allow to blend onto a non-opaque color onto a opaque color\n            return this;\n        }\n        const { r, g, b, a } = this.rgba;\n        // https://stackoverflow.com/questions/12228548/finding-equivalent-color-with-opacity\n        return new Color(new RGBA(opaqueBackground.rgba.r - a * (opaqueBackground.rgba.r - r), opaqueBackground.rgba.g - a * (opaqueBackground.rgba.g - g), opaqueBackground.rgba.b - a * (opaqueBackground.rgba.b - b), 1));\n    }\n    toString() {\n        if (!this._toString) {\n            this._toString = Color.Format.CSS.format(this);\n        }\n        return this._toString;\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    static { this.white = new Color(new RGBA(255, 255, 255, 1)); }\n    static { this.black = new Color(new RGBA(0, 0, 0, 1)); }\n    static { this.red = new Color(new RGBA(255, 0, 0, 1)); }\n    static { this.blue = new Color(new RGBA(0, 0, 255, 1)); }\n    static { this.green = new Color(new RGBA(0, 255, 0, 1)); }\n    static { this.cyan = new Color(new RGBA(0, 255, 255, 1)); }\n    static { this.lightgrey = new Color(new RGBA(211, 211, 211, 1)); }\n    static { this.transparent = new Color(new RGBA(0, 0, 0, 0)); }\n}\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 /* CharCode.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 /* CharCode.Digit0 */: return 0;\n                    case 49 /* CharCode.Digit1 */: return 1;\n                    case 50 /* CharCode.Digit2 */: return 2;\n                    case 51 /* CharCode.Digit3 */: return 3;\n                    case 52 /* CharCode.Digit4 */: return 4;\n                    case 53 /* CharCode.Digit5 */: return 5;\n                    case 54 /* CharCode.Digit6 */: return 6;\n                    case 55 /* CharCode.Digit7 */: return 7;\n                    case 56 /* CharCode.Digit8 */: return 8;\n                    case 57 /* CharCode.Digit9 */: return 9;\n                    case 97 /* CharCode.a */: return 10;\n                    case 65 /* CharCode.A */: return 10;\n                    case 98 /* CharCode.b */: return 11;\n                    case 66 /* CharCode.B */: return 11;\n                    case 99 /* CharCode.c */: return 12;\n                    case 67 /* CharCode.C */: return 12;\n                    case 100 /* CharCode.d */: return 13;\n                    case 68 /* CharCode.D */: return 13;\n                    case 101 /* CharCode.e */: return 14;\n                    case 69 /* CharCode.E */: return 14;\n                    case 102 /* CharCode.f */: return 15;\n                    case 70 /* CharCode.F */: return 15;\n                }\n                return 0;\n            }\n        })(CSS = Format.CSS || (Format.CSS = {}));\n    })(Format = Color.Format || (Color.Format = {}));\n})(Color || (Color = {}));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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, HSLA } from '../../../base/common/color.js';\nfunction _parseCaptureGroups(captureGroups) {\n    const values = [];\n    for (const captureGroup of captureGroups) {\n        const parsedNumber = Number(captureGroup);\n        if (parsedNumber || parsedNumber === 0 && captureGroup.replace(/\\s/g, '') !== '') {\n            values.push(parsedNumber);\n        }\n    }\n    return values;\n}\nfunction _toIColor(r, g, b, a) {\n    return {\n        red: r / 255,\n        blue: b / 255,\n        green: g / 255,\n        alpha: a\n    };\n}\nfunction _findRange(model, match) {\n    const index = match.index;\n    const length = match[0].length;\n    if (!index) {\n        return;\n    }\n    const startPosition = model.positionAt(index);\n    const range = {\n        startLineNumber: startPosition.lineNumber,\n        startColumn: startPosition.column,\n        endLineNumber: startPosition.lineNumber,\n        endColumn: startPosition.column + length\n    };\n    return range;\n}\nfunction _findHexColorInformation(range, hexValue) {\n    if (!range) {\n        return;\n    }\n    const parsedHexColor = Color.Format.CSS.parseHex(hexValue);\n    if (!parsedHexColor) {\n        return;\n    }\n    return {\n        range: range,\n        color: _toIColor(parsedHexColor.rgba.r, parsedHexColor.rgba.g, parsedHexColor.rgba.b, parsedHexColor.rgba.a)\n    };\n}\nfunction _findRGBColorInformation(range, matches, isAlpha) {\n    if (!range || matches.length !== 1) {\n        return;\n    }\n    const match = matches[0];\n    const captureGroups = match.values();\n    const parsedRegex = _parseCaptureGroups(captureGroups);\n    return {\n        range: range,\n        color: _toIColor(parsedRegex[0], parsedRegex[1], parsedRegex[2], isAlpha ? parsedRegex[3] : 1)\n    };\n}\nfunction _findHSLColorInformation(range, matches, isAlpha) {\n    if (!range || matches.length !== 1) {\n        return;\n    }\n    const match = matches[0];\n    const captureGroups = match.values();\n    const parsedRegex = _parseCaptureGroups(captureGroups);\n    const colorEquivalent = new Color(new HSLA(parsedRegex[0], parsedRegex[1] / 100, parsedRegex[2] / 100, isAlpha ? parsedRegex[3] : 1));\n    return {\n        range: range,\n        color: _toIColor(colorEquivalent.rgba.r, colorEquivalent.rgba.g, colorEquivalent.rgba.b, colorEquivalent.rgba.a)\n    };\n}\nfunction _findMatches(model, regex) {\n    if (typeof model === 'string') {\n        return [...model.matchAll(regex)];\n    }\n    else {\n        return model.findMatches(regex);\n    }\n}\nfunction computeColors(model) {\n    const result = [];\n    // Early validation for RGB and HSL\n    const initialValidationRegex = /\\b(rgb|rgba|hsl|hsla)(\\([0-9\\s,.\\%]*\\))|(#)([A-Fa-f0-9]{3})\\b|(#)([A-Fa-f0-9]{4})\\b|(#)([A-Fa-f0-9]{6})\\b|(#)([A-Fa-f0-9]{8})\\b/gm;\n    const initialValidationMatches = _findMatches(model, initialValidationRegex);\n    // Potential colors have been found, validate the parameters\n    if (initialValidationMatches.length > 0) {\n        for (const initialMatch of initialValidationMatches) {\n            const initialCaptureGroups = initialMatch.filter(captureGroup => captureGroup !== undefined);\n            const colorScheme = initialCaptureGroups[1];\n            const colorParameters = initialCaptureGroups[2];\n            if (!colorParameters) {\n                continue;\n            }\n            let colorInformation;\n            if (colorScheme === 'rgb') {\n                const regexParameters = /^\\(\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*\\)$/gm;\n                colorInformation = _findRGBColorInformation(_findRange(model, initialMatch), _findMatches(colorParameters, regexParameters), false);\n            }\n            else if (colorScheme === 'rgba') {\n                const regexParameters = /^\\(\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\\s*,\\s*(0[.][0-9]+|[.][0-9]+|[01][.]|[01])\\s*\\)$/gm;\n                colorInformation = _findRGBColorInformation(_findRange(model, initialMatch), _findMatches(colorParameters, regexParameters), true);\n            }\n            else if (colorScheme === 'hsl') {\n                const regexParameters = /^\\(\\s*(36[0]|3[0-5][0-9]|[12][0-9][0-9]|[1-9]?[0-9])\\s*,\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*,\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*\\)$/gm;\n                colorInformation = _findHSLColorInformation(_findRange(model, initialMatch), _findMatches(colorParameters, regexParameters), false);\n            }\n            else if (colorScheme === 'hsla') {\n                const regexParameters = /^\\(\\s*(36[0]|3[0-5][0-9]|[12][0-9][0-9]|[1-9]?[0-9])\\s*,\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*,\\s*(100|\\d{1,2}[.]\\d*|\\d{1,2})%\\s*,\\s*(0[.][0-9]+|[.][0-9]+|[01][.]|[01])\\s*\\)$/gm;\n                colorInformation = _findHSLColorInformation(_findRange(model, initialMatch), _findMatches(colorParameters, regexParameters), true);\n            }\n            else if (colorScheme === '#') {\n                colorInformation = _findHexColorInformation(_findRange(model, initialMatch), colorScheme + colorParameters);\n            }\n            if (colorInformation) {\n                result.push(colorInformation);\n            }\n        }\n    }\n    return result;\n}\n/**\n * Returns an array of all default document colors in the provided document\n */\nexport function computeDefaultDocumentColors(model) {\n    if (!model || typeof model.getValue !== 'function' || typeof model.positionAt !== 'function') {\n        // Unknown caller!\n        return [];\n    }\n    return computeColors(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 *--------------------------------------------------------------------------------------------*/\nconst markRegex = new RegExp('\\\\bMARK:\\\\s*(.*)$', 'd');\nconst trimDashesRegex = /^-+|-+$/g;\n/**\n * Find section headers in the model.\n *\n * @param model the text model to search in\n * @param options options to search with\n * @returns an array of section headers\n */\nexport function findSectionHeaders(model, options) {\n    let headers = [];\n    if (options.findRegionSectionHeaders && options.foldingRules?.markers) {\n        const regionHeaders = collectRegionHeaders(model, options);\n        headers = headers.concat(regionHeaders);\n    }\n    if (options.findMarkSectionHeaders) {\n        const markHeaders = collectMarkHeaders(model);\n        headers = headers.concat(markHeaders);\n    }\n    return headers;\n}\nfunction collectRegionHeaders(model, options) {\n    const regionHeaders = [];\n    const endLineNumber = model.getLineCount();\n    for (let lineNumber = 1; lineNumber <= endLineNumber; lineNumber++) {\n        const lineContent = model.getLineContent(lineNumber);\n        const match = lineContent.match(options.foldingRules.markers.start);\n        if (match) {\n            const range = { startLineNumber: lineNumber, startColumn: match[0].length + 1, endLineNumber: lineNumber, endColumn: lineContent.length + 1 };\n            if (range.endColumn > range.startColumn) {\n                const sectionHeader = {\n                    range,\n                    ...getHeaderText(lineContent.substring(match[0].length)),\n                    shouldBeInComments: false\n                };\n                if (sectionHeader.text || sectionHeader.hasSeparatorLine) {\n                    regionHeaders.push(sectionHeader);\n                }\n            }\n        }\n    }\n    return regionHeaders;\n}\nfunction collectMarkHeaders(model) {\n    const markHeaders = [];\n    const endLineNumber = model.getLineCount();\n    for (let lineNumber = 1; lineNumber <= endLineNumber; lineNumber++) {\n        const lineContent = model.getLineContent(lineNumber);\n        addMarkHeaderIfFound(lineContent, lineNumber, markHeaders);\n    }\n    return markHeaders;\n}\nfunction addMarkHeaderIfFound(lineContent, lineNumber, sectionHeaders) {\n    markRegex.lastIndex = 0;\n    const match = markRegex.exec(lineContent);\n    if (match) {\n        const column = match.indices[1][0] + 1;\n        const endColumn = match.indices[1][1] + 1;\n        const range = { startLineNumber: lineNumber, startColumn: column, endLineNumber: lineNumber, endColumn: endColumn };\n        if (range.endColumn > range.startColumn) {\n            const sectionHeader = {\n                range,\n                ...getHeaderText(match[1]),\n                shouldBeInComments: true\n            };\n            if (sectionHeader.text || sectionHeader.hasSeparatorLine) {\n                sectionHeaders.push(sectionHeader);\n            }\n        }\n    }\n}\nfunction getHeaderText(text) {\n    text = text.trim();\n    const hasSeparatorLine = text.startsWith('-');\n    text = text.replace(trimDashesRegex, '');\n    return { text, hasSeparatorLine };\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { arrayInsert } from '../../../base/common/arrays.js';\nimport { toUint32 } from '../../../base/common/uint.js';\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    setValue(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, count) {\n        startIndex = toUint32(startIndex);\n        count = toUint32(count);\n        const oldValues = this.values;\n        const oldPrefixSum = this.prefixSum;\n        if (startIndex >= oldValues.length) {\n            return false;\n        }\n        const maxCount = oldValues.length - startIndex;\n        if (count >= maxCount) {\n            count = maxCount;\n        }\n        if (count === 0) {\n            return false;\n        }\n        this.values = new Uint32Array(oldValues.length - count);\n        this.values.set(oldValues.subarray(0, startIndex), 0);\n        this.values.set(oldValues.subarray(startIndex + count), 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    getTotalSum() {\n        if (this.values.length === 0) {\n            return 0;\n        }\n        return this._getPrefixSum(this.values.length - 1);\n    }\n    /**\n     * Returns the sum of the first `index + 1` many items.\n     * @returns `SUM(0 <= j <= index, values[j])`.\n     */\n    getPrefixSum(index) {\n        if (index < 0) {\n            return 0;\n        }\n        index = toUint32(index);\n        return this._getPrefixSum(index);\n    }\n    _getPrefixSum(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(sum) {\n        sum = Math.floor(sum);\n        // Compute all sums (to get a fully valid prefixSum)\n        this.getTotalSum();\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 (sum < midStart) {\n                high = mid - 1;\n            }\n            else if (sum >= midStop) {\n                low = mid + 1;\n            }\n            else {\n                break;\n            }\n        }\n        return new PrefixSumIndexOfResult(mid, sum - midStart);\n    }\n}\n/**\n * {@link getIndexOf} has an amortized runtime complexity of O(1).\n *\n * ({@link PrefixSumComputer.getIndexOf} is just  O(log n))\n*/\nexport class ConstantTimePrefixSumComputer {\n    constructor(values) {\n        this._values = values;\n        this._isValid = false;\n        this._validEndIndex = -1;\n        this._prefixSum = [];\n        this._indexBySum = [];\n    }\n    /**\n     * @returns SUM(0 <= j < values.length, values[j])\n     */\n    getTotalSum() {\n        this._ensureValid();\n        return this._indexBySum.length;\n    }\n    /**\n     * Returns the sum of the first `count` many items.\n     * @returns `SUM(0 <= j < count, values[j])`.\n     */\n    getPrefixSum(count) {\n        this._ensureValid();\n        if (count === 0) {\n            return 0;\n        }\n        return this._prefixSum[count - 1];\n    }\n    /**\n     * @returns `result`, such that `getPrefixSum(result.index) + result.remainder = sum`\n     */\n    getIndexOf(sum) {\n        this._ensureValid();\n        const idx = this._indexBySum[sum];\n        const viewLinesAbove = idx > 0 ? this._prefixSum[idx - 1] : 0;\n        return new PrefixSumIndexOfResult(idx, sum - viewLinesAbove);\n    }\n    removeValues(start, deleteCount) {\n        this._values.splice(start, deleteCount);\n        this._invalidate(start);\n    }\n    insertValues(insertIndex, insertArr) {\n        this._values = arrayInsert(this._values, insertIndex, insertArr);\n        this._invalidate(insertIndex);\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._values.length; i < len; i++) {\n            const value = this._values[i];\n            const sumAbove = i > 0 ? this._prefixSum[i - 1] : 0;\n            this._prefixSum[i] = sumAbove + value;\n            for (let j = 0; j < value; j++) {\n                this._indexBySum[sumAbove + j] = i;\n            }\n        }\n        // trim things\n        this._prefixSum.length = this._values.length;\n        this._indexBySum.length = this._prefixSum[this._prefixSum.length - 1];\n        // mark as valid\n        this._isValid = true;\n        this._validEndIndex = this._values.length - 1;\n    }\n    setValue(index, value) {\n        if (this._values[index] === value) {\n            // no change\n            return;\n        }\n        this._values[index] = value;\n        this._invalidate(index);\n    }\n}\nexport class PrefixSumIndexOfResult {\n    constructor(index, remainder) {\n        this.index = index;\n        this.remainder = remainder;\n        this._prefixSumIndexOfResultBrand = undefined;\n        this.index = index;\n        this.remainder = remainder;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 './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.setValue(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        const 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        const 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 *--------------------------------------------------------------------------------------------*/\nimport { IntervalTimer } from '../../../../base/common/async.js';\nimport { Disposable, DisposableStore, dispose, toDisposable } from '../../../../base/common/lifecycle.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport { Position } from '../../core/position.js';\nimport { Range } from '../../core/range.js';\nimport { ensureValidWordDefinition, getWordAtText } from '../../core/wordHelper.js';\nimport { MirrorTextModel as BaseMirrorModel } from '../../model/mirrorTextModel.js';\n/**\n * Stop syncing a model to the worker if it was not needed for 1 min.\n */\nexport const STOP_SYNC_MODEL_DELTA_TIME_MS = 60 * 1000;\nexport class WorkerTextModelSyncClient extends Disposable {\n    constructor(proxy, modelService, keepIdleModels = false) {\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            const 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 (const 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, forceLargeModels = false) {\n        for (const resource of resources) {\n            const resourceStr = resource.toString();\n            if (!this._syncedModels[resourceStr]) {\n                this._beginModelSync(resource, forceLargeModels);\n            }\n            if (this._syncedModels[resourceStr]) {\n                this._syncedModelsLastUsedTime[resourceStr] = (new Date()).getTime();\n            }\n        }\n    }\n    _checkStopModelSync() {\n        const currentTime = (new Date()).getTime();\n        const toRemove = [];\n        for (const modelUrl in this._syncedModelsLastUsedTime) {\n            const 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, forceLargeModels) {\n        const model = this._modelService.getModel(resource);\n        if (!model) {\n            return;\n        }\n        if (!forceLargeModels && model.isTooLargeForSyncing()) {\n            return;\n        }\n        const 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        const toDispose = this._syncedModels[modelUrl];\n        delete this._syncedModels[modelUrl];\n        delete this._syncedModelsLastUsedTime[modelUrl];\n        dispose(toDispose);\n    }\n}\nexport class WorkerTextModelSyncServer {\n    constructor() {\n        this._models = Object.create(null);\n    }\n    getModel(uri) {\n        return this._models[uri];\n    }\n    getModels() {\n        const 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(uri, e) {\n        if (!this._models[uri]) {\n            return;\n        }\n        const model = this._models[uri];\n        model.onEvents(e);\n    }\n    $acceptRemovedModel(uri) {\n        if (!this._models[uri]) {\n            return;\n        }\n        delete this._models[uri];\n    }\n}\nexport class 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    findMatches(regex) {\n        const matches = [];\n        for (let i = 0; i < this._lines.length; i++) {\n            const line = this._lines[i];\n            const offsetToAdd = this.offsetAt(new Position(i + 1, 1));\n            const iteratorOverMatches = line.matchAll(regex);\n            for (const match of iteratorOverMatches) {\n                if (match.index || match.index === 0) {\n                    match.index = match.index + offsetToAdd;\n                }\n                matches.push(match);\n            }\n        }\n        return matches;\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        const 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        const content = this._lines[lineNumber - 1];\n        const ranges = this._wordenize(content, wordDefinition);\n        const 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        const lineEnding = this._eol;\n        const startLineIndex = range.startLineNumber - 1;\n        const endLineIndex = range.endLineNumber - 1;\n        const 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.getPrefixSum(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        const out = this._lineStarts.getIndexOf(offset);\n        const 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            const 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 *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { stringDiff } from '../../../base/common/diff/diff.js';\nimport { Range } from '../core/range.js';\nimport { computeLinks } from '../languages/linkComputer.js';\nimport { BasicInplaceReplace } from '../languages/supports/inplaceReplaceSupport.js';\nimport { createMonacoBaseAPI } from './editorBaseApi.js';\nimport { EditorWorkerHost } from './editorWorkerHost.js';\nimport { StopWatch } from '../../../base/common/stopwatch.js';\nimport { UnicodeTextModelHighlighter } from './unicodeTextModelHighlighter.js';\nimport { linesDiffComputers } from '../diff/linesDiffComputers.js';\nimport { createProxyObject, getAllMethodNames } from '../../../base/common/objects.js';\nimport { FileAccess } from '../../../base/common/network.js';\nimport { computeDefaultDocumentColors } from '../languages/defaultDocumentColorsComputer.js';\nimport { findSectionHeaders } from './findSectionHeaders.js';\nimport { WorkerTextModelSyncServer } from './textModelSync/textModelSync.impl.js';\n// ESM-comment-begin\n// const isESM = false;\n// ESM-comment-end\n// ESM-uncomment-begin\nconst isESM = true;\n/**\n * @internal\n */\nexport class BaseEditorSimpleWorker {\n    constructor() {\n        this._workerTextModelSyncServer = new WorkerTextModelSyncServer();\n    }\n    dispose() {\n    }\n    _getModel(uri) {\n        return this._workerTextModelSyncServer.getModel(uri);\n    }\n    _getModels() {\n        return this._workerTextModelSyncServer.getModels();\n    }\n    $acceptNewModel(data) {\n        this._workerTextModelSyncServer.$acceptNewModel(data);\n    }\n    $acceptModelChanged(uri, e) {\n        this._workerTextModelSyncServer.$acceptModelChanged(uri, e);\n    }\n    $acceptRemovedModel(uri) {\n        this._workerTextModelSyncServer.$acceptRemovedModel(uri);\n    }\n    async $computeUnicodeHighlights(url, options, range) {\n        const model = this._getModel(url);\n        if (!model) {\n            return { ranges: [], hasMore: false, ambiguousCharacterCount: 0, invisibleCharacterCount: 0, nonBasicAsciiCharacterCount: 0 };\n        }\n        return UnicodeTextModelHighlighter.computeUnicodeHighlights(model, options, range);\n    }\n    async $findSectionHeaders(url, options) {\n        const model = this._getModel(url);\n        if (!model) {\n            return [];\n        }\n        return findSectionHeaders(model, options);\n    }\n    // ---- BEGIN diff --------------------------------------------------------------------------\n    async $computeDiff(originalUrl, modifiedUrl, options, algorithm) {\n        const original = this._getModel(originalUrl);\n        const modified = this._getModel(modifiedUrl);\n        if (!original || !modified) {\n            return null;\n        }\n        const result = EditorSimpleWorker.computeDiff(original, modified, options, algorithm);\n        return result;\n    }\n    static computeDiff(originalTextModel, modifiedTextModel, options, algorithm) {\n        const diffAlgorithm = algorithm === 'advanced' ? linesDiffComputers.getDefault() : linesDiffComputers.getLegacy();\n        const originalLines = originalTextModel.getLinesContent();\n        const modifiedLines = modifiedTextModel.getLinesContent();\n        const result = diffAlgorithm.computeDiff(originalLines, modifiedLines, options);\n        const identical = (result.changes.length > 0 ? false : this._modelsAreIdentical(originalTextModel, modifiedTextModel));\n        function getLineChanges(changes) {\n            return changes.map(m => ([m.original.startLineNumber, m.original.endLineNumberExclusive, m.modified.startLineNumber, m.modified.endLineNumberExclusive, m.innerChanges?.map(m => [\n                    m.originalRange.startLineNumber,\n                    m.originalRange.startColumn,\n                    m.originalRange.endLineNumber,\n                    m.originalRange.endColumn,\n                    m.modifiedRange.startLineNumber,\n                    m.modifiedRange.startColumn,\n                    m.modifiedRange.endLineNumber,\n                    m.modifiedRange.endColumn,\n                ])]));\n        }\n        return {\n            identical,\n            quitEarly: result.hitTimeout,\n            changes: getLineChanges(result.changes),\n            moves: result.moves.map(m => ([\n                m.lineRangeMapping.original.startLineNumber,\n                m.lineRangeMapping.original.endLineNumberExclusive,\n                m.lineRangeMapping.modified.startLineNumber,\n                m.lineRangeMapping.modified.endLineNumberExclusive,\n                getLineChanges(m.changes)\n            ])),\n        };\n    }\n    static _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    // ---- END diff --------------------------------------------------------------------------\n    // ---- BEGIN minimal edits ---------------------------------------------------------------\n    static { this._diffLimit = 100000; }\n    async $computeMoreMinimalEdits(modelUrl, edits, pretty) {\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            const aRng = a.range ? 0 : 1;\n            const bRng = b.range ? 0 : 1;\n            return aRng - bRng;\n        });\n        // merge adjacent edits\n        let writeIndex = 0;\n        for (let readIndex = 1; readIndex < edits.length; readIndex++) {\n            if (Range.getEndPosition(edits[writeIndex].range).equals(Range.getStartPosition(edits[readIndex].range))) {\n                edits[writeIndex].range = Range.fromPositions(Range.getStartPosition(edits[writeIndex].range), Range.getEndPosition(edits[readIndex].range));\n                edits[writeIndex].text += edits[readIndex].text;\n            }\n            else {\n                writeIndex++;\n                edits[writeIndex] = edits[readIndex];\n            }\n        }\n        edits.length = writeIndex + 1;\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, pretty);\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    // ---- END minimal edits ---------------------------------------------------------------\n    async $computeLinks(modelUrl) {\n        const model = this._getModel(modelUrl);\n        if (!model) {\n            return null;\n        }\n        return computeLinks(model);\n    }\n    // --- BEGIN default document colors -----------------------------------------------------------\n    async $computeDefaultDocumentColors(modelUrl) {\n        const model = this._getModel(modelUrl);\n        if (!model) {\n            return null;\n        }\n        return computeDefaultDocumentColors(model);\n    }\n    // ---- BEGIN suggest --------------------------------------------------------------------------\n    static { this._suggestionsLimit = 10000; }\n    async $textualSuggest(modelUrls, leadingWord, wordDef, wordDefFlags) {\n        const sw = new StopWatch();\n        const wordDefRegExp = new RegExp(wordDef, wordDefFlags);\n        const seen = new Set();\n        outer: for (const url of modelUrls) {\n            const model = this._getModel(url);\n            if (!model) {\n                continue;\n            }\n            for (const 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    // ---- END suggest --------------------------------------------------------------------------\n    //#region -- word ranges --\n    async $computeWordRanges(modelUrl, range, wordDef, wordDefFlags) {\n        const 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            const 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    //#endregion\n    async $navigateValueSet(modelUrl, range, up, wordDef, wordDefFlags) {\n        const model = this._getModel(modelUrl);\n        if (!model) {\n            return null;\n        }\n        const 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        const selectionText = model.getValueInRange(range);\n        const wordRange = model.getWordAtPosition({ lineNumber: range.startLineNumber, column: range.startColumn }, wordDefRegExp);\n        if (!wordRange) {\n            return null;\n        }\n        const word = model.getValueInRange(wordRange);\n        const result = BasicInplaceReplace.INSTANCE.navigateValueSet(range, selectionText, wordRange, word, up);\n        return result;\n    }\n}\n/**\n * @internal\n */\nexport class EditorSimpleWorker extends BaseEditorSimpleWorker {\n    constructor(_host, _foreignModuleFactory) {\n        super();\n        this._host = _host;\n        this._foreignModuleFactory = _foreignModuleFactory;\n        this._foreignModule = null;\n    }\n    async $ping() {\n        return 'pong';\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 = createProxyObject(foreignHostMethods, proxyMethodRequest);\n        const 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(getAllMethodNames(this._foreignModule));\n        }\n        return new Promise((resolve, reject) => {\n            const onModuleCallback = (foreignModule) => {\n                this._foreignModule = foreignModule.create(ctx, createData);\n                resolve(getAllMethodNames(this._foreignModule));\n            };\n            if (!isESM) {\n                require([`${moduleId}`], onModuleCallback, reject);\n            }\n            else {\n                const url = FileAccess.asBrowserUri(`${moduleId}.js`).toString(true);\n                import(`${url}`).then(onModuleCallback).catch(reject);\n            }\n        });\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/**\n * Defines the worker entry point. Must be exported and named `create`.\n * @skipMangle\n * @internal\n */\nexport function create(workerServer) {\n    return new EditorSimpleWorker(EditorWorkerHost.getChannel(workerServer), null);\n}\nif (typeof importScripts === 'function') {\n    // Running in a web worker\n    globalThis.monaco = createMonacoBaseAPI();\n}\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 { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const ILanguageFeaturesService = createDecorator('ILanguageFeaturesService');\n","/*---------------------------------------------------------------------------------------------\n *  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 { timeout } from '../../../base/common/async.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { logOnceWebWorkerWarning } from '../../../base/common/worker/simpleWorker.js';\nimport { createWebWorker } from '../../../base/browser/defaultWorkerFactory.js';\nimport { Range } from '../../common/core/range.js';\nimport { ILanguageConfigurationService } from '../../common/languages/languageConfigurationRegistry.js';\nimport { EditorSimpleWorker } from '../../common/services/editorSimpleWorker.js';\nimport { IModelService } from '../../common/services/model.js';\nimport { ITextResourceConfigurationService } from '../../common/services/textResourceConfiguration.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';\nimport { ILanguageFeaturesService } from '../../common/services/languageFeatures.js';\nimport { MovedText } from '../../common/diff/linesDiffComputer.js';\nimport { DetailedLineRangeMapping, RangeMapping, LineRangeMapping } from '../../common/diff/rangeMapping.js';\nimport { LineRange } from '../../common/core/lineRange.js';\nimport { mainWindow } from '../../../base/browser/window.js';\nimport { WindowIntervalTimer } from '../../../base/browser/dom.js';\nimport { WorkerTextModelSyncClient } from '../../common/services/textModelSync/textModelSync.impl.js';\nimport { EditorWorkerHost } from '../../common/services/editorWorkerHost.js';\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    const model = modelService.getModel(resource);\n    if (!model) {\n        return false;\n    }\n    if (model.isTooLargeForSyncing()) {\n        return false;\n    }\n    return true;\n}\nlet EditorWorkerService = class EditorWorkerService extends Disposable {\n    constructor(workerDescriptor, modelService, configurationService, logService, _languageConfigurationService, languageFeaturesService) {\n        super();\n        this._languageConfigurationService = _languageConfigurationService;\n        this._modelService = modelService;\n        this._workerManager = this._register(new WorkerManager(workerDescriptor, this._modelService));\n        this._logService = logService;\n        // register default link-provider and default completions-provider\n        this._register(languageFeaturesService.linkProvider.register({ language: '*', hasAccessToAllModels: true }, {\n            provideLinks: async (model, token) => {\n                if (!canSyncModel(this._modelService, model.uri)) {\n                    return Promise.resolve({ links: [] }); // File too large\n                }\n                const worker = await this._workerWithResources([model.uri]);\n                const links = await worker.$computeLinks(model.uri.toString());\n                return links && { links };\n            }\n        }));\n        this._register(languageFeaturesService.completionProvider.register('*', new WordBasedCompletionItemProvider(this._workerManager, configurationService, this._modelService, this._languageConfigurationService)));\n    }\n    dispose() {\n        super.dispose();\n    }\n    canComputeUnicodeHighlights(uri) {\n        return canSyncModel(this._modelService, uri);\n    }\n    async computedUnicodeHighlights(uri, options, range) {\n        const worker = await this._workerWithResources([uri]);\n        return worker.$computeUnicodeHighlights(uri.toString(), options, range);\n    }\n    async computeDiff(original, modified, options, algorithm) {\n        const worker = await this._workerWithResources([original, modified], /* forceLargeModels */ true);\n        const result = await worker.$computeDiff(original.toString(), modified.toString(), options, algorithm);\n        if (!result) {\n            return null;\n        }\n        // Convert from space efficient JSON data to rich objects.\n        const diff = {\n            identical: result.identical,\n            quitEarly: result.quitEarly,\n            changes: toLineRangeMappings(result.changes),\n            moves: result.moves.map(m => new MovedText(new LineRangeMapping(new LineRange(m[0], m[1]), new LineRange(m[2], m[3])), toLineRangeMappings(m[4])))\n        };\n        return diff;\n        function toLineRangeMappings(changes) {\n            return changes.map((c) => new DetailedLineRangeMapping(new LineRange(c[0], c[1]), new LineRange(c[2], c[3]), c[4]?.map((c) => new RangeMapping(new Range(c[0], c[1], c[2], c[3]), new Range(c[4], c[5], c[6], c[7])))));\n        }\n    }\n    async computeMoreMinimalEdits(resource, edits, pretty = false) {\n        if (isNonEmptyArray(edits)) {\n            if (!canSyncModel(this._modelService, resource)) {\n                return Promise.resolve(edits); // File too large\n            }\n            const sw = StopWatch.create();\n            const result = this._workerWithResources([resource]).then(worker => worker.$computeMoreMinimalEdits(resource.toString(), edits, pretty));\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    async navigateValueSet(resource, range, up) {\n        const model = this._modelService.getModel(resource);\n        if (!model) {\n            return null;\n        }\n        const wordDefRegExp = this._languageConfigurationService.getLanguageConfiguration(model.getLanguageId()).getWordDefinition();\n        const wordDef = wordDefRegExp.source;\n        const wordDefFlags = wordDefRegExp.flags;\n        const worker = await this._workerWithResources([resource]);\n        return worker.$navigateValueSet(resource.toString(), range, up, wordDef, wordDefFlags);\n    }\n    canComputeWordRanges(resource) {\n        return canSyncModel(this._modelService, resource);\n    }\n    async computeWordRanges(resource, range) {\n        const model = this._modelService.getModel(resource);\n        if (!model) {\n            return Promise.resolve(null);\n        }\n        const wordDefRegExp = this._languageConfigurationService.getLanguageConfiguration(model.getLanguageId()).getWordDefinition();\n        const wordDef = wordDefRegExp.source;\n        const wordDefFlags = wordDefRegExp.flags;\n        const worker = await this._workerWithResources([resource]);\n        return worker.$computeWordRanges(resource.toString(), range, wordDef, wordDefFlags);\n    }\n    async findSectionHeaders(uri, options) {\n        const worker = await this._workerWithResources([uri]);\n        return worker.$findSectionHeaders(uri.toString(), options);\n    }\n    async computeDefaultDocumentColors(uri) {\n        const worker = await this._workerWithResources([uri]);\n        return worker.$computeDefaultDocumentColors(uri.toString());\n    }\n    async _workerWithResources(resources, forceLargeModels = false) {\n        const worker = await this._workerManager.withWorker();\n        return await worker.workerWithSyncedResources(resources, forceLargeModels);\n    }\n};\nEditorWorkerService = __decorate([\n    __param(1, IModelService),\n    __param(2, ITextResourceConfigurationService),\n    __param(3, ILogService),\n    __param(4, ILanguageConfigurationService),\n    __param(5, ILanguageFeaturesService)\n], EditorWorkerService);\nexport { EditorWorkerService };\nclass WordBasedCompletionItemProvider {\n    constructor(workerManager, configurationService, modelService, languageConfigurationService) {\n        this.languageConfigurationService = languageConfigurationService;\n        this._debugDisplayName = 'wordbasedCompletions';\n        this._workerManager = workerManager;\n        this._configurationService = configurationService;\n        this._modelService = modelService;\n    }\n    async provideCompletionItems(model, position) {\n        const config = this._configurationService.getValue(model.uri, position, 'editor');\n        if (config.wordBasedSuggestions === 'off') {\n            return undefined;\n        }\n        const models = [];\n        if (config.wordBasedSuggestions === '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.wordBasedSuggestions === 'allDocuments' || candidate.getLanguageId() === model.getLanguageId()) {\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 = this.languageConfigurationService.getLanguageConfiguration(model.getLanguageId()).getWordDefinition();\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 = await this._workerManager.withWorker();\n        const data = await client.textualSuggest(models, 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 /* languages.CompletionItemKind.Text */,\n                    label: word,\n                    insertText: word,\n                    range: { insert, replace }\n                };\n            }),\n        };\n    }\n}\nlet WorkerManager = class WorkerManager extends Disposable {\n    constructor(_workerDescriptor, modelService) {\n        super();\n        this._workerDescriptor = _workerDescriptor;\n        this._modelService = modelService;\n        this._editorWorkerClient = null;\n        this._lastWorkerUsedTime = (new Date()).getTime();\n        const stopWorkerInterval = this._register(new WindowIntervalTimer());\n        stopWorkerInterval.cancelAndSet(() => this._checkStopIdleWorker(), Math.round(STOP_WORKER_DELTA_TIME_MS / 2), mainWindow);\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        const 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        const 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._workerDescriptor, false, this._modelService);\n        }\n        return Promise.resolve(this._editorWorkerClient);\n    }\n};\nWorkerManager = __decorate([\n    __param(1, IModelService)\n], WorkerManager);\nclass SynchronousWorkerClient {\n    constructor(instance) {\n        this._instance = instance;\n        this.proxy = this._instance;\n    }\n    dispose() {\n        this._instance.dispose();\n    }\n    setChannel(channel, handler) {\n        throw new Error(`Not supported`);\n    }\n}\nlet EditorWorkerClient = class EditorWorkerClient extends Disposable {\n    constructor(_workerDescriptor, keepIdleModels, modelService) {\n        super();\n        this._workerDescriptor = _workerDescriptor;\n        this._disposed = false;\n        this._modelService = modelService;\n        this._keepIdleModels = keepIdleModels;\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(createWebWorker(this._workerDescriptor));\n                EditorWorkerHost.setChannel(this._worker, this._createEditorWorkerHost());\n            }\n            catch (err) {\n                logOnceWebWorkerWarning(err);\n                this._worker = this._createFallbackLocalWorker();\n            }\n        }\n        return this._worker;\n    }\n    async _getProxy() {\n        try {\n            const proxy = this._getOrCreateWorker().proxy;\n            await proxy.$ping();\n            return proxy;\n        }\n        catch (err) {\n            logOnceWebWorkerWarning(err);\n            this._worker = this._createFallbackLocalWorker();\n            return this._worker.proxy;\n        }\n    }\n    _createFallbackLocalWorker() {\n        return new SynchronousWorkerClient(new EditorSimpleWorker(this._createEditorWorkerHost(), null));\n    }\n    _createEditorWorkerHost() {\n        return {\n            $fhr: (method, args) => this.fhr(method, args)\n        };\n    }\n    _getOrCreateModelManager(proxy) {\n        if (!this._modelManager) {\n            this._modelManager = this._register(new WorkerTextModelSyncClient(proxy, this._modelService, this._keepIdleModels));\n        }\n        return this._modelManager;\n    }\n    async workerWithSyncedResources(resources, forceLargeModels = false) {\n        if (this._disposed) {\n            return Promise.reject(canceled());\n        }\n        const proxy = await this._getProxy();\n        this._getOrCreateModelManager(proxy).ensureSyncedResources(resources, forceLargeModels);\n        return proxy;\n    }\n    async textualSuggest(resources, leadingWord, wordDefRegExp) {\n        const proxy = await this.workerWithSyncedResources(resources);\n        const wordDef = wordDefRegExp.source;\n        const wordDefFlags = wordDefRegExp.flags;\n        return proxy.$textualSuggest(resources.map(r => r.toString()), leadingWord, wordDef, wordDefFlags);\n    }\n    dispose() {\n        super.dispose();\n        this._disposed = true;\n    }\n};\nEditorWorkerClient = __decorate([\n    __param(2, IModelService)\n], EditorWorkerClient);\nexport { EditorWorkerClient };\n","/*---------------------------------------------------------------------------------------------\n *  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_DARK\"] = \"hcDark\";\n    ColorScheme[\"HIGH_CONTRAST_LIGHT\"] = \"hcLight\";\n})(ColorScheme || (ColorScheme = {}));\nexport function isHighContrast(scheme) {\n    return scheme === ColorScheme.HIGH_CONTRAST_DARK || scheme === ColorScheme.HIGH_CONTRAST_LIGHT;\n}\nexport function isDark(scheme) {\n    return scheme === ColorScheme.DARK || scheme === ColorScheme.HIGH_CONTRAST_DARK;\n}\n","import { Emitter } from '../../../base/common/event.js';\nimport { Disposable, toDisposable } from '../../../base/common/lifecycle.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nimport * as platform from '../../registry/common/platform.js';\nimport { ColorScheme } from './theme.js';\nexport const IThemeService = createDecorator('themeService');\nexport function themeColorFromId(id) {\n    return { id };\n}\nexport function getThemeTypeSelector(type) {\n    switch (type) {\n        case ColorScheme.DARK: return 'vs-dark';\n        case ColorScheme.HIGH_CONTRAST_DARK: return 'hc-black';\n        case ColorScheme.HIGH_CONTRAST_LIGHT: return 'hc-light';\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}\nconst 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","var __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, toDisposable } from '../../../base/common/lifecycle.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\nlet AbstractCodeEditorService = class AbstractCodeEditorService extends Disposable {\n    constructor(_themeService) {\n        super();\n        this._themeService = _themeService;\n        this._onWillCreateCodeEditor = this._register(new Emitter());\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._onWillCreateDiffEditor = this._register(new Emitter());\n        this._onDiffEditorAdd = this._register(new Emitter());\n        this.onDiffEditorAdd = this._onDiffEditorAdd.event;\n        this._onDiffEditorRemove = this._register(new Emitter());\n        this.onDiffEditorRemove = this._onDiffEditorRemove.event;\n        this._decorationOptionProviders = new Map();\n        this._codeEditorOpenHandlers = new LinkedList();\n        this._modelProperties = new Map();\n        this._codeEditors = Object.create(null);\n        this._diffEditors = Object.create(null);\n        this._globalStyleSheet = null;\n    }\n    willCreateCodeEditor() {\n        this._onWillCreateCodeEditor.fire();\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    willCreateDiffEditor() {\n        this._onWillCreateDiffEditor.fire();\n    }\n    addDiffEditor(editor) {\n        this._diffEditors[editor.getId()] = editor;\n        this._onDiffEditorAdd.fire(editor);\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    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.removeDecorationsByType(key));\n            }\n        }\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    async openCodeEditor(input, source, sideBySide) {\n        for (const handler of this._codeEditorOpenHandlers) {\n            const candidate = await handler(input, source, sideBySide);\n            if (candidate !== null) {\n                return candidate;\n            }\n        }\n        return null;\n    }\n    registerCodeEditorOpenHandler(handler) {\n        const rm = this._codeEditorOpenHandlers.unshift(handler);\n        return toDisposable(rm);\n    }\n};\nAbstractCodeEditorService = __decorate([\n    __param(0, IThemeService)\n], AbstractCodeEditorService);\nexport { AbstractCodeEditorService };\nexport class GlobalStyleSheet {\n    constructor(styleSheet) {\n        this._styleSheet = styleSheet;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 { AbstractCodeEditorService } from '../../browser/services/abstractCodeEditorService.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { registerSingleton } from '../../../platform/instantiation/common/extensions.js';\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\nlet StandaloneCodeEditorService = class StandaloneCodeEditorService extends AbstractCodeEditorService {\n    constructor(contextKeyService, themeService) {\n        super(themeService);\n        this._register(this.onCodeEditorAdd(() => this._checkContextKey()));\n        this._register(this.onCodeEditorRemove(() => this._checkContextKey()));\n        this._editorIsOpen = contextKeyService.createKey('editorIsOpen', false);\n        this._activeCodeEditor = null;\n        this._register(this.registerCodeEditorOpenHandler(async (input, source, sideBySide) => {\n            if (!source) {\n                return null;\n            }\n            return this.doOpenEditor(source, input);\n        }));\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    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 /* ScrollType.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 /* ScrollType.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};\nStandaloneCodeEditorService = __decorate([\n    __param(0, IContextKeyService),\n    __param(1, IThemeService)\n], StandaloneCodeEditorService);\nexport { StandaloneCodeEditorService };\nregisterSingleton(ICodeEditorService, StandaloneCodeEditorService, 0 /* InstantiationType.Eager */);\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 * as dom from '../../../base/browser/dom.js';\nimport { mainWindow } from '../../../base/browser/window.js';\nimport { coalesce, firstOrDefault } from '../../../base/common/arrays.js';\nimport { Event } from '../../../base/common/event.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { registerSingleton } from '../../../platform/instantiation/common/extensions.js';\nimport { ILayoutService } from '../../../platform/layout/browser/layoutService.js';\nlet StandaloneLayoutService = class StandaloneLayoutService {\n    get mainContainer() {\n        return firstOrDefault(this._codeEditorService.listCodeEditors())?.getContainerDomNode() ?? mainWindow.document.body;\n    }\n    get activeContainer() {\n        const activeCodeEditor = this._codeEditorService.getFocusedCodeEditor() ?? this._codeEditorService.getActiveCodeEditor();\n        return activeCodeEditor?.getContainerDomNode() ?? this.mainContainer;\n    }\n    get mainContainerDimension() {\n        return dom.getClientArea(this.mainContainer);\n    }\n    get activeContainerDimension() {\n        return dom.getClientArea(this.activeContainer);\n    }\n    get containers() {\n        return coalesce(this._codeEditorService.listCodeEditors().map(codeEditor => codeEditor.getContainerDomNode()));\n    }\n    getContainer() {\n        return this.activeContainer;\n    }\n    whenContainerStylesLoaded() { return undefined; }\n    focus() {\n        this._codeEditorService.getFocusedCodeEditor()?.focus();\n    }\n    constructor(_codeEditorService) {\n        this._codeEditorService = _codeEditorService;\n        this.onDidLayoutMainContainer = Event.None;\n        this.onDidLayoutActiveContainer = Event.None;\n        this.onDidLayoutContainer = Event.None;\n        this.onDidChangeActiveContainer = Event.None;\n        this.onDidAddContainer = Event.None;\n        this.mainContainerOffset = { top: 0, quickPickTop: 0 };\n        this.activeContainerOffset = { top: 0, quickPickTop: 0 };\n    }\n};\nStandaloneLayoutService = __decorate([\n    __param(0, ICodeEditorService)\n], StandaloneLayoutService);\nlet EditorScopedLayoutService = class EditorScopedLayoutService extends StandaloneLayoutService {\n    get mainContainer() {\n        return this._container;\n    }\n    constructor(_container, codeEditorService) {\n        super(codeEditorService);\n        this._container = _container;\n    }\n};\nEditorScopedLayoutService = __decorate([\n    __param(1, ICodeEditorService)\n], EditorScopedLayoutService);\nexport { EditorScopedLayoutService };\nregisterSingleton(ILayoutService, StandaloneLayoutService, 1 /* InstantiationType.Delayed */);\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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","import { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IDialogService = createDecorator('dialogService');\n","import 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 *--------------------------------------------------------------------------------------------*/\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    static { this._ID = 0; }\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    static { this.None = new UndoRedoGroup(); }\n}\nexport class UndoRedoSource {\n    static { this._ID = 0; }\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    static { this.None = new UndoRedoSource(); }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 { onUnexpectedError } from '../../../base/common/errors.js';\nimport { Disposable, isDisposable } from '../../../base/common/lifecycle.js';\nimport { Schemas } from '../../../base/common/network.js';\nimport Severity from '../../../base/common/severity.js';\nimport * as nls from '../../../nls.js';\nimport { IDialogService } from '../../dialogs/common/dialogs.js';\nimport { registerSingleton } from '../../instantiation/common/extensions.js';\nimport { INotificationService } from '../../notification/common/notification.js';\nimport { IUndoRedoService, ResourceEditStackSnapshot, UndoRedoGroup, UndoRedoSource } from './undoRedo.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 /* UndoRedoElementType.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 /* RemovedResourceReason.ExternalRemoval */\n                ? externalRemoval\n                : noParallelUniverses);\n            dest.push(element.resourceLabel);\n        }\n        const 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 /* UndoRedoElementType.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 /* RemovedResourceReason.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 /* UndoRedoElementType.Workspace */) {\n                element.removeResource(this.resourceLabel, this.strResource, 0 /* RemovedResourceReason.ExternalRemoval */);\n            }\n        }\n        for (const element of this._future) {\n            if (element.type === 1 /* UndoRedoElementType.Workspace */) {\n                element.removeResource(this.resourceLabel, this.strResource, 0 /* RemovedResourceReason.ExternalRemoval */);\n            }\n        }\n        this.versionId++;\n    }\n    toString() {\n        const 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 /* UndoRedoElementType.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 /* UndoRedoElementType.Workspace */) {\n                futureElement.removeResource(this.resourceLabel, this.strResource, 1 /* RemovedResourceReason.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 /* UndoRedoElementType.Workspace */) {\n                element.removeResource(this.resourceLabel, this.strResource, 0 /* RemovedResourceReason.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 /* UndoRedoElementType.Workspace */) {\n                element.removeResource(this.resourceLabel, this.strResource, 0 /* RemovedResourceReason.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        const 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 /* UndoRedoElementType.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 occurred 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    async _invokeWorkspacePrepare(element) {\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    _invokeResourcePrepare(element, callback) {\n        if (element.actual.type !== 1 /* UndoRedoElementType.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    async _confirmAndExecuteWorkspaceUndo(strResource, element, editStackSnapshot, undoConfirmed) {\n        if (element.canSplit() && !this._isPartOfUndoGroup(element)) {\n            // this element can be split\n            let UndoChoice;\n            (function (UndoChoice) {\n                UndoChoice[UndoChoice[\"All\"] = 0] = \"All\";\n                UndoChoice[UndoChoice[\"This\"] = 1] = \"This\";\n                UndoChoice[UndoChoice[\"Cancel\"] = 2] = \"Cancel\";\n            })(UndoChoice || (UndoChoice = {}));\n            const { result } = await this._dialogService.prompt({\n                type: Severity.Info,\n                message: nls.localize('confirmWorkspace', \"Would you like to undo '{0}' across all files?\", element.label),\n                buttons: [\n                    {\n                        label: nls.localize({ key: 'ok', comment: ['{0} denotes a number that is > 1, && denotes a mnemonic'] }, \"&&Undo in {0} Files\", editStackSnapshot.editStacks.length),\n                        run: () => UndoChoice.All\n                    },\n                    {\n                        label: nls.localize({ key: 'nok', comment: ['&& denotes a mnemonic'] }, \"Undo this &&File\"),\n                        run: () => UndoChoice.This\n                    }\n                ],\n                cancelButton: {\n                    run: () => UndoChoice.Cancel\n                }\n            });\n            if (result === UndoChoice.Cancel) {\n                // choice: cancel\n                return;\n            }\n            if (result === UndoChoice.This) {\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 = await 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    _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 /* UndoRedoElementType.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    async _confirmAndContinueUndo(strResource, sourceId, element) {\n        const result = await this._dialogService.confirm({\n            message: nls.localize('confirmDifferentSource', \"Would you like to undo '{0}'?\", element.label),\n            primaryButton: nls.localize({ key: 'confirmDifferentSource.yes', comment: ['&& denotes a mnemonic'] }, \"&&Yes\"),\n            cancelButton: nls.localize('confirmDifferentSource.no', \"No\")\n        });\n        if (!result.confirmed) {\n            return;\n        }\n        return this._undo(strResource, sourceId, true);\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    async _executeWorkspaceRedo(strResource, element, editStackSnapshot) {\n        // prepare\n        let cleanup;\n        try {\n            cleanup = await 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    _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 /* UndoRedoElementType.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, 1 /* InstantiationType.Delayed */);\n","/*---------------------------------------------------------------------------------------------\n *  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._val;\n    }\n    get value() {\n        return this._val;\n    }\n}\nexport class SlidingWindowAverage {\n    constructor(size) {\n        this._n = 0;\n        this._val = 0;\n        this._values = [];\n        this._index = 0;\n        this._sum = 0;\n        this._values = new Array(size);\n        this._values.fill(0, 0, size);\n    }\n    update(value) {\n        const oldValue = this._values[this._index];\n        this._values[this._index] = value;\n        this._index = (this._index + 1) % this._values.length;\n        this._sum -= oldValue;\n        this._sum += value;\n        if (this._n < this._values.length) {\n            this._n += 1;\n        }\n        this._val = this._sum / this._n;\n        return this._val;\n    }\n    get value() {\n        return this._val;\n    }\n}\n","import { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IEnvironmentService = createDecorator('environmentService');\n","/*---------------------------------------------------------------------------------------------\n *  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 { doHash } from '../../../base/common/hash.js';\nimport { LRUCache } from '../../../base/common/map.js';\nimport { clamp, MovingAverage, SlidingWindowAverage } from '../../../base/common/numbers.js';\nimport { IEnvironmentService } from '../../../platform/environment/common/environment.js';\nimport { registerSingleton } from '../../../platform/instantiation/common/extensions.js';\nimport { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nimport { ILogService } from '../../../platform/log/common/log.js';\nimport { matchesScheme } from '../../../base/common/network.js';\nexport const ILanguageFeatureDebounceService = createDecorator('ILanguageFeatureDebounceService');\nvar IdentityHash;\n(function (IdentityHash) {\n    const _hashes = new WeakMap();\n    let pool = 0;\n    function of(obj) {\n        let value = _hashes.get(obj);\n        if (value === undefined) {\n            value = ++pool;\n            _hashes.set(obj, value);\n        }\n        return value;\n    }\n    IdentityHash.of = of;\n})(IdentityHash || (IdentityHash = {}));\nclass NullDebounceInformation {\n    constructor(_default) {\n        this._default = _default;\n    }\n    get(_model) {\n        return this._default;\n    }\n    update(_model, _value) {\n        return this._default;\n    }\n    default() {\n        return this._default;\n    }\n}\nclass FeatureDebounceInformation {\n    constructor(_logService, _name, _registry, _default, _min, _max) {\n        this._logService = _logService;\n        this._name = _name;\n        this._registry = _registry;\n        this._default = _default;\n        this._min = _min;\n        this._max = _max;\n        this._cache = new LRUCache(50, 0.7);\n    }\n    _key(model) {\n        return model.id + this._registry.all(model).reduce((hashVal, obj) => doHash(IdentityHash.of(obj), hashVal), 0);\n    }\n    get(model) {\n        const key = this._key(model);\n        const avg = this._cache.get(key);\n        return avg\n            ? clamp(avg.value, this._min, this._max)\n            : this.default();\n    }\n    update(model, value) {\n        const key = this._key(model);\n        let avg = this._cache.get(key);\n        if (!avg) {\n            avg = new SlidingWindowAverage(6);\n            this._cache.set(key, avg);\n        }\n        const newValue = clamp(avg.update(value), this._min, this._max);\n        if (!matchesScheme(model.uri, 'output')) {\n            this._logService.trace(`[DEBOUNCE: ${this._name}] for ${model.uri.toString()} is ${newValue}ms`);\n        }\n        return newValue;\n    }\n    _overall() {\n        const result = new MovingAverage();\n        for (const [, avg] of this._cache) {\n            result.update(avg.value);\n        }\n        return result.value;\n    }\n    default() {\n        const value = (this._overall() | 0) || this._default;\n        return clamp(value, this._min, this._max);\n    }\n}\nlet LanguageFeatureDebounceService = class LanguageFeatureDebounceService {\n    constructor(_logService, envService) {\n        this._logService = _logService;\n        this._data = new Map();\n        this._isDev = envService.isExtensionDevelopment || !envService.isBuilt;\n    }\n    for(feature, name, config) {\n        const min = config?.min ?? 50;\n        const max = config?.max ?? min ** 2;\n        const extra = config?.key ?? undefined;\n        const key = `${IdentityHash.of(feature)},${min}${extra ? ',' + extra : ''}`;\n        let info = this._data.get(key);\n        if (!info) {\n            if (this._isDev) {\n                this._logService.debug(`[DEBOUNCE: ${name}] is disabled in developed mode`);\n                info = new NullDebounceInformation(min * 1.5);\n            }\n            else {\n                info = new FeatureDebounceInformation(this._logService, name, feature, (this._overallAverage() | 0) || (min * 1.5), // default is overall default or derived from min-value\n                min, max);\n            }\n            this._data.set(key, info);\n        }\n        return info;\n    }\n    _overallAverage() {\n        // Average of all language features. Not a great value but an approximation\n        const result = new MovingAverage();\n        for (const info of this._data.values()) {\n            result.update(info.default());\n        }\n        return result.value;\n    }\n};\nLanguageFeatureDebounceService = __decorate([\n    __param(0, ILogService),\n    __param(1, IEnvironmentService)\n], LanguageFeatureDebounceService);\nexport { LanguageFeatureDebounceService };\nregisterSingleton(ILanguageFeatureDebounceService, LanguageFeatureDebounceService, 1 /* InstantiationType.Delayed */);\n","/*---------------------------------------------------------------------------------------------\n *  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 */\nexport class TokenMetadata {\n    static getLanguageId(metadata) {\n        return (metadata & 255 /* MetadataConsts.LANGUAGEID_MASK */) >>> 0 /* MetadataConsts.LANGUAGEID_OFFSET */;\n    }\n    static getTokenType(metadata) {\n        return (metadata & 768 /* MetadataConsts.TOKEN_TYPE_MASK */) >>> 8 /* MetadataConsts.TOKEN_TYPE_OFFSET */;\n    }\n    static containsBalancedBrackets(metadata) {\n        return (metadata & 1024 /* MetadataConsts.BALANCED_BRACKETS_MASK */) !== 0;\n    }\n    static getFontStyle(metadata) {\n        return (metadata & 30720 /* MetadataConsts.FONT_STYLE_MASK */) >>> 11 /* MetadataConsts.FONT_STYLE_OFFSET */;\n    }\n    static getForeground(metadata) {\n        return (metadata & 16744448 /* MetadataConsts.FOREGROUND_MASK */) >>> 15 /* MetadataConsts.FOREGROUND_OFFSET */;\n    }\n    static getBackground(metadata) {\n        return (metadata & 4278190080 /* MetadataConsts.BACKGROUND_MASK */) >>> 24 /* MetadataConsts.BACKGROUND_OFFSET */;\n    }\n    static getClassNameFromMetadata(metadata) {\n        const foreground = this.getForeground(metadata);\n        let className = 'mtk' + foreground;\n        const fontStyle = this.getFontStyle(metadata);\n        if (fontStyle & 1 /* FontStyle.Italic */) {\n            className += ' mtki';\n        }\n        if (fontStyle & 2 /* FontStyle.Bold */) {\n            className += ' mtkb';\n        }\n        if (fontStyle & 4 /* FontStyle.Underline */) {\n            className += ' mtku';\n        }\n        if (fontStyle & 8 /* FontStyle.Strikethrough */) {\n            className += ' mtks';\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 /* FontStyle.Italic */) {\n            result += 'font-style: italic;';\n        }\n        if (fontStyle & 2 /* FontStyle.Bold */) {\n            result += 'font-weight: bold;';\n        }\n        let textDecoration = '';\n        if (fontStyle & 4 /* FontStyle.Underline */) {\n            textDecoration += ' underline';\n        }\n        if (fontStyle & 8 /* FontStyle.Strikethrough */) {\n            textDecoration += ' line-through';\n        }\n        if (textDecoration) {\n            result += `text-decoration:${textDecoration};`;\n        }\n        return result;\n    }\n    static getPresentationFromMetadata(metadata) {\n        const foreground = this.getForeground(metadata);\n        const fontStyle = this.getFontStyle(metadata);\n        return {\n            foreground: foreground,\n            italic: Boolean(fontStyle & 1 /* FontStyle.Italic */),\n            bold: Boolean(fontStyle & 2 /* FontStyle.Bold */),\n            underline: Boolean(fontStyle & 4 /* FontStyle.Underline */),\n            strikethrough: Boolean(fontStyle & 8 /* FontStyle.Strikethrough */),\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 function countEOL(text) {\n    let eolCount = 0;\n    let firstLineLength = 0;\n    let lastLineStart = 0;\n    let eol = 0 /* StringEOL.Unknown */;\n    for (let i = 0, len = text.length; i < len; i++) {\n        const chr = text.charCodeAt(i);\n        if (chr === 13 /* CharCode.CarriageReturn */) {\n            if (eolCount === 0) {\n                firstLineLength = i;\n            }\n            eolCount++;\n            if (i + 1 < len && text.charCodeAt(i + 1) === 10 /* CharCode.LineFeed */) {\n                // \\r\\n... case\n                eol |= 2 /* StringEOL.CRLF */;\n                i++; // skip \\n\n            }\n            else {\n                // \\r... case\n                eol |= 3 /* StringEOL.Invalid */;\n            }\n            lastLineStart = i + 1;\n        }\n        else if (chr === 10 /* CharCode.LineFeed */) {\n            // \\n... case\n            eol |= 1 /* StringEOL.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}\n","/*---------------------------------------------------------------------------------------------\n *  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 { TokenMetadata } from '../encodedTokenAttributes.js';\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\nimport { ILogService, LogLevel } from '../../../platform/log/common/log.js';\nimport { SparseMultilineTokens } from '../tokens/sparseMultilineTokens.js';\nimport { ILanguageService } from '../languages/language.js';\nconst ENABLE_TRACE = false;\nlet SemanticTokensProviderStyling = class SemanticTokensProviderStyling {\n    constructor(_legend, _themeService, _languageService, _logService) {\n        this._legend = _legend;\n        this._themeService = _themeService;\n        this._languageService = _languageService;\n        this._logService = _logService;\n        this._hasWarnedOverlappingTokens = false;\n        this._hasWarnedInvalidLengthTokens = false;\n        this._hasWarnedInvalidEditStart = false;\n        this._hashTable = new HashTable();\n    }\n    getMetadata(tokenTypeIndex, tokenModifierSet, languageId) {\n        const encodedLanguageId = this._languageService.languageIdCodec.encodeLanguageId(languageId);\n        const entry = this._hashTable.get(tokenTypeIndex, tokenModifierSet, encodedLanguageId);\n        let metadata;\n        if (entry) {\n            metadata = entry.metadata;\n            if (ENABLE_TRACE && 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 (ENABLE_TRACE && 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);\n                if (typeof tokenStyle === 'undefined') {\n                    metadata = 2147483647 /* SemanticTokensProviderStylingConstants.NO_STYLING */;\n                }\n                else {\n                    metadata = 0;\n                    if (typeof tokenStyle.italic !== 'undefined') {\n                        const italicBit = (tokenStyle.italic ? 1 /* FontStyle.Italic */ : 0) << 11 /* MetadataConsts.FONT_STYLE_OFFSET */;\n                        metadata |= italicBit | 1 /* MetadataConsts.SEMANTIC_USE_ITALIC */;\n                    }\n                    if (typeof tokenStyle.bold !== 'undefined') {\n                        const boldBit = (tokenStyle.bold ? 2 /* FontStyle.Bold */ : 0) << 11 /* MetadataConsts.FONT_STYLE_OFFSET */;\n                        metadata |= boldBit | 2 /* MetadataConsts.SEMANTIC_USE_BOLD */;\n                    }\n                    if (typeof tokenStyle.underline !== 'undefined') {\n                        const underlineBit = (tokenStyle.underline ? 4 /* FontStyle.Underline */ : 0) << 11 /* MetadataConsts.FONT_STYLE_OFFSET */;\n                        metadata |= underlineBit | 4 /* MetadataConsts.SEMANTIC_USE_UNDERLINE */;\n                    }\n                    if (typeof tokenStyle.strikethrough !== 'undefined') {\n                        const strikethroughBit = (tokenStyle.strikethrough ? 8 /* FontStyle.Strikethrough */ : 0) << 11 /* MetadataConsts.FONT_STYLE_OFFSET */;\n                        metadata |= strikethroughBit | 8 /* MetadataConsts.SEMANTIC_USE_STRIKETHROUGH */;\n                    }\n                    if (tokenStyle.foreground) {\n                        const foregroundBits = (tokenStyle.foreground) << 15 /* MetadataConsts.FOREGROUND_OFFSET */;\n                        metadata |= foregroundBits | 16 /* MetadataConsts.SEMANTIC_USE_FOREGROUND */;\n                    }\n                    if (metadata === 0) {\n                        // Nothing!\n                        metadata = 2147483647 /* SemanticTokensProviderStylingConstants.NO_STYLING */;\n                    }\n                }\n            }\n            else {\n                if (ENABLE_TRACE && 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 /* SemanticTokensProviderStylingConstants.NO_STYLING */;\n                tokenType = 'not-in-legend';\n            }\n            this._hashTable.add(tokenTypeIndex, tokenModifierSet, encodedLanguageId, metadata);\n            if (ENABLE_TRACE && 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            this._logService.warn(`Overlapping semantic tokens detected at lineNumber ${lineNumber}, column ${startColumn}`);\n        }\n    }\n    warnInvalidLengthSemanticTokens(lineNumber, startColumn) {\n        if (!this._hasWarnedInvalidLengthTokens) {\n            this._hasWarnedInvalidLengthTokens = true;\n            this._logService.warn(`Semantic token with invalid length detected at lineNumber ${lineNumber}, column ${startColumn}`);\n        }\n    }\n    warnInvalidEditStart(previousResultId, resultId, editIndex, editStart, maxExpectedStart) {\n        if (!this._hasWarnedInvalidEditStart) {\n            this._hasWarnedInvalidEditStart = true;\n            this._logService.warn(`Invalid semantic tokens edit detected (previousResultId: ${previousResultId}, resultId: ${resultId}) at edit #${editIndex}: The provided start offset ${editStart} is outside the previous data (length ${maxExpectedStart}).`);\n        }\n    }\n};\nSemanticTokensProviderStyling = __decorate([\n    __param(1, IThemeService),\n    __param(2, ILanguageService),\n    __param(3, ILogService)\n], SemanticTokensProviderStyling);\nexport { SemanticTokensProviderStyling };\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 /* SemanticColoringConstants.DesiredMaxAreas */), 400 /* SemanticColoringConstants.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 prevEndCharacter = 0;\n        while (tokenIndex < tokenEndIndex) {\n            const srcOffset = 5 * tokenIndex;\n            const deltaLine = srcData[srcOffset];\n            const deltaCharacter = srcData[srcOffset + 1];\n            // Casting both `lineNumber`, `startCharacter` and `endCharacter` here to uint32 using `|0`\n            // to validate below with the actual values that will be inserted in the Uint32Array result\n            const lineNumber = (lastLineNumber + deltaLine) | 0;\n            const startCharacter = (deltaLine === 0 ? (lastStartCharacter + deltaCharacter) | 0 : deltaCharacter);\n            const length = srcData[srcOffset + 2];\n            const endCharacter = (startCharacter + length) | 0;\n            const tokenTypeIndex = srcData[srcOffset + 3];\n            const tokenModifierSet = srcData[srcOffset + 4];\n            if (endCharacter <= startCharacter) {\n                // this token is invalid (most likely a negative length casted to uint32)\n                styling.warnInvalidLengthSemanticTokens(lineNumber, startCharacter + 1);\n            }\n            else if (prevLineNumber === lineNumber && prevEndCharacter > startCharacter) {\n                // this token overlaps with the previous token\n                styling.warnOverlappingSemanticTokens(lineNumber, startCharacter + 1);\n            }\n            else {\n                const metadata = styling.getMetadata(tokenTypeIndex, tokenModifierSet, languageId);\n                if (metadata !== 2147483647 /* SemanticTokensProviderStylingConstants.NO_STYLING */) {\n                    if (areaLine === 0) {\n                        areaLine = lineNumber;\n                    }\n                    destData[destOffset] = lineNumber - areaLine;\n                    destData[destOffset + 1] = startCharacter;\n                    destData[destOffset + 2] = endCharacter;\n                    destData[destOffset + 3] = metadata;\n                    destOffset += 4;\n                    prevLineNumber = lineNumber;\n                    prevEndCharacter = endCharacter;\n                }\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 = SparseMultilineTokens.create(areaLine, 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    static { this._SIZES = [3, 7, 13, 31, 61, 127, 251, 509, 1021, 2039, 4093, 8191, 16381, 32749, 65521, 131071, 262139, 524287, 1048573, 2097143]; }\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}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 ISemanticTokensStylingService = createDecorator('semanticTokensStylingService');\n","/*---------------------------------------------------------------------------------------------\n *  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 { ILanguageService } from '../languages/language.js';\nimport { IThemeService } from '../../../platform/theme/common/themeService.js';\nimport { ILogService } from '../../../platform/log/common/log.js';\nimport { SemanticTokensProviderStyling } from './semanticTokensProviderStyling.js';\nimport { ISemanticTokensStylingService } from './semanticTokensStyling.js';\nimport { registerSingleton } from '../../../platform/instantiation/common/extensions.js';\nlet SemanticTokensStylingService = class SemanticTokensStylingService extends Disposable {\n    constructor(_themeService, _logService, _languageService) {\n        super();\n        this._themeService = _themeService;\n        this._logService = _logService;\n        this._languageService = _languageService;\n        this._caches = new WeakMap();\n        this._register(this._themeService.onDidColorThemeChange(() => {\n            this._caches = new WeakMap();\n        }));\n    }\n    getStyling(provider) {\n        if (!this._caches.has(provider)) {\n            this._caches.set(provider, new SemanticTokensProviderStyling(provider.getLegend(), this._themeService, this._languageService, this._logService));\n        }\n        return this._caches.get(provider);\n    }\n};\nSemanticTokensStylingService = __decorate([\n    __param(0, IThemeService),\n    __param(1, ILogService),\n    __param(2, ILanguageService)\n], SemanticTokensStylingService);\nexport { SemanticTokensStylingService };\nregisterSingleton(ISemanticTokensStylingService, SemanticTokensStylingService, 1 /* InstantiationType.Delayed */);\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { posix, sep } from './path.js';\nimport { isWindows } from './platform.js';\nimport { startsWithIgnoreCase } from './strings.js';\nexport function isPathSeparator(code) {\n    return code === 47 /* CharCode.Slash */ || code === 92 /* CharCode.Backslash */;\n}\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}\n/**\n * Takes a Windows OS path (using backward or forward slashes) and turns it into a posix path:\n * - turns backward slashes into forward slashes\n * - makes it absolute if it starts with a drive letter\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 toPosixPath(osPath) {\n    if (osPath.indexOf('/') === -1) {\n        osPath = toSlashes(osPath);\n    }\n    if (/^[a-zA-Z]:(\\/|$)/.test(osPath)) { // starts with a drive letter\n        osPath = '/' + osPath;\n    }\n    return osPath;\n}\n/**\n * Computes the _root_ this path, like `getRoot('c:\\files') === c:\\`,\n * `getRoot('files:///files/path') === files:///`,\n * or `getRoot('\\\\server\\shares\\path') === \\\\server\\shares\\`\n */\nexport function getRoot(path, sep = posix.sep) {\n    if (!path) {\n        return '';\n    }\n    const len = path.length;\n    const firstLetter = path.charCodeAt(0);\n    if (isPathSeparator(firstLetter)) {\n        if (isPathSeparator(path.charCodeAt(1))) {\n            // UNC candidate \\\\localhost\\shares\\ddd\n            //               ^^^^^^^^^^^^^^^^^^^\n            if (!isPathSeparator(path.charCodeAt(2))) {\n                let pos = 3;\n                const start = pos;\n                for (; pos < len; pos++) {\n                    if (isPathSeparator(path.charCodeAt(pos))) {\n                        break;\n                    }\n                }\n                if (start !== pos && !isPathSeparator(path.charCodeAt(pos + 1))) {\n                    pos += 1;\n                    for (; pos < len; pos++) {\n                        if (isPathSeparator(path.charCodeAt(pos))) {\n                            return path.slice(0, pos + 1) // consume this separator\n                                .replace(/[\\\\/]/g, sep);\n                        }\n                    }\n                }\n            }\n        }\n        // /user/far\n        // ^\n        return sep;\n    }\n    else if (isWindowsDriveLetter(firstLetter)) {\n        // check for windows drive letter c:\\ or c:\n        if (path.charCodeAt(1) === 58 /* CharCode.Colon */) {\n            if (isPathSeparator(path.charCodeAt(2))) {\n                // C:\\fff\n                // ^^^\n                return path.slice(0, 2) + sep;\n            }\n            else {\n                // C:\n                // ^^\n                return path.slice(0, 2);\n            }\n        }\n    }\n    // check for URI\n    // scheme://authority/path\n    // ^^^^^^^^^^^^^^^^^^^\n    let pos = path.indexOf('://');\n    if (pos !== -1) {\n        pos += 3; // 3 -> \"://\".length\n        for (; pos < len; pos++) {\n            if (isPathSeparator(path.charCodeAt(pos))) {\n                return path.slice(0, pos + 1); // consume this separator\n            }\n        }\n    }\n    return '';\n}\n/**\n * @deprecated please use `IUriIdentityService.extUri.isEqualOrParent` instead. If\n * you are in a context without services, consider to pass down the `extUri` from the\n * outside, or use `extUriBiasedIgnorePathCase` if you know what you are doing.\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 /* CharCode.A */ && char0 <= 90 /* CharCode.Z */ || char0 >= 97 /* CharCode.a */ && char0 <= 122 /* CharCode.z */;\n}\nexport function hasDriveLetter(path, isWindowsOS = isWindows) {\n    if (isWindowsOS) {\n        return isWindowsDriveLetter(path.charCodeAt(0)) && path.charCodeAt(1) === 58 /* CharCode.Colon */;\n    }\n    return false;\n}\n","import { isThenable } from './async.js';\nimport { isEqualOrParent } from './extpath.js';\nimport { LRUCache } from './map.js';\nimport { basename, extname, posix, sep } from './path.js';\nimport { isLinux } from './platform.js';\nimport { escapeRegExpCharacters, ltrim } from './strings.js';\nexport const GLOBSTAR = '**';\nexport const 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, isLastPattern) {\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) 0-many times except when it's the last pattern\n            //           in which case also matches (Path Sep followed by Path Val)\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}${isLastPattern ? `|${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(segment => segment === GLOBSTAR)) {\n        regEx = '.*';\n    }\n    // Build regex over segments\n    else {\n        let previousSegmentWasGlobStar = false;\n        segments.forEach((segment, index) => {\n            // Treat globstar specially\n            if (segment === GLOBSTAR) {\n                // if we have more than one globstar after another, just ignore it\n                if (previousSegmentWasGlobStar) {\n                    return;\n                }\n                regEx += starsToRegExp(2, index === segments.length - 1);\n            }\n            // Anything else, not globstar\n            else {\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 = 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(choice => parseRegExp(choice)).join('|')})`;\n                            regEx += braceRegExp;\n                            inBraces = false;\n                            braceVal = '';\n                            break;\n                        }\n                        case ']': {\n                            regEx += ('[' + bracketVal + ']');\n                            inBrackets = false;\n                            bracketVal = '';\n                            break;\n                        }\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 += escapeRegExpCharacters(char);\n                    }\n                }\n                // Tail: Add the slash we had split on if there is more to\n                // come and the remaining pattern is not a globstar\n                // For example if pattern: some/**/*.js we want the \"/\" after\n                // some to be included in the RegEx to prevent a folder called\n                // \"something\" to match as well.\n                if (index < segments.length - 1 && // more segments to come after this\n                    (segments[index + 1] !== GLOBSTAR || // next segment is not **, or...\n                        index + 2 < segments.length // ...next segment is ** but there is more segments after that\n                    )) {\n                    regEx += PATH_REGEX;\n                }\n            }\n            // update globstar state\n            previousSegmentWasGlobStar = (segment === GLOBSTAR);\n        });\n    }\n    return regEx;\n}\n// regexes to check for trivial 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 relative patterns\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 Trivials\n    let match;\n    if (T1.test(pattern)) {\n        parsedPattern = trivia1(pattern.substr(4), pattern); // common pattern: **/*.txt just need endsWith check\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    const wrappedPattern = function (path, basename) {\n        if (!isEqualOrParent(path, arg2.base, !isLinux)) {\n            // skip glob matching if `base` is not a parent of `path`\n            return null;\n        }\n        // Given we have checked `base` being a parent of `path`,\n        // we can now remove the `base` portion of the `path`\n        // and only match on the remaining path components\n        // For that we try to extract the portion of the `path`\n        // that comes after the `base` portion. We have to account\n        // for the fact that `base` might end in a path separator\n        // (https://github.com/microsoft/vscode/issues/162498)\n        return parsedPattern(ltrim(path.substr(arg2.base.length), sep), basename);\n    };\n    // Make sure to preserve associated metadata\n    wrappedPattern.allBasenames = parsedPattern.allBasenames;\n    wrappedPattern.allPaths = parsedPattern.allPaths;\n    wrappedPattern.basenames = parsedPattern.basenames;\n    wrappedPattern.patterns = parsedPattern.patterns;\n    return wrappedPattern;\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: **/*.txt just need endsWith check\nfunction trivia1(base, pattern) {\n    return function (path, basename) {\n        return typeof path === 'string' && path.endsWith(base) ? pattern : null;\n    };\n}\n// common pattern: **/some.txt just need basename check\nfunction trivia2(base, pattern) {\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 ? pattern : null;\n        }\n        return path === base || path.endsWith(slashBase) || path.endsWith(backslashBase) ? pattern : null;\n    };\n    const basenames = [base];\n    parsedPattern.basenames = basenames;\n    parsedPattern.patterns = [pattern];\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)\n        .split(',')\n        .map(pattern => parsePattern(pattern, options))\n        .filter(pattern => pattern !== NULL), pattern);\n    const patternsLength = parsedPatterns.length;\n    if (!patternsLength) {\n        return NULL;\n    }\n    if (patternsLength === 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 = sep === posix.sep;\n    const nativePath = usingPosixSep ? targetPath : targetPath.replace(ALL_FORWARD_SLASHES, sep);\n    const nativePathEnd = sep + nativePath;\n    const targetPathEnd = posix.sep + targetPath;\n    let parsedPattern;\n    if (matchPathEnds) {\n        parsedPattern = function (path, basename) {\n            return typeof path === 'string' && ((path === nativePath || path.endsWith(nativePathEnd)) || !usingPosixSep && (path === targetPath || path.endsWith(targetPathEnd))) ? pattern : null;\n        };\n    }\n    else {\n        parsedPattern = function (path, basename) {\n            return typeof path === 'string' && (path === nativePath || (!usingPosixSep && path === targetPath)) ? pattern : null;\n        };\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    if (!rp) {\n        return false;\n    }\n    return 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 patternsLength = parsedPatterns.length;\n    if (!patternsLength) {\n        return NULL;\n    }\n    if (!parsedPatterns.some(parsedPattern => !!parsedPattern.requiresSiblings)) {\n        if (patternsLength === 1) {\n            return parsedPatterns[0];\n        }\n        const resultExpression = function (path, basename) {\n            let resultPromises = undefined;\n            for (let i = 0, n = parsedPatterns.length; i < n; i++) {\n                const result = parsedPatterns[i](path, basename);\n                if (typeof result === 'string') {\n                    return result; // immediately return as soon as the first expression matches\n                }\n                // If the result is a promise, we have to keep it for\n                // later processing and await the result properly.\n                if (isThenable(result)) {\n                    if (!resultPromises) {\n                        resultPromises = [];\n                    }\n                    resultPromises.push(result);\n                }\n            }\n            // With result promises, we have to loop over each and\n            // await the result before we can return any result.\n            if (resultPromises) {\n                return (async () => {\n                    for (const resultPromise of resultPromises) {\n                        const result = await resultPromise;\n                        if (typeof result === 'string') {\n                            return result;\n                        }\n                    }\n                    return null;\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, base, hasSibling) {\n        let name = undefined;\n        let resultPromises = 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 (!base) {\n                    base = basename(path);\n                }\n                if (!name) {\n                    name = base.substr(0, base.length - extname(path).length);\n                }\n            }\n            const result = parsedPattern(path, base, name, hasSibling);\n            if (typeof result === 'string') {\n                return result; // immediately return as soon as the first expression matches\n            }\n            // If the result is a promise, we have to keep it for\n            // later processing and await the result properly.\n            if (isThenable(result)) {\n                if (!resultPromises) {\n                    resultPromises = [];\n                }\n                resultPromises.push(result);\n            }\n        }\n        // With result promises, we have to loop over each and\n        // await the result before we can return any result.\n        if (resultPromises) {\n            return (async () => {\n                for (const resultPromise of resultPromises) {\n                    const result = await resultPromise;\n                    if (typeof result === 'string') {\n                        return result;\n                    }\n                }\n                return null;\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(match => match ? 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 /* CharCode.Slash */ || ch === 92 /* CharCode.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 { match as matchGlobPattern } from '../../base/common/glob.js';\nimport { normalize } from '../../base/common/path.js';\nexport function score(selector, candidateUri, candidateLanguage, candidateIsSynchronized, candidateNotebookUri, candidateNotebookType) {\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, candidateNotebookUri, candidateNotebookType);\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, notebookType } = selector; // TODO: microsoft/TypeScript#42768\n        if (!candidateIsSynchronized && !hasAccessToAllModels) {\n            return 0;\n        }\n        // selector targets a notebook -> use the notebook uri instead\n        // of the \"normal\" document uri.\n        if (notebookType && candidateNotebookUri) {\n            candidateUri = candidateNotebookUri;\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 (notebookType) {\n            if (notebookType === candidateNotebookType) {\n                ret = 10;\n            }\n            else if (notebookType === '*' && candidateNotebookType !== undefined) {\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 = { ...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 { toDisposable } from '../../base/common/lifecycle.js';\nimport { shouldSynchronizeModel } from './model.js';\nimport { score } from './languageSelector.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}\nclass MatchCandidate {\n    constructor(uri, languageId, notebookUri, notebookType, recursive) {\n        this.uri = uri;\n        this.languageId = languageId;\n        this.notebookUri = notebookUri;\n        this.notebookType = notebookType;\n        this.recursive = recursive;\n    }\n    equals(other) {\n        return this.notebookType === other.notebookType\n            && this.languageId === other.languageId\n            && this.uri.toString() === other.uri.toString()\n            && this.notebookUri?.toString() === other.notebookUri?.toString()\n            && this.recursive === other.recursive;\n    }\n}\nexport class LanguageFeatureRegistry {\n    constructor(_notebookInfoResolver) {\n        this._notebookInfoResolver = _notebookInfoResolver;\n        this._clock = 0;\n        this._entries = [];\n        this._onDidChange = new Emitter();\n        this.onDidChange = 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                const 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, false);\n        const result = [];\n        // from registry\n        for (const entry of this._entries) {\n            if (entry._score > 0) {\n                result.push(entry.provider);\n            }\n        }\n        return result;\n    }\n    ordered(model, recursive = false) {\n        const result = [];\n        this._orderedForEach(model, recursive, 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, false, 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, recursive, callback) {\n        this._updateScores(model, recursive);\n        for (const entry of this._entries) {\n            if (entry._score > 0) {\n                callback(entry);\n            }\n        }\n    }\n    _updateScores(model, recursive) {\n        const notebookInfo = this._notebookInfoResolver?.(model.uri);\n        // use the uri (scheme, pattern) of the notebook info iff we have one\n        // otherwise it's the model's/document's uri\n        const candidate = notebookInfo\n            ? new MatchCandidate(model.uri, model.getLanguageId(), notebookInfo.uri, notebookInfo.type, recursive)\n            : new MatchCandidate(model.uri, model.getLanguageId(), undefined, undefined, recursive);\n        if (this._lastCandidate?.equals(candidate)) {\n            // nothing has changed\n            return;\n        }\n        this._lastCandidate = candidate;\n        for (const entry of this._entries) {\n            entry._score = score(entry.selector, candidate.uri, candidate.languageId, shouldSynchronizeModel(model), candidate.notebookUri, candidate.notebookType);\n            if (isExclusive(entry.selector) && entry._score > 0) {\n                if (recursive) {\n                    entry._score = 0;\n                }\n                else {\n                    // support for one exclusive selector that overwrites\n                    // any other selector\n                    for (const entry of this._entries) {\n                        entry._score = 0;\n                    }\n                    entry._score = 1000;\n                    break;\n                }\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        // De-prioritize built-in providers\n        if (isBuiltinSelector(a.selector) && !isBuiltinSelector(b.selector)) {\n            return 1;\n        }\n        else if (!isBuiltinSelector(a.selector) && isBuiltinSelector(b.selector)) {\n            return -1;\n        }\n        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}\nfunction isBuiltinSelector(selector) {\n    if (typeof selector === 'string') {\n        return false;\n    }\n    if (Array.isArray(selector)) {\n        return selector.some(isBuiltinSelector);\n    }\n    return Boolean(selector.isBuiltin);\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { LanguageFeatureRegistry } from '../languageFeatureRegistry.js';\nimport { ILanguageFeaturesService } from './languageFeatures.js';\nimport { registerSingleton } from '../../../platform/instantiation/common/extensions.js';\nexport class LanguageFeaturesService {\n    constructor() {\n        this.referenceProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.renameProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.newSymbolNamesProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.codeActionProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.definitionProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.typeDefinitionProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.declarationProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.implementationProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.documentSymbolProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.inlayHintsProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.colorProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.codeLensProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.documentFormattingEditProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.documentRangeFormattingEditProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.onTypeFormattingEditProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.signatureHelpProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.hoverProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.documentHighlightProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.multiDocumentHighlightProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.selectionRangeProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.foldingRangeProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.linkProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.inlineCompletionsProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.inlineEditProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.completionProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.linkedEditingRangeProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.documentRangeSemanticTokensProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.documentSemanticTokensProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.documentDropEditProvider = new LanguageFeatureRegistry(this._score.bind(this));\n        this.documentPasteEditProvider = new LanguageFeatureRegistry(this._score.bind(this));\n    }\n    _score(uri) {\n        return this._notebookTypeResolver?.(uri);\n    }\n}\nregisterSingleton(ILanguageFeaturesService, LanguageFeaturesService, 1 /* InstantiationType.Delayed */);\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { assertNever } from '../../../base/common/assert.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { Color } from '../../../base/common/color.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Extensions as JSONExtensions } from '../../jsonschemas/common/jsonContributionRegistry.js';\nimport * as platform from '../../registry/common/platform.js';\nimport * as nls from '../../../nls.js';\n/**\n * Returns the css variable name for the given color identifier. Dots (`.`) are replaced with hyphens (`-`) and\n * everything is prefixed with `--vscode-`.\n *\n * @sample `editorSuggestWidget.background` is `--vscode-editorSuggestWidget-background`.\n */\nexport function asCssVariableName(colorIdent) {\n    return `--vscode-${colorIdent.replace(/\\./g, '-')}`;\n}\nexport function asCssVariable(color) {\n    return `var(${asCssVariableName(color)})`;\n}\nexport function asCssVariableWithDefault(color, defaultCssValue) {\n    return `var(${asCssVariableName(color)}, ${defaultCssValue})`;\n}\nexport function isColorDefaults(value) {\n    return value !== null && typeof value === 'object' && 'light' in value && 'dark' in value;\n}\n// color registry\nexport const Extensions = {\n    ColorContribution: 'base.contributions.colors'\n};\nexport const DEFAULT_COLOR_CONFIG_VALUE = 'default';\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        const colorContribution = { id, description, defaults, needsTransparency, deprecationMessage };\n        this.colorsById[id] = colorContribution;\n        const propertySchema = { type: 'string', format: 'color-hex', defaultSnippets: [{ body: '${1:#ff0000}' }] };\n        if (deprecationMessage) {\n            propertySchema.deprecationMessage = deprecationMessage;\n        }\n        if (needsTransparency) {\n            propertySchema.pattern = '^#(?:(?<rgba>[0-9a-fA-f]{3}[0-9a-eA-E])|(?:[0-9a-fA-F]{6}(?:(?![fF]{2})(?:[0-9a-fA-F]{2}))))?$';\n            propertySchema.patternErrorMessage = nls.localize('transparecyRequired', 'This color must be transparent or it will obscure content');\n        }\n        this.colorSchema.properties[id] = {\n            description,\n            oneOf: [\n                propertySchema,\n                { type: 'string', const: DEFAULT_COLOR_CONFIG_VALUE, description: nls.localize('useDefault', 'Use the default color.') }\n            ]\n        };\n        this.colorReferenceSchema.enum.push(id);\n        this.colorReferenceSchema.enumDescriptions.push(description);\n        this._onDidChangeSchema.fire();\n        return id;\n    }\n    getColors() {\n        return Object.keys(this.colorsById).map(id => this.colorsById[id]);\n    }\n    resolveDefaultColor(id, theme) {\n        const colorDesc = this.colorsById[id];\n        if (colorDesc?.defaults) {\n            const colorValue = isColorDefaults(colorDesc.defaults) ? colorDesc.defaults[theme.type] : colorDesc.defaults;\n            return resolveColorValue(colorValue, theme);\n        }\n        return undefined;\n    }\n    getColorSchema() {\n        return this.colorSchema;\n    }\n    toString() {\n        const sorter = (a, b) => {\n            const cat1 = a.indexOf('.') === -1 ? 0 : 1;\n            const 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// ----- color functions\nexport function executeTransform(transform, theme) {\n    switch (transform.op) {\n        case 0 /* ColorTransformType.Darken */:\n            return resolveColorValue(transform.value, theme)?.darken(transform.factor);\n        case 1 /* ColorTransformType.Lighten */:\n            return resolveColorValue(transform.value, theme)?.lighten(transform.factor);\n        case 2 /* ColorTransformType.Transparent */:\n            return resolveColorValue(transform.value, theme)?.transparent(transform.factor);\n        case 3 /* ColorTransformType.Opaque */: {\n            const backgroundColor = resolveColorValue(transform.background, theme);\n            if (!backgroundColor) {\n                return resolveColorValue(transform.value, theme);\n            }\n            return resolveColorValue(transform.value, theme)?.makeOpaque(backgroundColor);\n        }\n        case 4 /* ColorTransformType.OneOf */:\n            for (const candidate of transform.values) {\n                const color = resolveColorValue(candidate, theme);\n                if (color) {\n                    return color;\n                }\n            }\n            return undefined;\n        case 6 /* ColorTransformType.IfDefinedThenElse */:\n            return resolveColorValue(theme.defines(transform.if) ? transform.then : transform.else, theme);\n        case 5 /* ColorTransformType.LessProminent */: {\n            const from = resolveColorValue(transform.value, theme);\n            if (!from) {\n                return undefined;\n            }\n            const backgroundColor = resolveColorValue(transform.background, theme);\n            if (!backgroundColor) {\n                return from.transparent(transform.factor * transform.transparency);\n            }\n            return from.isDarkerThan(backgroundColor)\n                ? Color.getLighterColor(from, backgroundColor, transform.factor).transparent(transform.transparency)\n                : Color.getDarkerColor(from, backgroundColor, transform.factor).transparent(transform.transparency);\n        }\n        default:\n            throw assertNever(transform);\n    }\n}\nexport function darken(colorValue, factor) {\n    return { op: 0 /* ColorTransformType.Darken */, value: colorValue, factor };\n}\nexport function lighten(colorValue, factor) {\n    return { op: 1 /* ColorTransformType.Lighten */, value: colorValue, factor };\n}\nexport function transparent(colorValue, factor) {\n    return { op: 2 /* ColorTransformType.Transparent */, value: colorValue, factor };\n}\nexport function oneOf(...colorValues) {\n    return { op: 4 /* ColorTransformType.OneOf */, values: colorValues };\n}\nexport function ifDefinedThenElse(ifArg, thenArg, elseArg) {\n    return { op: 6 /* ColorTransformType.IfDefinedThenElse */, if: ifArg, then: thenArg, else: elseArg };\n}\nexport function lessProminent(colorValue, backgroundColorValue, factor, transparency) {\n    return { op: 5 /* ColorTransformType.LessProminent */, value: colorValue, background: backgroundColorValue, factor, transparency };\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 === 'object') {\n        return executeTransform(colorValue, theme);\n    }\n    return undefined;\n}\nexport const workbenchColorsSchemaId = 'vscode://schemas/workbench-colors';\nconst 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 nls from '../../../../nls.js';\n// Import the effects we need\nimport { Color } from '../../../../base/common/color.js';\nimport { registerColor, transparent } from '../colorUtils.js';\nexport const foreground = registerColor('foreground', { dark: '#CCCCCC', light: '#616161', hcDark: '#FFFFFF', hcLight: '#292929' }, nls.localize('foreground', \"Overall foreground color. This color is only used if not overridden by a component.\"));\nexport const disabledForeground = registerColor('disabledForeground', { dark: '#CCCCCC80', light: '#61616180', hcDark: '#A5A5A5', hcLight: '#7F7F7F' }, nls.localize('disabledForeground', \"Overall foreground for disabled elements. This color is only used if not overridden by a component.\"));\nexport const errorForeground = registerColor('errorForeground', { dark: '#F48771', light: '#A1260D', hcDark: '#F48771', hcLight: '#B5200D' }, nls.localize('errorForeground', \"Overall foreground color for error messages. This color is only used if not overridden by a component.\"));\nexport const descriptionForeground = registerColor('descriptionForeground', { light: '#717171', dark: transparent(foreground, 0.7), hcDark: transparent(foreground, 0.7), hcLight: transparent(foreground, 0.7) }, nls.localize('descriptionForeground', \"Foreground color for description text providing additional information, for example for a label.\"));\nexport const iconForeground = registerColor('icon.foreground', { dark: '#C5C5C5', light: '#424242', hcDark: '#FFFFFF', hcLight: '#292929' }, nls.localize('iconForeground', \"The default color for icons in the workbench.\"));\nexport const focusBorder = registerColor('focusBorder', { dark: '#007FD4', light: '#0090F1', hcDark: '#F38518', hcLight: '#006BBD' }, 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, hcDark: '#6FC3DF', hcLight: '#0F4A85' }, 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, hcDark: focusBorder, hcLight: focusBorder }, nls.localize('activeContrastBorder', \"An extra border around active elements to separate them from others for greater contrast.\"));\nexport const selectionBackground = registerColor('selection.background', null, nls.localize('selectionBackground', \"The background color of text selections in the workbench (e.g. for input fields or text areas). Note that this does not apply to selections within the editor.\"));\n// ------ text link\nexport const textLinkForeground = registerColor('textLink.foreground', { light: '#006AB1', dark: '#3794FF', hcDark: '#21A6FF', hcLight: '#0F4A85' }, nls.localize('textLinkForeground', \"Foreground color for links in text.\"));\nexport const textLinkActiveForeground = registerColor('textLink.activeForeground', { light: '#006AB1', dark: '#3794FF', hcDark: '#21A6FF', hcLight: '#0F4A85' }, nls.localize('textLinkActiveForeground', \"Foreground color for links in text when clicked on and on mouse hover.\"));\nexport const textSeparatorForeground = registerColor('textSeparator.foreground', { light: '#0000002e', dark: '#ffffff2e', hcDark: Color.black, hcLight: '#292929' }, nls.localize('textSeparatorForeground', \"Color for text separators.\"));\n// ------ text preformat\nexport const textPreformatForeground = registerColor('textPreformat.foreground', { light: '#A31515', dark: '#D7BA7D', hcDark: '#000000', hcLight: '#FFFFFF' }, nls.localize('textPreformatForeground', \"Foreground color for preformatted text segments.\"));\nexport const textPreformatBackground = registerColor('textPreformat.background', { light: '#0000001A', dark: '#FFFFFF1A', hcDark: '#FFFFFF', hcLight: '#09345f' }, nls.localize('textPreformatBackground', \"Background color for preformatted text segments.\"));\n// ------ text block quote\nexport const textBlockQuoteBackground = registerColor('textBlockQuote.background', { light: '#f2f2f2', dark: '#222222', hcDark: null, hcLight: '#F2F2F2' }, nls.localize('textBlockQuoteBackground', \"Background color for block quotes in text.\"));\nexport const textBlockQuoteBorder = registerColor('textBlockQuote.border', { light: '#007acc80', dark: '#007acc80', hcDark: Color.white, hcLight: '#292929' }, nls.localize('textBlockQuoteBorder', \"Border color for block quotes in text.\"));\n// ------ text code block\nexport const textCodeBlockBackground = registerColor('textCodeBlock.background', { light: '#dcdcdc66', dark: '#0a0a0a66', hcDark: Color.black, hcLight: '#F2F2F2' }, nls.localize('textCodeBlockBackground', \"Background color for code blocks in 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 * as nls from '../../../../nls.js';\n// Import the effects we need\nimport { Color } from '../../../../base/common/color.js';\nimport { registerColor, transparent } from '../colorUtils.js';\n// Import the colors we need\nimport { contrastBorder, focusBorder } from './baseColors.js';\n// ----- sash\nexport const sashHoverBorder = registerColor('sash.hoverBorder', focusBorder, nls.localize('sashActiveBorder', \"Border color of active sashes.\"));\n// ----- badge\nexport const badgeBackground = registerColor('badge.background', { dark: '#4D4D4D', light: '#C4C4C4', hcDark: Color.black, hcLight: '#0F4A85' }, 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', hcDark: Color.white, hcLight: Color.white }, nls.localize('badgeForeground', \"Badge foreground color. Badges are small information labels, e.g. for search results count.\"));\n// ----- scrollbar\nexport const scrollbarShadow = registerColor('scrollbar.shadow', { dark: '#000000', light: '#DDDDDD', hcDark: null, hcLight: 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), hcDark: transparent(contrastBorder, 0.6), hcLight: transparent(contrastBorder, 0.4) }, 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), hcDark: transparent(contrastBorder, 0.8), hcLight: 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), hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('scrollbarSliderActiveBackground', \"Scrollbar slider background color when clicked on.\"));\n// ----- progress bar\nexport const progressBarBackground = registerColor('progressBar.background', { dark: Color.fromHex('#0E70C0'), light: Color.fromHex('#0E70C0'), hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('progressBarBackground', \"Background color of the progress bar that can show for long running operations.\"));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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';\n// Import the effects we need\nimport { Color, RGBA } from '../../../../base/common/color.js';\nimport { registerColor, transparent, lessProminent, darken, lighten } from '../colorUtils.js';\n// Import the colors we need\nimport { foreground, contrastBorder, activeContrastBorder } from './baseColors.js';\nimport { scrollbarShadow, badgeBackground } from './miscColors.js';\n// ----- editor\nexport const editorBackground = registerColor('editor.background', { light: '#ffffff', dark: '#1E1E1E', hcDark: Color.black, hcLight: Color.white }, nls.localize('editorBackground', \"Editor background color.\"));\nexport const editorForeground = registerColor('editor.foreground', { light: '#333333', dark: '#BBBBBB', hcDark: Color.white, hcLight: foreground }, nls.localize('editorForeground', \"Editor default foreground color.\"));\nexport const editorStickyScrollBackground = registerColor('editorStickyScroll.background', editorBackground, nls.localize('editorStickyScrollBackground', \"Background color of sticky scroll in the editor\"));\nexport const editorStickyScrollHoverBackground = registerColor('editorStickyScrollHover.background', { dark: '#2A2D2E', light: '#F0F0F0', hcDark: null, hcLight: Color.fromHex('#0F4A85').transparent(0.1) }, nls.localize('editorStickyScrollHoverBackground', \"Background color of sticky scroll on hover in the editor\"));\nexport const editorStickyScrollBorder = registerColor('editorStickyScroll.border', { dark: null, light: null, hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('editorStickyScrollBorder', \"Border color of sticky scroll in the editor\"));\nexport const editorStickyScrollShadow = registerColor('editorStickyScroll.shadow', scrollbarShadow, nls.localize('editorStickyScrollShadow', \" Shadow color of sticky scroll in the editor\"));\nexport const editorWidgetBackground = registerColor('editorWidget.background', { dark: '#252526', light: '#F3F3F3', hcDark: '#0C141F', hcLight: Color.white }, nls.localize('editorWidgetBackground', 'Background color of editor widgets, such as find/replace.'));\nexport const editorWidgetForeground = registerColor('editorWidget.foreground', foreground, nls.localize('editorWidgetForeground', 'Foreground color of editor widgets, such as find/replace.'));\nexport const editorWidgetBorder = registerColor('editorWidget.border', { dark: '#454545', light: '#C8C8C8', hcDark: contrastBorder, hcLight: 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', 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.\"));\nexport const editorErrorBackground = registerColor('editorError.background', 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: '#F14C4C', light: '#E51400', hcDark: '#F48771', hcLight: '#B5200D' }, nls.localize('editorError.foreground', 'Foreground color of error squigglies in the editor.'));\nexport const editorErrorBorder = registerColor('editorError.border', { dark: null, light: null, hcDark: Color.fromHex('#E47777').transparent(0.8), hcLight: '#B5200D' }, nls.localize('errorBorder', 'If set, color of double underlines for errors in the editor.'));\nexport const editorWarningBackground = registerColor('editorWarning.background', 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', hcDark: '#FFD370', hcLight: '#895503' }, nls.localize('editorWarning.foreground', 'Foreground color of warning squigglies in the editor.'));\nexport const editorWarningBorder = registerColor('editorWarning.border', { dark: null, light: null, hcDark: Color.fromHex('#FFCC00').transparent(0.8), hcLight: Color.fromHex('#FFCC00').transparent(0.8) }, nls.localize('warningBorder', 'If set, color of double underlines for warnings in the editor.'));\nexport const editorInfoBackground = registerColor('editorInfo.background', 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: '#3794FF', light: '#1a85ff', hcDark: '#3794FF', hcLight: '#1a85ff' }, nls.localize('editorInfo.foreground', 'Foreground color of info squigglies in the editor.'));\nexport const editorInfoBorder = registerColor('editorInfo.border', { dark: null, light: null, hcDark: Color.fromHex('#3794FF').transparent(0.8), hcLight: '#292929' }, nls.localize('infoBorder', 'If set, color of double underlines for infos in the editor.'));\nexport const editorHintForeground = registerColor('editorHint.foreground', { dark: Color.fromHex('#eeeeee').transparent(0.7), light: '#6c6c6c', hcDark: null, hcLight: null }, nls.localize('editorHint.foreground', 'Foreground color of hint squigglies in the editor.'));\nexport const editorHintBorder = registerColor('editorHint.border', { dark: null, light: null, hcDark: Color.fromHex('#eeeeee').transparent(0.8), hcLight: '#292929' }, nls.localize('hintBorder', 'If set, color of double underlines for hints in the editor.'));\nexport const editorActiveLinkForeground = registerColor('editorLink.activeForeground', { dark: '#4E94CE', light: Color.blue, hcDark: Color.cyan, hcLight: '#292929' }, nls.localize('activeLinkForeground', 'Color of active links.'));\n// ----- editor selection\nexport const editorSelectionBackground = registerColor('editor.selectionBackground', { light: '#ADD6FF', dark: '#264F78', hcDark: '#f3f518', hcLight: '#0F4A85' }, nls.localize('editorSelectionBackground', \"Color of the editor selection.\"));\nexport const editorSelectionForeground = registerColor('editor.selectionForeground', { light: null, dark: null, hcDark: '#000000', hcLight: Color.white }, 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), hcDark: transparent(editorSelectionBackground, 0.7), hcLight: 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), hcDark: null, hcLight: 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, hcDark: activeContrastBorder, hcLight: activeContrastBorder }, nls.localize('editorSelectionHighlightBorder', \"Border color for regions with the same content as the selection.\"));\n// ----- editor find\nexport const editorFindMatch = registerColor('editor.findMatchBackground', { light: '#A8AC94', dark: '#515C6A', hcDark: null, hcLight: null }, nls.localize('editorFindMatch', \"Color of the current search match.\"));\nexport const editorFindMatchForeground = registerColor('editor.findMatchForeground', null, nls.localize('editorFindMatchForeground', \"Text color of the current search match.\"));\nexport const editorFindMatchHighlight = registerColor('editor.findMatchHighlightBackground', { light: '#EA5C0055', dark: '#EA5C0055', hcDark: null, hcLight: 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 editorFindMatchHighlightForeground = registerColor('editor.findMatchHighlightForeground', null, nls.localize('findMatchHighlightForeground', \"Foreground color of the other search matches.\"), true);\nexport const editorFindRangeHighlight = registerColor('editor.findRangeHighlightBackground', { dark: '#3a3d4166', light: '#b4b4b44d', hcDark: null, hcLight: 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, hcDark: activeContrastBorder, hcLight: activeContrastBorder }, nls.localize('editorFindMatchBorder', \"Border color of the current search match.\"));\nexport const editorFindMatchHighlightBorder = registerColor('editor.findMatchHighlightBorder', { light: null, dark: null, hcDark: activeContrastBorder, hcLight: activeContrastBorder }, nls.localize('findMatchHighlightBorder', \"Border color of the other search matches.\"));\nexport const editorFindRangeHighlightBorder = registerColor('editor.findRangeHighlightBorder', { dark: null, light: null, hcDark: transparent(activeContrastBorder, 0.4), hcLight: 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// ----- editor hover\nexport const editorHoverHighlight = registerColor('editor.hoverHighlightBackground', { light: '#ADD6FF26', dark: '#264f7840', hcDark: '#ADD6FF26', hcLight: null }, 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', editorWidgetBackground, nls.localize('hoverBackground', 'Background color of the editor hover.'));\nexport const editorHoverForeground = registerColor('editorHoverWidget.foreground', editorWidgetForeground, nls.localize('hoverForeground', 'Foreground color of the editor hover.'));\nexport const editorHoverBorder = registerColor('editorHoverWidget.border', 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), hcDark: editorWidgetBackground, hcLight: editorWidgetBackground }, nls.localize('statusBarBackground', \"Background color of the editor hover status bar.\"));\n// ----- editor inlay hint\nexport const editorInlayHintForeground = registerColor('editorInlayHint.foreground', { dark: '#969696', light: '#969696', hcDark: Color.white, hcLight: Color.black }, nls.localize('editorInlayHintForeground', 'Foreground color of inline hints'));\nexport const editorInlayHintBackground = registerColor('editorInlayHint.background', { dark: transparent(badgeBackground, .10), light: transparent(badgeBackground, .10), hcDark: transparent(Color.white, .10), hcLight: transparent(badgeBackground, .10) }, nls.localize('editorInlayHintBackground', 'Background color of inline hints'));\nexport const editorInlayHintTypeForeground = registerColor('editorInlayHint.typeForeground', editorInlayHintForeground, nls.localize('editorInlayHintForegroundTypes', 'Foreground color of inline hints for types'));\nexport const editorInlayHintTypeBackground = registerColor('editorInlayHint.typeBackground', editorInlayHintBackground, nls.localize('editorInlayHintBackgroundTypes', 'Background color of inline hints for types'));\nexport const editorInlayHintParameterForeground = registerColor('editorInlayHint.parameterForeground', editorInlayHintForeground, nls.localize('editorInlayHintForegroundParameter', 'Foreground color of inline hints for parameters'));\nexport const editorInlayHintParameterBackground = registerColor('editorInlayHint.parameterBackground', editorInlayHintBackground, nls.localize('editorInlayHintBackgroundParameter', 'Background color of inline hints for parameters'));\n// ----- editor lightbulb\nexport const editorLightBulbForeground = registerColor('editorLightBulb.foreground', { dark: '#FFCC00', light: '#DDB100', hcDark: '#FFCC00', hcLight: '#007ACC' }, nls.localize('editorLightBulbForeground', \"The color used for the lightbulb actions icon.\"));\nexport const editorLightBulbAutoFixForeground = registerColor('editorLightBulbAutoFix.foreground', { dark: '#75BEFF', light: '#007ACC', hcDark: '#75BEFF', hcLight: '#007ACC' }, nls.localize('editorLightBulbAutoFixForeground', \"The color used for the lightbulb auto fix actions icon.\"));\nexport const editorLightBulbAiForeground = registerColor('editorLightBulbAi.foreground', editorLightBulbForeground, nls.localize('editorLightBulbAiForeground', \"The color used for the lightbulb AI icon.\"));\n// ----- editor snippet\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)), hcDark: new Color(new RGBA(124, 124, 124, 0.3)), hcLight: new Color(new RGBA(10, 50, 100, 0.2)) }, nls.localize('snippetTabstopHighlightBackground', \"Highlight background color of a snippet tabstop.\"));\nexport const snippetTabstopHighlightBorder = registerColor('editor.snippetTabstopHighlightBorder', null, nls.localize('snippetTabstopHighlightBorder', \"Highlight border color of a snippet tabstop.\"));\nexport const snippetFinalTabstopHighlightBackground = registerColor('editor.snippetFinalTabstopHighlightBackground', 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)), hcDark: '#525252', hcLight: '#292929' }, nls.localize('snippetFinalTabstopHighlightBorder', \"Highlight border color of the final tabstop of a snippet.\"));\n// ----- diff editor\nexport const defaultInsertColor = new Color(new RGBA(155, 185, 85, .2));\nexport const defaultRemoveColor = new Color(new RGBA(255, 0, 0, .2));\nexport const diffInserted = registerColor('diffEditor.insertedTextBackground', { dark: '#9ccc2c33', light: '#9ccc2c40', hcDark: null, hcLight: 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: '#ff000033', light: '#ff000033', hcDark: null, hcLight: 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 diffInsertedLine = registerColor('diffEditor.insertedLineBackground', { dark: defaultInsertColor, light: defaultInsertColor, hcDark: null, hcLight: null }, nls.localize('diffEditorInsertedLines', 'Background color for lines that got inserted. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const diffRemovedLine = registerColor('diffEditor.removedLineBackground', { dark: defaultRemoveColor, light: defaultRemoveColor, hcDark: null, hcLight: null }, nls.localize('diffEditorRemovedLines', 'Background color for lines that got removed. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const diffInsertedLineGutter = registerColor('diffEditorGutter.insertedLineBackground', null, nls.localize('diffEditorInsertedLineGutter', 'Background color for the margin where lines got inserted.'));\nexport const diffRemovedLineGutter = registerColor('diffEditorGutter.removedLineBackground', null, nls.localize('diffEditorRemovedLineGutter', 'Background color for the margin where lines got removed.'));\nexport const diffOverviewRulerInserted = registerColor('diffEditorOverview.insertedForeground', null, nls.localize('diffEditorOverviewInserted', 'Diff overview ruler foreground for inserted content.'));\nexport const diffOverviewRulerRemoved = registerColor('diffEditorOverview.removedForeground', null, nls.localize('diffEditorOverviewRemoved', 'Diff overview ruler foreground for removed content.'));\nexport const diffInsertedOutline = registerColor('diffEditor.insertedTextBorder', { dark: null, light: null, hcDark: '#33ff2eff', hcLight: '#374E06' }, nls.localize('diffEditorInsertedOutline', 'Outline color for the text that got inserted.'));\nexport const diffRemovedOutline = registerColor('diffEditor.removedTextBorder', { dark: null, light: null, hcDark: '#FF008F', hcLight: '#AD0707' }, nls.localize('diffEditorRemovedOutline', 'Outline color for text that got removed.'));\nexport const diffBorder = registerColor('diffEditor.border', { dark: null, light: null, hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('diffEditorBorder', 'Border color between the two text editors.'));\nexport const diffDiagonalFill = registerColor('diffEditor.diagonalFill', { dark: '#cccccc33', light: '#22222233', hcDark: null, hcLight: null }, nls.localize('diffDiagonalFill', \"Color of the diff editor's diagonal fill. The diagonal fill is used in side-by-side diff views.\"));\nexport const diffUnchangedRegionBackground = registerColor('diffEditor.unchangedRegionBackground', 'sideBar.background', nls.localize('diffEditor.unchangedRegionBackground', \"The background color of unchanged blocks in the diff editor.\"));\nexport const diffUnchangedRegionForeground = registerColor('diffEditor.unchangedRegionForeground', 'foreground', nls.localize('diffEditor.unchangedRegionForeground', \"The foreground color of unchanged blocks in the diff editor.\"));\nexport const diffUnchangedTextBackground = registerColor('diffEditor.unchangedCodeBackground', { dark: '#74747429', light: '#b8b8b829', hcDark: null, hcLight: null }, nls.localize('diffEditor.unchangedCodeBackground', \"The background color of unchanged code in the diff editor.\"));\n// ----- widget\nexport const widgetShadow = registerColor('widget.shadow', { dark: transparent(Color.black, .36), light: transparent(Color.black, .16), hcDark: null, hcLight: null }, nls.localize('widgetShadow', 'Shadow color of widgets such as find/replace inside the editor.'));\nexport const widgetBorder = registerColor('widget.border', { dark: null, light: null, hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('widgetBorder', 'Border color of widgets such as find/replace inside the editor.'));\n// ----- toolbar\nexport const toolbarHoverBackground = registerColor('toolbar.hoverBackground', { dark: '#5a5d5e50', light: '#b8b8b850', hcDark: null, hcLight: null }, nls.localize('toolbarHoverBackground', \"Toolbar background when hovering over actions using the mouse\"));\nexport const toolbarHoverOutline = registerColor('toolbar.hoverOutline', { dark: null, light: null, hcDark: activeContrastBorder, hcLight: activeContrastBorder }, nls.localize('toolbarHoverOutline', \"Toolbar outline when hovering over actions using the mouse\"));\nexport const toolbarActiveBackground = registerColor('toolbar.activeBackground', { dark: lighten(toolbarHoverBackground, 0.1), light: darken(toolbarHoverBackground, 0.1), hcDark: null, hcLight: null }, nls.localize('toolbarActiveBackground', \"Toolbar background when holding the mouse over actions\"));\n// ----- breadcumbs\nexport const breadcrumbsForeground = registerColor('breadcrumb.foreground', transparent(foreground, 0.8), nls.localize('breadcrumbsFocusForeground', \"Color of focused breadcrumb items.\"));\nexport const breadcrumbsBackground = registerColor('breadcrumb.background', editorBackground, nls.localize('breadcrumbsBackground', \"Background color of breadcrumb items.\"));\nexport const breadcrumbsFocusForeground = registerColor('breadcrumb.focusForeground', { light: darken(foreground, 0.2), dark: lighten(foreground, 0.1), hcDark: lighten(foreground, 0.1), hcLight: lighten(foreground, 0.1) }, nls.localize('breadcrumbsFocusForeground', \"Color of focused breadcrumb items.\"));\nexport const breadcrumbsActiveSelectionForeground = registerColor('breadcrumb.activeSelectionForeground', { light: darken(foreground, 0.2), dark: lighten(foreground, 0.1), hcDark: lighten(foreground, 0.1), hcLight: lighten(foreground, 0.1) }, nls.localize('breadcrumbsSelectedForeground', \"Color of selected breadcrumb items.\"));\nexport const breadcrumbsPickerBackground = registerColor('breadcrumbPicker.background', editorWidgetBackground, nls.localize('breadcrumbsSelectedBackground', \"Background color of breadcrumb item picker.\"));\n// ----- merge\nconst headerTransparency = 0.5;\nconst currentBaseColor = Color.fromHex('#40C8AE').transparent(headerTransparency);\nconst incomingBaseColor = Color.fromHex('#40A6FF').transparent(headerTransparency);\nconst commonBaseColor = Color.fromHex('#606060').transparent(0.4);\nconst contentTransparency = 0.4;\nconst rulerTransparency = 1;\nexport const mergeCurrentHeaderBackground = registerColor('merge.currentHeaderBackground', { dark: currentBaseColor, light: currentBaseColor, hcDark: null, hcLight: null }, nls.localize('mergeCurrentHeaderBackground', 'Current header background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const mergeCurrentContentBackground = registerColor('merge.currentContentBackground', transparent(mergeCurrentHeaderBackground, contentTransparency), nls.localize('mergeCurrentContentBackground', 'Current content background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const mergeIncomingHeaderBackground = registerColor('merge.incomingHeaderBackground', { dark: incomingBaseColor, light: incomingBaseColor, hcDark: null, hcLight: null }, nls.localize('mergeIncomingHeaderBackground', 'Incoming header background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const mergeIncomingContentBackground = registerColor('merge.incomingContentBackground', transparent(mergeIncomingHeaderBackground, contentTransparency), nls.localize('mergeIncomingContentBackground', 'Incoming content background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const mergeCommonHeaderBackground = registerColor('merge.commonHeaderBackground', { dark: commonBaseColor, light: commonBaseColor, hcDark: null, hcLight: null }, nls.localize('mergeCommonHeaderBackground', 'Common ancestor header background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const mergeCommonContentBackground = registerColor('merge.commonContentBackground', transparent(mergeCommonHeaderBackground, contentTransparency), nls.localize('mergeCommonContentBackground', 'Common ancestor content background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.'), true);\nexport const mergeBorder = registerColor('merge.border', { dark: null, light: null, hcDark: '#C3DF6F', hcLight: '#007ACC' }, nls.localize('mergeBorder', 'Border color on headers and the splitter in inline merge-conflicts.'));\nexport const overviewRulerCurrentContentForeground = registerColor('editorOverviewRuler.currentContentForeground', { dark: transparent(mergeCurrentHeaderBackground, rulerTransparency), light: transparent(mergeCurrentHeaderBackground, rulerTransparency), hcDark: mergeBorder, hcLight: mergeBorder }, nls.localize('overviewRulerCurrentContentForeground', 'Current overview ruler foreground for inline merge-conflicts.'));\nexport const overviewRulerIncomingContentForeground = registerColor('editorOverviewRuler.incomingContentForeground', { dark: transparent(mergeIncomingHeaderBackground, rulerTransparency), light: transparent(mergeIncomingHeaderBackground, rulerTransparency), hcDark: mergeBorder, hcLight: mergeBorder }, nls.localize('overviewRulerIncomingContentForeground', 'Incoming overview ruler foreground for inline merge-conflicts.'));\nexport const overviewRulerCommonContentForeground = registerColor('editorOverviewRuler.commonContentForeground', { dark: transparent(mergeCommonHeaderBackground, rulerTransparency), light: transparent(mergeCommonHeaderBackground, rulerTransparency), hcDark: mergeBorder, hcLight: mergeBorder }, nls.localize('overviewRulerCommonContentForeground', 'Common ancestor overview ruler foreground for inline merge-conflicts.'));\nexport const overviewRulerFindMatchForeground = registerColor('editorOverviewRuler.findMatchForeground', { dark: '#d186167e', light: '#d186167e', hcDark: '#AB5A00', hcLight: '#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', '#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);\n// ----- problems\nexport const problemsErrorIconForeground = registerColor('problemsErrorIcon.foreground', editorErrorForeground, nls.localize('problemsErrorIconForeground', \"The color used for the problems error icon.\"));\nexport const problemsWarningIconForeground = registerColor('problemsWarningIcon.foreground', editorWarningForeground, nls.localize('problemsWarningIconForeground', \"The color used for the problems warning icon.\"));\nexport const problemsInfoIconForeground = registerColor('problemsInfoIcon.foreground', editorInfoForeground, nls.localize('problemsInfoIconForeground', \"The color used for the problems info icon.\"));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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';\n// Import the effects we need\nimport { Color, RGBA } from '../../../../base/common/color.js';\nimport { registerColor, transparent } from '../colorUtils.js';\n// Import the colors we need\nimport { editorInfoForeground, editorWarningForeground, editorWarningBorder, editorInfoBorder } from './editorColors.js';\nimport { scrollbarSliderBackground, scrollbarSliderHoverBackground, scrollbarSliderActiveBackground } from './miscColors.js';\nexport const minimapFindMatch = registerColor('minimap.findMatchHighlight', { light: '#d18616', dark: '#d18616', hcDark: '#AB5A00', hcLight: '#0F4A85' }, nls.localize('minimapFindMatchHighlight', 'Minimap marker color for find matches.'), true);\nexport const minimapSelectionOccurrenceHighlight = registerColor('minimap.selectionOccurrenceHighlight', { light: '#c9c9c9', dark: '#676767', hcDark: '#ffffff', hcLight: '#0F4A85' }, nls.localize('minimapSelectionOccurrenceHighlight', 'Minimap marker color for repeating editor selections.'), true);\nexport const minimapSelection = registerColor('minimap.selectionHighlight', { light: '#ADD6FF', dark: '#264F78', hcDark: '#ffffff', hcLight: '#0F4A85' }, nls.localize('minimapSelectionHighlight', 'Minimap marker color for the editor selection.'), true);\nexport const minimapInfo = registerColor('minimap.infoHighlight', { dark: editorInfoForeground, light: editorInfoForeground, hcDark: editorInfoBorder, hcLight: editorInfoBorder }, nls.localize('minimapInfo', 'Minimap marker color for infos.'));\nexport const minimapWarning = registerColor('minimap.warningHighlight', { dark: editorWarningForeground, light: editorWarningForeground, hcDark: editorWarningBorder, hcLight: editorWarningBorder }, nls.localize('overviewRuleWarning', 'Minimap marker color for warnings.'));\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)), hcDark: new Color(new RGBA(255, 50, 50, 1)), hcLight: '#B5200D' }, nls.localize('minimapError', 'Minimap marker color for errors.'));\nexport const minimapBackground = registerColor('minimap.background', null, nls.localize('minimapBackground', \"Minimap background color.\"));\nexport const minimapForegroundOpacity = registerColor('minimap.foregroundOpacity', Color.fromHex('#000f'), nls.localize('minimapForegroundOpacity', 'Opacity of foreground elements rendered in the minimap. For example, \"#000000c0\" will render the elements with 75% opacity.'));\nexport const minimapSliderBackground = registerColor('minimapSlider.background', transparent(scrollbarSliderBackground, 0.5), nls.localize('minimapSliderBackground', \"Minimap slider background color.\"));\nexport const minimapSliderHoverBackground = registerColor('minimapSlider.hoverBackground', transparent(scrollbarSliderHoverBackground, 0.5), nls.localize('minimapSliderHoverBackground', \"Minimap slider background color when hovering.\"));\nexport const minimapSliderActiveBackground = registerColor('minimapSlider.activeBackground', transparent(scrollbarSliderActiveBackground, 0.5), nls.localize('minimapSliderActiveBackground', \"Minimap slider background color when clicked on.\"));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { registerColor, transparent } from '../colorUtils.js';\nimport { foreground } from './baseColors.js';\nimport { editorErrorForeground, editorInfoForeground, editorWarningForeground } from './editorColors.js';\nimport { minimapFindMatch } from './minimapColors.js';\nexport const chartsForeground = registerColor('charts.foreground', foreground, nls.localize('chartsForeground', \"The foreground color used in charts.\"));\nexport const chartsLines = registerColor('charts.lines', transparent(foreground, .5), nls.localize('chartsLines', \"The color used for horizontal lines in charts.\"));\nexport const chartsRed = registerColor('charts.red', editorErrorForeground, nls.localize('chartsRed', \"The red color used in chart visualizations.\"));\nexport const chartsBlue = registerColor('charts.blue', editorInfoForeground, nls.localize('chartsBlue', \"The blue color used in chart visualizations.\"));\nexport const chartsYellow = registerColor('charts.yellow', editorWarningForeground, nls.localize('chartsYellow', \"The yellow color used in chart visualizations.\"));\nexport const chartsOrange = registerColor('charts.orange', minimapFindMatch, nls.localize('chartsOrange', \"The orange color used in chart visualizations.\"));\nexport const chartsGreen = registerColor('charts.green', { dark: '#89D185', light: '#388A34', hcDark: '#89D185', hcLight: '#374e06' }, nls.localize('chartsGreen', \"The green color used in chart visualizations.\"));\nexport const chartsPurple = registerColor('charts.purple', { dark: '#B180D7', light: '#652D90', hcDark: '#B180D7', hcLight: '#652D90' }, nls.localize('chartsPurple', \"The purple color used in chart visualizations.\"));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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';\n// Import the effects we need\nimport { Color, RGBA } from '../../../../base/common/color.js';\nimport { registerColor, transparent, lighten, darken } from '../colorUtils.js';\n// Import the colors we need\nimport { foreground, contrastBorder, focusBorder, iconForeground } from './baseColors.js';\nimport { editorWidgetBackground } from './editorColors.js';\n// ----- input\nexport const inputBackground = registerColor('input.background', { dark: '#3C3C3C', light: Color.white, hcDark: Color.black, hcLight: Color.white }, nls.localize('inputBoxBackground', \"Input box background.\"));\nexport const inputForeground = registerColor('input.foreground', foreground, nls.localize('inputBoxForeground', \"Input box foreground.\"));\nexport const inputBorder = registerColor('input.border', { dark: null, light: null, hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('inputBoxBorder', \"Input box border.\"));\nexport const inputActiveOptionBorder = registerColor('inputOption.activeBorder', { dark: '#007ACC', light: '#007ACC', hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('inputBoxActiveOptionBorder', \"Border color of activated options in input fields.\"));\nexport const inputActiveOptionHoverBackground = registerColor('inputOption.hoverBackground', { dark: '#5a5d5e80', light: '#b8b8b850', hcDark: null, hcLight: null }, nls.localize('inputOption.hoverBackground', \"Background color of activated options in input fields.\"));\nexport const inputActiveOptionBackground = registerColor('inputOption.activeBackground', { dark: transparent(focusBorder, 0.4), light: transparent(focusBorder, 0.2), hcDark: Color.transparent, hcLight: Color.transparent }, nls.localize('inputOption.activeBackground', \"Background hover color of options in input fields.\"));\nexport const inputActiveOptionForeground = registerColor('inputOption.activeForeground', { dark: Color.white, light: Color.black, hcDark: foreground, hcLight: foreground }, nls.localize('inputOption.activeForeground', \"Foreground color of activated options in input fields.\"));\nexport const inputPlaceholderForeground = registerColor('input.placeholderForeground', { light: transparent(foreground, 0.5), dark: transparent(foreground, 0.5), hcDark: transparent(foreground, 0.7), hcLight: transparent(foreground, 0.7) }, nls.localize('inputPlaceholderForeground', \"Input box foreground color for placeholder text.\"));\n// ----- input validation\nexport const inputValidationInfoBackground = registerColor('inputValidation.infoBackground', { dark: '#063B49', light: '#D6ECF2', hcDark: Color.black, hcLight: Color.white }, nls.localize('inputValidationInfoBackground', \"Input validation background color for information severity.\"));\nexport const inputValidationInfoForeground = registerColor('inputValidation.infoForeground', { dark: null, light: null, hcDark: null, hcLight: foreground }, nls.localize('inputValidationInfoForeground', \"Input validation foreground color for information severity.\"));\nexport const inputValidationInfoBorder = registerColor('inputValidation.infoBorder', { dark: '#007acc', light: '#007acc', hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('inputValidationInfoBorder', \"Input validation border color for information severity.\"));\nexport const inputValidationWarningBackground = registerColor('inputValidation.warningBackground', { dark: '#352A05', light: '#F6F5D2', hcDark: Color.black, hcLight: Color.white }, nls.localize('inputValidationWarningBackground', \"Input validation background color for warning severity.\"));\nexport const inputValidationWarningForeground = registerColor('inputValidation.warningForeground', { dark: null, light: null, hcDark: null, hcLight: foreground }, nls.localize('inputValidationWarningForeground', \"Input validation foreground color for warning severity.\"));\nexport const inputValidationWarningBorder = registerColor('inputValidation.warningBorder', { dark: '#B89500', light: '#B89500', hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('inputValidationWarningBorder', \"Input validation border color for warning severity.\"));\nexport const inputValidationErrorBackground = registerColor('inputValidation.errorBackground', { dark: '#5A1D1D', light: '#F2DEDE', hcDark: Color.black, hcLight: Color.white }, nls.localize('inputValidationErrorBackground', \"Input validation background color for error severity.\"));\nexport const inputValidationErrorForeground = registerColor('inputValidation.errorForeground', { dark: null, light: null, hcDark: null, hcLight: foreground }, nls.localize('inputValidationErrorForeground', \"Input validation foreground color for error severity.\"));\nexport const inputValidationErrorBorder = registerColor('inputValidation.errorBorder', { dark: '#BE1100', light: '#BE1100', hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('inputValidationErrorBorder', \"Input validation border color for error severity.\"));\n// ----- select\nexport const selectBackground = registerColor('dropdown.background', { dark: '#3C3C3C', light: Color.white, hcDark: Color.black, hcLight: Color.white }, nls.localize('dropdownBackground', \"Dropdown background.\"));\nexport const selectListBackground = registerColor('dropdown.listBackground', { dark: null, light: null, hcDark: Color.black, hcLight: Color.white }, nls.localize('dropdownListBackground', \"Dropdown list background.\"));\nexport const selectForeground = registerColor('dropdown.foreground', { dark: '#F0F0F0', light: foreground, hcDark: Color.white, hcLight: foreground }, nls.localize('dropdownForeground', \"Dropdown foreground.\"));\nexport const selectBorder = registerColor('dropdown.border', { dark: selectBackground, light: '#CECECE', hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('dropdownBorder', \"Dropdown border.\"));\n// ------ button\nexport const buttonForeground = registerColor('button.foreground', Color.white, nls.localize('buttonForeground', \"Button foreground color.\"));\nexport const buttonSeparator = registerColor('button.separator', transparent(buttonForeground, .4), nls.localize('buttonSeparator', \"Button separator color.\"));\nexport const buttonBackground = registerColor('button.background', { dark: '#0E639C', light: '#007ACC', hcDark: null, hcLight: '#0F4A85' }, nls.localize('buttonBackground', \"Button background color.\"));\nexport const buttonHoverBackground = registerColor('button.hoverBackground', { dark: lighten(buttonBackground, 0.2), light: darken(buttonBackground, 0.2), hcDark: buttonBackground, hcLight: buttonBackground }, nls.localize('buttonHoverBackground', \"Button background color when hovering.\"));\nexport const buttonBorder = registerColor('button.border', contrastBorder, nls.localize('buttonBorder', \"Button border color.\"));\nexport const buttonSecondaryForeground = registerColor('button.secondaryForeground', { dark: Color.white, light: Color.white, hcDark: Color.white, hcLight: foreground }, nls.localize('buttonSecondaryForeground', \"Secondary button foreground color.\"));\nexport const buttonSecondaryBackground = registerColor('button.secondaryBackground', { dark: '#3A3D41', light: '#5F6A79', hcDark: null, hcLight: Color.white }, nls.localize('buttonSecondaryBackground', \"Secondary button background color.\"));\nexport const buttonSecondaryHoverBackground = registerColor('button.secondaryHoverBackground', { dark: lighten(buttonSecondaryBackground, 0.2), light: darken(buttonSecondaryBackground, 0.2), hcDark: null, hcLight: null }, nls.localize('buttonSecondaryHoverBackground', \"Secondary button background color when hovering.\"));\n// ------ radio\nexport const radioActiveForeground = registerColor('radio.activeForeground', inputActiveOptionForeground, nls.localize('radioActiveForeground', \"Foreground color of active radio option.\"));\nexport const radioActiveBackground = registerColor('radio.activeBackground', inputActiveOptionBackground, nls.localize('radioBackground', \"Background color of active radio option.\"));\nexport const radioActiveBorder = registerColor('radio.activeBorder', inputActiveOptionBorder, nls.localize('radioActiveBorder', \"Border color of the active radio option.\"));\nexport const radioInactiveForeground = registerColor('radio.inactiveForeground', null, nls.localize('radioInactiveForeground', \"Foreground color of inactive radio option.\"));\nexport const radioInactiveBackground = registerColor('radio.inactiveBackground', null, nls.localize('radioInactiveBackground', \"Background color of inactive radio option.\"));\nexport const radioInactiveBorder = registerColor('radio.inactiveBorder', { light: transparent(radioActiveForeground, .2), dark: transparent(radioActiveForeground, .2), hcDark: transparent(radioActiveForeground, .4), hcLight: transparent(radioActiveForeground, .2) }, nls.localize('radioInactiveBorder', \"Border color of the inactive radio option.\"));\nexport const radioInactiveHoverBackground = registerColor('radio.inactiveHoverBackground', inputActiveOptionHoverBackground, nls.localize('radioHoverBackground', \"Background color of inactive active radio option when hovering.\"));\n// ------ checkbox\nexport const checkboxBackground = registerColor('checkbox.background', selectBackground, nls.localize('checkbox.background', \"Background color of checkbox widget.\"));\nexport const checkboxSelectBackground = registerColor('checkbox.selectBackground', editorWidgetBackground, nls.localize('checkbox.select.background', \"Background color of checkbox widget when the element it's in is selected.\"));\nexport const checkboxForeground = registerColor('checkbox.foreground', selectForeground, nls.localize('checkbox.foreground', \"Foreground color of checkbox widget.\"));\nexport const checkboxBorder = registerColor('checkbox.border', selectBorder, nls.localize('checkbox.border', \"Border color of checkbox widget.\"));\nexport const checkboxSelectBorder = registerColor('checkbox.selectBorder', iconForeground, nls.localize('checkbox.select.border', \"Border color of checkbox widget when the element it's in is selected.\"));\n// ------ keybinding label\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)), hcDark: Color.transparent, hcLight: 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'), hcDark: Color.white, hcLight: foreground }, 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)), hcDark: new Color(new RGBA(111, 195, 223)), hcLight: contrastBorder }, 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)), hcDark: new Color(new RGBA(111, 195, 223)), hcLight: foreground }, nls.localize('keybindingLabelBottomBorder', \"Keybinding label border bottom color. The keybinding label is used to represent a keyboard shortcut.\"));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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';\n// Import the effects we need\nimport { Color } from '../../../../base/common/color.js';\nimport { registerColor, darken, lighten, transparent, ifDefinedThenElse } from '../colorUtils.js';\n// Import the colors we need\nimport { foreground, contrastBorder, activeContrastBorder, focusBorder, iconForeground } from './baseColors.js';\nimport { editorWidgetBackground, editorFindMatchHighlightBorder, editorFindMatchHighlight, widgetShadow, editorWidgetForeground } from './editorColors.js';\nexport const listFocusBackground = registerColor('list.focusBackground', 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', 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, hcDark: activeContrastBorder, hcLight: 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 listFocusAndSelectionOutline = registerColor('list.focusAndSelectionOutline', null, nls.localize('listFocusAndSelectionOutline', \"List/Tree outline color for the focused item when the list/tree is active and selected. An active list/tree has keyboard focus, an inactive does not.\"));\nexport const listActiveSelectionBackground = registerColor('list.activeSelectionBackground', { dark: '#04395E', light: '#0060C0', hcDark: null, hcLight: Color.fromHex('#0F4A85').transparent(0.1) }, 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, hcDark: null, hcLight: 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 listActiveSelectionIconForeground = registerColor('list.activeSelectionIconForeground', null, nls.localize('listActiveSelectionIconForeground', \"List/Tree icon 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', hcDark: null, hcLight: Color.fromHex('#0F4A85').transparent(0.1) }, 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', 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 listInactiveSelectionIconForeground = registerColor('list.inactiveSelectionIconForeground', null, nls.localize('listInactiveSelectionIconForeground', \"List/Tree icon 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', 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', 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', hcDark: Color.white.transparent(0.1), hcLight: Color.fromHex('#0F4A85').transparent(0.1) }, nls.localize('listHoverBackground', \"List/Tree background when hovering over items using the mouse.\"));\nexport const listHoverForeground = registerColor('list.hoverForeground', null, nls.localize('listHoverForeground', \"List/Tree foreground when hovering over items using the mouse.\"));\nexport const listDropOverBackground = registerColor('list.dropBackground', { dark: '#062F4A', light: '#D6EBFF', hcDark: null, hcLight: null }, nls.localize('listDropBackground', \"List/Tree drag and drop background when moving items over other items when using the mouse.\"));\nexport const listDropBetweenBackground = registerColor('list.dropBetweenBackground', { dark: iconForeground, light: iconForeground, hcDark: null, hcLight: null }, nls.localize('listDropBetweenBackground', \"List/Tree drag and drop border color when moving items between items when using the mouse.\"));\nexport const listHighlightForeground = registerColor('list.highlightForeground', { dark: '#2AAAFF', light: '#0066BF', hcDark: focusBorder, hcLight: focusBorder }, nls.localize('highlight', 'List/Tree foreground color of the match highlights when searching inside the list/tree.'));\nexport const listFocusHighlightForeground = registerColor('list.focusHighlightForeground', { dark: listHighlightForeground, light: ifDefinedThenElse(listActiveSelectionBackground, listHighlightForeground, '#BBE7FF'), hcDark: listHighlightForeground, hcLight: listHighlightForeground }, nls.localize('listFocusHighlightForeground', 'List/Tree foreground color of the match highlights on actively focused items when searching inside the list/tree.'));\nexport const listInvalidItemForeground = registerColor('list.invalidItemForeground', { dark: '#B89500', light: '#B89500', hcDark: '#B89500', hcLight: '#B5200D' }, nls.localize('invalidItemForeground', 'List/Tree foreground color for invalid items, for example an unresolved root in explorer.'));\nexport const listErrorForeground = registerColor('list.errorForeground', { dark: '#F88070', light: '#B01011', hcDark: null, hcLight: null }, nls.localize('listErrorForeground', 'Foreground color of list items containing errors.'));\nexport const listWarningForeground = registerColor('list.warningForeground', { dark: '#CCA700', light: '#855F00', hcDark: null, hcLight: null }, nls.localize('listWarningForeground', 'Foreground color of list items containing warnings.'));\nexport const listFilterWidgetBackground = registerColor('listFilterWidget.background', { light: darken(editorWidgetBackground, 0), dark: lighten(editorWidgetBackground, 0), hcDark: editorWidgetBackground, hcLight: editorWidgetBackground }, 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, hcDark: '#f38518', hcLight: '#007ACC' }, nls.localize('listFilterWidgetOutline', 'Outline color of the type filter widget in lists and trees.'));\nexport const listFilterWidgetNoMatchesOutline = registerColor('listFilterWidget.noMatchesOutline', { dark: '#BE1100', light: '#BE1100', hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('listFilterWidgetNoMatchesOutline', 'Outline color of the type filter widget in lists and trees, when there are no matches.'));\nexport const listFilterWidgetShadow = registerColor('listFilterWidget.shadow', widgetShadow, nls.localize('listFilterWidgetShadow', 'Shadow color of the type filter widget in lists and trees.'));\nexport const listFilterMatchHighlight = registerColor('list.filterMatchBackground', { dark: editorFindMatchHighlight, light: editorFindMatchHighlight, hcDark: null, hcLight: null }, nls.localize('listFilterMatchHighlight', 'Background color of the filtered match.'));\nexport const listFilterMatchHighlightBorder = registerColor('list.filterMatchBorder', { dark: editorFindMatchHighlightBorder, light: editorFindMatchHighlightBorder, hcDark: contrastBorder, hcLight: activeContrastBorder }, nls.localize('listFilterMatchHighlightBorder', 'Border color of the filtered match.'));\nexport const listDeemphasizedForeground = registerColor('list.deemphasizedForeground', { dark: '#8C8C8C', light: '#8E8E90', hcDark: '#A7A8A9', hcLight: '#666666' }, nls.localize('listDeemphasizedForeground', \"List/Tree foreground color for items that are deemphasized.\"));\n// ------ tree\nexport const treeIndentGuidesStroke = registerColor('tree.indentGuidesStroke', { dark: '#585858', light: '#a9a9a9', hcDark: '#a9a9a9', hcLight: '#a5a5a5' }, nls.localize('treeIndentGuidesStroke', \"Tree stroke color for the indentation guides.\"));\nexport const treeInactiveIndentGuidesStroke = registerColor('tree.inactiveIndentGuidesStroke', transparent(treeIndentGuidesStroke, 0.4), nls.localize('treeInactiveIndentGuidesStroke', \"Tree stroke color for the indentation guides that are not active.\"));\n// ------ table\nexport const tableColumnsBorder = registerColor('tree.tableColumnsBorder', { dark: '#CCCCCC20', light: '#61616120', hcDark: null, hcLight: null }, nls.localize('tableColumnsBorder', \"Table border color between columns.\"));\nexport const tableOddRowsBackgroundColor = registerColor('tree.tableOddRowsBackground', { dark: transparent(foreground, 0.04), light: transparent(foreground, 0.04), hcDark: null, hcLight: null }, nls.localize('tableOddRowsBackgroundColor', \"Background color for odd table rows.\"));\n// ------ action list\nexport const editorActionListBackground = registerColor('editorActionList.background', editorWidgetBackground, nls.localize('editorActionListBackground', \"Action List background color.\"));\nexport const editorActionListForeground = registerColor('editorActionList.foreground', editorWidgetForeground, nls.localize('editorActionListForeground', \"Action List foreground color.\"));\nexport const editorActionListFocusForeground = registerColor('editorActionList.focusForeground', listActiveSelectionForeground, nls.localize('editorActionListFocusForeground', \"Action List foreground color for the focused item.\"));\nexport const editorActionListFocusBackground = registerColor('editorActionList.focusBackground', listActiveSelectionBackground, nls.localize('editorActionListFocusBackground', \"Action List background color for the focused item.\"));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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';\n// Import the effects we need\nimport { registerColor } from '../colorUtils.js';\n// Import the colors we need\nimport { contrastBorder, activeContrastBorder } from './baseColors.js';\nimport { selectForeground, selectBackground } from './inputColors.js';\nimport { listActiveSelectionBackground, listActiveSelectionForeground } from './listColors.js';\nexport const menuBorder = registerColor('menu.border', { dark: null, light: null, hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('menuBorder', \"Border color of menus.\"));\nexport const menuForeground = registerColor('menu.foreground', selectForeground, nls.localize('menuForeground', \"Foreground color of menu items.\"));\nexport const menuBackground = registerColor('menu.background', selectBackground, nls.localize('menuBackground', \"Background color of menu items.\"));\nexport const menuSelectionForeground = registerColor('menu.selectionForeground', listActiveSelectionForeground, nls.localize('menuSelectionForeground', \"Foreground color of the selected menu item in menus.\"));\nexport const menuSelectionBackground = registerColor('menu.selectionBackground', listActiveSelectionBackground, nls.localize('menuSelectionBackground', \"Background color of the selected menu item in menus.\"));\nexport const menuSelectionBorder = registerColor('menu.selectionBorder', { dark: null, light: null, hcDark: activeContrastBorder, hcLight: activeContrastBorder }, nls.localize('menuSelectionBorder', \"Border color of the selected menu item in menus.\"));\nexport const menuSeparatorBackground = registerColor('menu.separatorBackground', { dark: '#606060', light: '#D4D4D4', hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('menuSeparatorBackground', \"Color of a separator menu item in menus.\"));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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';\n// Import the effects we need\nimport { Color, RGBA } from '../../../../base/common/color.js';\nimport { registerColor, oneOf } from '../colorUtils.js';\n// Import the colors we need\nimport { editorWidgetBackground, editorWidgetForeground } from './editorColors.js';\nimport { listActiveSelectionBackground, listActiveSelectionForeground, listActiveSelectionIconForeground } from './listColors.js';\nexport const quickInputBackground = registerColor('quickInput.background', 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', 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)), hcDark: '#000000', hcLight: Color.white }, 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', hcDark: Color.white, hcLight: '#0F4A85' }, nls.localize('pickerGroupForeground', \"Quick picker color for grouping labels.\"));\nexport const pickerGroupBorder = registerColor('pickerGroup.border', { dark: '#3F3F46', light: '#CCCEDB', hcDark: Color.white, hcLight: '#0F4A85' }, nls.localize('pickerGroupBorder', \"Quick picker color for grouping borders.\"));\nexport const _deprecatedQuickInputListFocusBackground = registerColor('quickInput.list.focusBackground', null, '', undefined, nls.localize('quickInput.list.focusBackground deprecation', \"Please use quickInputList.focusBackground instead\"));\nexport const quickInputListFocusForeground = registerColor('quickInputList.focusForeground', listActiveSelectionForeground, nls.localize('quickInput.listFocusForeground', \"Quick picker foreground color for the focused item.\"));\nexport const quickInputListFocusIconForeground = registerColor('quickInputList.focusIconForeground', listActiveSelectionIconForeground, nls.localize('quickInput.listFocusIconForeground', \"Quick picker icon foreground color for the focused item.\"));\nexport const quickInputListFocusBackground = registerColor('quickInputList.focusBackground', { dark: oneOf(_deprecatedQuickInputListFocusBackground, listActiveSelectionBackground), light: oneOf(_deprecatedQuickInputListFocusBackground, listActiveSelectionBackground), hcDark: null, hcLight: null }, nls.localize('quickInput.listFocusBackground', \"Quick picker background color for the focused item.\"));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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';\n// Import the effects we need\nimport { registerColor, transparent } from '../colorUtils.js';\n// Import the colors we need\nimport { foreground } from './baseColors.js';\nimport { editorFindMatchHighlight, editorFindMatchHighlightBorder } from './editorColors.js';\nexport const searchResultsInfoForeground = registerColor('search.resultsInfoForeground', { light: foreground, dark: transparent(foreground, 0.65), hcDark: foreground, hcLight: foreground }, nls.localize('search.resultsInfoForeground', \"Color of the text in the search viewlet's completion message.\"));\n// ----- search editor (Distinct from normal editor find match to allow for better differentiation)\nexport const searchEditorFindMatch = registerColor('searchEditor.findMatchBackground', { light: transparent(editorFindMatchHighlight, 0.66), dark: transparent(editorFindMatchHighlight, 0.66), hcDark: editorFindMatchHighlight, hcLight: editorFindMatchHighlight }, nls.localize('searchEditor.queryMatch', \"Color of the Search Editor query matches.\"));\nexport const searchEditorFindMatchBorder = registerColor('searchEditor.findMatchBorder', { light: transparent(editorFindMatchHighlightBorder, 0.66), dark: transparent(editorFindMatchHighlightBorder, 0.66), hcDark: editorFindMatchHighlightBorder, hcLight: editorFindMatchHighlightBorder }, nls.localize('searchEditor.editorFindMatchBorder', \"Border color of the Search Editor query 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 *--------------------------------------------------------------------------------------------*/\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 '../../instantiation/common/instantiation.js';\nimport { Disposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { IConfigurationService } from '../../configuration/common/configuration.js';\nimport { addStandardDisposableListener, isHTMLElement } from '../../../base/browser/dom.js';\nexport const IHoverService = createDecorator('hoverService');\nlet WorkbenchHoverDelegate = class WorkbenchHoverDelegate extends Disposable {\n    get delay() {\n        if (this.isInstantlyHovering()) {\n            return 0; // show instantly when a hover was recently shown\n        }\n        return this._delay;\n    }\n    constructor(placement, instantHover, overrideOptions = {}, configurationService, hoverService) {\n        super();\n        this.placement = placement;\n        this.instantHover = instantHover;\n        this.overrideOptions = overrideOptions;\n        this.configurationService = configurationService;\n        this.hoverService = hoverService;\n        this.lastHoverHideTime = 0;\n        this.timeLimit = 200;\n        this.hoverDisposables = this._register(new DisposableStore());\n        this._delay = this.configurationService.getValue('workbench.hover.delay');\n        this._register(this.configurationService.onDidChangeConfiguration(e => {\n            if (e.affectsConfiguration('workbench.hover.delay')) {\n                this._delay = this.configurationService.getValue('workbench.hover.delay');\n            }\n        }));\n    }\n    showHover(options, focus) {\n        const overrideOptions = typeof this.overrideOptions === 'function' ? this.overrideOptions(options, focus) : this.overrideOptions;\n        // close hover on escape\n        this.hoverDisposables.clear();\n        const targets = isHTMLElement(options.target) ? [options.target] : options.target.targetElements;\n        for (const target of targets) {\n            this.hoverDisposables.add(addStandardDisposableListener(target, 'keydown', (e) => {\n                if (e.equals(9 /* KeyCode.Escape */)) {\n                    this.hoverService.hideHover();\n                }\n            }));\n        }\n        const id = isHTMLElement(options.content) ? undefined : options.content.toString();\n        return this.hoverService.showHover({\n            ...options,\n            ...overrideOptions,\n            persistence: {\n                hideOnKeyDown: true,\n                ...overrideOptions.persistence\n            },\n            id,\n            appearance: {\n                ...options.appearance,\n                compact: true,\n                skipFadeInAnimation: this.isInstantlyHovering(),\n                ...overrideOptions.appearance\n            }\n        }, focus);\n    }\n    isInstantlyHovering() {\n        return this.instantHover && Date.now() - this.lastHoverHideTime < this.timeLimit;\n    }\n    onDidHideHover() {\n        this.hoverDisposables.clear();\n        if (this.instantHover) {\n            this.lastHoverHideTime = Date.now();\n        }\n    }\n};\nWorkbenchHoverDelegate = __decorate([\n    __param(3, IConfigurationService),\n    __param(4, IHoverService)\n], WorkbenchHoverDelegate);\nexport { WorkbenchHoverDelegate };\n// TODO@benibenj remove this, only temp fix for contextviews\nexport const nativeHoverDelegate = {\n    showHover: function () {\n        throw new Error('Native hover function not implemented.');\n    },\n    delay: 0,\n    showNativeHover: 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 { 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 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 * as dom from './dom.js';\nimport { DisposableStore, toDisposable } from '../common/lifecycle.js';\nexport class GlobalPointerMoveMonitor {\n    constructor() {\n        this._hooks = new DisposableStore();\n        this._pointerMoveCallback = 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._pointerMoveCallback = null;\n        const onStopCallback = this._onStopCallback;\n        this._onStopCallback = null;\n        if (invokeStopCallback && onStopCallback) {\n            onStopCallback(browserEvent);\n        }\n    }\n    isMonitoring() {\n        return !!this._pointerMoveCallback;\n    }\n    startMonitoring(initialElement, pointerId, initialButtons, pointerMoveCallback, onStopCallback) {\n        if (this.isMonitoring()) {\n            this.stopMonitoring(false);\n        }\n        this._pointerMoveCallback = pointerMoveCallback;\n        this._onStopCallback = onStopCallback;\n        let eventSource = initialElement;\n        try {\n            initialElement.setPointerCapture(pointerId);\n            this._hooks.add(toDisposable(() => {\n                try {\n                    initialElement.releasePointerCapture(pointerId);\n                }\n                catch (err) {\n                    // See https://github.com/microsoft/vscode/issues/161731\n                    //\n                    // `releasePointerCapture` sometimes fails when being invoked with the exception:\n                    //     DOMException: Failed to execute 'releasePointerCapture' on 'Element':\n                    //     No active pointer with the given id is found.\n                    //\n                    // There's no need to do anything in case of failure\n                }\n            }));\n        }\n        catch (err) {\n            // See https://github.com/microsoft/vscode/issues/144584\n            // See https://github.com/microsoft/vscode/issues/146947\n            // `setPointerCapture` sometimes fails when being invoked\n            // from a `mousedown` listener on macOS and Windows\n            // and it always fails on Linux with the exception:\n            //     DOMException: Failed to execute 'setPointerCapture' on 'Element':\n            //     No active pointer with the given id is found.\n            // In case of failure, we bind the listeners on the window\n            eventSource = dom.getWindow(initialElement);\n        }\n        this._hooks.add(dom.addDisposableListener(eventSource, dom.EventType.POINTER_MOVE, (e) => {\n            if (e.buttons !== initialButtons) {\n                // Buttons state has changed in the meantime\n                this.stopMonitoring(true);\n                return;\n            }\n            e.preventDefault();\n            this._pointerMoveCallback(e);\n        }));\n        this._hooks.add(dom.addDisposableListener(eventSource, dom.EventType.POINTER_UP, (e) => this.stopMonitoring(true)));\n    }\n}\n","export 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 = `$memoize$${key}`;\n    descriptor[fnKey] = function (...args) {\n        if (!this.hasOwnProperty(memoizeKey)) {\n            Object.defineProperty(this, memoizeKey, {\n                configurable: false,\n                enumerable: false,\n                writable: false,\n                value: fn.apply(this, args)\n            });\n        }\n        return this[memoizeKey];\n    };\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 DomUtils from './dom.js';\nimport { mainWindow } from './window.js';\nimport * as arrays from '../common/arrays.js';\nimport { memoize } from '../common/decorators.js';\nimport { Event as EventUtils } from '../common/event.js';\nimport { Disposable, markAsSingleton, toDisposable } from '../common/lifecycle.js';\nimport { LinkedList } from '../common/linkedList.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    static { this.SCROLL_FRICTION = -0.005; }\n    static { this.HOLD_DELAY = 700; }\n    static { this.CLEAR_TAP_COUNT_TIME = 400; } // ms\n    constructor() {\n        super();\n        this.dispatched = false;\n        this.targets = new LinkedList();\n        this.ignoreTargets = new LinkedList();\n        this.activeTouches = {};\n        this.handle = null;\n        this._lastSetTapCountTime = 0;\n        this._register(EventUtils.runAndSubscribe(DomUtils.onDidRegisterWindow, ({ window, disposables }) => {\n            disposables.add(DomUtils.addDisposableListener(window.document, 'touchstart', (e) => this.onTouchStart(e), { passive: false }));\n            disposables.add(DomUtils.addDisposableListener(window.document, 'touchend', (e) => this.onTouchEnd(window, e)));\n            disposables.add(DomUtils.addDisposableListener(window.document, 'touchmove', (e) => this.onTouchMove(e), { passive: false }));\n        }, { window: mainWindow, disposables: this._store }));\n    }\n    static addTarget(element) {\n        if (!Gesture.isTouchDevice()) {\n            return Disposable.None;\n        }\n        if (!Gesture.INSTANCE) {\n            Gesture.INSTANCE = markAsSingleton(new Gesture());\n        }\n        const remove = Gesture.INSTANCE.targets.push(element);\n        return toDisposable(remove);\n    }\n    static ignoreTarget(element) {\n        if (!Gesture.isTouchDevice()) {\n            return Disposable.None;\n        }\n        if (!Gesture.INSTANCE) {\n            Gesture.INSTANCE = markAsSingleton(new Gesture());\n        }\n        const remove = Gesture.INSTANCE.ignoreTargets.push(element);\n        return toDisposable(remove);\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 mainWindow || navigator.maxTouchPoints > 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        const 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            const 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            const 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(targetWindow, e) {\n        const timestamp = Date.now(); // use Date.now() because on FF e.timeStamp is not epoch based.\n        const activeTouchCount = Object.keys(this.activeTouches).length;\n        for (let i = 0, len = e.changedTouches.length; i < len; i++) {\n            const 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            const 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                const 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                const 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                const finalX = arrays.tail(data.rollingPageX);\n                const finalY = arrays.tail(data.rollingPageY);\n                const deltaT = arrays.tail(data.rollingTimestamps) - data.rollingTimestamps[0];\n                const deltaX = finalX - data.rollingPageX[0];\n                const 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(targetWindow, 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        const 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        if (event.initialTarget instanceof Node) {\n            for (const ignoreTarget of this.ignoreTargets) {\n                if (ignoreTarget.contains(event.initialTarget)) {\n                    return;\n                }\n            }\n            const targets = [];\n            for (const target of this.targets) {\n                if (target.contains(event.initialTarget)) {\n                    let depth = 0;\n                    let now = event.initialTarget;\n                    while (now && now !== target) {\n                        depth++;\n                        now = now.parentElement;\n                    }\n                    targets.push([depth, target]);\n                }\n            }\n            targets.sort((a, b) => a[0] - b[0]);\n            for (const [_, target] of targets) {\n                target.dispatchEvent(event);\n                this.dispatched = true;\n            }\n        }\n    }\n    inertia(targetWindow, dispatchTo, t1, vX, dirX, x, vY, dirY, y) {\n        this.handle = DomUtils.scheduleAtNextAnimationFrame(targetWindow, () => {\n            const now = Date.now();\n            // velocity: old speed + accel_over_time\n            const deltaT = now - t1;\n            let delta_pos_x = 0, delta_pos_y = 0;\n            let 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            const 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(targetWindow, dispatchTo, now, vX, dirX, x + delta_pos_x, vY, dirY, y + delta_pos_y);\n            }\n        });\n    }\n    onTouchMove(e) {\n        const 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            const 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            const data = this.activeTouches[touch.identifier];\n            const 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}\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 * as dom from '../dom.js';\nimport { StandardKeyboardEvent } from '../keyboardEvent.js';\nimport { StandardMouseEvent } from '../mouseEvent.js';\nimport { Gesture } from '../touch.js';\nimport { Disposable } from '../../common/lifecycle.js';\nexport class Widget extends Disposable {\n    onclick(domNode, listener) {\n        this._register(dom.addDisposableListener(domNode, dom.EventType.CLICK, (e) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n    }\n    onmousedown(domNode, listener) {\n        this._register(dom.addDisposableListener(domNode, dom.EventType.MOUSE_DOWN, (e) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n    }\n    onmouseover(domNode, listener) {\n        this._register(dom.addDisposableListener(domNode, dom.EventType.MOUSE_OVER, (e) => listener(new StandardMouseEvent(dom.getWindow(domNode), e))));\n    }\n    onmouseleave(domNode, listener) {\n        this._register(dom.addDisposableListener(domNode, dom.EventType.MOUSE_LEAVE, (e) => listener(new StandardMouseEvent(dom.getWindow(domNode), 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        return 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 *--------------------------------------------------------------------------------------------*/\nimport { GlobalPointerMoveMonitor } from '../../globalPointerMoveMonitor.js';\nimport { Widget } from '../widget.js';\nimport { TimeoutTimer } from '../../../common/async.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport * as dom from '../../dom.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(...ThemeIcon.asClassNameArray(opts.icon));\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._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n        this._register(dom.addStandardDisposableListener(this.bgDomNode, dom.EventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n        this._register(dom.addStandardDisposableListener(this.domNode, dom.EventType.POINTER_DOWN, (e) => this._arrowPointerDown(e)));\n        this._pointerdownRepeatTimer = this._register(new dom.WindowIntervalTimer());\n        this._pointerdownScheduleRepeatTimer = this._register(new TimeoutTimer());\n    }\n    _arrowPointerDown(e) {\n        if (!e.target || !(e.target instanceof Element)) {\n            return;\n        }\n        const scheduleRepeater = () => {\n            this._pointerdownRepeatTimer.cancelAndSet(() => this._onActivate(), 1000 / 24, dom.getWindow(e));\n        };\n        this._onActivate();\n        this._pointerdownRepeatTimer.cancel();\n        this._pointerdownScheduleRepeatTimer.cancelAndSet(scheduleRepeater, 200);\n        this._pointerMoveMonitor.startMonitoring(e.target, e.pointerId, e.buttons, (pointerMoveData) => { }, () => {\n            this._pointerdownRepeatTimer.cancel();\n            this._pointerdownScheduleRepeatTimer.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._rawShouldBeVisible = false;\n        this._shouldBeVisible = false;\n        this._revealTimer = this._register(new TimeoutTimer());\n    }\n    setVisibility(visibility) {\n        if (this._visibility !== visibility) {\n            this._visibility = visibility;\n            this._updateShouldBeVisible();\n        }\n    }\n    // ----------------- Hide / Reveal\n    setShouldBeVisible(rawShouldBeVisible) {\n        this._rawShouldBeVisible = rawShouldBeVisible;\n        this._updateShouldBeVisible();\n    }\n    _applyVisibilitySetting() {\n        if (this._visibility === 2 /* ScrollbarVisibility.Hidden */) {\n            return false;\n        }\n        if (this._visibility === 3 /* ScrollbarVisibility.Visible */) {\n            return true;\n        }\n        return this._rawShouldBeVisible;\n    }\n    _updateShouldBeVisible() {\n        const shouldBeVisible = this._applyVisibilitySetting();\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            this._domNode?.setClassName(this._visibleClassName);\n        }, 0);\n    }\n    _hide(withFadeAway) {\n        this._revealTimer.cancel();\n        if (!this._isVisible) {\n            return;\n        }\n        this._isVisible = false;\n        this._domNode?.setClassName(this._invisibleClassName + (withFadeAway ? ' fade' : ''));\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { GlobalPointerMoveMonitor } from '../../globalPointerMoveMonitor.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 POINTER_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._pointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\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._register(dom.addDisposableListener(this.domNode.domNode, dom.EventType.POINTER_DOWN, (e) => this._domNodePointerDown(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._register(dom.addDisposableListener(this.slider.domNode, dom.EventType.POINTER_DOWN, (e) => {\n            if (e.button === 0) {\n                e.preventDefault();\n                this._sliderPointerDown(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    _domNodePointerDown(e) {\n        if (e.target !== this.domNode.domNode) {\n            return;\n        }\n        this._onPointerDown(e);\n    }\n    delegatePointerDown(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 pointerPos = this._sliderPointerPosition(e);\n        if (sliderStart <= pointerPos && pointerPos <= sliderStop) {\n            // Act as if it was a pointer down on the slider\n            if (e.button === 0) {\n                e.preventDefault();\n                this._sliderPointerDown(e);\n            }\n        }\n        else {\n            // Act as if it was a pointer down on the scrollbar\n            this._onPointerDown(e);\n        }\n    }\n    _onPointerDown(e) {\n        let offsetX;\n        let offsetY;\n        if (e.target === this.domNode.domNode && typeof e.offsetX === 'number' && typeof e.offsetY === 'number') {\n            offsetX = e.offsetX;\n            offsetY = e.offsetY;\n        }\n        else {\n            const domNodePosition = dom.getDomNodePagePosition(this.domNode.domNode);\n            offsetX = e.pageX - domNodePosition.left;\n            offsetY = e.pageY - domNodePosition.top;\n        }\n        const offset = this._pointerDownRelativePosition(offsetX, offsetY);\n        this._setDesiredScrollPositionNow(this._scrollByPage\n            ? this._scrollbarState.getDesiredScrollPositionFromOffsetPaged(offset)\n            : this._scrollbarState.getDesiredScrollPositionFromOffset(offset));\n        if (e.button === 0) {\n            // left button\n            e.preventDefault();\n            this._sliderPointerDown(e);\n        }\n    }\n    _sliderPointerDown(e) {\n        if (!e.target || !(e.target instanceof Element)) {\n            return;\n        }\n        const initialPointerPosition = this._sliderPointerPosition(e);\n        const initialPointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(e);\n        const initialScrollbarState = this._scrollbarState.clone();\n        this.slider.toggleClassName('active', true);\n        this._pointerMoveMonitor.startMonitoring(e.target, e.pointerId, e.buttons, (pointerMoveData) => {\n            const pointerOrthogonalPosition = this._sliderOrthogonalPointerPosition(pointerMoveData);\n            const pointerOrthogonalDelta = Math.abs(pointerOrthogonalPosition - initialPointerOrthogonalPosition);\n            if (platform.isWindows && pointerOrthogonalDelta > POINTER_DRAG_RESET_DISTANCE) {\n                // The pointer has wondered away from the scrollbar => reset dragging\n                this._setDesiredScrollPositionNow(initialScrollbarState.getScrollPosition());\n                return;\n            }\n            const pointerPosition = this._sliderPointerPosition(pointerMoveData);\n            const pointerDelta = pointerPosition - initialPointerPosition;\n            this._setDesiredScrollPositionNow(initialScrollbarState.getDesiredScrollPositionFromDelta(pointerDelta));\n        }, () => {\n            this.slider.toggleClassName('active', false);\n            this._host.onDragEnd();\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 = Math.round(scrollbarSize);\n    }\n    setOppositeScrollbarSize(oppositeScrollbarSize) {\n        this._oppositeScrollbarSize = Math.round(oppositeScrollbarSize);\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 } from '../../../common/codicons.js';\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 /* ScrollbarVisibility.Hidden */ ? 0 : options.horizontalScrollbarSize), (options.vertical === 2 /* ScrollbarVisibility.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: Codicon.scrollbarButtonLeft,\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: Codicon.scrollbarButtonRight,\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    _pointerDownRelativePosition(offsetX, offsetY) {\n        return offsetX;\n    }\n    _sliderPointerPosition(e) {\n        return e.pageX;\n    }\n    _sliderOrthogonalPointerPosition(e) {\n        return e.pageY;\n    }\n    _updateScrollbarSize(size) {\n        this.slider.setHeight(size);\n    }\n    writeScrollPosition(target, scrollPosition) {\n        target.scrollLeft = scrollPosition;\n    }\n    updateOptions(options) {\n        this.updateScrollbarSize(options.horizontal === 2 /* ScrollbarVisibility.Hidden */ ? 0 : options.horizontalScrollbarSize);\n        this._scrollbarState.setOppositeScrollbarSize(options.vertical === 2 /* ScrollbarVisibility.Hidden */ ? 0 : options.verticalScrollbarSize);\n        this._visibilityController.setVisibility(options.horizontal);\n        this._scrollByPage = options.scrollByPage;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 } from '../../../common/codicons.js';\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 /* ScrollbarVisibility.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: Codicon.scrollbarButtonUp,\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: Codicon.scrollbarButtonDown,\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    _pointerDownRelativePosition(offsetX, offsetY) {\n        return offsetY;\n    }\n    _sliderPointerPosition(e) {\n        return e.pageY;\n    }\n    _sliderOrthogonalPointerPosition(e) {\n        return e.pageX;\n    }\n    _updateScrollbarSize(size) {\n        this.slider.setWidth(size);\n    }\n    writeScrollPosition(target, scrollPosition) {\n        target.scrollTop = scrollPosition;\n    }\n    updateOptions(options) {\n        this.updateScrollbarSize(options.vertical === 2 /* ScrollbarVisibility.Hidden */ ? 0 : options.verticalScrollbarSize);\n        // give priority to vertical scroll bar over horizontal and let it scroll all the way to the bottom\n        this._scrollbarState.setOppositeScrollbarSize(0);\n        this._visibilityController.setVisibility(options.vertical);\n        this._scrollByPage = options.scrollByPage;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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(_forceIntegerValues, width, scrollWidth, scrollLeft, height, scrollHeight, scrollTop) {\n        this._forceIntegerValues = _forceIntegerValues;\n        this._scrollStateBrand = undefined;\n        if (this._forceIntegerValues) {\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        }\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(this._forceIntegerValues, (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._forceIntegerValues, 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(options) {\n        super();\n        this._scrollableBrand = undefined;\n        this._onScroll = this._register(new Emitter());\n        this.onScroll = this._onScroll.event;\n        this._smoothScrollDuration = options.smoothScrollDuration;\n        this._scheduleAtNextAnimationFrame = options.scheduleAtNextAnimationFrame;\n        this._state = new ScrollState(options.forceIntegerValues, 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        this._smoothScrolling?.acceptScrollDimensions(this._state);\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    hasPendingScrollAnimation() {\n        return Boolean(this._smoothScrolling);\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 { getZoomFactor, isChrome } from '../../browser.js';\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 './media/scrollbars.css';\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    static { this.INSTANCE = new 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    acceptStandardWheelEvent(e) {\n        if (isChrome) {\n            const targetWindow = dom.getWindow(e.browserEvent);\n            const pageZoomFactor = getZoomFactor(targetWindow);\n            // On Chrome, 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            this.accept(Date.now(), e.deltaX * pageZoomFactor, e.deltaY * pageZoomFactor);\n        }\n        else {\n            this.accept(Date.now(), e.deltaX, e.deltaY);\n        }\n    }\n    accept(timestamp, deltaX, deltaY) {\n        let previousItem = null;\n        const item = new MouseWheelClassifierItem(timestamp, deltaX, deltaY);\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            previousItem = this._memory[this._rear];\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        item.score = this._computeScore(item, previousItem);\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, previousItem) {\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        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        // Non-accelerating scroll => indicator that this is a physical mouse wheel\n        // These can be identified by seeing whether they are the module of one another.\n        if (previousItem) {\n            const absDeltaX = Math.abs(item.deltaX);\n            const absDeltaY = Math.abs(item.deltaY);\n            const absPreviousDeltaX = Math.abs(previousItem.deltaX);\n            const absPreviousDeltaY = Math.abs(previousItem.deltaY);\n            // Min 1 to avoid division by zero, module 1 will still be 0.\n            const minDeltaX = Math.max(Math.min(absDeltaX, absPreviousDeltaX), 1);\n            const minDeltaY = Math.max(Math.min(absDeltaY, absPreviousDeltaY), 1);\n            const maxDeltaX = Math.max(absDeltaX, absPreviousDeltaX);\n            const maxDeltaY = Math.max(absDeltaY, absPreviousDeltaY);\n            const isSameModulo = (maxDeltaX % minDeltaX === 0 && maxDeltaY % minDeltaY === 0);\n            if (isSameModulo) {\n                score -= 0.5;\n            }\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}\nexport class AbstractScrollableElement extends Widget {\n    get options() {\n        return this._options;\n    }\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.onmouseleave(this._listenOnDomNode, (e) => this._onMouseLeave(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 pointer down event to the vertical scrollbar.\n     * This is to help with clicking somewhere else and having the scrollbar react.\n     */\n    delegateVerticalScrollbarPointerDown(browserEvent) {\n        this._verticalScrollbar.delegatePointerDown(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     */\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.horizontal !== 'undefined') {\n            this._options.horizontal = newOptions.horizontal;\n        }\n        if (typeof newOptions.vertical !== 'undefined') {\n            this._options.vertical = newOptions.vertical;\n        }\n        if (typeof newOptions.horizontalScrollbarSize !== 'undefined') {\n            this._options.horizontalScrollbarSize = newOptions.horizontalScrollbarSize;\n        }\n        if (typeof newOptions.verticalScrollbarSize !== 'undefined') {\n            this._options.verticalScrollbarSize = newOptions.verticalScrollbarSize;\n        }\n        if (typeof newOptions.scrollByPage !== 'undefined') {\n            this._options.scrollByPage = newOptions.scrollByPage;\n        }\n        this._horizontalScrollbar.updateOptions(this._options);\n        this._verticalScrollbar.updateOptions(this._options);\n        if (!this._options.lazyRender) {\n            this._render();\n        }\n    }\n    delegateScrollFromMouseWheelEvent(browserEvent) {\n        this._onMouseWheel(new StandardWheelEvent(browserEvent));\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        if (e.browserEvent?.defaultPrevented) {\n            return;\n        }\n        const classifier = MouseWheelClassifier.INSTANCE;\n        if (SCROLL_WHEEL_SMOOTH_SCROLL_ENABLED) {\n            classifier.acceptStandardWheelEvent(e);\n        }\n        // useful for creating unit tests:\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 (this._options.scrollYToX && deltaX + deltaY === 0) {\n                    // when configured to map Y to X and we both see\n                    // no dominant axis and X and Y are competing with\n                    // identical values into opposite directions, we\n                    // ignore the delta as we cannot make a decision then\n                    deltaX = deltaY = 0;\n                }\n                else 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 deltaScrollTop = SCROLL_WHEEL_SENSITIVITY * deltaY;\n                // Here we convert values such as -0.3 to -1 or 0.3 to 1, otherwise low speed scrolling will never scroll\n                const desiredScrollTop = futureScrollPosition.scrollTop - (deltaScrollTop < 0 ? Math.floor(deltaScrollTop) : Math.ceil(deltaScrollTop));\n                this._verticalScrollbar.writeScrollPosition(desiredScrollPosition, desiredScrollTop);\n            }\n            if (deltaX) {\n                const deltaScrollLeft = SCROLL_WHEEL_SENSITIVITY * deltaX;\n                // Here we convert values such as -0.3 to -1 or 0.3 to 1, otherwise low speed scrolling will never scroll\n                const desiredScrollLeft = futureScrollPosition.scrollLeft - (deltaScrollLeft < 0 ? Math.floor(deltaScrollLeft) : Math.ceil(deltaScrollLeft));\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    _onMouseLeave(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({\n            forceIntegerValues: true,\n            smoothScrollDuration: 0,\n            scheduleAtNextAnimationFrame: (callback) => dom.scheduleAtNextAnimationFrame(dom.getWindow(element), callback)\n        });\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 AbstractScrollableElement {\n    constructor(element, options) {\n        options = options || {};\n        options.mouseWheelSmoothScroll = false;\n        const scrollable = new Scrollable({\n            forceIntegerValues: false, // See https://github.com/microsoft/vscode/issues/139877\n            smoothScrollDuration: 0,\n            scheduleAtNextAnimationFrame: (callback) => dom.scheduleAtNextAnimationFrame(dom.getWindow(element), callback)\n        });\n        super(element, options, scrollable);\n        this._register(scrollable);\n        this._element = element;\n        this._register(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    setScrollPosition(update) {\n        this._scrollable.setScrollPositionNow(update);\n    }\n    getScrollPosition() {\n        return this._scrollable.getCurrentScrollPosition();\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 /* ScrollbarVisibility.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 /* ScrollbarVisibility.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 * as dom from '../../dom.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { DomScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport './hoverWidget.css';\nimport { localize } from '../../../../nls.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 class HoverAction extends Disposable {\n    static render(parent, actionOptions, keybindingLabel) {\n        return new HoverAction(parent, actionOptions, keybindingLabel);\n    }\n    constructor(parent, actionOptions, keybindingLabel) {\n        super();\n        this.actionLabel = actionOptions.label;\n        this.actionKeybindingLabel = keybindingLabel;\n        this.actionContainer = dom.append(parent, $('div.action-container'));\n        this.actionContainer.setAttribute('tabindex', '0');\n        this.action = dom.append(this.actionContainer, $('a.action'));\n        this.action.setAttribute('role', 'button');\n        if (actionOptions.iconClass) {\n            dom.append(this.action, $(`span.icon.${actionOptions.iconClass}`));\n        }\n        const label = dom.append(this.action, $('span'));\n        label.textContent = keybindingLabel ? `${actionOptions.label} (${keybindingLabel})` : actionOptions.label;\n        this._store.add(new ClickAction(this.actionContainer, actionOptions.run));\n        this._store.add(new KeyDownAction(this.actionContainer, actionOptions.run, [3 /* KeyCode.Enter */, 10 /* KeyCode.Space */]));\n        this.setEnabled(true);\n    }\n    setEnabled(enabled) {\n        if (enabled) {\n            this.actionContainer.classList.remove('disabled');\n            this.actionContainer.removeAttribute('aria-disabled');\n        }\n        else {\n            this.actionContainer.classList.add('disabled');\n            this.actionContainer.setAttribute('aria-disabled', 'true');\n        }\n    }\n}\nexport function getHoverAccessibleViewHint(shouldHaveHint, keybinding) {\n    return shouldHaveHint && keybinding ? localize('acessibleViewHint', \"Inspect this in the accessible view with {0}.\", keybinding) : shouldHaveHint ? localize('acessibleViewHintNoKbOpen', \"Inspect this in the accessible view via the command Open Accessible View which is currently not triggerable via keybinding.\") : '';\n}\nexport class ClickAction extends Disposable {\n    constructor(container, run) {\n        super();\n        this._register(dom.addDisposableListener(container, dom.EventType.CLICK, e => {\n            e.stopPropagation();\n            e.preventDefault();\n            run(container);\n        }));\n    }\n}\nexport class KeyDownAction extends Disposable {\n    constructor(container, run, keyCodes) {\n        super();\n        this._register(dom.addDisposableListener(container, dom.EventType.KEY_DOWN, e => {\n            const event = new StandardKeyboardEvent(e);\n            if (keyCodes.some(keyCode => event.equals(keyCode))) {\n                e.stopPropagation();\n                e.preventDefault();\n                run(container);\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';\nexport const IOpenerService = createDecorator('openerService');\n/**\n * file:///some/file.js#73\n * file:///some/file.js#L73\n * file:///some/file.js#73,84\n * file:///some/file.js#L73,84\n * file:///some/file.js#73-83\n * file:///some/file.js#L73-L83\n * file:///some/file.js#73,84-83,52\n * file:///some/file.js#L73,84-L83,52\n */\nexport function extractSelection(uri) {\n    let selection = undefined;\n    const match = /^L?(\\d+)(?:,(\\d+))?(-L?(\\d+)(?:,(\\d+))?)?/.exec(uri.fragment);\n    if (match) {\n        selection = {\n            startLineNumber: parseInt(match[1]),\n            startColumn: match[2] ? parseInt(match[2]) : 1,\n            endLineNumber: match[4] ? parseInt(match[4]) : undefined,\n            endColumn: match[4] ? (match[5] ? parseInt(match[5]) : 1) : undefined\n        };\n        uri = uri.with({ fragment: '' });\n    }\n    return { selection, 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 *--------------------------------------------------------------------------------------------*/\nimport { Emitter } from '../common/event.js';\nexport class DomEmitter {\n    get event() {\n        return this.emitter.event;\n    }\n    constructor(element, type, useCapture) {\n        const fn = (e) => this.emitter.fire(e);\n        this.emitter = new Emitter({\n            onWillAddFirstListener: () => element.addEventListener(type, fn, useCapture),\n            onDidRemoveLastListener: () => element.removeEventListener(type, fn, useCapture)\n        });\n    }\n    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 * 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.renderCodeSegments), options.actionHandler, options.renderCodeSegments);\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, renderCodeSegments) {\n    let child;\n    if (treeNode.type === 2 /* FormatType.Text */) {\n        child = document.createTextNode(treeNode.content || '');\n    }\n    else if (treeNode.type === 3 /* FormatType.Bold */) {\n        child = document.createElement('b');\n    }\n    else if (treeNode.type === 4 /* FormatType.Italics */) {\n        child = document.createElement('i');\n    }\n    else if (treeNode.type === 7 /* FormatType.Code */ && renderCodeSegments) {\n        child = document.createElement('code');\n    }\n    else if (treeNode.type === 5 /* FormatType.Action */ && actionHandler) {\n        const a = document.createElement('a');\n        actionHandler.disposables.add(DOM.addStandardDisposableListener(a, 'click', (event) => {\n            actionHandler.callback(String(treeNode.index), event);\n        }));\n        child = a;\n    }\n    else if (treeNode.type === 8 /* FormatType.NewLine */) {\n        child = document.createElement('br');\n    }\n    else if (treeNode.type === 1 /* FormatType.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, renderCodeSegments);\n        });\n    }\n}\nfunction parseFormattedText(content, parseCodeSegments) {\n    const root = {\n        type: 1 /* FormatType.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 /* FormatType.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 /* FormatType.Text */) {\n                current = stack.pop();\n            }\n            const type = formatTagType(next, parseCodeSegments);\n            if (current.type === type || (current.type === 5 /* FormatType.Action */ && type === 6 /* FormatType.ActionClose */)) {\n                current = stack.pop();\n            }\n            else {\n                const newCurrent = {\n                    type: type,\n                    children: []\n                };\n                if (type === 5 /* FormatType.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 /* FormatType.Text */) {\n                current = stack.pop();\n            }\n            current.children.push({\n                type: 8 /* FormatType.NewLine */\n            });\n        }\n        else {\n            if (current.type !== 2 /* FormatType.Text */) {\n                const textCurrent = {\n                    type: 2 /* FormatType.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 /* FormatType.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 /* FormatType.Invalid */;\n}\nfunction formatTagType(char, supportCodeSegments) {\n    switch (char) {\n        case '*':\n            return 3 /* FormatType.Bold */;\n        case '_':\n            return 4 /* FormatType.Italics */;\n        case '[':\n            return 5 /* FormatType.Action */;\n        case ']':\n            return 6 /* FormatType.ActionClose */;\n        case '`':\n            return supportCodeSegments ? 7 /* FormatType.Code */ : 0 /* FormatType.Invalid */;\n        default:\n            return 0 /* FormatType.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 { ThemeIcon } from '../../../common/themables.js';\nconst labelWithIconsRegex = new RegExp(`(\\\\\\\\)?\\\\$\\\\((${ThemeIcon.iconNameExpression}(?:${ThemeIcon.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        if (textStart < textStop) {\n            elements.push(text.substring(textStart, textStop));\n        }\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(...ThemeIcon.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 *--------------------------------------------------------------------------------------------*/\nimport { LRUCache } from './map.js';\nimport { getKoreanAltChars } from './naturalLanguage/korean.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}\n// Prefix\nexport const matchesStrictPrefix = _matchesPrefix.bind(undefined, false);\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 /* CharCode.a */ <= code && code <= 122 /* CharCode.z */;\n}\nexport function isUpper(code) {\n    return 65 /* CharCode.A */ <= code && code <= 90 /* CharCode.Z */;\n}\nfunction isNumber(code) {\n    return 48 /* CharCode.Digit0 */ <= code && code <= 57 /* CharCode.Digit9 */;\n}\nfunction isWhitespace(code) {\n    return (code === 32 /* CharCode.Space */\n        || code === 9 /* CharCode.Tab */\n        || code === 10 /* CharCode.LineFeed */\n        || code === 13 /* CharCode.CarriageReturn */);\n}\nconst wordSeparators = new Set();\n// These are chosen as natural word separators based on writen text.\n// It is a subset of the word separators used by the monaco editor.\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}\nconst alternateCharsCache = new Map();\n/**\n * Gets alternative codes to the character code passed in. This comes in the\n * form of an array of character codes, all of which must match _in order_ to\n * successfully match.\n *\n * @param code The character code to check.\n */\nfunction getAlternateCodes(code) {\n    if (alternateCharsCache.has(code)) {\n        return alternateCharsCache.get(code);\n    }\n    // NOTE: This function is written in such a way that it can be extended in\n    // the future, but right now the return type takes into account it's only\n    // supported by a single \"alt codes provider\".\n    // `ArrayLike<ArrayLike<number>>` is a more appropriate type if changed.\n    let result;\n    const codes = getKoreanAltChars(code);\n    if (codes) {\n        result = codes;\n    }\n    alternateCharsCache.set(code, result);\n    return result;\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    // TODO: Consider removing this check\n    if (camelCaseWord.length > 60) {\n        camelCaseWord = camelCaseWord.substring(0, 60);\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 targetIndex = 0;\n    word = word.toLowerCase();\n    target = target.toLowerCase();\n    while (targetIndex < target.length) {\n        result = _matchesWords(word, target, 0, targetIndex, contiguous);\n        if (result !== null) {\n            break;\n        }\n        targetIndex = nextWord(target, targetIndex + 1);\n    }\n    return result;\n}\nfunction _matchesWords(word, target, wordIndex, targetIndex, contiguous) {\n    let targetIndexOffset = 0;\n    if (wordIndex === word.length) {\n        return [];\n    }\n    else if (targetIndex === target.length) {\n        return null;\n    }\n    else if (!charactersMatch(word.charCodeAt(wordIndex), target.charCodeAt(targetIndex))) {\n        // Verify alternate characters before exiting\n        const altChars = getAlternateCodes(word.charCodeAt(wordIndex));\n        if (!altChars) {\n            return null;\n        }\n        for (let k = 0; k < altChars.length; k++) {\n            if (!charactersMatch(altChars[k], target.charCodeAt(targetIndex + k))) {\n                return null;\n            }\n        }\n        targetIndexOffset += altChars.length - 1;\n    }\n    let result = null;\n    let nextWordIndex = targetIndex + targetIndexOffset + 1;\n    result = _matchesWords(word, target, wordIndex + 1, nextWordIndex, contiguous);\n    if (!contiguous) {\n        while (!result && (nextWordIndex = nextWord(target, nextWordIndex)) < target.length) {\n            result = _matchesWords(word, target, wordIndex + 1, nextWordIndex, contiguous);\n            nextWordIndex++;\n        }\n    }\n    if (!result) {\n        return null;\n    }\n    // If the characters don't exactly match, then they must be word separators (see charactersMatch(...)).\n    // We don't want to include this in the matches but we don't want to throw the target out all together so we return `result`.\n    if (word.charCodeAt(wordIndex) !== target.charCodeAt(targetIndex)) {\n        // Verify alternate characters before exiting\n        const altChars = getAlternateCodes(word.charCodeAt(wordIndex));\n        if (!altChars) {\n            return result;\n        }\n        for (let k = 0; k < altChars.length; k++) {\n            if (altChars[k] !== target.charCodeAt(targetIndex + k)) {\n                return result;\n            }\n        }\n    }\n    return join({ start: targetIndex, end: targetIndex + targetIndexOffset + 1 }, result);\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}\n/**\n * Match pattern against word in a fuzzy way. As in IntelliSense and faster and more\n * powerful than `matchesFuzzy`\n */\nexport function matchesFuzzy2(pattern, word) {\n    const score = fuzzyScore(pattern, pattern.toLowerCase(), 0, word, word.toLowerCase(), 0, { firstMatchCanBeWeak: true, boostFullMatch: true });\n    return score ? createMatches(score) : null;\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, { firstMatchCanBeWeak: true, boostFullMatch: true });\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 /* CharCode.Underline */:\n        case 45 /* CharCode.Dash */:\n        case 46 /* CharCode.Period */:\n        case 32 /* CharCode.Space */:\n        case 47 /* CharCode.Slash */:\n        case 92 /* CharCode.Backslash */:\n        case 39 /* CharCode.SingleQuote */:\n        case 34 /* CharCode.DoubleQuote */:\n        case 58 /* CharCode.Colon */:\n        case 36 /* CharCode.DollarSign */:\n        case 60 /* CharCode.LessThan */:\n        case 62 /* CharCode.GreaterThan */:\n        case 40 /* CharCode.OpenParen */:\n        case 41 /* CharCode.CloseParen */:\n        case 91 /* CharCode.OpenSquareBracket */:\n        case 93 /* CharCode.CloseSquareBracket */:\n        case 123 /* CharCode.OpenCurlyBrace */:\n        case 125 /* CharCode.CloseCurlyBrace */:\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 /* CharCode.Space */:\n        case 9 /* CharCode.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 class FuzzyScoreOptions {\n    static { this.default = { boostFullMatch: true, firstMatchCanBeWeak: false }; }\n    constructor(firstMatchCanBeWeak, boostFullMatch) {\n        this.firstMatchCanBeWeak = firstMatchCanBeWeak;\n        this.boostFullMatch = boostFullMatch;\n    }\n}\nexport function fuzzyScore(pattern, patternLow, patternStart, word, wordLow, wordStart, options = FuzzyScoreOptions.default) {\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 /* Arrow.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 /* Arrow.Left */;\n                _diag[row][column] = 0;\n            }\n            else if (canComeDiag) {\n                _table[row][column] = diagScore;\n                _arrows[row][column] = 1 /* Arrow.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] && !options.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 /* Arrow.LeftLeft */) {\n                diagColumn = diagColumn - 2;\n            }\n            else if (arrow === 2 /* Arrow.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 - wordStart === patternLen && options.boostFullMatch) {\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 preferred 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, options) {\n    return fuzzyScoreWithPermutations(pattern, lowPattern, patternPos, word, lowWord, wordPos, true, options);\n}\nfunction fuzzyScoreWithPermutations(pattern, lowPattern, patternPos, word, lowWord, wordPos, aggressive, options) {\n    let top = fuzzyScore(pattern, lowPattern, patternPos, word, lowWord, wordPos, options);\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, options);\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 *--------------------------------------------------------------------------------------------*/\nimport { matchesFuzzy } from './filters.js';\nimport { ltrim } from './strings.js';\nimport { ThemeIcon } from './themables.js';\nconst iconStartMarker = '$(';\nconst iconsRegex = new RegExp(`\\\\$\\\\(${ThemeIcon.iconNameExpression}(?:${ThemeIcon.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');\n/**\n * Takes a label with icons (`$(iconId)xyz`)  and strips the icons out (`xyz`)\n */\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}\n/**\n * Takes a label with icons (`$(iconId)xyz`), removes the icon syntax adds whitespace so that screen readers can read the text better.\n */\nexport function getCodiconAriaLabel(text) {\n    if (!text) {\n        return '';\n    }\n    return text.replace(/\\$\\((.*?)\\)/g, (_match, codiconName) => ` ${codiconName} `).trim();\n}\nconst _parseIconsRegex = new RegExp(`\\\\$\\\\(${ThemeIcon.iconNameCharacter}+\\\\)`, 'g');\n/**\n * Takes a label with icons (`abc $(iconId)xyz`) and returns the text (`abc xyz`) and the offsets of the icons (`[3]`)\n */\nexport function parseLabelWithIcons(input) {\n    _parseIconsRegex.lastIndex = 0;\n    let text = '';\n    const iconOffsets = [];\n    let iconsOffset = 0;\n    while (true) {\n        const pos = _parseIconsRegex.lastIndex;\n        const match = _parseIconsRegex.exec(input);\n        const chars = input.substring(pos, match?.index);\n        if (chars.length > 0) {\n            text += chars;\n            for (let i = 0; i < chars.length; i++) {\n                iconOffsets.push(iconsOffset);\n            }\n        }\n        if (!match) {\n            break;\n        }\n        iconsOffset += match[0].length;\n    }\n    return { text, 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 *--------------------------------------------------------------------------------------------*/\nimport * as extpath from './extpath.js';\nimport { Schemas } from './network.js';\nimport * as paths from './path.js';\nimport { isLinux, isWindows } from './platform.js';\nimport { compare as strCompare, equalsIgnoreCase } from './strings.js';\nimport { URI, uriToFsPath } from './uri.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    isEqualOrParent(base, parentCandidate, ignoreFragment = false) {\n        if (base.scheme === parentCandidate.scheme) {\n            if (base.scheme === Schemas.file) {\n                return extpath.isEqualOrParent(originalFSPath(base), originalFSPath(parentCandidate), this._ignorePathCasing(base)) && base.query === parentCandidate.query && (ignoreFragment || base.fragment === parentCandidate.fragment);\n            }\n            if (isEqualAuthority(base.authority, parentCandidate.authority)) {\n                return extpath.isEqualOrParent(base.path, parentCandidate.path, this._ignorePathCasing(base), '/') && base.query === parentCandidate.query && (ignoreFragment || base.fragment === parentCandidate.fragment);\n            }\n        }\n        return false;\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    extname(resource) {\n        return paths.posix.extname(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 /* CharCode.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    relativePath(from, to) {\n        if (from.scheme !== to.scheme || !isEqualAuthority(from.authority, to.authority)) {\n            return undefined;\n        }\n        if (from.scheme === Schemas.file) {\n            const relativePath = paths.relative(originalFSPath(from), originalFSPath(to));\n            return isWindows ? extpath.toSlashes(relativePath) : relativePath;\n        }\n        let fromPath = from.path || '/';\n        const toPath = to.path || '/';\n        if (this._ignorePathCasing(from)) {\n            // make casing of fromPath match toPath\n            let i = 0;\n            for (const len = Math.min(fromPath.length, toPath.length); i < len; i++) {\n                if (fromPath.charCodeAt(i) !== toPath.charCodeAt(i)) {\n                    if (fromPath.charAt(i).toLowerCase() !== toPath.charAt(i).toLowerCase()) {\n                        break;\n                    }\n                }\n            }\n            fromPath = toPath.substr(0, i) + fromPath.substr(i);\n        }\n        return paths.posix.relative(fromPath, toPath);\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        path = extpath.toPosixPath(path); // we allow path to be a windows path\n        return base.with({\n            path: paths.posix.resolve(base.path, path)\n        });\n    }\n    // --- misc\n    isAbsolutePath(resource) {\n        return !!resource.path && resource.path[0] === '/';\n    }\n    isEqualAuthority(a1, a2) {\n        return a1 === a2 || (a1 !== undefined && a2 !== undefined && equalsIgnoreCase(a1, a2));\n    }\n    hasTrailingPathSeparator(resource, sep = paths.sep) {\n        if (resource.scheme === Schemas.file) {\n            const fsp = originalFSPath(resource);\n            return fsp.length > extpath.getRoot(fsp).length && fsp[fsp.length - 1] === sep;\n        }\n        else {\n            const p = resource.path;\n            return (p.length > 1 && p.charCodeAt(p.length - 1) === 47 /* CharCode.Slash */) && !(/^[a-zA-Z]:(\\/$|\\\\$)/.test(resource.fsPath)); // ignore the slash at offset 0\n        }\n    }\n    removeTrailingPathSeparator(resource, sep = paths.sep) {\n        // Make sure that the path isn't a drive letter. A trailing separator there is not removable.\n        if (hasTrailingPathSeparator(resource, sep)) {\n            return resource.with({ path: resource.path.substr(0, resource.path.length - 1) });\n        }\n        return resource;\n    }\n    addTrailingPathSeparator(resource, sep = paths.sep) {\n        let isRootSep = false;\n        if (resource.scheme === Schemas.file) {\n            const fsp = originalFSPath(resource);\n            isRootSep = ((fsp !== undefined) && (fsp.length === extpath.getRoot(fsp).length) && (fsp[fsp.length - 1] === sep));\n        }\n        else {\n            sep = '/';\n            const p = resource.path;\n            isRootSep = p.length === 1 && p.charCodeAt(p.length - 1) === 47 /* CharCode.Slash */;\n        }\n        if (!isRootSep && !hasTrailingPathSeparator(resource, sep)) {\n            return resource.with({ path: resource.path + '/' });\n        }\n        return resource;\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);\n/**\n * BIASED utility that _mostly_ ignored the case of urs paths. ONLY use this util if you\n * understand what you are doing.\n *\n * This utility is INCOMPATIBLE with `uri.toString()`-usages and both CANNOT be used interchanged.\n *\n * When dealing with uris from files or documents, `extUri` (the unbiased friend)is sufficient\n * because those uris come from a \"trustworthy source\". When creating unknown uris it's always\n * better to use `IUriIdentityService` which exposes an `IExtUri`-instance which knows when path\n * casing matters.\n */\nexport const extUriBiasedIgnorePathCase = new ExtUri(uri => {\n    // A file scheme resource is in the same platform as code, so ignore case for non linux platforms\n    // Resource can be from another platform. Lowering the case as an hack. Should come from File system provider\n    return uri.scheme === Schemas.file ? !isLinux : true;\n});\n/**\n * BIASED utility that always ignores the casing of uris paths. ONLY use this util if you\n * understand what you are doing.\n *\n * This utility is INCOMPATIBLE with `uri.toString()`-usages and both CANNOT be used interchanged.\n *\n * When dealing with uris from files or documents, `extUri` (the unbiased friend)is sufficient\n * because those uris come from a \"trustworthy source\". When creating unknown uris it's always\n * better to use `IUriIdentityService` which exposes an `IExtUri`-instance which knows when path\n * casing matters.\n */\nexport const extUriIgnorePathCase = new ExtUri(_ => true);\nexport const isEqual = extUri.isEqual.bind(extUri);\nexport const isEqualOrParent = extUri.isEqualOrParent.bind(extUri);\nexport const getComparisonKey = extUri.getComparisonKey.bind(extUri);\nexport const basenameOrAuthority = extUri.basenameOrAuthority.bind(extUri);\nexport const basename = extUri.basename.bind(extUri);\nexport const extname = extUri.extname.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 relativePath = extUri.relativePath.bind(extUri);\nexport const resolvePath = extUri.resolvePath.bind(extUri);\nexport const isAbsolutePath = extUri.isAbsolutePath.bind(extUri);\nexport const isEqualAuthority = extUri.isEqualAuthority.bind(extUri);\nexport const hasTrailingPathSeparator = extUri.hasTrailingPathSeparator.bind(extUri);\nexport const removeTrailingPathSeparator = extUri.removeTrailingPathSeparator.bind(extUri);\nexport const addTrailingPathSeparator = extUri.addTrailingPathSeparator.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 { illegalArgument } from './errors.js';\nimport { escapeIcons } from './iconLabels.js';\nimport { isEqual } from './resources.js';\nimport { escapeRegExpCharacters } from './strings.js';\nimport { URI } from './uri.js';\nexport class MarkdownString {\n    constructor(value = '', isTrustedOrOptions = false) {\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            this.supportHtml = false;\n        }\n        else {\n            this.isTrusted = isTrustedOrOptions.isTrusted ?? undefined;\n            this.supportThemeIcons = isTrustedOrOptions.supportThemeIcons ?? false;\n            this.supportHtml = isTrustedOrOptions.supportHtml ?? false;\n        }\n    }\n    appendText(value, newlineStyle = 0 /* MarkdownStringTextNewlineStyle.Paragraph */) {\n        this.value += escapeMarkdownSyntaxTokens(this.supportThemeIcons ? escapeIcons(value) : value) // CodeQL [SM02383] The Markdown is fully sanitized after being rendered.\n            .replace(/([ \\t]+)/g, (_match, g1) => '&nbsp;'.repeat(g1.length)) // CodeQL [SM02383] The Markdown is fully sanitized after being rendered.\n            .replace(/\\>/gm, '\\\\>') // CodeQL [SM02383] The Markdown is fully sanitized after being rendered.\n            .replace(/\\n/g, newlineStyle === 1 /* MarkdownStringTextNewlineStyle.Break */ ? '\\\\\\n' : '\\n\\n'); // CodeQL [SM02383] The Markdown is fully sanitized after being rendered.\n        return this;\n    }\n    appendMarkdown(value) {\n        this.value += value;\n        return this;\n    }\n    appendCodeblock(langId, code) {\n        this.value += `\\n${appendEscapedMarkdownCodeBlockFence(code, langId)}\\n`;\n        return this;\n    }\n    appendLink(target, label, title) {\n        this.value += '[';\n        this.value += this._escape(label, ']');\n        this.value += '](';\n        this.value += this._escape(String(target), ')');\n        if (title) {\n            this.value += ` \"${this._escape(this._escape(title, '\"'), ')')}\"`;\n        }\n        this.value += ')';\n        return this;\n    }\n    _escape(value, ch) {\n        const r = new RegExp(escapeRegExpCharacters(ch), 'g');\n        return value.replace(r, (match, offset) => {\n            if (value.charAt(offset - 1) !== '\\\\') {\n                return `\\\\${match}`;\n            }\n            else {\n                return match;\n            }\n        });\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' || typeof thing.isTrusted === 'object' || thing.isTrusted === undefined)\n            && (typeof thing.supportThemeIcons === 'boolean' || thing.supportThemeIcons === undefined);\n    }\n    return false;\n}\nexport function 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\n            && a.isTrusted === b.isTrusted\n            && a.supportThemeIcons === b.supportThemeIcons\n            && a.supportHtml === b.supportHtml\n            && (a.baseUri === b.baseUri || !!a.baseUri && !!b.baseUri && isEqual(URI.from(a.baseUri), URI.from(b.baseUri)));\n    }\n}\nexport function escapeMarkdownSyntaxTokens(text) {\n    // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash\n    return text.replace(/[\\\\`*_{}[\\]()#+\\-!~]/g, '\\\\$&'); // CodeQL [SM02383] Backslash is escaped in the character class\n}\n/**\n * @see https://github.com/microsoft/vscode/issues/193746\n */\nexport function appendEscapedMarkdownCodeBlockFence(code, langId) {\n    const longestFenceLength = code.match(/^`+/gm)?.reduce((a, b) => (a.length > b.length ? a : b)).length ??\n        0;\n    const desiredFenceLength = longestFenceLength >= 3 ? longestFenceLength + 1 : 3;\n    // the markdown result\n    return [\n        `${'`'.repeat(desiredFenceLength)}${langId}`,\n        code,\n        `${'`'.repeat(desiredFenceLength)}`,\n    ].join('\\n');\n}\nexport function escapeDoubleQuotes(input) {\n    return input.replace(/\"/g, '&quot;');\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 *--------------------------------------------------------------------------------------------*/\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 * marked v14.0.0 - a markdown parser\n * Copyright (c) 2011-2024, 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// ESM-uncomment-begin\nlet __marked_exports = {};\n(function() {\n  function define(deps, factory) {\n    factory(__marked_exports);\n  }\n  define.amd = true;\n// ESM-uncomment-end\n\n(function (global, factory) {\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\t(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.marked = {}));\n  })(this, (function (exports) {\n\t'use strict';\n\n\t/**\n\t * Gets the original marked default options.\n\t */\n\tfunction _getDefaults() {\n\t\treturn {\n\t\t\tasync: false,\n\t\t\tbreaks: false,\n\t\t\textensions: null,\n\t\t\tgfm: true,\n\t\t\thooks: null,\n\t\t\tpedantic: false,\n\t\t\trenderer: null,\n\t\t\tsilent: false,\n\t\t\ttokenizer: null,\n\t\t\twalkTokens: null,\n\t\t};\n\t}\n\texports.defaults = _getDefaults();\n\tfunction changeDefaults(newDefaults) {\n\t\texports.defaults = newDefaults;\n\t}\n\n\t/**\n\t * Helpers\n\t */\n\tconst escapeTest = /[&<>\"']/;\n\tconst escapeReplace = new RegExp(escapeTest.source, 'g');\n\tconst escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\n\tconst escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\n\tconst escapeReplacements = {\n\t\t'&': '&amp;',\n\t\t'<': '&lt;',\n\t\t'>': '&gt;',\n\t\t'\"': '&quot;',\n\t\t\"'\": '&#39;',\n\t};\n\tconst getEscapeReplacement = (ch) => escapeReplacements[ch];\n\tfunction escape$1(html, encode) {\n\t\tif (encode) {\n\t\t\tif (escapeTest.test(html)) {\n\t\t\t\treturn html.replace(escapeReplace, getEscapeReplacement);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (escapeTestNoEncode.test(html)) {\n\t\t\t\treturn html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n\t\t\t}\n\t\t}\n\t\treturn html;\n\t}\n\tconst caret = /(^|[^\\[])\\^/g;\n\tfunction edit(regex, opt) {\n\t\tlet source = typeof regex === 'string' ? regex : regex.source;\n\t\topt = opt || '';\n\t\tconst obj = {\n\t\t\treplace: (name, val) => {\n\t\t\t\tlet valSource = typeof val === 'string' ? val : val.source;\n\t\t\t\tvalSource = valSource.replace(caret, '$1');\n\t\t\t\tsource = source.replace(name, valSource);\n\t\t\t\treturn obj;\n\t\t\t},\n\t\t\tgetRegex: () => {\n\t\t\t\treturn new RegExp(source, opt);\n\t\t\t},\n\t\t};\n\t\treturn obj;\n\t}\n\tfunction cleanUrl(href) {\n\t\ttry {\n\t\t\thref = encodeURI(href).replace(/%25/g, '%');\n\t\t}\n\t\tcatch {\n\t\t\treturn null;\n\t\t}\n\t\treturn href;\n\t}\n\tconst noopTest = { exec: () => null };\n\tfunction splitCells(tableRow, count) {\n\t\t// ensure that every cell-delimiting pipe has a space\n\t\t// before it to distinguish it from an escaped pipe\n\t\tconst row = tableRow.replace(/\\|/g, (match, offset, str) => {\n\t\t\tlet escaped = false;\n\t\t\tlet curr = offset;\n\t\t\twhile (--curr >= 0 && str[curr] === '\\\\')\n\t\t\t\tescaped = !escaped;\n\t\t\tif (escaped) {\n\t\t\t\t// odd number of slashes means | is escaped\n\t\t\t\t// so we leave it alone\n\t\t\t\treturn '|';\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// add space before unescaped |\n\t\t\t\treturn ' |';\n\t\t\t}\n\t\t}), cells = row.split(/ \\|/);\n\t\tlet i = 0;\n\t\t// First/last cell in a row cannot be empty if it has no leading/trailing pipe\n\t\tif (!cells[0].trim()) {\n\t\t\tcells.shift();\n\t\t}\n\t\tif (cells.length > 0 && !cells[cells.length - 1].trim()) {\n\t\t\tcells.pop();\n\t\t}\n\t\tif (count) {\n\t\t\tif (cells.length > count) {\n\t\t\t\tcells.splice(count);\n\t\t\t}\n\t\t\telse {\n\t\t\t\twhile (cells.length < count)\n\t\t\t\t\tcells.push('');\n\t\t\t}\n\t\t}\n\t\tfor (; i < cells.length; i++) {\n\t\t\t// leading or trailing whitespace is ignored per the gfm spec\n\t\t\tcells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n\t\t}\n\t\treturn cells;\n\t}\n\t/**\n\t * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n\t * /c*$/ is vulnerable to REDOS.\n\t *\n\t * @param str\n\t * @param c\n\t * @param invert Remove suffix of non-c chars instead. Default falsey.\n\t */\n\tfunction rtrim(str, c, invert) {\n\t\tconst l = str.length;\n\t\tif (l === 0) {\n\t\t\treturn '';\n\t\t}\n\t\t// Length of suffix matching the invert condition.\n\t\tlet suffLen = 0;\n\t\t// Step left until we fail to match the invert condition.\n\t\twhile (suffLen < l) {\n\t\t\tconst currChar = str.charAt(l - suffLen - 1);\n\t\t\tif (currChar === c && !invert) {\n\t\t\t\tsuffLen++;\n\t\t\t}\n\t\t\telse if (currChar !== c && invert) {\n\t\t\t\tsuffLen++;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\treturn str.slice(0, l - suffLen);\n\t}\n\tfunction findClosingBracket(str, b) {\n\t\tif (str.indexOf(b[1]) === -1) {\n\t\t\treturn -1;\n\t\t}\n\t\tlet level = 0;\n\t\tfor (let i = 0; i < str.length; i++) {\n\t\t\tif (str[i] === '\\\\') {\n\t\t\t\ti++;\n\t\t\t}\n\t\t\telse if (str[i] === b[0]) {\n\t\t\t\tlevel++;\n\t\t\t}\n\t\t\telse if (str[i] === b[1]) {\n\t\t\t\tlevel--;\n\t\t\t\tif (level < 0) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t}\n\n\tfunction outputLink(cap, link, raw, lexer) {\n\t\tconst href = link.href;\n\t\tconst title = link.title ? escape$1(link.title) : null;\n\t\tconst text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\t\tif (cap[0].charAt(0) !== '!') {\n\t\t\tlexer.state.inLink = true;\n\t\t\tconst token = {\n\t\t\t\ttype: 'link',\n\t\t\t\traw,\n\t\t\t\thref,\n\t\t\t\ttitle,\n\t\t\t\ttext,\n\t\t\t\ttokens: lexer.inlineTokens(text),\n\t\t\t};\n\t\t\tlexer.state.inLink = false;\n\t\t\treturn token;\n\t\t}\n\t\treturn {\n\t\t\ttype: 'image',\n\t\t\traw,\n\t\t\thref,\n\t\t\ttitle,\n\t\t\ttext: escape$1(text),\n\t\t};\n\t}\n\tfunction indentCodeCompensation(raw, text) {\n\t\tconst matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\t\tif (matchIndentToCode === null) {\n\t\t\treturn text;\n\t\t}\n\t\tconst indentToCode = matchIndentToCode[1];\n\t\treturn text\n\t\t\t.split('\\n')\n\t\t\t.map(node => {\n\t\t\t\tconst matchIndentInNode = node.match(/^\\s+/);\n\t\t\t\tif (matchIndentInNode === null) {\n\t\t\t\t\treturn node;\n\t\t\t\t}\n\t\t\t\tconst [indentInNode] = matchIndentInNode;\n\t\t\t\tif (indentInNode.length >= indentToCode.length) {\n\t\t\t\t\treturn node.slice(indentToCode.length);\n\t\t\t\t}\n\t\t\t\treturn node;\n\t\t\t})\n\t\t\t.join('\\n');\n\t}\n\t/**\n\t * Tokenizer\n\t */\n\tclass _Tokenizer {\n\t\toptions;\n\t\trules; // set by the lexer\n\t\tlexer; // set by the lexer\n\t\tconstructor(options) {\n\t\t\tthis.options = options || exports.defaults;\n\t\t}\n\t\tspace(src) {\n\t\t\tconst cap = this.rules.block.newline.exec(src);\n\t\t\tif (cap && cap[0].length > 0) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'space',\n\t\t\t\t\traw: cap[0],\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tcode(src) {\n\t\t\tconst cap = this.rules.block.code.exec(src);\n\t\t\tif (cap) {\n\t\t\t\tconst text = cap[0].replace(/^ {1,4}/gm, '');\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'code',\n\t\t\t\t\traw: cap[0],\n\t\t\t\t\tcodeBlockStyle: 'indented',\n\t\t\t\t\ttext: !this.options.pedantic\n\t\t\t\t\t\t? rtrim(text, '\\n')\n\t\t\t\t\t\t: text,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tfences(src) {\n\t\t\tconst cap = this.rules.block.fences.exec(src);\n\t\t\tif (cap) {\n\t\t\t\tconst raw = cap[0];\n\t\t\t\tconst text = indentCodeCompensation(raw, cap[3] || '');\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'code',\n\t\t\t\t\traw,\n\t\t\t\t\tlang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n\t\t\t\t\ttext,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\theading(src) {\n\t\t\tconst cap = this.rules.block.heading.exec(src);\n\t\t\tif (cap) {\n\t\t\t\tlet text = cap[2].trim();\n\t\t\t\t// remove trailing #s\n\t\t\t\tif (/#$/.test(text)) {\n\t\t\t\t\tconst trimmed = rtrim(text, '#');\n\t\t\t\t\tif (this.options.pedantic) {\n\t\t\t\t\t\ttext = trimmed.trim();\n\t\t\t\t\t}\n\t\t\t\t\telse if (!trimmed || / $/.test(trimmed)) {\n\t\t\t\t\t\t// CommonMark requires space before trailing #s\n\t\t\t\t\t\ttext = trimmed.trim();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'heading',\n\t\t\t\t\traw: cap[0],\n\t\t\t\t\tdepth: cap[1].length,\n\t\t\t\t\ttext,\n\t\t\t\t\ttokens: this.lexer.inline(text),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\thr(src) {\n\t\t\tconst cap = this.rules.block.hr.exec(src);\n\t\t\tif (cap) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'hr',\n\t\t\t\t\traw: rtrim(cap[0], '\\n'),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tblockquote(src) {\n\t\t\tconst cap = this.rules.block.blockquote.exec(src);\n\t\t\tif (cap) {\n\t\t\t\tlet lines = rtrim(cap[0], '\\n').split('\\n');\n\t\t\t\tlet raw = '';\n\t\t\t\tlet text = '';\n\t\t\t\tconst tokens = [];\n\t\t\t\twhile (lines.length > 0) {\n\t\t\t\t\tlet inBlockquote = false;\n\t\t\t\t\tconst currentLines = [];\n\t\t\t\t\tlet i;\n\t\t\t\t\tfor (i = 0; i < lines.length; i++) {\n\t\t\t\t\t\t// get lines up to a continuation\n\t\t\t\t\t\tif (/^ {0,3}>/.test(lines[i])) {\n\t\t\t\t\t\t\tcurrentLines.push(lines[i]);\n\t\t\t\t\t\t\tinBlockquote = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (!inBlockquote) {\n\t\t\t\t\t\t\tcurrentLines.push(lines[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlines = lines.slice(i);\n\t\t\t\t\tconst currentRaw = currentLines.join('\\n');\n\t\t\t\t\tconst currentText = currentRaw\n\t\t\t\t\t\t// precede setext continuation with 4 spaces so it isn't a setext\n\t\t\t\t\t\t.replace(/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g, '\\n    $1')\n\t\t\t\t\t\t.replace(/^ {0,3}>[ \\t]?/gm, '');\n\t\t\t\t\traw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n\t\t\t\t\ttext = text ? `${text}\\n${currentText}` : currentText;\n\t\t\t\t\t// parse blockquote lines as top level tokens\n\t\t\t\t\t// merge paragraphs if this is a continuation\n\t\t\t\t\tconst top = this.lexer.state.top;\n\t\t\t\t\tthis.lexer.state.top = true;\n\t\t\t\t\tthis.lexer.blockTokens(currentText, tokens, true);\n\t\t\t\t\tthis.lexer.state.top = top;\n\t\t\t\t\t// if there is no continuation then we are done\n\t\t\t\t\tif (lines.length === 0) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst lastToken = tokens[tokens.length - 1];\n\t\t\t\t\tif (lastToken?.type === 'code') {\n\t\t\t\t\t\t// blockquote continuation cannot be preceded by a code block\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (lastToken?.type === 'blockquote') {\n\t\t\t\t\t\t// include continuation in nested blockquote\n\t\t\t\t\t\tconst oldToken = lastToken;\n\t\t\t\t\t\tconst newText = oldToken.raw + '\\n' + lines.join('\\n');\n\t\t\t\t\t\tconst newToken = this.blockquote(newText);\n\t\t\t\t\t\ttokens[tokens.length - 1] = newToken;\n\t\t\t\t\t\traw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n\t\t\t\t\t\ttext = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if (lastToken?.type === 'list') {\n\t\t\t\t\t\t// include continuation in nested list\n\t\t\t\t\t\tconst oldToken = lastToken;\n\t\t\t\t\t\tconst newText = oldToken.raw + '\\n' + lines.join('\\n');\n\t\t\t\t\t\tconst newToken = this.list(newText);\n\t\t\t\t\t\ttokens[tokens.length - 1] = newToken;\n\t\t\t\t\t\traw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n\t\t\t\t\t\ttext = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n\t\t\t\t\t\tlines = newText.substring(tokens[tokens.length - 1].raw.length).split('\\n');\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'blockquote',\n\t\t\t\t\traw,\n\t\t\t\t\ttokens,\n\t\t\t\t\ttext,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tlist(src) {\n\t\t\tlet cap = this.rules.block.list.exec(src);\n\t\t\tif (cap) {\n\t\t\t\tlet bull = cap[1].trim();\n\t\t\t\tconst isordered = bull.length > 1;\n\t\t\t\tconst list = {\n\t\t\t\t\ttype: 'list',\n\t\t\t\t\traw: '',\n\t\t\t\t\tordered: isordered,\n\t\t\t\t\tstart: isordered ? +bull.slice(0, -1) : '',\n\t\t\t\t\tloose: false,\n\t\t\t\t\titems: [],\n\t\t\t\t};\n\t\t\t\tbull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\t\t\t\tif (this.options.pedantic) {\n\t\t\t\t\tbull = isordered ? bull : '[*+-]';\n\t\t\t\t}\n\t\t\t\t// Get next list item\n\t\t\t\tconst itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n\t\t\t\tlet endsWithBlankLine = false;\n\t\t\t\t// Check if current bullet point can start a new List Item\n\t\t\t\twhile (src) {\n\t\t\t\t\tlet endEarly = false;\n\t\t\t\t\tlet raw = '';\n\t\t\t\t\tlet itemContents = '';\n\t\t\t\t\tif (!(cap = itemRegex.exec(src))) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\traw = cap[0];\n\t\t\t\t\tsrc = src.substring(raw.length);\n\t\t\t\t\tlet line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, (t) => ' '.repeat(3 * t.length));\n\t\t\t\t\tlet nextLine = src.split('\\n', 1)[0];\n\t\t\t\t\tlet blankLine = !line.trim();\n\t\t\t\t\tlet indent = 0;\n\t\t\t\t\tif (this.options.pedantic) {\n\t\t\t\t\t\tindent = 2;\n\t\t\t\t\t\titemContents = line.trimStart();\n\t\t\t\t\t}\n\t\t\t\t\telse if (blankLine) {\n\t\t\t\t\t\tindent = cap[1].length + 1;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tindent = cap[2].search(/[^ ]/); // Find first non-space char\n\t\t\t\t\t\tindent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n\t\t\t\t\t\titemContents = line.slice(indent);\n\t\t\t\t\t\tindent += cap[1].length;\n\t\t\t\t\t}\n\t\t\t\t\tif (blankLine && /^ *$/.test(nextLine)) { // Items begin with at most one blank line\n\t\t\t\t\t\traw += nextLine + '\\n';\n\t\t\t\t\t\tsrc = src.substring(nextLine.length + 1);\n\t\t\t\t\t\tendEarly = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (!endEarly) {\n\t\t\t\t\t\tconst nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`);\n\t\t\t\t\t\tconst hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n\t\t\t\t\t\tconst fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n\t\t\t\t\t\tconst headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n\t\t\t\t\t\t// Check if following lines should be included in List Item\n\t\t\t\t\t\twhile (src) {\n\t\t\t\t\t\t\tconst rawLine = src.split('\\n', 1)[0];\n\t\t\t\t\t\t\tnextLine = rawLine;\n\t\t\t\t\t\t\t// Re-align to follow commonmark nesting rules\n\t\t\t\t\t\t\tif (this.options.pedantic) {\n\t\t\t\t\t\t\t\tnextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, '  ');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// End list item if found code fences\n\t\t\t\t\t\t\tif (fencesBeginRegex.test(nextLine)) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// End list item if found start of new heading\n\t\t\t\t\t\t\tif (headingBeginRegex.test(nextLine)) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// End list item if found start of new bullet\n\t\t\t\t\t\t\tif (nextBulletRegex.test(nextLine)) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Horizontal rule found\n\t\t\t\t\t\t\tif (hrRegex.test(src)) {\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible\n\t\t\t\t\t\t\t\titemContents += '\\n' + nextLine.slice(indent);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t// not enough indentation\n\t\t\t\t\t\t\t\tif (blankLine) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// paragraph continuation unless last line was a different block level element\n\t\t\t\t\t\t\t\tif (line.search(/[^ ]/) >= 4) { // indented code block\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (fencesBeginRegex.test(line)) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (headingBeginRegex.test(line)) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (hrRegex.test(line)) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\titemContents += '\\n' + nextLine;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!blankLine && !nextLine.trim()) { // Check if current line is blank\n\t\t\t\t\t\t\t\tblankLine = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\traw += rawLine + '\\n';\n\t\t\t\t\t\t\tsrc = src.substring(rawLine.length + 1);\n\t\t\t\t\t\t\tline = nextLine.slice(indent);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!list.loose) {\n\t\t\t\t\t\t// If the previous item ended with a blank line, the list is loose\n\t\t\t\t\t\tif (endsWithBlankLine) {\n\t\t\t\t\t\t\tlist.loose = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (/\\n *\\n *$/.test(raw)) {\n\t\t\t\t\t\t\tendsWithBlankLine = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlet istask = null;\n\t\t\t\t\tlet ischecked;\n\t\t\t\t\t// Check for task list items\n\t\t\t\t\tif (this.options.gfm) {\n\t\t\t\t\t\tistask = /^\\[[ xX]\\] /.exec(itemContents);\n\t\t\t\t\t\tif (istask) {\n\t\t\t\t\t\t\tischecked = istask[0] !== '[ ] ';\n\t\t\t\t\t\t\titemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tlist.items.push({\n\t\t\t\t\t\ttype: 'list_item',\n\t\t\t\t\t\traw,\n\t\t\t\t\t\ttask: !!istask,\n\t\t\t\t\t\tchecked: ischecked,\n\t\t\t\t\t\tloose: false,\n\t\t\t\t\t\ttext: itemContents,\n\t\t\t\t\t\ttokens: [],\n\t\t\t\t\t});\n\t\t\t\t\tlist.raw += raw;\n\t\t\t\t}\n\t\t\t\t// Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n\t\t\t\tlist.items[list.items.length - 1].raw = list.items[list.items.length - 1].raw.trimEnd();\n\t\t\t\tlist.items[list.items.length - 1].text = list.items[list.items.length - 1].text.trimEnd();\n\t\t\t\tlist.raw = list.raw.trimEnd();\n\t\t\t\t// Item child tokens handled here at end because we needed to have the final item to trim it first\n\t\t\t\tfor (let i = 0; i < list.items.length; i++) {\n\t\t\t\t\tthis.lexer.state.top = false;\n\t\t\t\t\tlist.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n\t\t\t\t\tif (!list.loose) {\n\t\t\t\t\t\t// Check if list should be loose\n\t\t\t\t\t\tconst spacers = list.items[i].tokens.filter(t => t.type === 'space');\n\t\t\t\t\t\tconst hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\\n.*\\n/.test(t.raw));\n\t\t\t\t\t\tlist.loose = hasMultipleLineBreaks;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Set all items to loose if list is loose\n\t\t\t\tif (list.loose) {\n\t\t\t\t\tfor (let i = 0; i < list.items.length; i++) {\n\t\t\t\t\t\tlist.items[i].loose = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn list;\n\t\t\t}\n\t\t}\n\t\thtml(src) {\n\t\t\tconst cap = this.rules.block.html.exec(src);\n\t\t\tif (cap) {\n\t\t\t\tconst token = {\n\t\t\t\t\ttype: 'html',\n\t\t\t\t\tblock: true,\n\t\t\t\t\traw: cap[0],\n\t\t\t\t\tpre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n\t\t\t\t\ttext: cap[0],\n\t\t\t\t};\n\t\t\t\treturn token;\n\t\t\t}\n\t\t}\n\t\tdef(src) {\n\t\t\tconst cap = this.rules.block.def.exec(src);\n\t\t\tif (cap) {\n\t\t\t\tconst tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n\t\t\t\tconst href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n\t\t\t\tconst title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'def',\n\t\t\t\t\ttag,\n\t\t\t\t\traw: cap[0],\n\t\t\t\t\thref,\n\t\t\t\t\ttitle,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\ttable(src) {\n\t\t\tconst cap = this.rules.block.table.exec(src);\n\t\t\tif (!cap) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!/[:|]/.test(cap[2])) {\n\t\t\t\t// delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst headers = splitCells(cap[1]);\n\t\t\tconst aligns = cap[2].replace(/^\\||\\| *$/g, '').split('|');\n\t\t\tconst rows = cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : [];\n\t\t\tconst item = {\n\t\t\t\ttype: 'table',\n\t\t\t\traw: cap[0],\n\t\t\t\theader: [],\n\t\t\t\talign: [],\n\t\t\t\trows: [],\n\t\t\t};\n\t\t\tif (headers.length !== aligns.length) {\n\t\t\t\t// header and align columns must be equal, rows can be different.\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tfor (const align of aligns) {\n\t\t\t\tif (/^ *-+: *$/.test(align)) {\n\t\t\t\t\titem.align.push('right');\n\t\t\t\t}\n\t\t\t\telse if (/^ *:-+: *$/.test(align)) {\n\t\t\t\t\titem.align.push('center');\n\t\t\t\t}\n\t\t\t\telse if (/^ *:-+ *$/.test(align)) {\n\t\t\t\t\titem.align.push('left');\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\titem.align.push(null);\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (let i = 0; i < headers.length; i++) {\n\t\t\t\titem.header.push({\n\t\t\t\t\ttext: headers[i],\n\t\t\t\t\ttokens: this.lexer.inline(headers[i]),\n\t\t\t\t\theader: true,\n\t\t\t\t\talign: item.align[i],\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (const row of rows) {\n\t\t\t\titem.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttext: cell,\n\t\t\t\t\t\ttokens: this.lexer.inline(cell),\n\t\t\t\t\t\theader: false,\n\t\t\t\t\t\talign: item.align[i],\n\t\t\t\t\t};\n\t\t\t\t}));\n\t\t\t}\n\t\t\treturn item;\n\t\t}\n\t\tlheading(src) {\n\t\t\tconst cap = this.rules.block.lheading.exec(src);\n\t\t\tif (cap) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'heading',\n\t\t\t\t\traw: cap[0],\n\t\t\t\t\tdepth: cap[2].charAt(0) === '=' ? 1 : 2,\n\t\t\t\t\ttext: cap[1],\n\t\t\t\t\ttokens: this.lexer.inline(cap[1]),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tparagraph(src) {\n\t\t\tconst cap = this.rules.block.paragraph.exec(src);\n\t\t\tif (cap) {\n\t\t\t\tconst text = cap[1].charAt(cap[1].length - 1) === '\\n'\n\t\t\t\t\t? cap[1].slice(0, -1)\n\t\t\t\t\t: cap[1];\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'paragraph',\n\t\t\t\t\traw: cap[0],\n\t\t\t\t\ttext,\n\t\t\t\t\ttokens: this.lexer.inline(text),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\ttext(src) {\n\t\t\tconst cap = this.rules.block.text.exec(src);\n\t\t\tif (cap) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\traw: cap[0],\n\t\t\t\t\ttext: cap[0],\n\t\t\t\t\ttokens: this.lexer.inline(cap[0]),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tescape(src) {\n\t\t\tconst cap = this.rules.inline.escape.exec(src);\n\t\t\tif (cap) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'escape',\n\t\t\t\t\traw: cap[0],\n\t\t\t\t\ttext: escape$1(cap[1]),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\ttag(src) {\n\t\t\tconst cap = this.rules.inline.tag.exec(src);\n\t\t\tif (cap) {\n\t\t\t\tif (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {\n\t\t\t\t\tthis.lexer.state.inLink = true;\n\t\t\t\t}\n\t\t\t\telse if (this.lexer.state.inLink && /^<\\/a>/i.test(cap[0])) {\n\t\t\t\t\tthis.lexer.state.inLink = false;\n\t\t\t\t}\n\t\t\t\tif (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n\t\t\t\t\tthis.lexer.state.inRawBlock = true;\n\t\t\t\t}\n\t\t\t\telse if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n\t\t\t\t\tthis.lexer.state.inRawBlock = false;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'html',\n\t\t\t\t\traw: cap[0],\n\t\t\t\t\tinLink: this.lexer.state.inLink,\n\t\t\t\t\tinRawBlock: this.lexer.state.inRawBlock,\n\t\t\t\t\tblock: false,\n\t\t\t\t\ttext: cap[0],\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tlink(src) {\n\t\t\tconst cap = this.rules.inline.link.exec(src);\n\t\t\tif (cap) {\n\t\t\t\tconst trimmedUrl = cap[2].trim();\n\t\t\t\tif (!this.options.pedantic && /^</.test(trimmedUrl)) {\n\t\t\t\t\t// commonmark requires matching angle brackets\n\t\t\t\t\tif (!(/>$/.test(trimmedUrl))) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\t// ending angle bracket cannot be escaped\n\t\t\t\t\tconst rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n\t\t\t\t\tif ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// find closing parenthesis\n\t\t\t\t\tconst lastParenIndex = findClosingBracket(cap[2], '()');\n\t\t\t\t\tif (lastParenIndex > -1) {\n\t\t\t\t\t\tconst start = cap[0].indexOf('!') === 0 ? 5 : 4;\n\t\t\t\t\t\tconst linkLen = start + cap[1].length + lastParenIndex;\n\t\t\t\t\t\tcap[2] = cap[2].substring(0, lastParenIndex);\n\t\t\t\t\t\tcap[0] = cap[0].substring(0, linkLen).trim();\n\t\t\t\t\t\tcap[3] = '';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet href = cap[2];\n\t\t\t\tlet title = '';\n\t\t\t\tif (this.options.pedantic) {\n\t\t\t\t\t// split pedantic href and title\n\t\t\t\t\tconst link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\t\t\t\t\tif (link) {\n\t\t\t\t\t\thref = link[1];\n\t\t\t\t\t\ttitle = link[3];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttitle = cap[3] ? cap[3].slice(1, -1) : '';\n\t\t\t\t}\n\t\t\t\thref = href.trim();\n\t\t\t\tif (/^</.test(href)) {\n\t\t\t\t\tif (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n\t\t\t\t\t\t// pedantic allows starting angle bracket without ending angle bracket\n\t\t\t\t\t\thref = href.slice(1);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\thref = href.slice(1, -1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn outputLink(cap, {\n\t\t\t\t\thref: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n\t\t\t\t\ttitle: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n\t\t\t\t}, cap[0], this.lexer);\n\t\t\t}\n\t\t}\n\t\treflink(src, links) {\n\t\t\tlet cap;\n\t\t\tif ((cap = this.rules.inline.reflink.exec(src))\n\t\t\t\t|| (cap = this.rules.inline.nolink.exec(src))) {\n\t\t\t\tconst linkString = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n\t\t\t\tconst link = links[linkString.toLowerCase()];\n\t\t\t\tif (!link) {\n\t\t\t\t\tconst text = cap[0].charAt(0);\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\traw: text,\n\t\t\t\t\t\ttext,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn outputLink(cap, link, cap[0], this.lexer);\n\t\t\t}\n\t\t}\n\t\temStrong(src, maskedSrc, prevChar = '') {\n\t\t\tlet match = this.rules.inline.emStrongLDelim.exec(src);\n\t\t\tif (!match)\n\t\t\t\treturn;\n\t\t\t// _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\t\t\tif (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u))\n\t\t\t\treturn;\n\t\t\tconst nextChar = match[1] || match[2] || '';\n\t\t\tif (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n\t\t\t\t// unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n\t\t\t\tconst lLength = [...match[0]].length - 1;\n\t\t\t\tlet rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\t\t\t\tconst endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n\t\t\t\tendReg.lastIndex = 0;\n\t\t\t\t// Clip maskedSrc to same section of string as src (move to lexer?)\n\t\t\t\tmaskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\t\t\t\twhile ((match = endReg.exec(maskedSrc)) != null) {\n\t\t\t\t\trDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\t\t\t\t\tif (!rDelim)\n\t\t\t\t\t\tcontinue; // skip single * in __abc*abc__\n\t\t\t\t\trLength = [...rDelim].length;\n\t\t\t\t\tif (match[3] || match[4]) { // found another Left Delim\n\t\t\t\t\t\tdelimTotal += rLength;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\telse if (match[5] || match[6]) { // either Left or Right Delim\n\t\t\t\t\t\tif (lLength % 3 && !((lLength + rLength) % 3)) {\n\t\t\t\t\t\t\tmidDelimTotal += rLength;\n\t\t\t\t\t\t\tcontinue; // CommonMark Emphasis Rules 9-10\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdelimTotal -= rLength;\n\t\t\t\t\tif (delimTotal > 0)\n\t\t\t\t\t\tcontinue; // Haven't found enough closing delimiters\n\t\t\t\t\t// Remove extra characters. *a*** -> *a*\n\t\t\t\t\trLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n\t\t\t\t\t// char length can be >1 for unicode characters;\n\t\t\t\t\tconst lastCharLength = [...match[0]][0].length;\n\t\t\t\t\tconst raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\t\t\t\t\t// Create `em` if smallest delimiter has odd char count. *a***\n\t\t\t\t\tif (Math.min(lLength, rLength) % 2) {\n\t\t\t\t\t\tconst text = raw.slice(1, -1);\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: 'em',\n\t\t\t\t\t\t\traw,\n\t\t\t\t\t\t\ttext,\n\t\t\t\t\t\t\ttokens: this.lexer.inlineTokens(text),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\t// Create 'strong' if smallest delimiter has even char count. **a***\n\t\t\t\t\tconst text = raw.slice(2, -2);\n\t\t\t\t\treturn {\n\t\t\t\t\t\ttype: 'strong',\n\t\t\t\t\t\traw,\n\t\t\t\t\t\ttext,\n\t\t\t\t\t\ttokens: this.lexer.inlineTokens(text),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tcodespan(src) {\n\t\t\tconst cap = this.rules.inline.code.exec(src);\n\t\t\tif (cap) {\n\t\t\t\tlet text = cap[2].replace(/\\n/g, ' ');\n\t\t\t\tconst hasNonSpaceChars = /[^ ]/.test(text);\n\t\t\t\tconst hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n\t\t\t\tif (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n\t\t\t\t\ttext = text.substring(1, text.length - 1);\n\t\t\t\t}\n\t\t\t\ttext = escape$1(text, true);\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'codespan',\n\t\t\t\t\traw: cap[0],\n\t\t\t\t\ttext,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tbr(src) {\n\t\t\tconst cap = this.rules.inline.br.exec(src);\n\t\t\tif (cap) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'br',\n\t\t\t\t\traw: cap[0],\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tdel(src) {\n\t\t\tconst cap = this.rules.inline.del.exec(src);\n\t\t\tif (cap) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'del',\n\t\t\t\t\traw: cap[0],\n\t\t\t\t\ttext: cap[2],\n\t\t\t\t\ttokens: this.lexer.inlineTokens(cap[2]),\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tautolink(src) {\n\t\t\tconst cap = this.rules.inline.autolink.exec(src);\n\t\t\tif (cap) {\n\t\t\t\tlet text, href;\n\t\t\t\tif (cap[2] === '@') {\n\t\t\t\t\ttext = escape$1(cap[1]);\n\t\t\t\t\thref = 'mailto:' + text;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttext = escape$1(cap[1]);\n\t\t\t\t\thref = text;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'link',\n\t\t\t\t\traw: cap[0],\n\t\t\t\t\ttext,\n\t\t\t\t\thref,\n\t\t\t\t\ttokens: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\traw: text,\n\t\t\t\t\t\t\ttext,\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}\n\t\turl(src) {\n\t\t\tlet cap;\n\t\t\tif (cap = this.rules.inline.url.exec(src)) {\n\t\t\t\tlet text, href;\n\t\t\t\tif (cap[2] === '@') {\n\t\t\t\t\ttext = escape$1(cap[0]);\n\t\t\t\t\thref = 'mailto:' + text;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// do extended autolink path validation\n\t\t\t\t\tlet prevCapZero;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tprevCapZero = cap[0];\n\t\t\t\t\t\tcap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n\t\t\t\t\t} while (prevCapZero !== cap[0]);\n\t\t\t\t\ttext = escape$1(cap[0]);\n\t\t\t\t\tif (cap[1] === 'www.') {\n\t\t\t\t\t\thref = 'http://' + cap[0];\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\thref = cap[0];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'link',\n\t\t\t\t\traw: cap[0],\n\t\t\t\t\ttext,\n\t\t\t\t\thref,\n\t\t\t\t\ttokens: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\traw: text,\n\t\t\t\t\t\t\ttext,\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}\n\t\tinlineText(src) {\n\t\t\tconst cap = this.rules.inline.text.exec(src);\n\t\t\tif (cap) {\n\t\t\t\tlet text;\n\t\t\t\tif (this.lexer.state.inRawBlock) {\n\t\t\t\t\ttext = cap[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttext = escape$1(cap[0]);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\traw: cap[0],\n\t\t\t\t\ttext,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Block-Level Grammar\n\t */\n\tconst newline = /^(?: *(?:\\n|$))+/;\n\tconst blockCode = /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/;\n\tconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\n\tconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\n\tconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\n\tconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\n\tconst lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/)\n\t\t.replace(/bull/g, bullet) // lists can interrupt\n\t\t.replace(/blockCode/g, / {4}/) // indented code blocks can interrupt\n\t\t.replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n\t\t.replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n\t\t.replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n\t\t.replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n\t\t.getRegex();\n\tconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\n\tconst blockText = /^[^\\n]+/;\n\tconst _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\n\tconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/)\n\t\t.replace('label', _blockLabel)\n\t\t.replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n\t\t.getRegex();\n\tconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n\t\t.replace(/bull/g, bullet)\n\t\t.getRegex();\n\tconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n\t\t+ '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n\t\t+ '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n\t\t+ '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n\t\t+ '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n\t\t+ '|tr|track|ul';\n\tconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\n\tconst html = edit('^ {0,3}(?:' // optional indentation\n\t\t+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n\t\t+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n\t\t+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n\t\t+ '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n\t\t+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n\t\t+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n\t\t+ '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n\t\t+ '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n\t\t+ ')', 'i')\n\t\t.replace('comment', _comment)\n\t\t.replace('tag', _tag)\n\t\t.replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n\t\t.getRegex();\n\tconst paragraph = edit(_paragraph)\n\t\t.replace('hr', hr)\n\t\t.replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n\t\t.replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n\t\t.replace('|table', '')\n\t\t.replace('blockquote', ' {0,3}>')\n\t\t.replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n\t\t.replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n\t\t.replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n\t\t.replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n\t\t.getRegex();\n\tconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n\t\t.replace('paragraph', paragraph)\n\t\t.getRegex();\n\t/**\n\t * Normal Block Grammar\n\t */\n\tconst blockNormal = {\n\t\tblockquote,\n\t\tcode: blockCode,\n\t\tdef,\n\t\tfences,\n\t\theading,\n\t\thr,\n\t\thtml,\n\t\tlheading,\n\t\tlist,\n\t\tnewline,\n\t\tparagraph,\n\t\ttable: noopTest,\n\t\ttext: blockText,\n\t};\n\t/**\n\t * GFM Block Grammar\n\t */\n\tconst gfmTable = edit('^ *([^\\\\n ].*)\\\\n' // Header\n\t\t+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n\t\t+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n\t\t.replace('hr', hr)\n\t\t.replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n\t\t.replace('blockquote', ' {0,3}>')\n\t\t.replace('code', ' {4}[^\\\\n]')\n\t\t.replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n\t\t.replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n\t\t.replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n\t\t.replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n\t\t.getRegex();\n\tconst blockGfm = {\n\t\t...blockNormal,\n\t\ttable: gfmTable,\n\t\tparagraph: edit(_paragraph)\n\t\t\t.replace('hr', hr)\n\t\t\t.replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n\t\t\t.replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n\t\t\t.replace('table', gfmTable) // interrupt paragraphs with table\n\t\t\t.replace('blockquote', ' {0,3}>')\n\t\t\t.replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n\t\t\t.replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n\t\t\t.replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n\t\t\t.replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n\t\t\t.getRegex(),\n\t};\n\t/**\n\t * Pedantic grammar (original John Gruber's loose markdown specification)\n\t */\n\tconst blockPedantic = {\n\t\t...blockNormal,\n\t\thtml: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)'\n\t\t\t+ '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n\t\t\t+ '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n\t\t\t.replace('comment', _comment)\n\t\t\t.replace(/tag/g, '(?!(?:'\n\t\t\t\t+ 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n\t\t\t\t+ '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n\t\t\t\t+ '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n\t\t\t.getRegex(),\n\t\tdef: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n\t\theading: /^(#{1,6})(.*)(?:\\n+|$)/,\n\t\tfences: noopTest, // fences not supported\n\t\tlheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n\t\tparagraph: edit(_paragraph)\n\t\t\t.replace('hr', hr)\n\t\t\t.replace('heading', ' *#{1,6} *[^\\n]')\n\t\t\t.replace('lheading', lheading)\n\t\t\t.replace('|table', '')\n\t\t\t.replace('blockquote', ' {0,3}>')\n\t\t\t.replace('|fences', '')\n\t\t\t.replace('|list', '')\n\t\t\t.replace('|html', '')\n\t\t\t.replace('|tag', '')\n\t\t\t.getRegex(),\n\t};\n\t/**\n\t * Inline-Level Grammar\n\t */\n\tconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\n\tconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\n\tconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\n\tconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\t// list of unicode punctuation marks, plus any missing characters from CommonMark spec\n\tconst _punctuation = '\\\\p{P}\\\\p{S}';\n\tconst punctuation = edit(/^((?![*_])[\\spunctuation])/, 'u')\n\t\t.replace(/punctuation/g, _punctuation).getRegex();\n\t// sequences em should skip over [title](link), `code`, <html>\n\tconst blockSkip = /\\[[^[\\]]*?\\]\\([^\\(\\)]*?\\)|`[^`]*?`|<[^<>]*?>/g;\n\tconst emStrongLDelim = edit(/^(?:\\*+(?:((?!\\*)[punct])|[^\\s*]))|^_+(?:((?!_)[punct])|([^\\s_]))/, 'u')\n\t\t.replace(/punct/g, _punctuation)\n\t\t.getRegex();\n\tconst emStrongRDelimAst = edit('^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n\t\t+ '|[^*]+(?=[^*])' // Consume to delim\n\t\t+ '|(?!\\\\*)[punct](\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n\t\t+ '|[^punct\\\\s](\\\\*+)(?!\\\\*)(?=[punct\\\\s]|$)' // (2) a***#, a*** can only be a Right Delimiter\n\t\t+ '|(?!\\\\*)[punct\\\\s](\\\\*+)(?=[^punct\\\\s])' // (3) #***a, ***a can only be Left Delimiter\n\t\t+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=[punct])' // (4) ***# can only be Left Delimiter\n\t\t+ '|(?!\\\\*)[punct](\\\\*+)(?!\\\\*)(?=[punct])' // (5) #***# can be either Left or Right Delimiter\n\t\t+ '|[^punct\\\\s](\\\\*+)(?=[^punct\\\\s])', 'gu') // (6) a***a can be either Left or Right Delimiter\n\t\t.replace(/punct/g, _punctuation)\n\t\t.getRegex();\n\t// (6) Not allowed for _\n\tconst emStrongRDelimUnd = edit('^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n\t\t+ '|[^_]+(?=[^_])' // Consume to delim\n\t\t+ '|(?!_)[punct](_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n\t\t+ '|[^punct\\\\s](_+)(?!_)(?=[punct\\\\s]|$)' // (2) a___#, a___ can only be a Right Delimiter\n\t\t+ '|(?!_)[punct\\\\s](_+)(?=[^punct\\\\s])' // (3) #___a, ___a can only be Left Delimiter\n\t\t+ '|[\\\\s](_+)(?!_)(?=[punct])' // (4) ___# can only be Left Delimiter\n\t\t+ '|(?!_)[punct](_+)(?!_)(?=[punct])', 'gu') // (5) #___# can be either Left or Right Delimiter\n\t\t.replace(/punct/g, _punctuation)\n\t\t.getRegex();\n\tconst anyPunctuation = edit(/\\\\([punct])/, 'gu')\n\t\t.replace(/punct/g, _punctuation)\n\t\t.getRegex();\n\tconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n\t\t.replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n\t\t.replace('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\t\t.getRegex();\n\tconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\n\tconst tag = edit('^comment'\n\t\t+ '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n\t\t+ '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n\t\t+ '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n\t\t+ '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n\t\t+ '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n\t\t.replace('comment', _inlineComment)\n\t\t.replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n\t\t.getRegex();\n\tconst _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\n\tconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/)\n\t\t.replace('label', _inlineLabel)\n\t\t.replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/)\n\t\t.replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n\t\t.getRegex();\n\tconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n\t\t.replace('label', _inlineLabel)\n\t\t.replace('ref', _blockLabel)\n\t\t.getRegex();\n\tconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n\t\t.replace('ref', _blockLabel)\n\t\t.getRegex();\n\tconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n\t\t.replace('reflink', reflink)\n\t\t.replace('nolink', nolink)\n\t\t.getRegex();\n\t/**\n\t * Normal Inline Grammar\n\t */\n\tconst inlineNormal = {\n\t\t_backpedal: noopTest, // only used for GFM url\n\t\tanyPunctuation,\n\t\tautolink,\n\t\tblockSkip,\n\t\tbr,\n\t\tcode: inlineCode,\n\t\tdel: noopTest,\n\t\temStrongLDelim,\n\t\temStrongRDelimAst,\n\t\temStrongRDelimUnd,\n\t\tescape,\n\t\tlink,\n\t\tnolink,\n\t\tpunctuation,\n\t\treflink,\n\t\treflinkSearch,\n\t\ttag,\n\t\ttext: inlineText,\n\t\turl: noopTest,\n\t};\n\t/**\n\t * Pedantic Inline Grammar\n\t */\n\tconst inlinePedantic = {\n\t\t...inlineNormal,\n\t\tlink: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n\t\t\t.replace('label', _inlineLabel)\n\t\t\t.getRegex(),\n\t\treflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n\t\t\t.replace('label', _inlineLabel)\n\t\t\t.getRegex(),\n\t};\n\t/**\n\t * GFM Inline Grammar\n\t */\n\tconst inlineGfm = {\n\t\t...inlineNormal,\n\t\tescape: edit(escape).replace('])', '~|])').getRegex(),\n\t\turl: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, 'i')\n\t\t\t.replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n\t\t\t.getRegex(),\n\t\t_backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n\t\tdel: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n\t\ttext: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/,\n\t};\n\t/**\n\t * GFM + Line Breaks Inline Grammar\n\t */\n\tconst inlineBreaks = {\n\t\t...inlineGfm,\n\t\tbr: edit(br).replace('{2,}', '*').getRegex(),\n\t\ttext: edit(inlineGfm.text)\n\t\t\t.replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n\t\t\t.replace(/\\{2,\\}/g, '*')\n\t\t\t.getRegex(),\n\t};\n\t/**\n\t * exports\n\t */\n\tconst block = {\n\t\tnormal: blockNormal,\n\t\tgfm: blockGfm,\n\t\tpedantic: blockPedantic,\n\t};\n\tconst inline = {\n\t\tnormal: inlineNormal,\n\t\tgfm: inlineGfm,\n\t\tbreaks: inlineBreaks,\n\t\tpedantic: inlinePedantic,\n\t};\n\n\t/**\n\t * Block Lexer\n\t */\n\tclass _Lexer {\n\t\ttokens;\n\t\toptions;\n\t\tstate;\n\t\ttokenizer;\n\t\tinlineQueue;\n\t\tconstructor(options) {\n\t\t\t// TokenList cannot be created in one go\n\t\t\tthis.tokens = [];\n\t\t\tthis.tokens.links = Object.create(null);\n\t\t\tthis.options = options || exports.defaults;\n\t\t\tthis.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n\t\t\tthis.tokenizer = this.options.tokenizer;\n\t\t\tthis.tokenizer.options = this.options;\n\t\t\tthis.tokenizer.lexer = this;\n\t\t\tthis.inlineQueue = [];\n\t\t\tthis.state = {\n\t\t\t\tinLink: false,\n\t\t\t\tinRawBlock: false,\n\t\t\t\ttop: true,\n\t\t\t};\n\t\t\tconst rules = {\n\t\t\t\tblock: block.normal,\n\t\t\t\tinline: inline.normal,\n\t\t\t};\n\t\t\tif (this.options.pedantic) {\n\t\t\t\trules.block = block.pedantic;\n\t\t\t\trules.inline = inline.pedantic;\n\t\t\t}\n\t\t\telse if (this.options.gfm) {\n\t\t\t\trules.block = block.gfm;\n\t\t\t\tif (this.options.breaks) {\n\t\t\t\t\trules.inline = inline.breaks;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trules.inline = inline.gfm;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.tokenizer.rules = rules;\n\t\t}\n\t\t/**\n\t\t * Expose Rules\n\t\t */\n\t\tstatic get rules() {\n\t\t\treturn {\n\t\t\t\tblock,\n\t\t\t\tinline,\n\t\t\t};\n\t\t}\n\t\t/**\n\t\t * Static Lex Method\n\t\t */\n\t\tstatic lex(src, options) {\n\t\t\tconst lexer = new _Lexer(options);\n\t\t\treturn lexer.lex(src);\n\t\t}\n\t\t/**\n\t\t * Static Lex Inline Method\n\t\t */\n\t\tstatic lexInline(src, options) {\n\t\t\tconst lexer = new _Lexer(options);\n\t\t\treturn lexer.inlineTokens(src);\n\t\t}\n\t\t/**\n\t\t * Preprocessing\n\t\t */\n\t\tlex(src) {\n\t\t\tsrc = src\n\t\t\t\t.replace(/\\r\\n|\\r/g, '\\n');\n\t\t\tthis.blockTokens(src, this.tokens);\n\t\t\tfor (let i = 0; i < this.inlineQueue.length; i++) {\n\t\t\t\tconst next = this.inlineQueue[i];\n\t\t\t\tthis.inlineTokens(next.src, next.tokens);\n\t\t\t}\n\t\t\tthis.inlineQueue = [];\n\t\t\treturn this.tokens;\n\t\t}\n\t\tblockTokens(src, tokens = [], lastParagraphClipped = false) {\n\t\t\tif (this.options.pedantic) {\n\t\t\t\tsrc = src.replace(/\\t/g, '    ').replace(/^ +$/gm, '');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsrc = src.replace(/^( *)(\\t+)/gm, (_, leading, tabs) => {\n\t\t\t\t\treturn leading + '    '.repeat(tabs.length);\n\t\t\t\t});\n\t\t\t}\n\t\t\tlet token;\n\t\t\tlet lastToken;\n\t\t\tlet cutSrc;\n\t\t\twhile (src) {\n\t\t\t\tif (this.options.extensions\n\t\t\t\t\t&& this.options.extensions.block\n\t\t\t\t\t&& this.options.extensions.block.some((extTokenizer) => {\n\t\t\t\t\t\tif (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n\t\t\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\t\t\ttokens.push(token);\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t})) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// newline\n\t\t\t\tif (token = this.tokenizer.space(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\tif (token.raw.length === 1 && tokens.length > 0) {\n\t\t\t\t\t\t// if there's a single \\n as a spacer, it's terminating the last line,\n\t\t\t\t\t\t// so move it there so that we don't get unnecessary paragraph tags\n\t\t\t\t\t\ttokens[tokens.length - 1].raw += '\\n';\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ttokens.push(token);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// code\n\t\t\t\tif (token = this.tokenizer.code(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\tlastToken = tokens[tokens.length - 1];\n\t\t\t\t\t// An indented code block cannot interrupt a paragraph.\n\t\t\t\t\tif (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n\t\t\t\t\t\tlastToken.raw += '\\n' + token.raw;\n\t\t\t\t\t\tlastToken.text += '\\n' + token.text;\n\t\t\t\t\t\tthis.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ttokens.push(token);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// fences\n\t\t\t\tif (token = this.tokenizer.fences(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// heading\n\t\t\t\tif (token = this.tokenizer.heading(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// hr\n\t\t\t\tif (token = this.tokenizer.hr(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// blockquote\n\t\t\t\tif (token = this.tokenizer.blockquote(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// list\n\t\t\t\tif (token = this.tokenizer.list(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// html\n\t\t\t\tif (token = this.tokenizer.html(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// def\n\t\t\t\tif (token = this.tokenizer.def(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\tlastToken = tokens[tokens.length - 1];\n\t\t\t\t\tif (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n\t\t\t\t\t\tlastToken.raw += '\\n' + token.raw;\n\t\t\t\t\t\tlastToken.text += '\\n' + token.raw;\n\t\t\t\t\t\tthis.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n\t\t\t\t\t}\n\t\t\t\t\telse if (!this.tokens.links[token.tag]) {\n\t\t\t\t\t\tthis.tokens.links[token.tag] = {\n\t\t\t\t\t\t\thref: token.href,\n\t\t\t\t\t\t\ttitle: token.title,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// table (gfm)\n\t\t\t\tif (token = this.tokenizer.table(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// lheading\n\t\t\t\tif (token = this.tokenizer.lheading(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// top-level paragraph\n\t\t\t\t// prevent paragraph consuming extensions by clipping 'src' to extension start\n\t\t\t\tcutSrc = src;\n\t\t\t\tif (this.options.extensions && this.options.extensions.startBlock) {\n\t\t\t\t\tlet startIndex = Infinity;\n\t\t\t\t\tconst tempSrc = src.slice(1);\n\t\t\t\t\tlet tempStart;\n\t\t\t\t\tthis.options.extensions.startBlock.forEach((getStartIndex) => {\n\t\t\t\t\t\ttempStart = getStartIndex.call({ lexer: this }, tempSrc);\n\t\t\t\t\t\tif (typeof tempStart === 'number' && tempStart >= 0) {\n\t\t\t\t\t\t\tstartIndex = Math.min(startIndex, tempStart);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (startIndex < Infinity && startIndex >= 0) {\n\t\t\t\t\t\tcutSrc = src.substring(0, startIndex + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n\t\t\t\t\tlastToken = tokens[tokens.length - 1];\n\t\t\t\t\tif (lastParagraphClipped && lastToken?.type === 'paragraph') {\n\t\t\t\t\t\tlastToken.raw += '\\n' + token.raw;\n\t\t\t\t\t\tlastToken.text += '\\n' + token.text;\n\t\t\t\t\t\tthis.inlineQueue.pop();\n\t\t\t\t\t\tthis.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ttokens.push(token);\n\t\t\t\t\t}\n\t\t\t\t\tlastParagraphClipped = (cutSrc.length !== src.length);\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// text\n\t\t\t\tif (token = this.tokenizer.text(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\tlastToken = tokens[tokens.length - 1];\n\t\t\t\t\tif (lastToken && lastToken.type === 'text') {\n\t\t\t\t\t\tlastToken.raw += '\\n' + token.raw;\n\t\t\t\t\t\tlastToken.text += '\\n' + token.text;\n\t\t\t\t\t\tthis.inlineQueue.pop();\n\t\t\t\t\t\tthis.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ttokens.push(token);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (src) {\n\t\t\t\t\tconst errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n\t\t\t\t\tif (this.options.silent) {\n\t\t\t\t\t\tconsole.error(errMsg);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error(errMsg);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.state.top = true;\n\t\t\treturn tokens;\n\t\t}\n\t\tinline(src, tokens = []) {\n\t\t\tthis.inlineQueue.push({ src, tokens });\n\t\t\treturn tokens;\n\t\t}\n\t\t/**\n\t\t * Lexing/Compiling\n\t\t */\n\t\tinlineTokens(src, tokens = []) {\n\t\t\tlet token, lastToken, cutSrc;\n\t\t\t// String with links masked to avoid interference with em and strong\n\t\t\tlet maskedSrc = src;\n\t\t\tlet match;\n\t\t\tlet keepPrevChar, prevChar;\n\t\t\t// Mask out reflinks\n\t\t\tif (this.tokens.links) {\n\t\t\t\tconst links = Object.keys(this.tokens.links);\n\t\t\t\tif (links.length > 0) {\n\t\t\t\t\twhile ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n\t\t\t\t\t\tif (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n\t\t\t\t\t\t\tmaskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\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\t// Mask out other blocks\n\t\t\twhile ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n\t\t\t\tmaskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n\t\t\t}\n\t\t\t// Mask out escaped characters\n\t\t\twhile ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n\t\t\t\tmaskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n\t\t\t}\n\t\t\twhile (src) {\n\t\t\t\tif (!keepPrevChar) {\n\t\t\t\t\tprevChar = '';\n\t\t\t\t}\n\t\t\t\tkeepPrevChar = false;\n\t\t\t\t// extensions\n\t\t\t\tif (this.options.extensions\n\t\t\t\t\t&& this.options.extensions.inline\n\t\t\t\t\t&& this.options.extensions.inline.some((extTokenizer) => {\n\t\t\t\t\t\tif (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n\t\t\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\t\t\ttokens.push(token);\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t})) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// escape\n\t\t\t\tif (token = this.tokenizer.escape(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// tag\n\t\t\t\tif (token = this.tokenizer.tag(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\tlastToken = tokens[tokens.length - 1];\n\t\t\t\t\tif (lastToken && token.type === 'text' && lastToken.type === 'text') {\n\t\t\t\t\t\tlastToken.raw += token.raw;\n\t\t\t\t\t\tlastToken.text += token.text;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ttokens.push(token);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// link\n\t\t\t\tif (token = this.tokenizer.link(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// reflink, nolink\n\t\t\t\tif (token = this.tokenizer.reflink(src, this.tokens.links)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\tlastToken = tokens[tokens.length - 1];\n\t\t\t\t\tif (lastToken && token.type === 'text' && lastToken.type === 'text') {\n\t\t\t\t\t\tlastToken.raw += token.raw;\n\t\t\t\t\t\tlastToken.text += token.text;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ttokens.push(token);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// em & strong\n\t\t\t\tif (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// code\n\t\t\t\tif (token = this.tokenizer.codespan(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// br\n\t\t\t\tif (token = this.tokenizer.br(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// del (gfm)\n\t\t\t\tif (token = this.tokenizer.del(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// autolink\n\t\t\t\tif (token = this.tokenizer.autolink(src)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// url (gfm)\n\t\t\t\tif (!this.state.inLink && (token = this.tokenizer.url(src))) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\ttokens.push(token);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// text\n\t\t\t\t// prevent inlineText consuming extensions by clipping 'src' to extension start\n\t\t\t\tcutSrc = src;\n\t\t\t\tif (this.options.extensions && this.options.extensions.startInline) {\n\t\t\t\t\tlet startIndex = Infinity;\n\t\t\t\t\tconst tempSrc = src.slice(1);\n\t\t\t\t\tlet tempStart;\n\t\t\t\t\tthis.options.extensions.startInline.forEach((getStartIndex) => {\n\t\t\t\t\t\ttempStart = getStartIndex.call({ lexer: this }, tempSrc);\n\t\t\t\t\t\tif (typeof tempStart === 'number' && tempStart >= 0) {\n\t\t\t\t\t\t\tstartIndex = Math.min(startIndex, tempStart);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif (startIndex < Infinity && startIndex >= 0) {\n\t\t\t\t\t\tcutSrc = src.substring(0, startIndex + 1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (token = this.tokenizer.inlineText(cutSrc)) {\n\t\t\t\t\tsrc = src.substring(token.raw.length);\n\t\t\t\t\tif (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n\t\t\t\t\t\tprevChar = token.raw.slice(-1);\n\t\t\t\t\t}\n\t\t\t\t\tkeepPrevChar = true;\n\t\t\t\t\tlastToken = tokens[tokens.length - 1];\n\t\t\t\t\tif (lastToken && lastToken.type === 'text') {\n\t\t\t\t\t\tlastToken.raw += token.raw;\n\t\t\t\t\t\tlastToken.text += token.text;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\ttokens.push(token);\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (src) {\n\t\t\t\t\tconst errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n\t\t\t\t\tif (this.options.silent) {\n\t\t\t\t\t\tconsole.error(errMsg);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow new Error(errMsg);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn tokens;\n\t\t}\n\t}\n\n\t/**\n\t * Renderer\n\t */\n\tclass _Renderer {\n\t\toptions;\n\t\tparser; // set by the parser\n\t\tconstructor(options) {\n\t\t\tthis.options = options || exports.defaults;\n\t\t}\n\t\tspace(token) {\n\t\t\treturn '';\n\t\t}\n\t\tcode({ text, lang, escaped }) {\n\t\t\tconst langString = (lang || '').match(/^\\S*/)?.[0];\n\t\t\tconst code = text.replace(/\\n$/, '') + '\\n';\n\t\t\tif (!langString) {\n\t\t\t\treturn '<pre><code>'\n\t\t\t\t\t+ (escaped ? code : escape$1(code, true))\n\t\t\t\t\t+ '</code></pre>\\n';\n\t\t\t}\n\t\t\treturn '<pre><code class=\"language-'\n\t\t\t\t+ escape$1(langString)\n\t\t\t\t+ '\">'\n\t\t\t\t+ (escaped ? code : escape$1(code, true))\n\t\t\t\t+ '</code></pre>\\n';\n\t\t}\n\t\tblockquote({ tokens }) {\n\t\t\tconst body = this.parser.parse(tokens);\n\t\t\treturn `<blockquote>\\n${body}</blockquote>\\n`;\n\t\t}\n\t\thtml({ text }) {\n\t\t\treturn text;\n\t\t}\n\t\theading({ tokens, depth }) {\n\t\t\treturn `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n`;\n\t\t}\n\t\thr(token) {\n\t\t\treturn '<hr>\\n';\n\t\t}\n\t\tlist(token) {\n\t\t\tconst ordered = token.ordered;\n\t\t\tconst start = token.start;\n\t\t\tlet body = '';\n\t\t\tfor (let j = 0; j < token.items.length; j++) {\n\t\t\t\tconst item = token.items[j];\n\t\t\t\tbody += this.listitem(item);\n\t\t\t}\n\t\t\tconst type = ordered ? 'ol' : 'ul';\n\t\t\tconst startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n\t\t\treturn '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n';\n\t\t}\n\t\tlistitem(item) {\n\t\t\tlet itemBody = '';\n\t\t\tif (item.task) {\n\t\t\t\tconst checkbox = this.checkbox({ checked: !!item.checked });\n\t\t\t\tif (item.loose) {\n\t\t\t\t\tif (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n\t\t\t\t\t\titem.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n\t\t\t\t\t\tif (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n\t\t\t\t\t\t\titem.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\titem.tokens.unshift({\n\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\traw: checkbox + ' ',\n\t\t\t\t\t\t\ttext: checkbox + ' ',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\titemBody += checkbox + ' ';\n\t\t\t\t}\n\t\t\t}\n\t\t\titemBody += this.parser.parse(item.tokens, !!item.loose);\n\t\t\treturn `<li>${itemBody}</li>\\n`;\n\t\t}\n\t\tcheckbox({ checked }) {\n\t\t\treturn '<input '\n\t\t\t\t+ (checked ? 'checked=\"\" ' : '')\n\t\t\t\t+ 'disabled=\"\" type=\"checkbox\">';\n\t\t}\n\t\tparagraph({ tokens }) {\n\t\t\treturn `<p>${this.parser.parseInline(tokens)}</p>\\n`;\n\t\t}\n\t\ttable(token) {\n\t\t\tlet header = '';\n\t\t\t// header\n\t\t\tlet cell = '';\n\t\t\tfor (let j = 0; j < token.header.length; j++) {\n\t\t\t\tcell += this.tablecell(token.header[j]);\n\t\t\t}\n\t\t\theader += this.tablerow({ text: cell });\n\t\t\tlet body = '';\n\t\t\tfor (let j = 0; j < token.rows.length; j++) {\n\t\t\t\tconst row = token.rows[j];\n\t\t\t\tcell = '';\n\t\t\t\tfor (let k = 0; k < row.length; k++) {\n\t\t\t\t\tcell += this.tablecell(row[k]);\n\t\t\t\t}\n\t\t\t\tbody += this.tablerow({ text: cell });\n\t\t\t}\n\t\t\tif (body)\n\t\t\t\tbody = `<tbody>${body}</tbody>`;\n\t\t\treturn '<table>\\n'\n\t\t\t\t+ '<thead>\\n'\n\t\t\t\t+ header\n\t\t\t\t+ '</thead>\\n'\n\t\t\t\t+ body\n\t\t\t\t+ '</table>\\n';\n\t\t}\n\t\ttablerow({ text }) {\n\t\t\treturn `<tr>\\n${text}</tr>\\n`;\n\t\t}\n\t\ttablecell(token) {\n\t\t\tconst content = this.parser.parseInline(token.tokens);\n\t\t\tconst type = token.header ? 'th' : 'td';\n\t\t\tconst tag = token.align\n\t\t\t\t? `<${type} align=\"${token.align}\">`\n\t\t\t\t: `<${type}>`;\n\t\t\treturn tag + content + `</${type}>\\n`;\n\t\t}\n\t\t/**\n\t\t * span level renderer\n\t\t */\n\t\tstrong({ tokens }) {\n\t\t\treturn `<strong>${this.parser.parseInline(tokens)}</strong>`;\n\t\t}\n\t\tem({ tokens }) {\n\t\t\treturn `<em>${this.parser.parseInline(tokens)}</em>`;\n\t\t}\n\t\tcodespan({ text }) {\n\t\t\treturn `<code>${text}</code>`;\n\t\t}\n\t\tbr(token) {\n\t\t\treturn '<br>';\n\t\t}\n\t\tdel({ tokens }) {\n\t\t\treturn `<del>${this.parser.parseInline(tokens)}</del>`;\n\t\t}\n\t\tlink({ href, title, tokens }) {\n\t\t\tconst text = this.parser.parseInline(tokens);\n\t\t\tconst cleanHref = cleanUrl(href);\n\t\t\tif (cleanHref === null) {\n\t\t\t\treturn text;\n\t\t\t}\n\t\t\thref = cleanHref;\n\t\t\tlet out = '<a href=\"' + href + '\"';\n\t\t\tif (title) {\n\t\t\t\tout += ' title=\"' + title + '\"';\n\t\t\t}\n\t\t\tout += '>' + text + '</a>';\n\t\t\treturn out;\n\t\t}\n\t\timage({ href, title, text }) {\n\t\t\tconst cleanHref = cleanUrl(href);\n\t\t\tif (cleanHref === null) {\n\t\t\t\treturn text;\n\t\t\t}\n\t\t\thref = cleanHref;\n\t\t\tlet out = `<img src=\"${href}\" alt=\"${text}\"`;\n\t\t\tif (title) {\n\t\t\t\tout += ` title=\"${title}\"`;\n\t\t\t}\n\t\t\tout += '>';\n\t\t\treturn out;\n\t\t}\n\t\ttext(token) {\n\t\t\treturn 'tokens' in token && token.tokens ? this.parser.parseInline(token.tokens) : token.text;\n\t\t}\n\t}\n\n\t/**\n\t * TextRenderer\n\t * returns only the textual part of the token\n\t */\n\tclass _TextRenderer {\n\t\t// no need for block level renderers\n\t\tstrong({ text }) {\n\t\t\treturn text;\n\t\t}\n\t\tem({ text }) {\n\t\t\treturn text;\n\t\t}\n\t\tcodespan({ text }) {\n\t\t\treturn text;\n\t\t}\n\t\tdel({ text }) {\n\t\t\treturn text;\n\t\t}\n\t\thtml({ text }) {\n\t\t\treturn text;\n\t\t}\n\t\ttext({ text }) {\n\t\t\treturn text;\n\t\t}\n\t\tlink({ text }) {\n\t\t\treturn '' + text;\n\t\t}\n\t\timage({ text }) {\n\t\t\treturn '' + text;\n\t\t}\n\t\tbr() {\n\t\t\treturn '';\n\t\t}\n\t}\n\n\t/**\n\t * Parsing & Compiling\n\t */\n\tclass _Parser {\n\t\toptions;\n\t\trenderer;\n\t\ttextRenderer;\n\t\tconstructor(options) {\n\t\t\tthis.options = options || exports.defaults;\n\t\t\tthis.options.renderer = this.options.renderer || new _Renderer();\n\t\t\tthis.renderer = this.options.renderer;\n\t\t\tthis.renderer.options = this.options;\n\t\t\tthis.renderer.parser = this;\n\t\t\tthis.textRenderer = new _TextRenderer();\n\t\t}\n\t\t/**\n\t\t * Static Parse Method\n\t\t */\n\t\tstatic parse(tokens, options) {\n\t\t\tconst parser = new _Parser(options);\n\t\t\treturn parser.parse(tokens);\n\t\t}\n\t\t/**\n\t\t * Static Parse Inline Method\n\t\t */\n\t\tstatic parseInline(tokens, options) {\n\t\t\tconst parser = new _Parser(options);\n\t\t\treturn parser.parseInline(tokens);\n\t\t}\n\t\t/**\n\t\t * Parse Loop\n\t\t */\n\t\tparse(tokens, top = true) {\n\t\t\tlet out = '';\n\t\t\tfor (let i = 0; i < tokens.length; i++) {\n\t\t\t\tconst anyToken = tokens[i];\n\t\t\t\t// Run any renderer extensions\n\t\t\t\tif (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[anyToken.type]) {\n\t\t\t\t\tconst genericToken = anyToken;\n\t\t\t\t\tconst ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n\t\t\t\t\tif (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(genericToken.type)) {\n\t\t\t\t\t\tout += ret || '';\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst token = anyToken;\n\t\t\t\tswitch (token.type) {\n\t\t\t\t\tcase 'space': {\n\t\t\t\t\t\tout += this.renderer.space(token);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'hr': {\n\t\t\t\t\t\tout += this.renderer.hr(token);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'heading': {\n\t\t\t\t\t\tout += this.renderer.heading(token);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'code': {\n\t\t\t\t\t\tout += this.renderer.code(token);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'table': {\n\t\t\t\t\t\tout += this.renderer.table(token);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'blockquote': {\n\t\t\t\t\t\tout += this.renderer.blockquote(token);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'list': {\n\t\t\t\t\t\tout += this.renderer.list(token);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'html': {\n\t\t\t\t\t\tout += this.renderer.html(token);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'paragraph': {\n\t\t\t\t\t\tout += this.renderer.paragraph(token);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'text': {\n\t\t\t\t\t\tlet textToken = token;\n\t\t\t\t\t\tlet body = this.renderer.text(textToken);\n\t\t\t\t\t\twhile (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n\t\t\t\t\t\t\ttextToken = tokens[++i];\n\t\t\t\t\t\t\tbody += '\\n' + this.renderer.text(textToken);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (top) {\n\t\t\t\t\t\t\tout += this.renderer.paragraph({\n\t\t\t\t\t\t\t\ttype: 'paragraph',\n\t\t\t\t\t\t\t\traw: body,\n\t\t\t\t\t\t\t\ttext: body,\n\t\t\t\t\t\t\t\ttokens: [{ type: 'text', raw: body, text: body }],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tout += body;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tconst errMsg = 'Token with \"' + token.type + '\" type was not found.';\n\t\t\t\t\t\tif (this.options.silent) {\n\t\t\t\t\t\t\tconsole.error(errMsg);\n\t\t\t\t\t\t\treturn '';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthrow new Error(errMsg);\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 out;\n\t\t}\n\t\t/**\n\t\t * Parse Inline Tokens\n\t\t */\n\t\tparseInline(tokens, renderer) {\n\t\t\trenderer = renderer || this.renderer;\n\t\t\tlet out = '';\n\t\t\tfor (let i = 0; i < tokens.length; i++) {\n\t\t\t\tconst anyToken = tokens[i];\n\t\t\t\t// Run any renderer extensions\n\t\t\t\tif (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[anyToken.type]) {\n\t\t\t\t\tconst ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n\t\t\t\t\tif (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n\t\t\t\t\t\tout += ret || '';\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst token = anyToken;\n\t\t\t\tswitch (token.type) {\n\t\t\t\t\tcase 'escape': {\n\t\t\t\t\t\tout += renderer.text(token);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'html': {\n\t\t\t\t\t\tout += renderer.html(token);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'link': {\n\t\t\t\t\t\tout += renderer.link(token);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'image': {\n\t\t\t\t\t\tout += renderer.image(token);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'strong': {\n\t\t\t\t\t\tout += renderer.strong(token);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'em': {\n\t\t\t\t\t\tout += renderer.em(token);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'codespan': {\n\t\t\t\t\t\tout += renderer.codespan(token);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'br': {\n\t\t\t\t\t\tout += renderer.br(token);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'del': {\n\t\t\t\t\t\tout += renderer.del(token);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'text': {\n\t\t\t\t\t\tout += renderer.text(token);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tconst errMsg = 'Token with \"' + token.type + '\" type was not found.';\n\t\t\t\t\t\tif (this.options.silent) {\n\t\t\t\t\t\t\tconsole.error(errMsg);\n\t\t\t\t\t\t\treturn '';\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthrow new Error(errMsg);\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 out;\n\t\t}\n\t}\n\n\tclass _Hooks {\n\t\toptions;\n\t\tconstructor(options) {\n\t\t\tthis.options = options || exports.defaults;\n\t\t}\n\t\tstatic passThroughHooks = new Set([\n\t\t\t'preprocess',\n\t\t\t'postprocess',\n\t\t\t'processAllTokens',\n\t\t]);\n\t\t/**\n\t\t * Process markdown before marked\n\t\t */\n\t\tpreprocess(markdown) {\n\t\t\treturn markdown;\n\t\t}\n\t\t/**\n\t\t * Process HTML after marked is finished\n\t\t */\n\t\tpostprocess(html) {\n\t\t\treturn html;\n\t\t}\n\t\t/**\n\t\t * Process all tokens before walk tokens\n\t\t */\n\t\tprocessAllTokens(tokens) {\n\t\t\treturn tokens;\n\t\t}\n\t}\n\n\tclass Marked {\n\t\tdefaults = _getDefaults();\n\t\toptions = this.setOptions;\n\t\tparse = this.parseMarkdown(_Lexer.lex, _Parser.parse);\n\t\tparseInline = this.parseMarkdown(_Lexer.lexInline, _Parser.parseInline);\n\t\tParser = _Parser;\n\t\tRenderer = _Renderer;\n\t\tTextRenderer = _TextRenderer;\n\t\tLexer = _Lexer;\n\t\tTokenizer = _Tokenizer;\n\t\tHooks = _Hooks;\n\t\tconstructor(...args) {\n\t\t\tthis.use(...args);\n\t\t}\n\t\t/**\n\t\t * Run callback for every token\n\t\t */\n\t\twalkTokens(tokens, callback) {\n\t\t\tlet values = [];\n\t\t\tfor (const token of tokens) {\n\t\t\t\tvalues = values.concat(callback.call(this, token));\n\t\t\t\tswitch (token.type) {\n\t\t\t\t\tcase 'table': {\n\t\t\t\t\t\tconst tableToken = token;\n\t\t\t\t\t\tfor (const cell of tableToken.header) {\n\t\t\t\t\t\t\tvalues = values.concat(this.walkTokens(cell.tokens, callback));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const row of tableToken.rows) {\n\t\t\t\t\t\t\tfor (const cell of row) {\n\t\t\t\t\t\t\t\tvalues = values.concat(this.walkTokens(cell.tokens, callback));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase 'list': {\n\t\t\t\t\t\tconst listToken = token;\n\t\t\t\t\t\tvalues = values.concat(this.walkTokens(listToken.items, callback));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault: {\n\t\t\t\t\t\tconst genericToken = token;\n\t\t\t\t\t\tif (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n\t\t\t\t\t\t\tthis.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n\t\t\t\t\t\t\t\tconst tokens = genericToken[childTokens].flat(Infinity);\n\t\t\t\t\t\t\t\tvalues = values.concat(this.walkTokens(tokens, callback));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if (genericToken.tokens) {\n\t\t\t\t\t\t\tvalues = values.concat(this.walkTokens(genericToken.tokens, callback));\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 values;\n\t\t}\n\t\tuse(...args) {\n\t\t\tconst extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\t\t\targs.forEach((pack) => {\n\t\t\t\t// copy options to new object\n\t\t\t\tconst opts = { ...pack };\n\t\t\t\t// set async to true if it was set to true before\n\t\t\t\topts.async = this.defaults.async || opts.async || false;\n\t\t\t\t// ==-- Parse \"addon\" extensions --== //\n\t\t\t\tif (pack.extensions) {\n\t\t\t\t\tpack.extensions.forEach((ext) => {\n\t\t\t\t\t\tif (!ext.name) {\n\t\t\t\t\t\t\tthrow new Error('extension name required');\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ('renderer' in ext) { // Renderer extensions\n\t\t\t\t\t\t\tconst prevRenderer = extensions.renderers[ext.name];\n\t\t\t\t\t\t\tif (prevRenderer) {\n\t\t\t\t\t\t\t\t// Replace extension with func to run new extension but fall back if false\n\t\t\t\t\t\t\t\textensions.renderers[ext.name] = function (...args) {\n\t\t\t\t\t\t\t\t\tlet ret = ext.renderer.apply(this, args);\n\t\t\t\t\t\t\t\t\tif (ret === false) {\n\t\t\t\t\t\t\t\t\t\tret = prevRenderer.apply(this, args);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\treturn ret;\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\textensions.renderers[ext.name] = ext.renderer;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ('tokenizer' in ext) { // Tokenizer Extensions\n\t\t\t\t\t\t\tif (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n\t\t\t\t\t\t\t\tthrow new Error(\"extension level must be 'block' or 'inline'\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst extLevel = extensions[ext.level];\n\t\t\t\t\t\t\tif (extLevel) {\n\t\t\t\t\t\t\t\textLevel.unshift(ext.tokenizer);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\textensions[ext.level] = [ext.tokenizer];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (ext.start) { // Function to check for start of token\n\t\t\t\t\t\t\t\tif (ext.level === 'block') {\n\t\t\t\t\t\t\t\t\tif (extensions.startBlock) {\n\t\t\t\t\t\t\t\t\t\textensions.startBlock.push(ext.start);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\textensions.startBlock = [ext.start];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if (ext.level === 'inline') {\n\t\t\t\t\t\t\t\t\tif (extensions.startInline) {\n\t\t\t\t\t\t\t\t\t\textensions.startInline.push(ext.start);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\textensions.startInline = [ext.start];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n\t\t\t\t\t\t\textensions.childTokens[ext.name] = ext.childTokens;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\topts.extensions = extensions;\n\t\t\t\t}\n\t\t\t\t// ==-- Parse \"overwrite\" extensions --== //\n\t\t\t\tif (pack.renderer) {\n\t\t\t\t\tconst renderer = this.defaults.renderer || new _Renderer(this.defaults);\n\t\t\t\t\tfor (const prop in pack.renderer) {\n\t\t\t\t\t\tif (!(prop in renderer)) {\n\t\t\t\t\t\t\tthrow new Error(`renderer '${prop}' does not exist`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (['options', 'parser'].includes(prop)) {\n\t\t\t\t\t\t\t// ignore options property\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst rendererProp = prop;\n\t\t\t\t\t\tconst rendererFunc = pack.renderer[rendererProp];\n\t\t\t\t\t\tconst prevRenderer = renderer[rendererProp];\n\t\t\t\t\t\t// Replace renderer with func to run extension, but fall back if false\n\t\t\t\t\t\trenderer[rendererProp] = (...args) => {\n\t\t\t\t\t\t\tlet ret = rendererFunc.apply(renderer, args);\n\t\t\t\t\t\t\tif (ret === false) {\n\t\t\t\t\t\t\t\tret = prevRenderer.apply(renderer, args);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn ret || '';\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\topts.renderer = renderer;\n\t\t\t\t}\n\t\t\t\tif (pack.tokenizer) {\n\t\t\t\t\tconst tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n\t\t\t\t\tfor (const prop in pack.tokenizer) {\n\t\t\t\t\t\tif (!(prop in tokenizer)) {\n\t\t\t\t\t\t\tthrow new Error(`tokenizer '${prop}' does not exist`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (['options', 'rules', 'lexer'].includes(prop)) {\n\t\t\t\t\t\t\t// ignore options, rules, and lexer properties\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst tokenizerProp = prop;\n\t\t\t\t\t\tconst tokenizerFunc = pack.tokenizer[tokenizerProp];\n\t\t\t\t\t\tconst prevTokenizer = tokenizer[tokenizerProp];\n\t\t\t\t\t\t// Replace tokenizer with func to run extension, but fall back if false\n\t\t\t\t\t\t// @ts-expect-error cannot type tokenizer function dynamically\n\t\t\t\t\t\ttokenizer[tokenizerProp] = (...args) => {\n\t\t\t\t\t\t\tlet ret = tokenizerFunc.apply(tokenizer, args);\n\t\t\t\t\t\t\tif (ret === false) {\n\t\t\t\t\t\t\t\tret = prevTokenizer.apply(tokenizer, args);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn ret;\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\topts.tokenizer = tokenizer;\n\t\t\t\t}\n\t\t\t\t// ==-- Parse Hooks extensions --== //\n\t\t\t\tif (pack.hooks) {\n\t\t\t\t\tconst hooks = this.defaults.hooks || new _Hooks();\n\t\t\t\t\tfor (const prop in pack.hooks) {\n\t\t\t\t\t\tif (!(prop in hooks)) {\n\t\t\t\t\t\t\tthrow new Error(`hook '${prop}' does not exist`);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (prop === 'options') {\n\t\t\t\t\t\t\t// ignore options property\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst hooksProp = prop;\n\t\t\t\t\t\tconst hooksFunc = pack.hooks[hooksProp];\n\t\t\t\t\t\tconst prevHook = hooks[hooksProp];\n\t\t\t\t\t\tif (_Hooks.passThroughHooks.has(prop)) {\n\t\t\t\t\t\t\t// @ts-expect-error cannot type hook function dynamically\n\t\t\t\t\t\t\thooks[hooksProp] = (arg) => {\n\t\t\t\t\t\t\t\tif (this.defaults.async) {\n\t\t\t\t\t\t\t\t\treturn Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n\t\t\t\t\t\t\t\t\t\treturn prevHook.call(hooks, ret);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst ret = hooksFunc.call(hooks, arg);\n\t\t\t\t\t\t\t\treturn prevHook.call(hooks, ret);\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// @ts-expect-error cannot type hook function dynamically\n\t\t\t\t\t\t\thooks[hooksProp] = (...args) => {\n\t\t\t\t\t\t\t\tlet ret = hooksFunc.apply(hooks, args);\n\t\t\t\t\t\t\t\tif (ret === false) {\n\t\t\t\t\t\t\t\t\tret = prevHook.apply(hooks, args);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn ret;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\topts.hooks = hooks;\n\t\t\t\t}\n\t\t\t\t// ==-- Parse WalkTokens extensions --== //\n\t\t\t\tif (pack.walkTokens) {\n\t\t\t\t\tconst walkTokens = this.defaults.walkTokens;\n\t\t\t\t\tconst packWalktokens = pack.walkTokens;\n\t\t\t\t\topts.walkTokens = function (token) {\n\t\t\t\t\t\tlet values = [];\n\t\t\t\t\t\tvalues.push(packWalktokens.call(this, token));\n\t\t\t\t\t\tif (walkTokens) {\n\t\t\t\t\t\t\tvalues = values.concat(walkTokens.call(this, token));\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn values;\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tthis.defaults = { ...this.defaults, ...opts };\n\t\t\t});\n\t\t\treturn this;\n\t\t}\n\t\tsetOptions(opt) {\n\t\t\tthis.defaults = { ...this.defaults, ...opt };\n\t\t\treturn this;\n\t\t}\n\t\tlexer(src, options) {\n\t\t\treturn _Lexer.lex(src, options ?? this.defaults);\n\t\t}\n\t\tparser(tokens, options) {\n\t\t\treturn _Parser.parse(tokens, options ?? this.defaults);\n\t\t}\n\t\tparseMarkdown(lexer, parser) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tconst parse = (src, options) => {\n\t\t\t\tconst origOpt = { ...options };\n\t\t\t\tconst opt = { ...this.defaults, ...origOpt };\n\t\t\t\tconst throwError = this.onError(!!opt.silent, !!opt.async);\n\t\t\t\t// throw error if an extension set async to true but parse was called with async: false\n\t\t\t\tif (this.defaults.async === true && origOpt.async === false) {\n\t\t\t\t\treturn throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n\t\t\t\t}\n\t\t\t\t// throw error in case of non string input\n\t\t\t\tif (typeof src === 'undefined' || src === null) {\n\t\t\t\t\treturn throwError(new Error('marked(): input parameter is undefined or null'));\n\t\t\t\t}\n\t\t\t\tif (typeof src !== 'string') {\n\t\t\t\t\treturn throwError(new Error('marked(): input parameter is of type '\n\t\t\t\t\t\t+ Object.prototype.toString.call(src) + ', string expected'));\n\t\t\t\t}\n\t\t\t\tif (opt.hooks) {\n\t\t\t\t\topt.hooks.options = opt;\n\t\t\t\t}\n\t\t\t\tif (opt.async) {\n\t\t\t\t\treturn Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n\t\t\t\t\t\t.then(src => lexer(src, opt))\n\t\t\t\t\t\t.then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)\n\t\t\t\t\t\t.then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n\t\t\t\t\t\t.then(tokens => parser(tokens, opt))\n\t\t\t\t\t\t.then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n\t\t\t\t\t\t.catch(throwError);\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tif (opt.hooks) {\n\t\t\t\t\t\tsrc = opt.hooks.preprocess(src);\n\t\t\t\t\t}\n\t\t\t\t\tlet tokens = lexer(src, opt);\n\t\t\t\t\tif (opt.hooks) {\n\t\t\t\t\t\ttokens = opt.hooks.processAllTokens(tokens);\n\t\t\t\t\t}\n\t\t\t\t\tif (opt.walkTokens) {\n\t\t\t\t\t\tthis.walkTokens(tokens, opt.walkTokens);\n\t\t\t\t\t}\n\t\t\t\t\tlet html = parser(tokens, opt);\n\t\t\t\t\tif (opt.hooks) {\n\t\t\t\t\t\thtml = opt.hooks.postprocess(html);\n\t\t\t\t\t}\n\t\t\t\t\treturn html;\n\t\t\t\t}\n\t\t\t\tcatch (e) {\n\t\t\t\t\treturn throwError(e);\n\t\t\t\t}\n\t\t\t};\n\t\t\treturn parse;\n\t\t}\n\t\tonError(silent, async) {\n\t\t\treturn (e) => {\n\t\t\t\te.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\t\t\t\tif (silent) {\n\t\t\t\t\tconst msg = '<p>An error occurred:</p><pre>'\n\t\t\t\t\t\t+ escape$1(e.message + '', true)\n\t\t\t\t\t\t+ '</pre>';\n\t\t\t\t\tif (async) {\n\t\t\t\t\t\treturn Promise.resolve(msg);\n\t\t\t\t\t}\n\t\t\t\t\treturn msg;\n\t\t\t\t}\n\t\t\t\tif (async) {\n\t\t\t\t\treturn Promise.reject(e);\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t};\n\t\t}\n\t}\n\n\tconst markedInstance = new Marked();\n\tfunction marked(src, opt) {\n\t\treturn markedInstance.parse(src, opt);\n\t}\n\t/**\n\t * Sets the default options.\n\t *\n\t * @param options Hash of options\n\t */\n\tmarked.options =\n\t\tmarked.setOptions = function (options) {\n\t\t\tmarkedInstance.setOptions(options);\n\t\t\tmarked.defaults = markedInstance.defaults;\n\t\t\tchangeDefaults(marked.defaults);\n\t\t\treturn marked;\n\t\t};\n\t/**\n\t * Gets the original marked default options.\n\t */\n\tmarked.getDefaults = _getDefaults;\n\tmarked.defaults = exports.defaults;\n\t/**\n\t * Use Extension\n\t */\n\tmarked.use = function (...args) {\n\t\tmarkedInstance.use(...args);\n\t\tmarked.defaults = markedInstance.defaults;\n\t\tchangeDefaults(marked.defaults);\n\t\treturn marked;\n\t};\n\t/**\n\t * Run callback for every token\n\t */\n\tmarked.walkTokens = function (tokens, callback) {\n\t\treturn markedInstance.walkTokens(tokens, callback);\n\t};\n\t/**\n\t * Compiles markdown to HTML without enclosing `p` tag.\n\t *\n\t * @param src String of markdown source to be compiled\n\t * @param options Hash of options\n\t * @return String of compiled HTML\n\t */\n\tmarked.parseInline = markedInstance.parseInline;\n\t/**\n\t * Expose\n\t */\n\tmarked.Parser = _Parser;\n\tmarked.parser = _Parser.parse;\n\tmarked.Renderer = _Renderer;\n\tmarked.TextRenderer = _TextRenderer;\n\tmarked.Lexer = _Lexer;\n\tmarked.lexer = _Lexer.lex;\n\tmarked.Tokenizer = _Tokenizer;\n\tmarked.Hooks = _Hooks;\n\tmarked.parse = marked;\n\tconst options = marked.options;\n\tconst setOptions = marked.setOptions;\n\tconst use = marked.use;\n\tconst walkTokens = marked.walkTokens;\n\tconst parseInline = marked.parseInline;\n\tconst parse = marked;\n\tconst parser = _Parser.parse;\n\tconst lexer = _Lexer.lex;\n\n\texports.Hooks = _Hooks;\n\texports.Lexer = _Lexer;\n\texports.Marked = Marked;\n\texports.Parser = _Parser;\n\texports.Renderer = _Renderer;\n\texports.TextRenderer = _TextRenderer;\n\texports.Tokenizer = _Tokenizer;\n\texports.getDefaults = _getDefaults;\n\texports.lexer = lexer;\n\texports.marked = marked;\n\texports.options = options;\n\texports.parse = parse;\n\texports.parseInline = parseInline;\n\texports.parser = parser;\n\texports.setOptions = setOptions;\n\texports.use = use;\n\texports.walkTokens = walkTokens;\n}));\n\n// ESM-uncomment-begin\n})();\nexport var Hooks = (__marked_exports.Hooks || exports.Hooks);\nexport var Lexer = (__marked_exports.Lexer || exports.Lexer);\nexport var Marked = (__marked_exports.Marked || exports.Marked);\nexport var Parser = (__marked_exports.Parser || exports.Parser);\nexport var Renderer = (__marked_exports.Renderer || exports.Renderer);\nexport var TextRenderer = (__marked_exports.TextRenderer || exports.TextRenderer);\nexport var Tokenizer = (__marked_exports.Tokenizer || exports.Tokenizer);\nexport var defaults = (__marked_exports.defaults || exports.defaults);\nexport var getDefaults = (__marked_exports.getDefaults || exports.getDefaults);\nexport var lexer = (__marked_exports.lexer || exports.lexer);\nexport var marked = (__marked_exports.marked || exports.marked);\nexport var options = (__marked_exports.options || exports.options);\nexport var parse = (__marked_exports.parse || exports.parse);\nexport var parseInline = (__marked_exports.parseInline || exports.parseInline);\nexport var parser = (__marked_exports.parser || exports.parser);\nexport var setOptions = (__marked_exports.setOptions || exports.setOptions);\nexport var use = (__marked_exports.use || exports.use);\nexport var walkTokens = (__marked_exports.walkTokens || exports.walkTokens);\n// ESM-uncomment-end\n\n//# sourceMappingURL=marked.umd.js.map\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 stringify(obj) {\n    return JSON.stringify(obj, replacer);\n}\nexport function parse(text) {\n    let data = JSON.parse(text);\n    data = revive(data);\n    return data;\n}\nfunction replacer(key, value) {\n    // URI is done via toJSON-member\n    if (value instanceof RegExp) {\n        return {\n            $mid: 2 /* MarshalledId.Regexp */,\n            source: value.source,\n            flags: value.flags,\n        };\n    }\n    return value;\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 /* MarshalledId.Uri */: return URI.revive(obj);\n            case 2 /* MarshalledId.Regexp */: return new RegExp(obj.source, obj.flags);\n            case 17 /* MarshalledId.Date */: return new Date(obj.source);\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 * as DOM from './dom.js';\nimport * as dompurify from './dompurify/dompurify.js';\nimport { DomEmitter } from './event.js';\nimport { createElement } from './formattedTextRenderer.js';\nimport { StandardKeyboardEvent } from './keyboardEvent.js';\nimport { StandardMouseEvent } from './mouseEvent.js';\nimport { renderLabelWithIcons } from './ui/iconLabel/iconLabels.js';\nimport { onUnexpectedError } from '../common/errors.js';\nimport { Event } from '../common/event.js';\nimport { escapeDoubleQuotes, parseHrefAndDimensions, removeMarkdownEscapes } from '../common/htmlContent.js';\nimport { markdownEscapeEscapedIcons } from '../common/iconLabels.js';\nimport { defaultGenerator } from '../common/idGenerator.js';\nimport { Lazy } from '../common/lazy.js';\nimport { DisposableStore, toDisposable } from '../common/lifecycle.js';\nimport * as marked from '../common/marked/marked.js';\nimport { parse } from '../common/marshalling.js';\nimport { FileAccess, Schemas } from '../common/network.js';\nimport { cloneAndChange } from '../common/objects.js';\nimport { dirname, resolvePath } from '../common/resources.js';\nimport { escape } from '../common/strings.js';\nimport { URI } from '../common/uri.js';\nconst defaultMarkedRenderers = Object.freeze({\n    image: ({ href, title, text }) => {\n        let dimensions = [];\n        let attributes = [];\n        if (href) {\n            ({ href, dimensions } = parseHrefAndDimensions(href));\n            attributes.push(`src=\"${escapeDoubleQuotes(href)}\"`);\n        }\n        if (text) {\n            attributes.push(`alt=\"${escapeDoubleQuotes(text)}\"`);\n        }\n        if (title) {\n            attributes.push(`title=\"${escapeDoubleQuotes(title)}\"`);\n        }\n        if (dimensions.length) {\n            attributes = attributes.concat(dimensions);\n        }\n        return '<img ' + attributes.join(' ') + '>';\n    },\n    paragraph({ tokens }) {\n        return `<p>${this.parser.parseInline(tokens)}</p>`;\n    },\n    link({ href, title, tokens }) {\n        let text = this.parser.parseInline(tokens);\n        if (typeof href !== 'string') {\n            return '';\n        }\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        title = typeof title === 'string' ? escapeDoubleQuotes(removeMarkdownEscapes(title)) : '';\n        href = removeMarkdownEscapes(href);\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=\"${href}\" title=\"${title || href}\" draggable=\"false\">${text}</a>`;\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/contrib/markdownRenderer/browser/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    const disposables = new DisposableStore();\n    let isDisposed = false;\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        let uri = URI.revive(data);\n        if (isDomUri) {\n            if (href.startsWith(Schemas.data + ':')) {\n                return href;\n            }\n            if (!uri) {\n                uri = URI.parse(href);\n            }\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.uriToBrowserUri(uri).toString(true);\n        }\n        if (!uri) {\n            return href;\n        }\n        if (URI.parse(href).toString() === uri.toString()) {\n            return href; // no transformation performed\n        }\n        if (uri.query) {\n            uri = uri.with({ query: _uriMassage(uri.query) });\n        }\n        return uri.toString();\n    };\n    const renderer = new marked.Renderer();\n    renderer.image = defaultMarkedRenderers.image;\n    renderer.link = defaultMarkedRenderers.link;\n    renderer.paragraph = defaultMarkedRenderers.paragraph;\n    // Will collect [id, renderedElement] tuples\n    const codeBlocks = [];\n    const syncCodeBlocks = [];\n    if (options.codeBlockRendererSync) {\n        renderer.code = ({ text, lang }) => {\n            const id = defaultGenerator.nextId();\n            const value = options.codeBlockRendererSync(postProcessCodeBlockLanguageId(lang), text);\n            syncCodeBlocks.push([id, value]);\n            return `<div class=\"code\" data-code=\"${id}\">${escape(text)}</div>`;\n        };\n    }\n    else if (options.codeBlockRenderer) {\n        renderer.code = ({ text, lang }) => {\n            const id = defaultGenerator.nextId();\n            const value = options.codeBlockRenderer(postProcessCodeBlockLanguageId(lang), text);\n            codeBlocks.push(value.then(element => [id, element]));\n            return `<div class=\"code\" data-code=\"${id}\">${escape(text)}</div>`;\n        };\n    }\n    if (options.actionHandler) {\n        const _activateLink = function (event) {\n            let target = event.target;\n            if (target.tagName !== 'A') {\n                target = target.parentElement;\n                if (!target || target.tagName !== 'A') {\n                    return;\n                }\n            }\n            try {\n                let href = target.dataset['href'];\n                if (href) {\n                    if (markdown.baseUri) {\n                        href = resolveWithBaseUri(URI.from(markdown.baseUri), href);\n                    }\n                    options.actionHandler.callback(href, event);\n                }\n            }\n            catch (err) {\n                onUnexpectedError(err);\n            }\n            finally {\n                event.preventDefault();\n            }\n        };\n        const onClick = options.actionHandler.disposables.add(new DomEmitter(element, 'click'));\n        const onAuxClick = options.actionHandler.disposables.add(new DomEmitter(element, 'auxclick'));\n        options.actionHandler.disposables.add(Event.any(onClick.event, onAuxClick.event)(e => {\n            const mouseEvent = new StandardMouseEvent(DOM.getWindow(element), e);\n            if (!mouseEvent.leftButton && !mouseEvent.middleButton) {\n                return;\n            }\n            _activateLink(mouseEvent);\n        }));\n        options.actionHandler.disposables.add(DOM.addDisposableListener(element, 'keydown', (e) => {\n            const keyboardEvent = new StandardKeyboardEvent(e);\n            if (!keyboardEvent.equals(10 /* KeyCode.Space */) && !keyboardEvent.equals(3 /* KeyCode.Enter */)) {\n                return;\n            }\n            _activateLink(keyboardEvent);\n        }));\n    }\n    if (!markdown.supportHtml) {\n        // Note: we always pass the output through dompurify after this so that we don't rely on\n        // marked for real sanitization.\n        renderer.html = ({ text }) => {\n            if (options.sanitizerOptions?.replaceWithPlaintext) {\n                return escape(text);\n            }\n            const match = markdown.isTrusted ? text.match(/^(<span[^>]+>)|(<\\/\\s*span>)$/) : undefined;\n            return match ? text : '';\n        };\n    }\n    markedOptions.renderer = renderer;\n    // values that are too long will freeze the UI\n    let value = markdown.value ?? '';\n    if (value.length > 100_000) {\n        value = `${value.substr(0, 100_000)}…`;\n    }\n    // escape theme icons\n    if (markdown.supportThemeIcons) {\n        value = markdownEscapeEscapedIcons(value);\n    }\n    let renderedMarkdown;\n    if (options.fillInIncompleteTokens) {\n        // The defaults are applied by parse but not lexer()/parser(), and they need to be present\n        const opts = {\n            ...marked.defaults,\n            ...markedOptions\n        };\n        const tokens = marked.lexer(value, opts);\n        const newTokens = fillInIncompleteTokens(tokens);\n        renderedMarkdown = marked.parser(newTokens, opts);\n    }\n    else {\n        renderedMarkdown = marked.parse(value, { ...markedOptions, async: false });\n    }\n    // Rewrite theme icons\n    if (markdown.supportThemeIcons) {\n        const elements = renderLabelWithIcons(renderedMarkdown);\n        renderedMarkdown = elements.map(e => typeof e === 'string' ? e : e.outerHTML).join('');\n    }\n    const htmlParser = new DOMParser();\n    const markdownHtmlDoc = htmlParser.parseFromString(sanitizeRenderedMarkdown({ isTrusted: markdown.isTrusted, ...options.sanitizerOptions }, renderedMarkdown), 'text/html');\n    markdownHtmlDoc.body.querySelectorAll('img, audio, video, source')\n        .forEach(img => {\n        const src = img.getAttribute('src'); // Get the raw 'src' attribute value as text, not the resolved 'src'\n        if (src) {\n            let href = src;\n            try {\n                if (markdown.baseUri) { // absolute or relative local path, or file: uri\n                    href = resolveWithBaseUri(URI.from(markdown.baseUri), href);\n                }\n            }\n            catch (err) { }\n            img.setAttribute('src', _href(href, true));\n            if (options.remoteImageIsAllowed) {\n                const uri = URI.parse(href);\n                if (uri.scheme !== Schemas.file && uri.scheme !== Schemas.data && !options.remoteImageIsAllowed(uri)) {\n                    img.replaceWith(DOM.$('', undefined, img.outerHTML));\n                }\n            }\n        }\n    });\n    markdownHtmlDoc.body.querySelectorAll('a')\n        .forEach(a => {\n        const href = a.getAttribute('href'); // Get the raw 'href' attribute value as text, not the resolved 'href'\n        a.setAttribute('href', ''); // Clear out href. We use the `data-href` for handling clicks instead\n        if (!href\n            || /^data:|javascript:/i.test(href)\n            || (/^command:/i.test(href) && !markdown.isTrusted)\n            || /^command:(\\/\\/\\/)?_workbench\\.downloadResource/i.test(href)) {\n            // drop the link\n            a.replaceWith(...a.childNodes);\n        }\n        else {\n            let resolvedHref = _href(href, false);\n            if (markdown.baseUri) {\n                resolvedHref = resolveWithBaseUri(URI.from(markdown.baseUri), href);\n            }\n            a.dataset.href = resolvedHref;\n        }\n    });\n    element.innerHTML = sanitizeRenderedMarkdown({ isTrusted: markdown.isTrusted, ...options.sanitizerOptions }, markdownHtmlDoc.body.innerHTML);\n    if (codeBlocks.length > 0) {\n        Promise.all(codeBlocks).then((tuples) => {\n            if (isDisposed) {\n                return;\n            }\n            const renderedElements = new Map(tuples);\n            const placeholderElements = element.querySelectorAll(`div[data-code]`);\n            for (const placeholderElement of placeholderElements) {\n                const renderedElement = renderedElements.get(placeholderElement.dataset['code'] ?? '');\n                if (renderedElement) {\n                    DOM.reset(placeholderElement, renderedElement);\n                }\n            }\n            options.asyncRenderCallback?.();\n        });\n    }\n    else if (syncCodeBlocks.length > 0) {\n        const renderedElements = new Map(syncCodeBlocks);\n        const placeholderElements = element.querySelectorAll(`div[data-code]`);\n        for (const placeholderElement of placeholderElements) {\n            const renderedElement = renderedElements.get(placeholderElement.dataset['code'] ?? '');\n            if (renderedElement) {\n                DOM.reset(placeholderElement, renderedElement);\n            }\n        }\n    }\n    // signal size changes for image tags\n    if (options.asyncRenderCallback) {\n        for (const img of element.getElementsByTagName('img')) {\n            const listener = disposables.add(DOM.addDisposableListener(img, 'load', () => {\n                listener.dispose();\n                options.asyncRenderCallback();\n            }));\n        }\n    }\n    return {\n        element,\n        dispose: () => {\n            isDisposed = true;\n            disposables.dispose();\n        }\n    };\n}\nfunction postProcessCodeBlockLanguageId(lang) {\n    if (!lang) {\n        return '';\n    }\n    const parts = lang.split(/[\\s+|:|,|\\{|\\?]/, 1);\n    if (parts.length) {\n        return parts[0];\n    }\n    return lang;\n}\nfunction resolveWithBaseUri(baseUri, href) {\n    const hasScheme = /^\\w[\\w\\d+.-]*:/.test(href);\n    if (hasScheme) {\n        return href;\n    }\n    if (baseUri.path.endsWith('/')) {\n        return resolvePath(baseUri, href).toString();\n    }\n    else {\n        return resolvePath(dirname(baseUri), href).toString();\n    }\n}\nconst selfClosingTags = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];\nfunction sanitizeRenderedMarkdown(options, renderedMarkdown) {\n    const { config, allowedSchemes } = getSanitizerOptions(options);\n    const store = new DisposableStore();\n    store.add(addDompurifyHook('uponSanitizeAttribute', (element, e) => {\n        if (e.attrName === 'style' || e.attrName === 'class') {\n            if (element.tagName === 'SPAN') {\n                if (e.attrName === 'style') {\n                    e.keepAttr = /^(color\\:(#[0-9a-fA-F]+|var\\(--vscode(-[a-zA-Z]+)+\\));)?(background-color\\:(#[0-9a-fA-F]+|var\\(--vscode(-[a-zA-Z]+)+\\));)?(border-radius:[0-9]+px;)?$/.test(e.attrValue);\n                    return;\n                }\n                else if (e.attrName === 'class') {\n                    e.keepAttr = /^codicon codicon-[a-z\\-]+( codicon-modifier-[a-z\\-]+)?$/.test(e.attrValue);\n                    return;\n                }\n            }\n            e.keepAttr = false;\n            return;\n        }\n        else if (element.tagName === 'INPUT' && element.attributes.getNamedItem('type')?.value === 'checkbox') {\n            if ((e.attrName === 'type' && e.attrValue === 'checkbox') || e.attrName === 'disabled' || e.attrName === 'checked') {\n                e.keepAttr = true;\n                return;\n            }\n            e.keepAttr = false;\n        }\n    }));\n    store.add(addDompurifyHook('uponSanitizeElement', (element, e) => {\n        if (e.tagName === 'input') {\n            if (element.attributes.getNamedItem('type')?.value === 'checkbox') {\n                element.setAttribute('disabled', '');\n            }\n            else if (!options.replaceWithPlaintext) {\n                element.remove();\n            }\n        }\n        if (options.replaceWithPlaintext && !e.allowedTags[e.tagName] && e.tagName !== 'body') {\n            if (element.parentElement) {\n                let startTagText;\n                let endTagText;\n                if (e.tagName === '#comment') {\n                    startTagText = `<!--${element.textContent}-->`;\n                }\n                else {\n                    const isSelfClosing = selfClosingTags.includes(e.tagName);\n                    const attrString = element.attributes.length ?\n                        ' ' + Array.from(element.attributes)\n                            .map(attr => `${attr.name}=\"${attr.value}\"`)\n                            .join(' ')\n                        : '';\n                    startTagText = `<${e.tagName}${attrString}>`;\n                    if (!isSelfClosing) {\n                        endTagText = `</${e.tagName}>`;\n                    }\n                }\n                const fragment = document.createDocumentFragment();\n                const textNode = element.parentElement.ownerDocument.createTextNode(startTagText);\n                fragment.appendChild(textNode);\n                const endTagTextNode = endTagText ? element.parentElement.ownerDocument.createTextNode(endTagText) : undefined;\n                while (element.firstChild) {\n                    fragment.appendChild(element.firstChild);\n                }\n                if (endTagTextNode) {\n                    fragment.appendChild(endTagTextNode);\n                }\n                if (element.nodeType === Node.COMMENT_NODE) {\n                    // Workaround for https://github.com/cure53/DOMPurify/issues/1005\n                    // The comment will be deleted in the next phase. However if we try to remove it now, it will cause\n                    // an exception. Instead we insert the text node before the comment.\n                    element.parentElement.insertBefore(fragment, element);\n                }\n                else {\n                    element.parentElement.replaceChild(fragment, element);\n                }\n            }\n        }\n    }));\n    store.add(DOM.hookDomPurifyHrefAndSrcSanitizer(allowedSchemes));\n    try {\n        return dompurify.sanitize(renderedMarkdown, { ...config, RETURN_TRUSTED_TYPE: true });\n    }\n    finally {\n        store.dispose();\n    }\n}\nexport const allowedMarkdownAttr = [\n    'align',\n    'autoplay',\n    'alt',\n    'checked',\n    'class',\n    'colspan',\n    'controls',\n    'data-code',\n    'data-href',\n    'disabled',\n    'draggable',\n    'height',\n    'href',\n    'loop',\n    'muted',\n    'playsinline',\n    'poster',\n    'rowspan',\n    'src',\n    'style',\n    'target',\n    'title',\n    'type',\n    'width',\n    'start',\n];\nfunction getSanitizerOptions(options) {\n    const allowedSchemes = [\n        Schemas.http,\n        Schemas.https,\n        Schemas.mailto,\n        Schemas.data,\n        Schemas.file,\n        Schemas.vscodeFileResource,\n        Schemas.vscodeRemote,\n        Schemas.vscodeRemoteResource,\n    ];\n    if (options.isTrusted) {\n        allowedSchemes.push(Schemas.command);\n    }\n    return {\n        config: {\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 dompurify 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            ALLOWED_TAGS: options.allowedTags ?? [...DOM.basicMarkupHtmlTags],\n            ALLOWED_ATTR: allowedMarkdownAttr,\n            ALLOW_UNKNOWN_PROTOCOLS: true,\n        },\n        allowedSchemes\n    };\n}\n/**\n * Strips all markdown from `string`, if it's an IMarkdownString. For example\n * `# Header` would be output as `Header`. If it's not, the string is returned.\n */\nexport function renderStringAsPlaintext(string) {\n    return typeof string === 'string' ? string : renderMarkdownAsPlaintext(string);\n}\n/**\n * Strips all markdown from `markdown`. For example `# Header` would be output as `Header`.\n * provide @param withCodeBlocks to retain code blocks\n */\nexport function renderMarkdownAsPlaintext(markdown, withCodeBlocks) {\n    // values that are too long will freeze the UI\n    let value = markdown.value ?? '';\n    if (value.length > 100_000) {\n        value = `${value.substr(0, 100_000)}…`;\n    }\n    const html = marked.parse(value, { async: false, renderer: withCodeBlocks ? plainTextWithCodeBlocksRenderer.value : plainTextRenderer.value }).replace(/&(#\\d+|[a-zA-Z]+);/g, m => unescapeInfo.get(m) ?? m);\n    return sanitizeRenderedMarkdown({ isTrusted: false }, html).toString();\n}\nconst unescapeInfo = new Map([\n    ['&quot;', '\"'],\n    ['&nbsp;', ' '],\n    ['&amp;', '&'],\n    ['&#39;', '\\''],\n    ['&lt;', '<'],\n    ['&gt;', '>'],\n]);\nfunction createRenderer() {\n    const renderer = new marked.Renderer();\n    renderer.code = ({ text }) => {\n        return text;\n    };\n    renderer.blockquote = ({ text }) => {\n        return text + '\\n';\n    };\n    renderer.html = (_) => {\n        return '';\n    };\n    renderer.heading = function ({ tokens }) {\n        return this.parser.parseInline(tokens) + '\\n';\n    };\n    renderer.hr = () => {\n        return '';\n    };\n    renderer.list = function ({ items }) {\n        return items.map(x => this.listitem(x)).join('\\n') + '\\n';\n    };\n    renderer.listitem = ({ text }) => {\n        return text + '\\n';\n    };\n    renderer.paragraph = function ({ tokens }) {\n        return this.parser.parseInline(tokens) + '\\n';\n    };\n    renderer.table = function ({ header, rows }) {\n        return header.map(cell => this.tablecell(cell)).join(' ') + '\\n' + rows.map(cells => cells.map(cell => this.tablecell(cell)).join(' ')).join('\\n') + '\\n';\n    };\n    renderer.tablerow = ({ text }) => {\n        return text;\n    };\n    renderer.tablecell = function ({ tokens }) {\n        return this.parser.parseInline(tokens);\n    };\n    renderer.strong = ({ text }) => {\n        return text;\n    };\n    renderer.em = ({ text }) => {\n        return text;\n    };\n    renderer.codespan = ({ text }) => {\n        return text;\n    };\n    renderer.br = (_) => {\n        return '\\n';\n    };\n    renderer.del = ({ text }) => {\n        return text;\n    };\n    renderer.image = (_) => {\n        return '';\n    };\n    renderer.text = ({ text }) => {\n        return text;\n    };\n    renderer.link = ({ text }) => {\n        return text;\n    };\n    return renderer;\n}\nconst plainTextRenderer = new Lazy((withCodeBlocks) => createRenderer());\nconst plainTextWithCodeBlocksRenderer = new Lazy(() => {\n    const renderer = createRenderer();\n    renderer.code = ({ text }) => {\n        return `\\n\\`\\`\\`\\n${text}\\n\\`\\`\\`\\n`;\n    };\n    return renderer;\n});\nfunction mergeRawTokenText(tokens) {\n    let mergedTokenText = '';\n    tokens.forEach(token => {\n        mergedTokenText += token.raw;\n    });\n    return mergedTokenText;\n}\nfunction completeSingleLinePattern(token) {\n    if (!token.tokens) {\n        return undefined;\n    }\n    for (let i = token.tokens.length - 1; i >= 0; i--) {\n        const subtoken = token.tokens[i];\n        if (subtoken.type === 'text') {\n            const lines = subtoken.raw.split('\\n');\n            const lastLine = lines[lines.length - 1];\n            if (lastLine.includes('`')) {\n                return completeCodespan(token);\n            }\n            else if (lastLine.includes('**')) {\n                return completeDoublestar(token);\n            }\n            else if (lastLine.match(/\\*\\w/)) {\n                return completeStar(token);\n            }\n            else if (lastLine.match(/(^|\\s)__\\w/)) {\n                return completeDoubleUnderscore(token);\n            }\n            else if (lastLine.match(/(^|\\s)_\\w/)) {\n                return completeUnderscore(token);\n            }\n            else if (\n            // Text with start of link target\n            hasLinkTextAndStartOfLinkTarget(lastLine) ||\n                // This token doesn't have the link text, eg if it contains other markdown constructs that are in other subtokens.\n                // But some preceding token does have an unbalanced [ at least\n                hasStartOfLinkTargetAndNoLinkText(lastLine) && token.tokens.slice(0, i).some(t => t.type === 'text' && t.raw.match(/\\[[^\\]]*$/))) {\n                const nextTwoSubTokens = token.tokens.slice(i + 1);\n                // A markdown link can look like\n                // [link text](https://microsoft.com \"more text\")\n                // Where \"more text\" is a title for the link or an argument to a vscode command link\n                if (\n                // If the link was parsed as a link, then look for a link token and a text token with a quote\n                nextTwoSubTokens[0]?.type === 'link' && nextTwoSubTokens[1]?.type === 'text' && nextTwoSubTokens[1].raw.match(/^ *\"[^\"]*$/) ||\n                    // And if the link was not parsed as a link (eg command link), just look for a single quote in this token\n                    lastLine.match(/^[^\"]* +\"[^\"]*$/)) {\n                    return completeLinkTargetArg(token);\n                }\n                return completeLinkTarget(token);\n            }\n            // Contains the start of link text, and no following tokens contain the link target\n            else if (lastLine.match(/(^|\\s)\\[\\w*/)) {\n                return completeLinkText(token);\n            }\n        }\n    }\n    return undefined;\n}\nfunction hasLinkTextAndStartOfLinkTarget(str) {\n    return !!str.match(/(^|\\s)\\[.*\\]\\(\\w*/);\n}\nfunction hasStartOfLinkTargetAndNoLinkText(str) {\n    return !!str.match(/^[^\\[]*\\]\\([^\\)]*$/);\n}\nfunction completeListItemPattern(list) {\n    // Patch up this one list item\n    const lastListItem = list.items[list.items.length - 1];\n    const lastListSubToken = lastListItem.tokens ? lastListItem.tokens[lastListItem.tokens.length - 1] : undefined;\n    /*\n    Example list token structures:\n\n    list\n        list_item\n            text\n                text\n                codespan\n                link\n        list_item\n            text\n            code // Complete indented codeblock\n        list_item\n            text\n            space\n            text\n                text // Incomplete indented codeblock\n        list_item\n            text\n            list // Nested list\n                list_item\n                    text\n                        text\n\n    Contrast with paragraph:\n    paragraph\n        text\n        codespan\n    */\n    let newToken;\n    if (lastListSubToken?.type === 'text' && !('inRawBlock' in lastListItem)) { // Why does Tag have a type of 'text'\n        newToken = completeSingleLinePattern(lastListSubToken);\n    }\n    if (!newToken || newToken.type !== 'paragraph') { // 'text' item inside the list item turns into paragraph\n        // Nothing to fix, or not a pattern we were expecting\n        return;\n    }\n    const previousListItemsText = mergeRawTokenText(list.items.slice(0, -1));\n    // Grabbing the `- ` or `1. ` or `* ` off the list item because I can't find a better way to do this\n    const lastListItemLead = lastListItem.raw.match(/^(\\s*(-|\\d+\\.|\\*) +)/)?.[0];\n    if (!lastListItemLead) {\n        // Is badly formatted\n        return;\n    }\n    const newListItemText = lastListItemLead +\n        mergeRawTokenText(lastListItem.tokens.slice(0, -1)) +\n        newToken.raw;\n    const newList = marked.lexer(previousListItemsText + newListItemText)[0];\n    if (newList.type !== 'list') {\n        // Something went wrong\n        return;\n    }\n    return newList;\n}\nconst maxIncompleteTokensFixRounds = 3;\nexport function fillInIncompleteTokens(tokens) {\n    for (let i = 0; i < maxIncompleteTokensFixRounds; i++) {\n        const newTokens = fillInIncompleteTokensOnce(tokens);\n        if (newTokens) {\n            tokens = newTokens;\n        }\n        else {\n            break;\n        }\n    }\n    return tokens;\n}\nfunction fillInIncompleteTokensOnce(tokens) {\n    let i;\n    let newTokens;\n    for (i = 0; i < tokens.length; i++) {\n        const token = tokens[i];\n        if (token.type === 'paragraph' && token.raw.match(/(\\n|^)\\|/)) {\n            newTokens = completeTable(tokens.slice(i));\n            break;\n        }\n        if (i === tokens.length - 1 && token.type === 'list') {\n            const newListToken = completeListItemPattern(token);\n            if (newListToken) {\n                newTokens = [newListToken];\n                break;\n            }\n        }\n        if (i === tokens.length - 1 && token.type === 'paragraph') {\n            // Only operates on a single token, because any newline that follows this should break these patterns\n            const newToken = completeSingleLinePattern(token);\n            if (newToken) {\n                newTokens = [newToken];\n                break;\n            }\n        }\n    }\n    if (newTokens) {\n        const newTokensList = [\n            ...tokens.slice(0, i),\n            ...newTokens\n        ];\n        newTokensList.links = tokens.links;\n        return newTokensList;\n    }\n    return null;\n}\nfunction completeCodespan(token) {\n    return completeWithString(token, '`');\n}\nfunction completeStar(tokens) {\n    return completeWithString(tokens, '*');\n}\nfunction completeUnderscore(tokens) {\n    return completeWithString(tokens, '_');\n}\nfunction completeLinkTarget(tokens) {\n    return completeWithString(tokens, ')');\n}\nfunction completeLinkTargetArg(tokens) {\n    return completeWithString(tokens, '\")');\n}\nfunction completeLinkText(tokens) {\n    return completeWithString(tokens, '](https://microsoft.com)');\n}\nfunction completeDoublestar(tokens) {\n    return completeWithString(tokens, '**');\n}\nfunction completeDoubleUnderscore(tokens) {\n    return completeWithString(tokens, '__');\n}\nfunction completeWithString(tokens, closingString) {\n    const mergedRawText = mergeRawTokenText(Array.isArray(tokens) ? tokens : [tokens]);\n    // If it was completed correctly, this should be a single token.\n    // Expecting either a Paragraph or a List\n    return marked.lexer(mergedRawText + closingString)[0];\n}\nfunction completeTable(tokens) {\n    const mergedRawText = mergeRawTokenText(tokens);\n    const lines = mergedRawText.split('\\n');\n    let numCols; // The number of line1 col headers\n    let hasSeparatorRow = false;\n    for (let i = 0; i < lines.length; i++) {\n        const line = lines[i].trim();\n        if (typeof numCols === 'undefined' && line.match(/^\\s*\\|/)) {\n            const line1Matches = line.match(/(\\|[^\\|]+)(?=\\||$)/g);\n            if (line1Matches) {\n                numCols = line1Matches.length;\n            }\n        }\n        else if (typeof numCols === 'number') {\n            if (line.match(/^\\s*\\|/)) {\n                if (i !== lines.length - 1) {\n                    // We got the line1 header row, and the line2 separator row, but there are more lines, and it wasn't parsed as a table!\n                    // That's strange and means that the table is probably malformed in the source, so I won't try to patch it up.\n                    return undefined;\n                }\n                // Got a line2 separator row- partial or complete, doesn't matter, we'll replace it with a correct one\n                hasSeparatorRow = true;\n            }\n            else {\n                // The line after the header row isn't a valid separator row, so the table is malformed, don't fix it up\n                return undefined;\n            }\n        }\n    }\n    if (typeof numCols === 'number' && numCols > 0) {\n        const prefixText = hasSeparatorRow ? lines.slice(0, -1).join('\\n') : mergedRawText;\n        const line1EndsInPipe = !!prefixText.match(/\\|\\s*$/);\n        const newRawText = prefixText + (line1EndsInPipe ? '' : '|') + `\\n|${' --- |'.repeat(numCols)}`;\n        return marked.lexer(newRawText);\n    }\n    return undefined;\n}\nfunction addDompurifyHook(hook, cb) {\n    dompurify.addHook(hook, cb);\n    return toDisposable(() => dompurify.removeHook(hook));\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 '../encodedTokenAttributes.js';\nexport class LineTokens {\n    static { this.defaultTokenMetadata = ((0 /* FontStyle.None */ << 11 /* MetadataConsts.FONT_STYLE_OFFSET */)\n        | (1 /* ColorId.DefaultForeground */ << 15 /* MetadataConsts.FOREGROUND_OFFSET */)\n        | (2 /* ColorId.DefaultBackground */ << 24 /* MetadataConsts.BACKGROUND_OFFSET */)) >>> 0; }\n    static createEmpty(lineContent, decoder) {\n        const defaultMetadata = LineTokens.defaultTokenMetadata;\n        const tokens = new Uint32Array(2);\n        tokens[0] = lineContent.length;\n        tokens[1] = defaultMetadata;\n        return new LineTokens(tokens, lineContent, decoder);\n    }\n    static createFromTextAndMetadata(data, decoder) {\n        let offset = 0;\n        let fullText = '';\n        const tokens = new Array();\n        for (const { text, metadata } of data) {\n            tokens.push(offset + text.length, metadata);\n            offset += text.length;\n            fullText += text;\n        }\n        return new LineTokens(new Uint32Array(tokens), fullText, decoder);\n    }\n    constructor(tokens, text, decoder) {\n        this._lineTokensBrand = undefined;\n        this._tokens = tokens;\n        this._tokensCount = (this._tokens.length >>> 1);\n        this._text = text;\n        this.languageIdCodec = decoder;\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        const languageId = TokenMetadata.getLanguageId(metadata);\n        return this.languageIdCodec.decodeLanguageId(languageId);\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    getPresentation(tokenIndex) {\n        const metadata = this._tokens[(tokenIndex << 1) + 1];\n        return TokenMetadata.getPresentationFromMetadata(metadata);\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 SliceLineTokens(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    /**\n     * @pure\n     * @param insertTokens Must be sorted by offset.\n    */\n    withInserted(insertTokens) {\n        if (insertTokens.length === 0) {\n            return this;\n        }\n        let nextOriginalTokenIdx = 0;\n        let nextInsertTokenIdx = 0;\n        let text = '';\n        const newTokens = new Array();\n        let originalEndOffset = 0;\n        while (true) {\n            const nextOriginalTokenEndOffset = nextOriginalTokenIdx < this._tokensCount ? this._tokens[nextOriginalTokenIdx << 1] : -1;\n            const nextInsertToken = nextInsertTokenIdx < insertTokens.length ? insertTokens[nextInsertTokenIdx] : null;\n            if (nextOriginalTokenEndOffset !== -1 && (nextInsertToken === null || nextOriginalTokenEndOffset <= nextInsertToken.offset)) {\n                // original token ends before next insert token\n                text += this._text.substring(originalEndOffset, nextOriginalTokenEndOffset);\n                const metadata = this._tokens[(nextOriginalTokenIdx << 1) + 1];\n                newTokens.push(text.length, metadata);\n                nextOriginalTokenIdx++;\n                originalEndOffset = nextOriginalTokenEndOffset;\n            }\n            else if (nextInsertToken) {\n                if (nextInsertToken.offset > originalEndOffset) {\n                    // insert token is in the middle of the next token.\n                    text += this._text.substring(originalEndOffset, nextInsertToken.offset);\n                    const metadata = this._tokens[(nextOriginalTokenIdx << 1) + 1];\n                    newTokens.push(text.length, metadata);\n                    originalEndOffset = nextInsertToken.offset;\n                }\n                text += nextInsertToken.text;\n                newTokens.push(text.length, nextInsertToken.tokenMetadata);\n                nextInsertTokenIdx++;\n            }\n            else {\n                break;\n            }\n        }\n        return new LineTokens(new Uint32Array(newTokens), text, this.languageIdCodec);\n    }\n    getTokenText(tokenIndex) {\n        const startOffset = this.getStartOffset(tokenIndex);\n        const endOffset = this.getEndOffset(tokenIndex);\n        const text = this._text.substring(startOffset, endOffset);\n        return text;\n    }\n    forEach(callback) {\n        const tokenCount = this.getCount();\n        for (let tokenIndex = 0; tokenIndex < tokenCount; tokenIndex++) {\n            callback(tokenIndex);\n        }\n    }\n}\nclass SliceLineTokens {\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.languageIdCodec = source.languageIdCodec;\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    getMetadata(tokenIndex) {\n        return this._source.getMetadata(this._firstTokenIndex + tokenIndex);\n    }\n    getLanguageId(tokenIndex) {\n        return this._source.getLanguageId(this._firstTokenIndex + tokenIndex);\n    }\n    getLineContent() {\n        return this._source.getLineContent().substring(this._startOffset, this._endOffset);\n    }\n    equals(other) {\n        if (other instanceof SliceLineTokens) {\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    getStandardTokenType(tokenIndex) {\n        return this._source.getStandardTokenType(this._firstTokenIndex + tokenIndex);\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    getPresentation(tokenIndex) {\n        return this._source.getPresentation(this._firstTokenIndex + tokenIndex);\n    }\n    findTokenIndexAtOffset(offset) {\n        return this._source.findTokenIndexAtOffset(offset + this._startOffset - this._deltaOffset) - this._firstTokenIndex;\n    }\n    getTokenText(tokenIndex) {\n        const adjustedTokenIndex = this._firstTokenIndex + tokenIndex;\n        const tokenStartOffset = this._source.getStartOffset(adjustedTokenIndex);\n        const tokenEndOffset = this._source.getEndOffset(adjustedTokenIndex);\n        let text = this._source.getTokenText(adjustedTokenIndex);\n        if (tokenStartOffset < this._startOffset) {\n            text = text.substring(this._startOffset - tokenStartOffset);\n        }\n        if (tokenEndOffset > this._endOffset) {\n            text = text.substring(0, text.length - (tokenEndOffset - this._endOffset));\n        }\n        return text;\n    }\n    forEach(callback) {\n        for (let tokenIndex = 0; tokenIndex < this.getCount(); tokenIndex++) {\n            callback(tokenIndex);\n        }\n    }\n}\nexport function getStandardTokenTypeAtPosition(model, position) {\n    const lineNumber = position.lineNumber;\n    if (!model.tokenization.isCheapToTokenize(lineNumber)) {\n        return undefined;\n    }\n    model.tokenization.forceTokenization(lineNumber);\n    const lineTokens = model.tokenization.getLineTokens(lineNumber);\n    const tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n    const tokenType = lineTokens.getStandardTokenType(tokenIndex);\n    return tokenType;\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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, EncodedTokenizationResult } from '../languages.js';\nexport const NullState = new class {\n    clone() {\n        return this;\n    }\n    equals(other) {\n        return (this === other);\n    }\n};\nexport function nullTokenize(languageId, state) {\n    return new TokenizationResult([new Token(0, '', languageId)], state);\n}\nexport function nullTokenizeEncoded(languageId, state) {\n    const tokens = new Uint32Array(2);\n    tokens[0] = 0;\n    tokens[1] = ((languageId << 0 /* MetadataConsts.LANGUAGEID_OFFSET */)\n        | (0 /* StandardTokenType.Other */ << 8 /* MetadataConsts.TOKEN_TYPE_OFFSET */)\n        | (0 /* FontStyle.None */ << 11 /* MetadataConsts.FONT_STYLE_OFFSET */)\n        | (1 /* ColorId.DefaultForeground */ << 15 /* MetadataConsts.FOREGROUND_OFFSET */)\n        | (2 /* ColorId.DefaultBackground */ << 24 /* MetadataConsts.BACKGROUND_OFFSET */)) >>> 0;\n    return new EncodedTokenizationResult(tokens, state === null ? NullState : 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 *--------------------------------------------------------------------------------------------*/\nimport * as strings from '../../../base/common/strings.js';\nimport { LineTokens } from '../tokens/lineTokens.js';\nimport { TokenizationRegistry } from '../languages.js';\nimport { NullState, nullTokenizeEncoded } from './nullTokenize.js';\nconst fallback = {\n    getInitialState: () => NullState,\n    tokenizeEncoded: (buffer, hasEOL, state) => nullTokenizeEncoded(0 /* LanguageId.Null */, state)\n};\nexport async function tokenizeToString(languageService, text, languageId) {\n    if (!languageId) {\n        return _tokenizeToString(text, languageService.languageIdCodec, fallback);\n    }\n    const tokenizationSupport = await TokenizationRegistry.getOrCreate(languageId);\n    return _tokenizeToString(text, languageService.languageIdCodec, 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    let prevIsSpace = true;\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 /* CharCode.Tab */: {\n                    let insertSpacesCount = tabSize - (charIndex + tabsCharDelta) % tabSize;\n                    tabsCharDelta += insertSpacesCount - 1;\n                    while (insertSpacesCount > 0) {\n                        if (useNbsp && prevIsSpace) {\n                            partContent += '&#160;';\n                            prevIsSpace = false;\n                        }\n                        else {\n                            partContent += ' ';\n                            prevIsSpace = true;\n                        }\n                        insertSpacesCount--;\n                    }\n                    break;\n                }\n                case 60 /* CharCode.LessThan */:\n                    partContent += '&lt;';\n                    prevIsSpace = false;\n                    break;\n                case 62 /* CharCode.GreaterThan */:\n                    partContent += '&gt;';\n                    prevIsSpace = false;\n                    break;\n                case 38 /* CharCode.Ampersand */:\n                    partContent += '&amp;';\n                    prevIsSpace = false;\n                    break;\n                case 0 /* CharCode.Null */:\n                    partContent += '&#00;';\n                    prevIsSpace = false;\n                    break;\n                case 65279 /* CharCode.UTF8_BOM */:\n                case 8232 /* CharCode.LINE_SEPARATOR */:\n                case 8233 /* CharCode.PARAGRAPH_SEPARATOR */:\n                case 133 /* CharCode.NEXT_LINE */:\n                    partContent += '\\ufffd';\n                    prevIsSpace = false;\n                    break;\n                case 13 /* CharCode.CarriageReturn */:\n                    // zero width space, because carriage return would introduce a line break\n                    partContent += '&#8203';\n                    prevIsSpace = false;\n                    break;\n                case 32 /* CharCode.Space */:\n                    if (useNbsp && prevIsSpace) {\n                        partContent += '&#160;';\n                        prevIsSpace = false;\n                    }\n                    else {\n                        partContent += ' ';\n                        prevIsSpace = true;\n                    }\n                    break;\n                default:\n                    partContent += String.fromCharCode(charCode);\n                    prevIsSpace = false;\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}\nexport function _tokenizeToString(text, languageIdCodec, tokenizationSupport) {\n    let result = `<div class=\"monaco-tokenized-source\">`;\n    const lines = strings.splitLines(text);\n    let currentState = tokenizationSupport.getInitialState();\n    for (let i = 0, len = lines.length; i < len; i++) {\n        const line = lines[i];\n        if (i > 0) {\n            result += `<br/>`;\n        }\n        const tokenizationResult = tokenizationSupport.tokenizeEncoded(line, true, currentState);\n        LineTokens.convertToEndOffset(tokenizationResult.tokens, line.length);\n        const lineTokens = new LineTokens(tokenizationResult.tokens, line, languageIdCodec);\n        const 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 *--------------------------------------------------------------------------------------------*/\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 MarkdownRenderer_1;\nimport { renderMarkdown } from '../../../../../base/browser/markdownRenderer.js';\nimport { createTrustedTypesPolicy } from '../../../../../base/browser/trustedTypes.js';\nimport { onUnexpectedError } from '../../../../../base/common/errors.js';\nimport { Emitter } from '../../../../../base/common/event.js';\nimport { DisposableStore } from '../../../../../base/common/lifecycle.js';\nimport './renderedMarkdown.css';\nimport { applyFontInfo } from '../../../config/domFontInfo.js';\nimport { ILanguageService } from '../../../../common/languages/language.js';\nimport { PLAINTEXT_LANGUAGE_ID } from '../../../../common/languages/modesRegistry.js';\nimport { tokenizeToString } from '../../../../common/languages/textToHtmlTokenizer.js';\nimport { IOpenerService } from '../../../../../platform/opener/common/opener.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    static { MarkdownRenderer_1 = this; }\n    static { this._ttpTokenizer = createTrustedTypesPolicy('tokenizeToString', {\n        createHTML(html) {\n            return html;\n        }\n    }); }\n    constructor(_options, _languageService, _openerService) {\n        this._options = _options;\n        this._languageService = _languageService;\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        if (!markdown) {\n            const element = document.createElement('span');\n            return { element, dispose: () => { } };\n        }\n        const disposables = new DisposableStore();\n        const rendered = disposables.add(renderMarkdown(markdown, { ...this._getRenderOptions(markdown, disposables), ...options }, markedOptions));\n        rendered.element.classList.add('rendered-markdown');\n        return {\n            element: rendered.element,\n            dispose: () => disposables.dispose()\n        };\n    }\n    _getRenderOptions(markdown, disposables) {\n        return {\n            codeBlockRenderer: async (languageAlias, value) => {\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 languageId;\n                if (languageAlias) {\n                    languageId = this._languageService.getLanguageIdByLanguageName(languageAlias);\n                }\n                else if (this._options.editor) {\n                    languageId = this._options.editor.getModel()?.getLanguageId();\n                }\n                if (!languageId) {\n                    languageId = PLAINTEXT_LANGUAGE_ID;\n                }\n                const html = await tokenizeToString(this._languageService, value, languageId);\n                const element = document.createElement('span');\n                element.innerHTML = (MarkdownRenderer_1._ttpTokenizer?.createHTML(html) ?? html);\n                // use \"good\" font\n                if (this._options.editor) {\n                    const fontInfo = this._options.editor.getOption(50 /* EditorOption.fontInfo */);\n                    applyFontInfo(element, fontInfo);\n                }\n                else if (this._options.codeBlockFontFamily) {\n                    element.style.fontFamily = this._options.codeBlockFontFamily;\n                }\n                if (this._options.codeBlockFontSize !== undefined) {\n                    element.style.fontSize = this._options.codeBlockFontSize;\n                }\n                return element;\n            },\n            asyncRenderCallback: () => this._onDidRenderAsync.fire(),\n            actionHandler: {\n                callback: (link) => openLinkFromMarkdown(this._openerService, link, markdown.isTrusted),\n                disposables: disposables\n            }\n        };\n    }\n};\nMarkdownRenderer = MarkdownRenderer_1 = __decorate([\n    __param(1, ILanguageService),\n    __param(2, IOpenerService)\n], MarkdownRenderer);\nexport { MarkdownRenderer };\nexport async function openLinkFromMarkdown(openerService, link, isTrusted) {\n    try {\n        return await openerService.open(link, {\n            fromUserGesture: true,\n            allowContributedOpeners: true,\n            allowCommands: toAllowCommandsOption(isTrusted),\n        });\n    }\n    catch (e) {\n        onUnexpectedError(e);\n        return false;\n    }\n}\nfunction toAllowCommandsOption(isTrusted) {\n    if (isTrusted === true) {\n        return true; // Allow all commands\n    }\n    if (isTrusted && Array.isArray(isTrusted.enabledCommands)) {\n        return isTrusted.enabledCommands; // Allow subset of commands\n    }\n    return false; // Block commands\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { RawContextKey } from '../../contextkey/common/contextkey.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.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 *--------------------------------------------------------------------------------------------*/\nimport * as dom from '../../dom.js';\nimport './aria.css';\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('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 (statusContainer.textContent !== msg) {\n        dom.clearNode(statusContainer2);\n        insertMessage(statusContainer, msg);\n    }\n    else {\n        dom.clearNode(statusContainer);\n        insertMessage(statusContainer2, msg);\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 *--------------------------------------------------------------------------------------------*/\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 './hover.css';\nimport { DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport * as dom from '../../../../base/browser/dom.js';\nimport { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nimport { EDITOR_FONT_DEFAULTS } from '../../../common/config/editorOptions.js';\nimport { HoverAction, HoverWidget as BaseHoverWidget, getHoverAccessibleViewHint } from '../../../../base/browser/ui/hover/hoverWidget.js';\nimport { Widget } from '../../../../base/browser/ui/widget.js';\nimport { IOpenerService } from '../../../../platform/opener/common/opener.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { MarkdownRenderer, openLinkFromMarkdown } from '../../widget/markdownRenderer/browser/markdownRenderer.js';\nimport { isMarkdownString } from '../../../../base/common/htmlContent.js';\nimport { localize } from '../../../../nls.js';\nimport { isMacintosh } from '../../../../base/common/platform.js';\nimport { IAccessibilityService } from '../../../../platform/accessibility/common/accessibility.js';\nimport { status } from '../../../../base/browser/ui/aria/aria.js';\nconst $ = dom.$;\nlet HoverWidget = class HoverWidget extends Widget {\n    get _targetWindow() {\n        return dom.getWindow(this._target.targetElements[0]);\n    }\n    get _targetDocumentElement() {\n        return dom.getWindow(this._target.targetElements[0]).document.documentElement;\n    }\n    get isDisposed() { return this._isDisposed; }\n    get isMouseIn() { return this._lockMouseTracker.isMouseIn; }\n    get domNode() { return this._hover.containerDomNode; }\n    get onDispose() { return this._onDispose.event; }\n    get onRequestLayout() { return this._onRequestLayout.event; }\n    get anchor() { return this._hoverPosition === 2 /* HoverPosition.BELOW */ ? 0 /* AnchorPosition.BELOW */ : 1 /* AnchorPosition.ABOVE */; }\n    get x() { return this._x; }\n    get y() { return this._y; }\n    /**\n     * Whether the hover is \"locked\" by holding the alt/option key. When locked, the hover will not\n     * hide and can be hovered regardless of whether the `hideOnHover` hover option is set.\n     */\n    get isLocked() { return this._isLocked; }\n    set isLocked(value) {\n        if (this._isLocked === value) {\n            return;\n        }\n        this._isLocked = value;\n        this._hoverContainer.classList.toggle('locked', this._isLocked);\n    }\n    constructor(options, _keybindingService, _configurationService, _openerService, _instantiationService, _accessibilityService) {\n        super();\n        this._keybindingService = _keybindingService;\n        this._configurationService = _configurationService;\n        this._openerService = _openerService;\n        this._instantiationService = _instantiationService;\n        this._accessibilityService = _accessibilityService;\n        this._messageListeners = new DisposableStore();\n        this._isDisposed = false;\n        this._forcePosition = false;\n        this._x = 0;\n        this._y = 0;\n        this._isLocked = false;\n        this._enableFocusTraps = false;\n        this._addedFocusTrap = false;\n        this._onDispose = this._register(new Emitter());\n        this._onRequestLayout = this._register(new Emitter());\n        this._linkHandler = options.linkHandler || (url => {\n            return openLinkFromMarkdown(this._openerService, url, isMarkdownString(options.content) ? options.content.isTrusted : undefined);\n        });\n        this._target = 'targetElements' in options.target ? options.target : new ElementHoverTarget(options.target);\n        this._hoverPointer = options.appearance?.showPointer ? $('div.workbench-hover-pointer') : undefined;\n        this._hover = this._register(new BaseHoverWidget());\n        this._hover.containerDomNode.classList.add('workbench-hover', 'fadeIn');\n        if (options.appearance?.compact) {\n            this._hover.containerDomNode.classList.add('workbench-hover', 'compact');\n        }\n        if (options.appearance?.skipFadeInAnimation) {\n            this._hover.containerDomNode.classList.add('skip-fade-in');\n        }\n        if (options.additionalClasses) {\n            this._hover.containerDomNode.classList.add(...options.additionalClasses);\n        }\n        if (options.position?.forcePosition) {\n            this._forcePosition = true;\n        }\n        if (options.trapFocus) {\n            this._enableFocusTraps = true;\n        }\n        this._hoverPosition = options.position?.hoverPosition ?? 3 /* HoverPosition.ABOVE */;\n        // Don't allow mousedown out of the widget, otherwise preventDefault will call and text will\n        // not be selected.\n        this.onmousedown(this._hover.containerDomNode, e => e.stopPropagation());\n        // Hide hover on escape\n        this.onkeydown(this._hover.containerDomNode, e => {\n            if (e.equals(9 /* KeyCode.Escape */)) {\n                this.dispose();\n            }\n        });\n        // Hide when the window loses focus\n        this._register(dom.addDisposableListener(this._targetWindow, 'blur', () => this.dispose()));\n        const rowElement = $('div.hover-row.markdown-hover');\n        const contentsElement = $('div.hover-contents');\n        if (typeof options.content === 'string') {\n            contentsElement.textContent = options.content;\n            contentsElement.style.whiteSpace = 'pre-wrap';\n        }\n        else if (dom.isHTMLElement(options.content)) {\n            contentsElement.appendChild(options.content);\n            contentsElement.classList.add('html-hover-contents');\n        }\n        else {\n            const markdown = options.content;\n            const mdRenderer = this._instantiationService.createInstance(MarkdownRenderer, { codeBlockFontFamily: this._configurationService.getValue('editor').fontFamily || EDITOR_FONT_DEFAULTS.fontFamily });\n            const { element } = mdRenderer.render(markdown, {\n                actionHandler: {\n                    callback: (content) => this._linkHandler(content),\n                    disposables: this._messageListeners\n                },\n                asyncRenderCallback: () => {\n                    contentsElement.classList.add('code-hover-contents');\n                    this.layout();\n                    // This changes the dimensions of the hover so trigger a layout\n                    this._onRequestLayout.fire();\n                }\n            });\n            contentsElement.appendChild(element);\n        }\n        rowElement.appendChild(contentsElement);\n        this._hover.contentsDomNode.appendChild(rowElement);\n        if (options.actions && options.actions.length > 0) {\n            const statusBarElement = $('div.hover-row.status-bar');\n            const actionsElement = $('div.actions');\n            options.actions.forEach(action => {\n                const keybinding = this._keybindingService.lookupKeybinding(action.commandId);\n                const keybindingLabel = keybinding ? keybinding.getLabel() : null;\n                HoverAction.render(actionsElement, {\n                    label: action.label,\n                    commandId: action.commandId,\n                    run: e => {\n                        action.run(e);\n                        this.dispose();\n                    },\n                    iconClass: action.iconClass\n                }, keybindingLabel);\n            });\n            statusBarElement.appendChild(actionsElement);\n            this._hover.containerDomNode.appendChild(statusBarElement);\n        }\n        this._hoverContainer = $('div.workbench-hover-container');\n        if (this._hoverPointer) {\n            this._hoverContainer.appendChild(this._hoverPointer);\n        }\n        this._hoverContainer.appendChild(this._hover.containerDomNode);\n        // Determine whether to hide on hover\n        let hideOnHover;\n        if (options.actions && options.actions.length > 0) {\n            // If there are actions, require hover so they can be accessed\n            hideOnHover = false;\n        }\n        else {\n            if (options.persistence?.hideOnHover === undefined) {\n                // When unset, will default to true when it's a string or when it's markdown that\n                // appears to have a link using a naive check for '](' and '</a>'\n                hideOnHover = typeof options.content === 'string' ||\n                    isMarkdownString(options.content) && !options.content.value.includes('](') && !options.content.value.includes('</a>');\n            }\n            else {\n                // It's set explicitly\n                hideOnHover = options.persistence.hideOnHover;\n            }\n        }\n        // Show the hover hint if needed\n        if (options.appearance?.showHoverHint) {\n            const statusBarElement = $('div.hover-row.status-bar');\n            const infoElement = $('div.info');\n            infoElement.textContent = localize('hoverhint', 'Hold {0} key to mouse over', isMacintosh ? 'Option' : 'Alt');\n            statusBarElement.appendChild(infoElement);\n            this._hover.containerDomNode.appendChild(statusBarElement);\n        }\n        const mouseTrackerTargets = [...this._target.targetElements];\n        if (!hideOnHover) {\n            mouseTrackerTargets.push(this._hoverContainer);\n        }\n        const mouseTracker = this._register(new CompositeMouseTracker(mouseTrackerTargets));\n        this._register(mouseTracker.onMouseOut(() => {\n            if (!this._isLocked) {\n                this.dispose();\n            }\n        }));\n        // Setup another mouse tracker when hideOnHover is set in order to track the hover as well\n        // when it is locked. This ensures the hover will hide on mouseout after alt has been\n        // released to unlock the element.\n        if (hideOnHover) {\n            const mouseTracker2Targets = [...this._target.targetElements, this._hoverContainer];\n            this._lockMouseTracker = this._register(new CompositeMouseTracker(mouseTracker2Targets));\n            this._register(this._lockMouseTracker.onMouseOut(() => {\n                if (!this._isLocked) {\n                    this.dispose();\n                }\n            }));\n        }\n        else {\n            this._lockMouseTracker = mouseTracker;\n        }\n    }\n    addFocusTrap() {\n        if (!this._enableFocusTraps || this._addedFocusTrap) {\n            return;\n        }\n        this._addedFocusTrap = true;\n        // Add a hover tab loop if the hover has at least one element with a valid tabIndex\n        const firstContainerFocusElement = this._hover.containerDomNode;\n        const lastContainerFocusElement = this.findLastFocusableChild(this._hover.containerDomNode);\n        if (lastContainerFocusElement) {\n            const beforeContainerFocusElement = dom.prepend(this._hoverContainer, $('div'));\n            const afterContainerFocusElement = dom.append(this._hoverContainer, $('div'));\n            beforeContainerFocusElement.tabIndex = 0;\n            afterContainerFocusElement.tabIndex = 0;\n            this._register(dom.addDisposableListener(afterContainerFocusElement, 'focus', (e) => {\n                firstContainerFocusElement.focus();\n                e.preventDefault();\n            }));\n            this._register(dom.addDisposableListener(beforeContainerFocusElement, 'focus', (e) => {\n                lastContainerFocusElement.focus();\n                e.preventDefault();\n            }));\n        }\n    }\n    findLastFocusableChild(root) {\n        if (root.hasChildNodes()) {\n            for (let i = 0; i < root.childNodes.length; i++) {\n                const node = root.childNodes.item(root.childNodes.length - i - 1);\n                if (node.nodeType === node.ELEMENT_NODE) {\n                    const parsedNode = node;\n                    if (typeof parsedNode.tabIndex === 'number' && parsedNode.tabIndex >= 0) {\n                        return parsedNode;\n                    }\n                }\n                const recursivelyFoundElement = this.findLastFocusableChild(node);\n                if (recursivelyFoundElement) {\n                    return recursivelyFoundElement;\n                }\n            }\n        }\n        return undefined;\n    }\n    render(container) {\n        container.appendChild(this._hoverContainer);\n        const hoverFocused = this._hoverContainer.contains(this._hoverContainer.ownerDocument.activeElement);\n        const accessibleViewHint = hoverFocused && getHoverAccessibleViewHint(this._configurationService.getValue('accessibility.verbosity.hover') === true && this._accessibilityService.isScreenReaderOptimized(), this._keybindingService.lookupKeybinding('editor.action.accessibleView')?.getAriaLabel());\n        if (accessibleViewHint) {\n            status(accessibleViewHint);\n        }\n        this.layout();\n        this.addFocusTrap();\n    }\n    layout() {\n        this._hover.containerDomNode.classList.remove('right-aligned');\n        this._hover.contentsDomNode.style.maxHeight = '';\n        const getZoomAccountedBoundingClientRect = (e) => {\n            const zoom = dom.getDomNodeZoomLevel(e);\n            const boundingRect = e.getBoundingClientRect();\n            return {\n                top: boundingRect.top * zoom,\n                bottom: boundingRect.bottom * zoom,\n                right: boundingRect.right * zoom,\n                left: boundingRect.left * zoom,\n            };\n        };\n        const targetBounds = this._target.targetElements.map(e => getZoomAccountedBoundingClientRect(e));\n        const { top, right, bottom, left } = targetBounds[0];\n        const width = right - left;\n        const height = bottom - top;\n        const targetRect = {\n            top, right, bottom, left, width, height,\n            center: {\n                x: left + (width / 2),\n                y: top + (height / 2)\n            }\n        };\n        // These calls adjust the position depending on spacing.\n        this.adjustHorizontalHoverPosition(targetRect);\n        this.adjustVerticalHoverPosition(targetRect);\n        // This call limits the maximum height of the hover.\n        this.adjustHoverMaxHeight(targetRect);\n        // Offset the hover position if there is a pointer so it aligns with the target element\n        this._hoverContainer.style.padding = '';\n        this._hoverContainer.style.margin = '';\n        if (this._hoverPointer) {\n            switch (this._hoverPosition) {\n                case 1 /* HoverPosition.RIGHT */:\n                    targetRect.left += 3 /* Constants.PointerSize */;\n                    targetRect.right += 3 /* Constants.PointerSize */;\n                    this._hoverContainer.style.paddingLeft = `${3 /* Constants.PointerSize */}px`;\n                    this._hoverContainer.style.marginLeft = `${-3 /* Constants.PointerSize */}px`;\n                    break;\n                case 0 /* HoverPosition.LEFT */:\n                    targetRect.left -= 3 /* Constants.PointerSize */;\n                    targetRect.right -= 3 /* Constants.PointerSize */;\n                    this._hoverContainer.style.paddingRight = `${3 /* Constants.PointerSize */}px`;\n                    this._hoverContainer.style.marginRight = `${-3 /* Constants.PointerSize */}px`;\n                    break;\n                case 2 /* HoverPosition.BELOW */:\n                    targetRect.top += 3 /* Constants.PointerSize */;\n                    targetRect.bottom += 3 /* Constants.PointerSize */;\n                    this._hoverContainer.style.paddingTop = `${3 /* Constants.PointerSize */}px`;\n                    this._hoverContainer.style.marginTop = `${-3 /* Constants.PointerSize */}px`;\n                    break;\n                case 3 /* HoverPosition.ABOVE */:\n                    targetRect.top -= 3 /* Constants.PointerSize */;\n                    targetRect.bottom -= 3 /* Constants.PointerSize */;\n                    this._hoverContainer.style.paddingBottom = `${3 /* Constants.PointerSize */}px`;\n                    this._hoverContainer.style.marginBottom = `${-3 /* Constants.PointerSize */}px`;\n                    break;\n            }\n            targetRect.center.x = targetRect.left + (width / 2);\n            targetRect.center.y = targetRect.top + (height / 2);\n        }\n        this.computeXCordinate(targetRect);\n        this.computeYCordinate(targetRect);\n        if (this._hoverPointer) {\n            // reset\n            this._hoverPointer.classList.remove('top');\n            this._hoverPointer.classList.remove('left');\n            this._hoverPointer.classList.remove('right');\n            this._hoverPointer.classList.remove('bottom');\n            this.setHoverPointerPosition(targetRect);\n        }\n        this._hover.onContentsChanged();\n    }\n    computeXCordinate(target) {\n        const hoverWidth = this._hover.containerDomNode.clientWidth + 2 /* Constants.HoverBorderWidth */;\n        if (this._target.x !== undefined) {\n            this._x = this._target.x;\n        }\n        else if (this._hoverPosition === 1 /* HoverPosition.RIGHT */) {\n            this._x = target.right;\n        }\n        else if (this._hoverPosition === 0 /* HoverPosition.LEFT */) {\n            this._x = target.left - hoverWidth;\n        }\n        else {\n            if (this._hoverPointer) {\n                this._x = target.center.x - (this._hover.containerDomNode.clientWidth / 2);\n            }\n            else {\n                this._x = target.left;\n            }\n            // Hover is going beyond window towards right end\n            if (this._x + hoverWidth >= this._targetDocumentElement.clientWidth) {\n                this._hover.containerDomNode.classList.add('right-aligned');\n                this._x = Math.max(this._targetDocumentElement.clientWidth - hoverWidth - 2 /* Constants.HoverWindowEdgeMargin */, this._targetDocumentElement.clientLeft);\n            }\n        }\n        // Hover is going beyond window towards left end\n        if (this._x < this._targetDocumentElement.clientLeft) {\n            this._x = target.left + 2 /* Constants.HoverWindowEdgeMargin */;\n        }\n    }\n    computeYCordinate(target) {\n        if (this._target.y !== undefined) {\n            this._y = this._target.y;\n        }\n        else if (this._hoverPosition === 3 /* HoverPosition.ABOVE */) {\n            this._y = target.top;\n        }\n        else if (this._hoverPosition === 2 /* HoverPosition.BELOW */) {\n            this._y = target.bottom - 2;\n        }\n        else {\n            if (this._hoverPointer) {\n                this._y = target.center.y + (this._hover.containerDomNode.clientHeight / 2);\n            }\n            else {\n                this._y = target.bottom;\n            }\n        }\n        // Hover on bottom is going beyond window\n        if (this._y > this._targetWindow.innerHeight) {\n            this._y = target.bottom;\n        }\n    }\n    adjustHorizontalHoverPosition(target) {\n        // Do not adjust horizontal hover position if x cordiante is provided\n        if (this._target.x !== undefined) {\n            return;\n        }\n        const hoverPointerOffset = (this._hoverPointer ? 3 /* Constants.PointerSize */ : 0);\n        // When force position is enabled, restrict max width\n        if (this._forcePosition) {\n            const padding = hoverPointerOffset + 2 /* Constants.HoverBorderWidth */;\n            if (this._hoverPosition === 1 /* HoverPosition.RIGHT */) {\n                this._hover.containerDomNode.style.maxWidth = `${this._targetDocumentElement.clientWidth - target.right - padding}px`;\n            }\n            else if (this._hoverPosition === 0 /* HoverPosition.LEFT */) {\n                this._hover.containerDomNode.style.maxWidth = `${target.left - padding}px`;\n            }\n            return;\n        }\n        // Position hover on right to target\n        if (this._hoverPosition === 1 /* HoverPosition.RIGHT */) {\n            const roomOnRight = this._targetDocumentElement.clientWidth - target.right;\n            // Hover on the right is going beyond window.\n            if (roomOnRight < this._hover.containerDomNode.clientWidth + hoverPointerOffset) {\n                const roomOnLeft = target.left;\n                // There's enough room on the left, flip the hover position\n                if (roomOnLeft >= this._hover.containerDomNode.clientWidth + hoverPointerOffset) {\n                    this._hoverPosition = 0 /* HoverPosition.LEFT */;\n                }\n                // Hover on the left would go beyond window too\n                else {\n                    this._hoverPosition = 2 /* HoverPosition.BELOW */;\n                }\n            }\n        }\n        // Position hover on left to target\n        else if (this._hoverPosition === 0 /* HoverPosition.LEFT */) {\n            const roomOnLeft = target.left;\n            // Hover on the left is going beyond window.\n            if (roomOnLeft < this._hover.containerDomNode.clientWidth + hoverPointerOffset) {\n                const roomOnRight = this._targetDocumentElement.clientWidth - target.right;\n                // There's enough room on the right, flip the hover position\n                if (roomOnRight >= this._hover.containerDomNode.clientWidth + hoverPointerOffset) {\n                    this._hoverPosition = 1 /* HoverPosition.RIGHT */;\n                }\n                // Hover on the right would go beyond window too\n                else {\n                    this._hoverPosition = 2 /* HoverPosition.BELOW */;\n                }\n            }\n            // Hover on the left is going beyond window.\n            if (target.left - this._hover.containerDomNode.clientWidth - hoverPointerOffset <= this._targetDocumentElement.clientLeft) {\n                this._hoverPosition = 1 /* HoverPosition.RIGHT */;\n            }\n        }\n    }\n    adjustVerticalHoverPosition(target) {\n        // Do not adjust vertical hover position if the y coordinate is provided\n        // or the position is forced\n        if (this._target.y !== undefined || this._forcePosition) {\n            return;\n        }\n        const hoverPointerOffset = (this._hoverPointer ? 3 /* Constants.PointerSize */ : 0);\n        // Position hover on top of the target\n        if (this._hoverPosition === 3 /* HoverPosition.ABOVE */) {\n            // Hover on top is going beyond window\n            if (target.top - this._hover.containerDomNode.clientHeight - hoverPointerOffset < 0) {\n                this._hoverPosition = 2 /* HoverPosition.BELOW */;\n            }\n        }\n        // Position hover below the target\n        else if (this._hoverPosition === 2 /* HoverPosition.BELOW */) {\n            // Hover on bottom is going beyond window\n            if (target.bottom + this._hover.containerDomNode.clientHeight + hoverPointerOffset > this._targetWindow.innerHeight) {\n                this._hoverPosition = 3 /* HoverPosition.ABOVE */;\n            }\n        }\n    }\n    adjustHoverMaxHeight(target) {\n        let maxHeight = this._targetWindow.innerHeight / 2;\n        // When force position is enabled, restrict max height\n        if (this._forcePosition) {\n            const padding = (this._hoverPointer ? 3 /* Constants.PointerSize */ : 0) + 2 /* Constants.HoverBorderWidth */;\n            if (this._hoverPosition === 3 /* HoverPosition.ABOVE */) {\n                maxHeight = Math.min(maxHeight, target.top - padding);\n            }\n            else if (this._hoverPosition === 2 /* HoverPosition.BELOW */) {\n                maxHeight = Math.min(maxHeight, this._targetWindow.innerHeight - target.bottom - padding);\n            }\n        }\n        this._hover.containerDomNode.style.maxHeight = `${maxHeight}px`;\n        if (this._hover.contentsDomNode.clientHeight < this._hover.contentsDomNode.scrollHeight) {\n            // Add padding for a vertical scrollbar\n            const extraRightPadding = `${this._hover.scrollbar.options.verticalScrollbarSize}px`;\n            if (this._hover.contentsDomNode.style.paddingRight !== extraRightPadding) {\n                this._hover.contentsDomNode.style.paddingRight = extraRightPadding;\n            }\n        }\n    }\n    setHoverPointerPosition(target) {\n        if (!this._hoverPointer) {\n            return;\n        }\n        switch (this._hoverPosition) {\n            case 0 /* HoverPosition.LEFT */:\n            case 1 /* HoverPosition.RIGHT */: {\n                this._hoverPointer.classList.add(this._hoverPosition === 0 /* HoverPosition.LEFT */ ? 'right' : 'left');\n                const hoverHeight = this._hover.containerDomNode.clientHeight;\n                // If hover is taller than target, then show the pointer at the center of target\n                if (hoverHeight > target.height) {\n                    this._hoverPointer.style.top = `${target.center.y - (this._y - hoverHeight) - 3 /* Constants.PointerSize */}px`;\n                }\n                // Otherwise show the pointer at the center of hover\n                else {\n                    this._hoverPointer.style.top = `${Math.round((hoverHeight / 2)) - 3 /* Constants.PointerSize */}px`;\n                }\n                break;\n            }\n            case 3 /* HoverPosition.ABOVE */:\n            case 2 /* HoverPosition.BELOW */: {\n                this._hoverPointer.classList.add(this._hoverPosition === 3 /* HoverPosition.ABOVE */ ? 'bottom' : 'top');\n                const hoverWidth = this._hover.containerDomNode.clientWidth;\n                // Position pointer at the center of the hover\n                let pointerLeftPosition = Math.round((hoverWidth / 2)) - 3 /* Constants.PointerSize */;\n                // If pointer goes beyond target then position it at the center of the target\n                const pointerX = this._x + pointerLeftPosition;\n                if (pointerX < target.left || pointerX > target.right) {\n                    pointerLeftPosition = target.center.x - this._x - 3 /* Constants.PointerSize */;\n                }\n                this._hoverPointer.style.left = `${pointerLeftPosition}px`;\n                break;\n            }\n        }\n    }\n    focus() {\n        this._hover.containerDomNode.focus();\n    }\n    dispose() {\n        if (!this._isDisposed) {\n            this._onDispose.fire();\n            this._hoverContainer.remove();\n            this._messageListeners.dispose();\n            this._target.dispose();\n            super.dispose();\n        }\n        this._isDisposed = true;\n    }\n};\nHoverWidget = __decorate([\n    __param(1, IKeybindingService),\n    __param(2, IConfigurationService),\n    __param(3, IOpenerService),\n    __param(4, IInstantiationService),\n    __param(5, IAccessibilityService)\n], HoverWidget);\nexport { HoverWidget };\nclass CompositeMouseTracker extends Widget {\n    get onMouseOut() { return this._onMouseOut.event; }\n    get isMouseIn() { return this._isMouseIn; }\n    constructor(_elements) {\n        super();\n        this._elements = _elements;\n        this._isMouseIn = true;\n        this._onMouseOut = this._register(new Emitter());\n        this._elements.forEach(n => this.onmouseover(n, () => this._onTargetMouseOver(n)));\n        this._elements.forEach(n => this.onmouseleave(n, () => this._onTargetMouseLeave(n)));\n    }\n    _onTargetMouseOver(target) {\n        this._isMouseIn = true;\n        this._clearEvaluateMouseStateTimeout(target);\n    }\n    _onTargetMouseLeave(target) {\n        this._isMouseIn = false;\n        this._evaluateMouseState(target);\n    }\n    _evaluateMouseState(target) {\n        this._clearEvaluateMouseStateTimeout(target);\n        // Evaluate whether the mouse is still outside asynchronously such that other mouse targets\n        // have the opportunity to first their mouse in event.\n        this._mouseTimeout = dom.getWindow(target).setTimeout(() => this._fireIfMouseOutside(), 0);\n    }\n    _clearEvaluateMouseStateTimeout(target) {\n        if (this._mouseTimeout) {\n            dom.getWindow(target).clearTimeout(this._mouseTimeout);\n            this._mouseTimeout = undefined;\n        }\n    }\n    _fireIfMouseOutside() {\n        if (!this._isMouseIn) {\n            this._onMouseOut.fire();\n        }\n    }\n}\nclass ElementHoverTarget {\n    constructor(_element) {\n        this._element = _element;\n        this.targetElements = [this._element];\n    }\n    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 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 { BrowserFeatures } from '../../canIUse.js';\nimport * as DOM from '../../dom.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../../common/lifecycle.js';\nimport * as platform from '../../../common/platform.js';\nimport { Range } from '../../../common/range.js';\nimport './contextview.css';\nexport function isAnchor(obj) {\n    const anchor = obj;\n    return !!anchor && typeof anchor.x === 'number' && typeof anchor.y === 'number';\n}\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 /* LayoutAnchorPosition.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    static { this.BUBBLE_UP_EVENTS = ['click', 'keydown', 'focus', 'blur']; }\n    static { this.BUBBLE_DOWN_EVENTS = ['click']; }\n    constructor(container, domPosition) {\n        super();\n        this.container = null;\n        this.useFixedPosition = false;\n        this.useShadowDOM = false;\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        DOM.hide(this.view);\n        this.setContainer(container, domPosition);\n        this._register(toDisposable(() => this.setContainer(null, 1 /* ContextViewDOMPosition.ABSOLUTE */)));\n    }\n    setContainer(container, domPosition) {\n        this.useFixedPosition = domPosition !== 1 /* ContextViewDOMPosition.ABSOLUTE */;\n        const usedShadowDOM = this.useShadowDOM;\n        this.useShadowDOM = domPosition === 3 /* ContextViewDOMPosition.FIXED_SHADOW */;\n        if (container === this.container && usedShadowDOM === this.useShadowDOM) {\n            return; // container is the same and no shadow DOM usage has changed\n        }\n        if (this.container) {\n            this.toDisposeOnSetContainer.dispose();\n            this.view.remove();\n            if (this.shadowRoot) {\n                this.shadowRoot = null;\n                this.shadowRootHostElement?.remove();\n                this.shadowRootHostElement = null;\n            }\n            this.container = null;\n        }\n        if (container) {\n            this.container = container;\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 monaco-component';\n        this.view.style.top = '0px';\n        this.view.style.left = '0px';\n        this.view.style.zIndex = `${2575 + (delegate.layer ?? 0)}`;\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        this.delegate.focus?.();\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        this.delegate?.layout?.();\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        const 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            const elementPosition = DOM.getDomNodePagePosition(anchor);\n            // In areas where zoom is applied to the element or its ancestors, we need to adjust the size of the element\n            // e.g. The title bar has counter zoom behavior meaning it applies the inverse of zoom level.\n            // Window Zoom Level: 1.5, Title Bar Zoom: 1/1.5, Size Multiplier: 1.5\n            const zoom = DOM.getDomNodeZoomLevel(anchor);\n            around = {\n                top: elementPosition.top * zoom,\n                left: elementPosition.left * zoom,\n                width: elementPosition.width * zoom,\n                height: elementPosition.height * zoom\n            };\n        }\n        else if (isAnchor(anchor)) {\n            around = {\n                top: anchor.y,\n                left: anchor.x,\n                width: anchor.width || 1,\n                height: anchor.height || 2\n            };\n        }\n        else {\n            around = {\n                top: anchor.posy,\n                left: anchor.posx,\n                // We are about to position the context view where the mouse\n                // cursor is. To prevent the view being exactly under the mouse\n                // when showing and thus potentially triggering an action within,\n                // we treat the mouse location like a small sized block element.\n                width: 2,\n                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 /* AnchorPosition.BELOW */;\n        const anchorAlignment = this.delegate.anchorAlignment || 0 /* AnchorAlignment.LEFT */;\n        const anchorAxisAlignment = this.delegate.anchorAxisAlignment || 0 /* AnchorAxisAlignment.VERTICAL */;\n        let top;\n        let left;\n        const activeWindow = DOM.getActiveWindow();\n        if (anchorAxisAlignment === 0 /* AnchorAxisAlignment.VERTICAL */) {\n            const verticalAnchor = { offset: around.top - activeWindow.pageYOffset, size: around.height, position: anchorPosition === 0 /* AnchorPosition.BELOW */ ? 0 /* LayoutAnchorPosition.Before */ : 1 /* LayoutAnchorPosition.After */ };\n            const horizontalAnchor = { offset: around.left, size: around.width, position: anchorAlignment === 0 /* AnchorAlignment.LEFT */ ? 0 /* LayoutAnchorPosition.Before */ : 1 /* LayoutAnchorPosition.After */, mode: LayoutAnchorMode.ALIGN };\n            top = layout(activeWindow.innerHeight, viewSizeHeight, verticalAnchor) + activeWindow.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(activeWindow.innerWidth, viewSizeWidth, horizontalAnchor);\n        }\n        else {\n            const horizontalAnchor = { offset: around.left, size: around.width, position: anchorAlignment === 0 /* AnchorAlignment.LEFT */ ? 0 /* LayoutAnchorPosition.Before */ : 1 /* LayoutAnchorPosition.After */ };\n            const verticalAnchor = { offset: around.top, size: around.height, position: anchorPosition === 0 /* AnchorPosition.BELOW */ ? 0 /* LayoutAnchorPosition.Before */ : 1 /* LayoutAnchorPosition.After */, mode: LayoutAnchorMode.ALIGN };\n            left = layout(activeWindow.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(activeWindow.innerHeight, viewSizeHeight, verticalAnchor) + activeWindow.pageYOffset;\n        }\n        this.view.classList.remove('top', 'bottom', 'left', 'right');\n        this.view.classList.add(anchorPosition === 0 /* AnchorPosition.BELOW */ ? 'bottom' : 'top');\n        this.view.classList.add(anchorAlignment === 0 /* AnchorAlignment.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?.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, DOM.getWindow(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}\nconst SHADOW_ROOT_CSS = /* css */ `\n\t:host {\n\t\tall: initial; /* 1st rule so subsequent properties are reset. */\n\t}\n\n\t.codicon[class*='codicon-'] {\n\t\tfont: normal normal normal 16px/1 codicon;\n\t\tdisplay: inline-block;\n\t\ttext-decoration: none;\n\t\ttext-rendering: auto;\n\t\ttext-align: center;\n\t\t-webkit-font-smoothing: antialiased;\n\t\t-moz-osx-font-smoothing: grayscale;\n\t\tuser-select: none;\n\t\t-webkit-user-select: none;\n\t\t-ms-user-select: none;\n\t}\n\n\t:host {\n\t\tfont-family: -apple-system, BlinkMacSystemFont, \"Segoe WPC\", \"Segoe UI\", \"HelveticaNeue-Light\", system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif;\n\t}\n\n\t:host-context(.mac) { font-family: -apple-system, BlinkMacSystemFont, sans-serif; }\n\t:host-context(.mac:lang(zh-Hans)) { font-family: -apple-system, BlinkMacSystemFont, \"PingFang SC\", \"Hiragino Sans GB\", sans-serif; }\n\t:host-context(.mac:lang(zh-Hant)) { font-family: -apple-system, BlinkMacSystemFont, \"PingFang TC\", sans-serif; }\n\t:host-context(.mac:lang(ja)) { font-family: -apple-system, BlinkMacSystemFont, \"Hiragino Kaku Gothic Pro\", sans-serif; }\n\t:host-context(.mac:lang(ko)) { font-family: -apple-system, BlinkMacSystemFont, \"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 *--------------------------------------------------------------------------------------------*/\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 } from '../../../base/common/lifecycle.js';\nimport { ILayoutService } from '../../layout/browser/layoutService.js';\nimport { getWindow } from '../../../base/browser/dom.js';\nlet ContextViewHandler = class ContextViewHandler extends Disposable {\n    constructor(layoutService) {\n        super();\n        this.layoutService = layoutService;\n        this.contextView = this._register(new ContextView(this.layoutService.mainContainer, 1 /* ContextViewDOMPosition.ABSOLUTE */));\n        this.layout();\n        this._register(layoutService.onDidLayoutContainer(() => this.layout()));\n    }\n    // ContextView\n    showContextView(delegate, container, shadowRoot) {\n        let domPosition;\n        if (container) {\n            if (container === this.layoutService.getContainer(getWindow(container))) {\n                domPosition = 1 /* ContextViewDOMPosition.ABSOLUTE */;\n            }\n            else if (shadowRoot) {\n                domPosition = 3 /* ContextViewDOMPosition.FIXED_SHADOW */;\n            }\n            else {\n                domPosition = 2 /* ContextViewDOMPosition.FIXED */;\n            }\n        }\n        else {\n            domPosition = 1 /* ContextViewDOMPosition.ABSOLUTE */;\n        }\n        this.contextView.setContainer(container ?? this.layoutService.activeContainer, domPosition);\n        this.contextView.show(delegate);\n        const openContextView = {\n            close: () => {\n                if (this.openContextView === openContextView) {\n                    this.hideContextView();\n                }\n            }\n        };\n        this.openContextView = openContextView;\n        return openContextView;\n    }\n    layout() {\n        this.contextView.layout();\n    }\n    hideContextView(data) {\n        this.contextView.hide(data);\n        this.openContextView = undefined;\n    }\n};\nContextViewHandler = __decorate([\n    __param(0, ILayoutService)\n], ContextViewHandler);\nexport { ContextViewHandler };\nexport class ContextViewService extends ContextViewHandler {\n    getContextViewElement() {\n        return this.contextView.getViewElement();\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { isHTMLElement } from '../../../../base/browser/dom.js';\nimport { CancellationTokenSource } from '../../../../base/common/cancellation.js';\nimport { isMarkdownString } from '../../../../base/common/htmlContent.js';\nimport { isFunction, isString } from '../../../../base/common/types.js';\nimport { localize } from '../../../../nls.js';\nexport class ManagedHoverWidget {\n    constructor(hoverDelegate, target, fadeInAnimation) {\n        this.hoverDelegate = hoverDelegate;\n        this.target = target;\n        this.fadeInAnimation = fadeInAnimation;\n    }\n    async update(content, focus, options) {\n        if (this._cancellationTokenSource) {\n            // there's an computation ongoing, cancel it\n            this._cancellationTokenSource.dispose(true);\n            this._cancellationTokenSource = undefined;\n        }\n        if (this.isDisposed) {\n            return;\n        }\n        let resolvedContent;\n        if (content === undefined || isString(content) || isHTMLElement(content)) {\n            resolvedContent = content;\n        }\n        else if (!isFunction(content.markdown)) {\n            resolvedContent = content.markdown ?? content.markdownNotSupportedFallback;\n        }\n        else {\n            // compute the content, potentially long-running\n            // show 'Loading' if no hover is up yet\n            if (!this._hoverWidget) {\n                this.show(localize('iconLabel.loading', \"Loading...\"), focus, options);\n            }\n            // compute the content\n            this._cancellationTokenSource = new CancellationTokenSource();\n            const token = this._cancellationTokenSource.token;\n            resolvedContent = await content.markdown(token);\n            if (resolvedContent === undefined) {\n                resolvedContent = content.markdownNotSupportedFallback;\n            }\n            if (this.isDisposed || token.isCancellationRequested) {\n                // either the widget has been closed in the meantime\n                // or there has been a new call to `update`\n                return;\n            }\n        }\n        this.show(resolvedContent, focus, options);\n    }\n    show(content, focus, options) {\n        const oldHoverWidget = this._hoverWidget;\n        if (this.hasContent(content)) {\n            const hoverOptions = {\n                content,\n                target: this.target,\n                actions: options?.actions,\n                linkHandler: options?.linkHandler,\n                trapFocus: options?.trapFocus,\n                appearance: {\n                    showPointer: this.hoverDelegate.placement === 'element',\n                    skipFadeInAnimation: !this.fadeInAnimation || !!oldHoverWidget, // do not fade in if the hover is already showing\n                    showHoverHint: options?.appearance?.showHoverHint,\n                },\n                position: {\n                    hoverPosition: 2 /* HoverPosition.BELOW */,\n                },\n            };\n            this._hoverWidget = this.hoverDelegate.showHover(hoverOptions, focus);\n        }\n        oldHoverWidget?.dispose();\n    }\n    hasContent(content) {\n        if (!content) {\n            return false;\n        }\n        if (isMarkdownString(content)) {\n            return !!content.value;\n        }\n        return true;\n    }\n    get isDisposed() {\n        return this._hoverWidget?.isDisposed;\n    }\n    dispose() {\n        this._hoverWidget?.dispose();\n        this._cancellationTokenSource?.dispose(true);\n        this._cancellationTokenSource = 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 { registerSingleton } from '../../../../platform/instantiation/common/extensions.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { editorHoverBorder } from '../../../../platform/theme/common/colorRegistry.js';\nimport { IHoverService } from '../../../../platform/hover/browser/hover.js';\nimport { IContextMenuService } from '../../../../platform/contextview/browser/contextView.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { HoverWidget } from './hoverWidget.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../../../base/common/lifecycle.js';\nimport { addDisposableListener, EventType, getActiveElement, isAncestorOfActiveElement, isAncestor, getWindow, isHTMLElement } from '../../../../base/browser/dom.js';\nimport { IKeybindingService } from '../../../../platform/keybinding/common/keybinding.js';\nimport { StandardKeyboardEvent } from '../../../../base/browser/keyboardEvent.js';\nimport { IAccessibilityService } from '../../../../platform/accessibility/common/accessibility.js';\nimport { ILayoutService } from '../../../../platform/layout/browser/layoutService.js';\nimport { mainWindow } from '../../../../base/browser/window.js';\nimport { ContextViewHandler } from '../../../../platform/contextview/browser/contextViewService.js';\nimport { ManagedHoverWidget } from './updatableHoverWidget.js';\nimport { TimeoutTimer } from '../../../../base/common/async.js';\nlet HoverService = class HoverService extends Disposable {\n    constructor(_instantiationService, contextMenuService, _keybindingService, _layoutService, _accessibilityService) {\n        super();\n        this._instantiationService = _instantiationService;\n        this._keybindingService = _keybindingService;\n        this._layoutService = _layoutService;\n        this._accessibilityService = _accessibilityService;\n        this._managedHovers = new Map();\n        contextMenuService.onDidShowContextMenu(() => this.hideHover());\n        this._contextViewHandler = this._register(new ContextViewHandler(this._layoutService));\n    }\n    showHover(options, focus, skipLastFocusedUpdate) {\n        if (getHoverOptionsIdentity(this._currentHoverOptions) === getHoverOptionsIdentity(options)) {\n            return undefined;\n        }\n        if (this._currentHover && this._currentHoverOptions?.persistence?.sticky) {\n            return undefined;\n        }\n        this._currentHoverOptions = options;\n        this._lastHoverOptions = options;\n        const trapFocus = options.trapFocus || this._accessibilityService.isScreenReaderOptimized();\n        const activeElement = getActiveElement();\n        // HACK, remove this check when #189076 is fixed\n        if (!skipLastFocusedUpdate) {\n            if (trapFocus && activeElement) {\n                if (!activeElement.classList.contains('monaco-hover')) {\n                    this._lastFocusedElementBeforeOpen = activeElement;\n                }\n            }\n            else {\n                this._lastFocusedElementBeforeOpen = undefined;\n            }\n        }\n        const hoverDisposables = new DisposableStore();\n        const hover = this._instantiationService.createInstance(HoverWidget, options);\n        if (options.persistence?.sticky) {\n            hover.isLocked = true;\n        }\n        hover.onDispose(() => {\n            const hoverWasFocused = this._currentHover?.domNode && isAncestorOfActiveElement(this._currentHover.domNode);\n            if (hoverWasFocused) {\n                // Required to handle cases such as closing the hover with the escape key\n                this._lastFocusedElementBeforeOpen?.focus();\n            }\n            // Only clear the current options if it's the current hover, the current options help\n            // reduce flickering when the same hover is shown multiple times\n            if (this._currentHoverOptions === options) {\n                this._currentHoverOptions = undefined;\n            }\n            hoverDisposables.dispose();\n        }, undefined, hoverDisposables);\n        // Set the container explicitly to enable aux window support\n        if (!options.container) {\n            const targetElement = isHTMLElement(options.target) ? options.target : options.target.targetElements[0];\n            options.container = this._layoutService.getContainer(getWindow(targetElement));\n        }\n        this._contextViewHandler.showContextView(new HoverContextViewDelegate(hover, focus), options.container);\n        hover.onRequestLayout(() => this._contextViewHandler.layout(), undefined, hoverDisposables);\n        if (options.persistence?.sticky) {\n            hoverDisposables.add(addDisposableListener(getWindow(options.container).document, EventType.MOUSE_DOWN, e => {\n                if (!isAncestor(e.target, hover.domNode)) {\n                    this.doHideHover();\n                }\n            }));\n        }\n        else {\n            if ('targetElements' in options.target) {\n                for (const element of options.target.targetElements) {\n                    hoverDisposables.add(addDisposableListener(element, EventType.CLICK, () => this.hideHover()));\n                }\n            }\n            else {\n                hoverDisposables.add(addDisposableListener(options.target, EventType.CLICK, () => this.hideHover()));\n            }\n            const focusedElement = getActiveElement();\n            if (focusedElement) {\n                const focusedElementDocument = getWindow(focusedElement).document;\n                hoverDisposables.add(addDisposableListener(focusedElement, EventType.KEY_DOWN, e => this._keyDown(e, hover, !!options.persistence?.hideOnKeyDown)));\n                hoverDisposables.add(addDisposableListener(focusedElementDocument, EventType.KEY_DOWN, e => this._keyDown(e, hover, !!options.persistence?.hideOnKeyDown)));\n                hoverDisposables.add(addDisposableListener(focusedElement, EventType.KEY_UP, e => this._keyUp(e, hover)));\n                hoverDisposables.add(addDisposableListener(focusedElementDocument, EventType.KEY_UP, e => this._keyUp(e, hover)));\n            }\n        }\n        if ('IntersectionObserver' in mainWindow) {\n            const observer = new IntersectionObserver(e => this._intersectionChange(e, hover), { threshold: 0 });\n            const firstTargetElement = 'targetElements' in options.target ? options.target.targetElements[0] : options.target;\n            observer.observe(firstTargetElement);\n            hoverDisposables.add(toDisposable(() => observer.disconnect()));\n        }\n        this._currentHover = hover;\n        return hover;\n    }\n    hideHover() {\n        if (this._currentHover?.isLocked || !this._currentHoverOptions) {\n            return;\n        }\n        this.doHideHover();\n    }\n    doHideHover() {\n        this._currentHover = undefined;\n        this._currentHoverOptions = undefined;\n        this._contextViewHandler.hideContextView();\n    }\n    _intersectionChange(entries, hover) {\n        const entry = entries[entries.length - 1];\n        if (!entry.isIntersecting) {\n            hover.dispose();\n        }\n    }\n    showAndFocusLastHover() {\n        if (!this._lastHoverOptions) {\n            return;\n        }\n        this.showHover(this._lastHoverOptions, true, true);\n    }\n    _keyDown(e, hover, hideOnKeyDown) {\n        if (e.key === 'Alt') {\n            hover.isLocked = true;\n            return;\n        }\n        const event = new StandardKeyboardEvent(e);\n        const keybinding = this._keybindingService.resolveKeyboardEvent(event);\n        if (keybinding.getSingleModifierDispatchChords().some(value => !!value) || this._keybindingService.softDispatch(event, event.target).kind !== 0 /* ResultKind.NoMatchingKb */) {\n            return;\n        }\n        if (hideOnKeyDown && (!this._currentHoverOptions?.trapFocus || e.key !== 'Tab')) {\n            this.hideHover();\n            this._lastFocusedElementBeforeOpen?.focus();\n        }\n    }\n    _keyUp(e, hover) {\n        if (e.key === 'Alt') {\n            hover.isLocked = false;\n            // Hide if alt is released while the mouse is not over hover/target\n            if (!hover.isMouseIn) {\n                this.hideHover();\n                this._lastFocusedElementBeforeOpen?.focus();\n            }\n        }\n    }\n    // TODO: Investigate performance of this function. There seems to be a lot of content created\n    //       and thrown away on start up\n    setupManagedHover(hoverDelegate, targetElement, content, options) {\n        targetElement.setAttribute('custom-hover', 'true');\n        if (targetElement.title !== '') {\n            console.warn('HTML element already has a title attribute, which will conflict with the custom hover. Please remove the title attribute.');\n            console.trace('Stack trace:', targetElement.title);\n            targetElement.title = '';\n        }\n        let hoverPreparation;\n        let hoverWidget;\n        const hideHover = (disposeWidget, disposePreparation) => {\n            const hadHover = hoverWidget !== undefined;\n            if (disposeWidget) {\n                hoverWidget?.dispose();\n                hoverWidget = undefined;\n            }\n            if (disposePreparation) {\n                hoverPreparation?.dispose();\n                hoverPreparation = undefined;\n            }\n            if (hadHover) {\n                hoverDelegate.onDidHideHover?.();\n                hoverWidget = undefined;\n            }\n        };\n        const triggerShowHover = (delay, focus, target, trapFocus) => {\n            return new TimeoutTimer(async () => {\n                if (!hoverWidget || hoverWidget.isDisposed) {\n                    hoverWidget = new ManagedHoverWidget(hoverDelegate, target || targetElement, delay > 0);\n                    await hoverWidget.update(typeof content === 'function' ? content() : content, focus, { ...options, trapFocus });\n                }\n            }, delay);\n        };\n        let isMouseDown = false;\n        const mouseDownEmitter = addDisposableListener(targetElement, EventType.MOUSE_DOWN, () => {\n            isMouseDown = true;\n            hideHover(true, true);\n        }, true);\n        const mouseUpEmitter = addDisposableListener(targetElement, EventType.MOUSE_UP, () => {\n            isMouseDown = false;\n        }, true);\n        const mouseLeaveEmitter = addDisposableListener(targetElement, EventType.MOUSE_LEAVE, (e) => {\n            isMouseDown = false;\n            hideHover(false, e.fromElement === targetElement);\n        }, true);\n        const onMouseOver = (e) => {\n            if (hoverPreparation) {\n                return;\n            }\n            const toDispose = new DisposableStore();\n            const target = {\n                targetElements: [targetElement],\n                dispose: () => { }\n            };\n            if (hoverDelegate.placement === undefined || hoverDelegate.placement === 'mouse') {\n                // track the mouse position\n                const onMouseMove = (e) => {\n                    target.x = e.x + 10;\n                    if ((isHTMLElement(e.target)) && getHoverTargetElement(e.target, targetElement) !== targetElement) {\n                        hideHover(true, true);\n                    }\n                };\n                toDispose.add(addDisposableListener(targetElement, EventType.MOUSE_MOVE, onMouseMove, true));\n            }\n            hoverPreparation = toDispose;\n            if ((isHTMLElement(e.target)) && getHoverTargetElement(e.target, targetElement) !== targetElement) {\n                return; // Do not show hover when the mouse is over another hover target\n            }\n            toDispose.add(triggerShowHover(hoverDelegate.delay, false, target));\n        };\n        const mouseOverDomEmitter = addDisposableListener(targetElement, EventType.MOUSE_OVER, onMouseOver, true);\n        const onFocus = () => {\n            if (isMouseDown || hoverPreparation) {\n                return;\n            }\n            const target = {\n                targetElements: [targetElement],\n                dispose: () => { }\n            };\n            const toDispose = new DisposableStore();\n            const onBlur = () => hideHover(true, true);\n            toDispose.add(addDisposableListener(targetElement, EventType.BLUR, onBlur, true));\n            toDispose.add(triggerShowHover(hoverDelegate.delay, false, target));\n            hoverPreparation = toDispose;\n        };\n        // Do not show hover when focusing an input or textarea\n        let focusDomEmitter;\n        const tagName = targetElement.tagName.toLowerCase();\n        if (tagName !== 'input' && tagName !== 'textarea') {\n            focusDomEmitter = addDisposableListener(targetElement, EventType.FOCUS, onFocus, true);\n        }\n        const hover = {\n            show: focus => {\n                hideHover(false, true); // terminate a ongoing mouse over preparation\n                triggerShowHover(0, focus, undefined, focus); // show hover immediately\n            },\n            hide: () => {\n                hideHover(true, true);\n            },\n            update: async (newContent, hoverOptions) => {\n                content = newContent;\n                await hoverWidget?.update(content, undefined, hoverOptions);\n            },\n            dispose: () => {\n                this._managedHovers.delete(targetElement);\n                mouseOverDomEmitter.dispose();\n                mouseLeaveEmitter.dispose();\n                mouseDownEmitter.dispose();\n                mouseUpEmitter.dispose();\n                focusDomEmitter?.dispose();\n                hideHover(true, true);\n            }\n        };\n        this._managedHovers.set(targetElement, hover);\n        return hover;\n    }\n    showManagedHover(target) {\n        const hover = this._managedHovers.get(target);\n        if (hover) {\n            hover.show(true);\n        }\n    }\n    dispose() {\n        this._managedHovers.forEach(hover => hover.dispose());\n        super.dispose();\n    }\n};\nHoverService = __decorate([\n    __param(0, IInstantiationService),\n    __param(1, IContextMenuService),\n    __param(2, IKeybindingService),\n    __param(3, ILayoutService),\n    __param(4, IAccessibilityService)\n], HoverService);\nexport { HoverService };\nfunction getHoverOptionsIdentity(options) {\n    if (options === undefined) {\n        return undefined;\n    }\n    return options?.id ?? options;\n}\nclass HoverContextViewDelegate {\n    get anchorPosition() {\n        return this._hover.anchor;\n    }\n    constructor(_hover, _focus = false) {\n        this._hover = _hover;\n        this._focus = _focus;\n        // Render over all other context views\n        this.layer = 1;\n    }\n    render(container) {\n        this._hover.render(container);\n        if (this._focus) {\n            this._hover.focus();\n        }\n        return this._hover;\n    }\n    getAnchor() {\n        return {\n            x: this._hover.x,\n            y: this._hover.y\n        };\n    }\n    layout() {\n        this._hover.layout();\n    }\n}\nfunction getHoverTargetElement(element, stopElement) {\n    stopElement = stopElement ?? getWindow(element).document.body;\n    while (!element.hasAttribute('custom-hover') && element !== stopElement) {\n        element = element.parentElement;\n    }\n    return element;\n}\nregisterSingleton(IHoverService, HoverService, 1 /* InstantiationType.Delayed */);\nregisterThemingParticipant((theme, collector) => {\n    const hoverBorder = theme.getColor(editorHoverBorder);\n    if (hoverBorder) {\n        collector.addRule(`.monaco-workbench .workbench-hover .hover-row:not(:first-child):not(:empty) { border-top: 1px solid ${hoverBorder.transparent(0.5)}; }`);\n        collector.addRule(`.monaco-workbench .workbench-hover hr { border-top: 1px solid ${hoverBorder.transparent(0.5)}; }`);\n    }\n});\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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');\nexport class ResourceEdit {\n    constructor(metadata) {\n        this.metadata = metadata;\n    }\n    static convert(edit) {\n        return edit.edits.map(edit => {\n            if (ResourceTextEdit.is(edit)) {\n                return ResourceTextEdit.lift(edit);\n            }\n            if (ResourceFileEdit.is(edit)) {\n                return ResourceFileEdit.lift(edit);\n            }\n            throw new Error('Unsupported edit');\n        });\n    }\n}\nexport class ResourceTextEdit extends ResourceEdit {\n    static is(candidate) {\n        if (candidate instanceof ResourceTextEdit) {\n            return true;\n        }\n        return isObject(candidate)\n            && URI.isUri(candidate.resource)\n            && isObject(candidate.textEdit);\n    }\n    static lift(edit) {\n        if (edit instanceof ResourceTextEdit) {\n            return edit;\n        }\n        else {\n            return new ResourceTextEdit(edit.resource, edit.textEdit, edit.versionId, edit.metadata);\n        }\n    }\n    constructor(resource, textEdit, versionId = undefined, metadata) {\n        super(metadata);\n        this.resource = resource;\n        this.textEdit = textEdit;\n        this.versionId = versionId;\n    }\n}\nexport class ResourceFileEdit extends ResourceEdit {\n    static is(candidate) {\n        if (candidate instanceof ResourceFileEdit) {\n            return true;\n        }\n        else {\n            return isObject(candidate)\n                && (Boolean(candidate.newResource) || Boolean(candidate.oldResource));\n        }\n    }\n    static lift(edit) {\n        if (edit instanceof ResourceFileEdit) {\n            return edit;\n        }\n        else {\n            return new ResourceFileEdit(edit.oldResource, edit.newResource, edit.options, edit.metadata);\n        }\n    }\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 *--------------------------------------------------------------------------------------------*/\nexport const diffEditorDefaultOptions = {\n    enableSplitViewResizing: true,\n    splitViewDefaultRatio: 0.5,\n    renderSideBySide: true,\n    renderMarginRevertIcon: true,\n    renderGutterMenu: true,\n    maxComputationTime: 5000,\n    maxFileSize: 50,\n    ignoreTrimWhitespace: true,\n    renderIndicators: true,\n    originalEditable: false,\n    diffCodeLens: false,\n    renderOverviewRuler: true,\n    diffWordWrap: 'inherit',\n    diffAlgorithm: 'advanced',\n    accessibilityVerbose: false,\n    experimental: {\n        showMoves: false,\n        showEmptyDecorations: true,\n        useTrueInlineView: false,\n    },\n    hideUnchangedRegions: {\n        enabled: false,\n        contextLineCount: 3,\n        minimumLineCount: 3,\n        revealLineCount: 20,\n    },\n    isInEmbeddedEditor: false,\n    onlyShowAccessibleDiffViewer: false,\n    renderSideBySideInlineBreakpoint: 900,\n    useInlineViewWhenSpaceIsLimited: true,\n    compactMode: 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 { diffEditorDefaultOptions } from './diffEditor.js';\nimport { editorOptionsRegistry } from './editorOptions.js';\nimport { EDITOR_MODEL_DEFAULTS } from '../core/textModelDefaults.js';\nimport * as nls from '../../../nls.js';\nimport { Extensions } from '../../../platform/configuration/common/configurationRegistry.js';\nimport { Registry } from '../../../platform/registry/common/platform.js';\nexport const editorConfigurationBaseNode = Object.freeze({\n    id: 'editor',\n    order: 5,\n    type: 'object',\n    title: nls.localize('editorConfigurationTitle', \"Editor\"),\n    scope: 5 /* ConfigurationScope.LANGUAGE_OVERRIDABLE */,\n});\nconst editorConfiguration = {\n    ...editorConfigurationBaseNode,\n    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 {0} is on.\", '`#editor.detectIndentation#`')\n        },\n        'editor.indentSize': {\n            'anyOf': [\n                {\n                    type: 'string',\n                    enum: ['tabSize']\n                },\n                {\n                    type: 'number',\n                    minimum: 1\n                }\n            ],\n            default: 'tabSize',\n            markdownDescription: 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 {0} is on.\", '`#editor.detectIndentation#`')\n        },\n        'editor.detectIndentation': {\n            type: 'boolean',\n            default: EDITOR_MODEL_DEFAULTS.detectIndentation,\n            markdownDescription: nls.localize('detectIndentation', \"Controls whether {0} and {1} will be automatically detected when a file is opened based on the file contents.\", '`#editor.tabSize#`', '`#editor.insertSpaces#`')\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            enum: ['off', 'currentDocument', 'matchingDocuments', 'allDocuments'],\n            default: 'matchingDocuments',\n            enumDescriptions: [\n                nls.localize('wordBasedSuggestions.off', 'Turn off Word Based Suggestions.'),\n                nls.localize('wordBasedSuggestions.currentDocument', 'Only suggest words from the active document.'),\n                nls.localize('wordBasedSuggestions.matchingDocuments', 'Suggest words from all open documents of the same language.'),\n                nls.localize('wordBasedSuggestions.allDocuments', 'Suggest words from all open documents.')\n            ],\n            description: nls.localize('wordBasedSuggestions', \"Controls whether completions should be computed based on words in the document and from which documents they 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: 20_000,\n            description: nls.localize('maxTokenizationLineLength', \"Lines above this length will not be tokenized for performance reasons\")\n        },\n        'editor.experimental.asyncTokenization': {\n            type: 'boolean',\n            default: true,\n            description: nls.localize('editor.experimental.asyncTokenization', \"Controls whether the tokenization should happen asynchronously on a web worker.\"),\n            tags: ['experimental'],\n        },\n        'editor.experimental.asyncTokenizationLogging': {\n            type: 'boolean',\n            default: false,\n            description: nls.localize('editor.experimental.asyncTokenizationLogging', \"Controls whether async tokenization should be logged. For debugging only.\"),\n        },\n        'editor.experimental.asyncTokenizationVerification': {\n            type: 'boolean',\n            default: false,\n            description: nls.localize('editor.experimental.asyncTokenizationVerification', \"Controls whether async tokenization should be verified against legacy background tokenization. Might slow down tokenization. For debugging only.\"),\n            tags: ['experimental'],\n        },\n        'editor.experimental.treeSitterTelemetry': {\n            type: 'boolean',\n            default: false,\n            markdownDescription: nls.localize('editor.experimental.treeSitterTelemetry', \"Controls whether tree sitter parsing should be turned on and telemetry collected. Setting `editor.experimental.preferTreeSitter` for specific languages will take precedence.\"),\n            tags: ['experimental']\n        },\n        'editor.language.brackets': {\n            type: ['array', 'null'],\n            default: null, // We want to distinguish the empty array from not configured.\n            description: nls.localize('schema.brackets', 'Defines the bracket symbols that increase or decrease the indentation.'),\n            items: {\n                type: 'array',\n                items: [\n                    {\n                        type: 'string',\n                        description: nls.localize('schema.openBracket', 'The opening bracket character or string sequence.')\n                    },\n                    {\n                        type: 'string',\n                        description: nls.localize('schema.closeBracket', 'The closing bracket character or string sequence.')\n                    }\n                ]\n            }\n        },\n        'editor.language.colorizedBracketPairs': {\n            type: ['array', 'null'],\n            default: null, // We want to distinguish the empty array from not configured.\n            description: nls.localize('schema.colorizedBracketPairs', 'Defines the bracket pairs that are colorized by their nesting level if bracket pair colorization is enabled.'),\n            items: {\n                type: 'array',\n                items: [\n                    {\n                        type: 'string',\n                        description: nls.localize('schema.openBracket', 'The opening bracket character or string sequence.')\n                    },\n                    {\n                        type: 'string',\n                        description: nls.localize('schema.closeBracket', 'The closing bracket character or string sequence.')\n                    }\n                ]\n            }\n        },\n        'diffEditor.maxComputationTime': {\n            type: 'number',\n            default: diffEditorDefaultOptions.maxComputationTime,\n            description: nls.localize('maxComputationTime', \"Timeout in milliseconds after which diff computation is cancelled. Use 0 for no timeout.\")\n        },\n        'diffEditor.maxFileSize': {\n            type: 'number',\n            default: diffEditorDefaultOptions.maxFileSize,\n            description: nls.localize('maxFileSize', \"Maximum file size in MB for which to compute diffs. Use 0 for no limit.\")\n        },\n        'diffEditor.renderSideBySide': {\n            type: 'boolean',\n            default: diffEditorDefaultOptions.renderSideBySide,\n            description: nls.localize('sideBySide', \"Controls whether the diff editor shows the diff side by side or inline.\")\n        },\n        'diffEditor.renderSideBySideInlineBreakpoint': {\n            type: 'number',\n            default: diffEditorDefaultOptions.renderSideBySideInlineBreakpoint,\n            description: nls.localize('renderSideBySideInlineBreakpoint', \"If the diff editor width is smaller than this value, the inline view is used.\")\n        },\n        'diffEditor.useInlineViewWhenSpaceIsLimited': {\n            type: 'boolean',\n            default: diffEditorDefaultOptions.useInlineViewWhenSpaceIsLimited,\n            description: nls.localize('useInlineViewWhenSpaceIsLimited', \"If enabled and the editor width is too small, the inline view is used.\")\n        },\n        'diffEditor.renderMarginRevertIcon': {\n            type: 'boolean',\n            default: diffEditorDefaultOptions.renderMarginRevertIcon,\n            description: nls.localize('renderMarginRevertIcon', \"When enabled, the diff editor shows arrows in its glyph margin to revert changes.\")\n        },\n        'diffEditor.renderGutterMenu': {\n            type: 'boolean',\n            default: diffEditorDefaultOptions.renderGutterMenu,\n            description: nls.localize('renderGutterMenu', \"When enabled, the diff editor shows a special gutter for revert and stage actions.\")\n        },\n        'diffEditor.ignoreTrimWhitespace': {\n            type: 'boolean',\n            default: diffEditorDefaultOptions.ignoreTrimWhitespace,\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: diffEditorDefaultOptions.renderIndicators,\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: diffEditorDefaultOptions.diffCodeLens,\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: diffEditorDefaultOptions.diffWordWrap,\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 {0} setting.\", '`#editor.wordWrap#`'),\n            ]\n        },\n        'diffEditor.diffAlgorithm': {\n            type: 'string',\n            enum: ['legacy', 'advanced'],\n            default: diffEditorDefaultOptions.diffAlgorithm,\n            markdownEnumDescriptions: [\n                nls.localize('diffAlgorithm.legacy', \"Uses the legacy diffing algorithm.\"),\n                nls.localize('diffAlgorithm.advanced', \"Uses the advanced diffing algorithm.\"),\n            ],\n            tags: ['experimental'],\n        },\n        'diffEditor.hideUnchangedRegions.enabled': {\n            type: 'boolean',\n            default: diffEditorDefaultOptions.hideUnchangedRegions.enabled,\n            markdownDescription: nls.localize('hideUnchangedRegions.enabled', \"Controls whether the diff editor shows unchanged regions.\"),\n        },\n        'diffEditor.hideUnchangedRegions.revealLineCount': {\n            type: 'integer',\n            default: diffEditorDefaultOptions.hideUnchangedRegions.revealLineCount,\n            markdownDescription: nls.localize('hideUnchangedRegions.revealLineCount', \"Controls how many lines are used for unchanged regions.\"),\n            minimum: 1,\n        },\n        'diffEditor.hideUnchangedRegions.minimumLineCount': {\n            type: 'integer',\n            default: diffEditorDefaultOptions.hideUnchangedRegions.minimumLineCount,\n            markdownDescription: nls.localize('hideUnchangedRegions.minimumLineCount', \"Controls how many lines are used as a minimum for unchanged regions.\"),\n            minimum: 1,\n        },\n        'diffEditor.hideUnchangedRegions.contextLineCount': {\n            type: 'integer',\n            default: diffEditorDefaultOptions.hideUnchangedRegions.contextLineCount,\n            markdownDescription: nls.localize('hideUnchangedRegions.contextLineCount', \"Controls how many lines are used as context when comparing unchanged regions.\"),\n            minimum: 1,\n        },\n        'diffEditor.experimental.showMoves': {\n            type: 'boolean',\n            default: diffEditorDefaultOptions.experimental.showMoves,\n            markdownDescription: nls.localize('showMoves', \"Controls whether the diff editor should show detected code moves.\")\n        },\n        'diffEditor.experimental.showEmptyDecorations': {\n            type: 'boolean',\n            default: diffEditorDefaultOptions.experimental.showEmptyDecorations,\n            description: nls.localize('showEmptyDecorations', \"Controls whether the diff editor shows empty decorations to see where characters got inserted or deleted.\"),\n        },\n        'diffEditor.experimental.useTrueInlineView': {\n            type: 'boolean',\n            default: diffEditorDefaultOptions.experimental.useTrueInlineView,\n            description: nls.localize('useTrueInlineView', \"If enabled and the editor uses the inline view, word changes are rendered inline.\"),\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 (const key in schema) {\n                if (Object.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}\nconst configurationRegistry = Registry.as(Extensions.Configuration);\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 { 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 * as arrays from '../../../base/common/arrays.js';\nimport { ResourceMap } from '../../../base/common/map.js';\nimport * as objects from '../../../base/common/objects.js';\nimport * as types from '../../../base/common/types.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { addToValueTree, getConfigurationValue, removeFromValueTree, toValuesTree } from './configuration.js';\nimport { Extensions, overrideIdentifiersFromKey, OVERRIDE_PROPERTY_REGEX } from './configurationRegistry.js';\nimport { Registry } from '../../registry/common/platform.js';\nfunction freeze(data) {\n    return Object.isFrozen(data) ? data : objects.deepFreeze(data);\n}\nexport class ConfigurationModel {\n    static createEmptyModel(logService) {\n        return new ConfigurationModel({}, [], [], undefined, logService);\n    }\n    constructor(_contents, _keys, _overrides, raw, logService) {\n        this._contents = _contents;\n        this._keys = _keys;\n        this._overrides = _overrides;\n        this.raw = raw;\n        this.logService = logService;\n        this.overrideConfigurations = new Map();\n    }\n    get rawConfiguration() {\n        if (!this._rawConfiguration) {\n            if (this.raw?.length) {\n                const rawConfigurationModels = this.raw.map(raw => {\n                    if (raw instanceof ConfigurationModel) {\n                        return raw;\n                    }\n                    const parser = new ConfigurationModelParser('', this.logService);\n                    parser.parseRaw(raw);\n                    return parser.configurationModel;\n                });\n                this._rawConfiguration = rawConfigurationModels.reduce((previous, current) => current === previous ? current : previous.merge(current), rawConfigurationModels[0]);\n            }\n            else {\n                // raw is same as current\n                this._rawConfiguration = this;\n            }\n        }\n        return this._rawConfiguration;\n    }\n    get contents() {\n        return this._contents;\n    }\n    get overrides() {\n        return this._overrides;\n    }\n    get keys() {\n        return 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    inspect(section, overrideIdentifier) {\n        const that = this;\n        return {\n            get value() {\n                return freeze(that.rawConfiguration.getValue(section));\n            },\n            get override() {\n                return overrideIdentifier ? freeze(that.rawConfiguration.getOverrideValue(section, overrideIdentifier)) : undefined;\n            },\n            get merged() {\n                return freeze(overrideIdentifier ? that.rawConfiguration.override(overrideIdentifier).getValue(section) : that.rawConfiguration.getValue(section));\n            },\n            get overrides() {\n                const overrides = [];\n                for (const { contents, identifiers, keys } of that.rawConfiguration.overrides) {\n                    const value = new ConfigurationModel(contents, keys, [], undefined, that.logService).getValue(section);\n                    if (value !== undefined) {\n                        overrides.push({ identifiers, value });\n                    }\n                }\n                return overrides.length ? freeze(overrides) : undefined;\n            }\n        };\n    }\n    getOverrideValue(section, overrideIdentifier) {\n        const overrideContents = this.getContentsForOverrideIdentifer(overrideIdentifier);\n        return overrideContents\n            ? section ? getConfigurationValue(overrideContents, section) : overrideContents\n            : undefined;\n    }\n    override(identifier) {\n        let overrideConfigurationModel = this.overrideConfigurations.get(identifier);\n        if (!overrideConfigurationModel) {\n            overrideConfigurationModel = this.createOverrideConfigurationModel(identifier);\n            this.overrideConfigurations.set(identifier, overrideConfigurationModel);\n        }\n        return overrideConfigurationModel;\n    }\n    merge(...others) {\n        const contents = objects.deepClone(this.contents);\n        const overrides = objects.deepClone(this.overrides);\n        const keys = [...this.keys];\n        const raws = this.raw?.length ? [...this.raw] : [this];\n        for (const other of others) {\n            raws.push(...(other.raw?.length ? other.raw : [other]));\n            if (other.isEmpty()) {\n                continue;\n            }\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                    override.keys.push(...otherOverride.keys);\n                    override.keys = arrays.distinct(override.keys);\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, raws.every(raw => raw instanceof ConfigurationModel) ? undefined : raws, this.logService);\n    }\n    createOverrideConfigurationModel(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        const contents = {};\n        for (const key of arrays.distinct([...Object.keys(this.contents), ...Object.keys(overrideContents)])) {\n            let contentsForKey = this.contents[key];\n            const 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, undefined, this.logService);\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    getContentsForOverrideIdentifer(identifier) {\n        let contentsForIdentifierOnly = null;\n        let contents = null;\n        const mergeContents = (contentsToMerge) => {\n            if (contentsToMerge) {\n                if (contents) {\n                    this.mergeContents(contents, contentsToMerge);\n                }\n                else {\n                    contents = objects.deepClone(contentsToMerge);\n                }\n            }\n        };\n        for (const override of this.overrides) {\n            if (override.identifiers.length === 1 && override.identifiers[0] === identifier) {\n                contentsForIdentifierOnly = override.contents;\n            }\n            else if (override.identifiers.includes(identifier)) {\n                mergeContents(override.contents);\n            }\n        }\n        // Merge contents of the identifier only at the end to take precedence.\n        mergeContents(contentsForIdentifierOnly);\n        return contents;\n    }\n    toJSON() {\n        return {\n            contents: this.contents,\n            overrides: this.overrides,\n            keys: this.keys\n        };\n    }\n    setValue(key, value) {\n        this.updateValue(key, value, false);\n    }\n    removeValue(key) {\n        const index = this.keys.indexOf(key);\n        if (index === -1) {\n            return;\n        }\n        this.keys.splice(index, 1);\n        removeFromValueTree(this.contents, key);\n        if (OVERRIDE_PROPERTY_REGEX.test(key)) {\n            this.overrides.splice(this.overrides.findIndex(o => arrays.equals(o.identifiers, overrideIdentifiersFromKey(key))), 1);\n        }\n    }\n    updateValue(key, value, add) {\n        addToValueTree(this.contents, key, value, e => this.logService.error(e));\n        add = add || this.keys.indexOf(key) === -1;\n        if (add) {\n            this.keys.push(key);\n        }\n        if (OVERRIDE_PROPERTY_REGEX.test(key)) {\n            const identifiers = overrideIdentifiersFromKey(key);\n            const override = {\n                identifiers,\n                keys: Object.keys(this.contents[key]),\n                contents: toValuesTree(this.contents[key], message => this.logService.error(message)),\n            };\n            const index = this.overrides.findIndex(o => arrays.equals(o.identifiers, identifiers));\n            if (index !== -1) {\n                this.overrides[index] = override;\n            }\n            else {\n                this.overrides.push(override);\n            }\n        }\n    }\n}\nexport class ConfigurationModelParser {\n    constructor(_name, logService) {\n        this._name = _name;\n        this.logService = logService;\n        this._raw = null;\n        this._configurationModel = null;\n        this._restrictedConfigurations = [];\n    }\n    get configurationModel() {\n        return this._configurationModel || ConfigurationModel.createEmptyModel(this.logService);\n    }\n    parseRaw(raw, options) {\n        this._raw = raw;\n        const { contents, keys, overrides, restricted, hasExcludedProperties } = this.doParseRaw(raw, options);\n        this._configurationModel = new ConfigurationModel(contents, keys, overrides, hasExcludedProperties ? [raw] : undefined /* raw has not changed */, this.logService);\n        this._restrictedConfigurations = restricted || [];\n    }\n    doParseRaw(raw, options) {\n        const configurationProperties = Registry.as(Extensions.Configuration).getConfigurationProperties();\n        const filtered = this.filter(raw, configurationProperties, true, options);\n        raw = filtered.raw;\n        const contents = toValuesTree(raw, message => this.logService.error(`Conflict in settings file ${this._name}: ${message}`));\n        const keys = Object.keys(raw);\n        const overrides = this.toOverrides(raw, message => this.logService.error(`Conflict in settings file ${this._name}: ${message}`));\n        return { contents, keys, overrides, restricted: filtered.restricted, hasExcludedProperties: filtered.hasExcludedProperties };\n    }\n    filter(properties, configurationProperties, filterOverriddenProperties, options) {\n        let hasExcludedProperties = false;\n        if (!options?.scopes && !options?.skipRestricted && !options?.exclude?.length) {\n            return { raw: properties, restricted: [], hasExcludedProperties };\n        }\n        const raw = {};\n        const restricted = [];\n        for (const key in properties) {\n            if (OVERRIDE_PROPERTY_REGEX.test(key) && filterOverriddenProperties) {\n                const result = this.filter(properties[key], configurationProperties, false, options);\n                raw[key] = result.raw;\n                hasExcludedProperties = hasExcludedProperties || result.hasExcludedProperties;\n                restricted.push(...result.restricted);\n            }\n            else {\n                const propertySchema = configurationProperties[key];\n                const scope = propertySchema ? typeof propertySchema.scope !== 'undefined' ? propertySchema.scope : 3 /* ConfigurationScope.WINDOW */ : undefined;\n                if (propertySchema?.restricted) {\n                    restricted.push(key);\n                }\n                if (!options.exclude?.includes(key) /* Check exclude */\n                    && (options.include?.includes(key) /* Check include */\n                        || ((scope === undefined || options.scopes === undefined || options.scopes.includes(scope)) /* Check scopes */\n                            && !(options.skipRestricted && propertySchema?.restricted)))) /* Check restricted */ {\n                    raw[key] = properties[key];\n                }\n                else {\n                    hasExcludedProperties = true;\n                }\n            }\n        }\n        return { raw, restricted, hasExcludedProperties };\n    }\n    toOverrides(raw, conflictReporter) {\n        const overrides = [];\n        for (const key of Object.keys(raw)) {\n            if (OVERRIDE_PROPERTY_REGEX.test(key)) {\n                const overrideRaw = {};\n                for (const keyInOverrideRaw in raw[key]) {\n                    overrideRaw[keyInOverrideRaw] = raw[key][keyInOverrideRaw];\n                }\n                overrides.push({\n                    identifiers: overrideIdentifiersFromKey(key),\n                    keys: Object.keys(overrideRaw),\n                    contents: toValuesTree(overrideRaw, conflictReporter)\n                });\n            }\n        }\n        return overrides;\n    }\n}\nclass ConfigurationInspectValue {\n    constructor(key, overrides, _value, overrideIdentifiers, defaultConfiguration, policyConfiguration, applicationConfiguration, userConfiguration, localUserConfiguration, remoteUserConfiguration, workspaceConfiguration, folderConfigurationModel, memoryConfigurationModel) {\n        this.key = key;\n        this.overrides = overrides;\n        this._value = _value;\n        this.overrideIdentifiers = overrideIdentifiers;\n        this.defaultConfiguration = defaultConfiguration;\n        this.policyConfiguration = policyConfiguration;\n        this.applicationConfiguration = applicationConfiguration;\n        this.userConfiguration = userConfiguration;\n        this.localUserConfiguration = localUserConfiguration;\n        this.remoteUserConfiguration = remoteUserConfiguration;\n        this.workspaceConfiguration = workspaceConfiguration;\n        this.folderConfigurationModel = folderConfigurationModel;\n        this.memoryConfigurationModel = memoryConfigurationModel;\n    }\n    toInspectValue(inspectValue) {\n        return inspectValue?.value !== undefined || inspectValue?.override !== undefined || inspectValue?.overrides !== undefined ? inspectValue : undefined;\n    }\n    get userInspectValue() {\n        if (!this._userInspectValue) {\n            this._userInspectValue = this.userConfiguration.inspect(this.key, this.overrides.overrideIdentifier);\n        }\n        return this._userInspectValue;\n    }\n    get user() {\n        return this.toInspectValue(this.userInspectValue);\n    }\n}\nexport class Configuration {\n    constructor(_defaultConfiguration, _policyConfiguration, _applicationConfiguration, _localUserConfiguration, _remoteUserConfiguration, _workspaceConfiguration, _folderConfigurations, _memoryConfiguration, _memoryConfigurationByResource, logService) {\n        this._defaultConfiguration = _defaultConfiguration;\n        this._policyConfiguration = _policyConfiguration;\n        this._applicationConfiguration = _applicationConfiguration;\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.logService = logService;\n        this._workspaceConsolidatedConfiguration = null;\n        this._foldersConsolidatedConfigurations = new ResourceMap();\n        this._userConfiguration = null;\n    }\n    getValue(section, overrides, workspace) {\n        const consolidateConfigurationModel = this.getConsolidatedConfigurationModel(section, 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 = ConfigurationModel.createEmptyModel(this.logService);\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    inspect(key, overrides, workspace) {\n        const consolidateConfigurationModel = this.getConsolidatedConfigurationModel(key, overrides, workspace);\n        const folderConfigurationModel = this.getFolderConfigurationModelForResource(overrides.resource, workspace);\n        const memoryConfigurationModel = overrides.resource ? this._memoryConfigurationByResource.get(overrides.resource) || this._memoryConfiguration : this._memoryConfiguration;\n        const overrideIdentifiers = new Set();\n        for (const override of consolidateConfigurationModel.overrides) {\n            for (const overrideIdentifier of override.identifiers) {\n                if (consolidateConfigurationModel.getOverrideValue(key, overrideIdentifier) !== undefined) {\n                    overrideIdentifiers.add(overrideIdentifier);\n                }\n            }\n        }\n        return new ConfigurationInspectValue(key, overrides, consolidateConfigurationModel.getValue(key), overrideIdentifiers.size ? [...overrideIdentifiers] : undefined, this._defaultConfiguration, this._policyConfiguration.isEmpty() ? undefined : this._policyConfiguration, this.applicationConfiguration.isEmpty() ? undefined : this.applicationConfiguration, this.userConfiguration, this.localUserConfiguration, this.remoteUserConfiguration, workspace ? this._workspaceConfiguration : undefined, folderConfigurationModel ? folderConfigurationModel : undefined, memoryConfigurationModel);\n    }\n    get applicationConfiguration() {\n        return this._applicationConfiguration;\n    }\n    get userConfiguration() {\n        if (!this._userConfiguration) {\n            this._userConfiguration = this._remoteUserConfiguration.isEmpty() ? this._localUserConfiguration : this._localUserConfiguration.merge(this._remoteUserConfiguration);\n        }\n        return this._userConfiguration;\n    }\n    get localUserConfiguration() {\n        return this._localUserConfiguration;\n    }\n    get remoteUserConfiguration() {\n        return this._remoteUserConfiguration;\n    }\n    getConsolidatedConfigurationModel(section, overrides, workspace) {\n        let configurationModel = this.getConsolidatedConfigurationModelForResource(overrides, workspace);\n        if (overrides.overrideIdentifier) {\n            configurationModel = configurationModel.override(overrides.overrideIdentifier);\n        }\n        if (!this._policyConfiguration.isEmpty() && this._policyConfiguration.getValue(section) !== undefined) {\n            configurationModel = configurationModel.merge(this._policyConfiguration);\n        }\n        return 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.applicationConfiguration, this.userConfiguration, this._workspaceConfiguration, this._memoryConfiguration);\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                this._foldersConsolidatedConfigurations.set(folder, folderConsolidatedConfiguration);\n            }\n            else {\n                folderConsolidatedConfiguration = workspaceConsolidateConfiguration;\n            }\n        }\n        return folderConsolidatedConfiguration;\n    }\n    getFolderConfigurationModelForResource(resource, workspace) {\n        if (workspace && resource) {\n            const root = workspace.getFolder(resource);\n            if (root) {\n                return this._folderConfigurations.get(root.uri);\n            }\n        }\n        return undefined;\n    }\n    toData() {\n        return {\n            defaults: {\n                contents: this._defaultConfiguration.contents,\n                overrides: this._defaultConfiguration.overrides,\n                keys: this._defaultConfiguration.keys\n            },\n            policy: {\n                contents: this._policyConfiguration.contents,\n                overrides: this._policyConfiguration.overrides,\n                keys: this._policyConfiguration.keys\n            },\n            application: {\n                contents: this.applicationConfiguration.contents,\n                overrides: this.applicationConfiguration.overrides,\n                keys: this.applicationConfiguration.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, logService) {\n        const defaultConfiguration = this.parseConfigurationModel(data.defaults, logService);\n        const policyConfiguration = this.parseConfigurationModel(data.policy, logService);\n        const applicationConfiguration = this.parseConfigurationModel(data.application, logService);\n        const userConfiguration = this.parseConfigurationModel(data.user, logService);\n        const workspaceConfiguration = this.parseConfigurationModel(data.workspace, logService);\n        const folders = data.folders.reduce((result, value) => {\n            result.set(URI.revive(value[0]), this.parseConfigurationModel(value[1], logService));\n            return result;\n        }, new ResourceMap());\n        return new Configuration(defaultConfiguration, policyConfiguration, applicationConfiguration, userConfiguration, ConfigurationModel.createEmptyModel(logService), workspaceConfiguration, folders, ConfigurationModel.createEmptyModel(logService), new ResourceMap(), logService);\n    }\n    static parseConfigurationModel(model, logService) {\n        return new ConfigurationModel(model.contents, model.keys, model.overrides, undefined, logService);\n    }\n}\nexport class ConfigurationChangeEvent {\n    constructor(change, previous, currentConfiguraiton, currentWorkspace, logService) {\n        this.change = change;\n        this.previous = previous;\n        this.currentConfiguraiton = currentConfiguraiton;\n        this.currentWorkspace = currentWorkspace;\n        this.logService = logService;\n        this._marker = '\\n';\n        this._markerCode1 = this._marker.charCodeAt(0);\n        this._markerCode2 = '.'.charCodeAt(0);\n        this.affectedKeys = new Set();\n        this._previousConfiguration = undefined;\n        for (const key of change.keys) {\n            this.affectedKeys.add(key);\n        }\n        for (const [, keys] of change.overrides) {\n            for (const key of keys) {\n                this.affectedKeys.add(key);\n            }\n        }\n        // Example: '\\nfoo.bar\\nabc.def\\n'\n        this._affectsConfigStr = this._marker;\n        for (const key of this.affectedKeys) {\n            this._affectsConfigStr += key + this._marker;\n        }\n    }\n    get previousConfiguration() {\n        if (!this._previousConfiguration && this.previous) {\n            this._previousConfiguration = Configuration.parse(this.previous.data, this.logService);\n        }\n        return this._previousConfiguration;\n    }\n    affectsConfiguration(section, overrides) {\n        // we have one large string with all keys that have changed. we pad (marker) the section\n        // and check that either find it padded or before a segment character\n        const needle = this._marker + section;\n        const idx = this._affectsConfigStr.indexOf(needle);\n        if (idx < 0) {\n            // NOT: (marker + section)\n            return false;\n        }\n        const pos = idx + needle.length;\n        if (pos >= this._affectsConfigStr.length) {\n            return false;\n        }\n        const code = this._affectsConfigStr.charCodeAt(pos);\n        if (code !== this._markerCode1 && code !== this._markerCode2) {\n            // NOT: section + (marker | segment)\n            return false;\n        }\n        if (overrides) {\n            const value1 = this.previousConfiguration ? this.previousConfiguration.getValue(section, overrides, this.previous?.workspace) : undefined;\n            const value2 = this.currentConfiguraiton.getValue(section, overrides, this.currentWorkspace);\n            return !objects.equals(value1, value2);\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 { Emitter } from './event.js';\nexport class IMEImpl {\n    constructor() {\n        this._onDidChange = new Emitter();\n        this.onDidChange = this._onDidChange.event;\n        this._enabled = true;\n    }\n    get enabled() {\n        return this._enabled;\n    }\n    /**\n     * Enable IME\n     */\n    enable() {\n        this._enabled = true;\n        this._onDidChange.fire();\n    }\n    /**\n     * Disable IME\n     */\n    disable() {\n        this._enabled = false;\n        this._onDidChange.fire();\n    }\n}\nexport const IME = new IMEImpl();\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { implies, expressionsAreEqualWithConstantSubstitution } from '../../contextkey/common/contextkey.js';\n// util definitions to make working with the above types easier within this module:\nexport const NoMatchingKb = { kind: 0 /* ResultKind.NoMatchingKb */ };\nconst MoreChordsNeeded = { kind: 1 /* ResultKind.MoreChordsNeeded */ };\nfunction KbFound(commandId, commandArgs, isBubble) {\n    return { kind: 2 /* ResultKind.KbFound */, commandId, commandArgs, isBubble };\n}\n//#endregion\n/**\n * Stores mappings from keybindings to commands and from commands to keybindings.\n * Given a sequence of chords, `resolve`s which keybinding it matches\n */\nexport class KeybindingResolver {\n    constructor(\n    /** built-in and extension-provided keybindings */\n    defaultKeybindings, \n    /** user's keybindings */\n    overrides, log) {\n        this._log = log;\n        this._defaultKeybindings = defaultKeybindings;\n        this._defaultBoundCommands = new Map();\n        for (const defaultKeybinding of defaultKeybindings) {\n            const command = defaultKeybinding.command;\n            if (command && command.charAt(0) !== '-') {\n                this._defaultBoundCommands.set(command, true);\n            }\n        }\n        this._map = new Map();\n        this._lookupMap = new Map();\n        this._keybindings = KeybindingResolver.handleRemovals([].concat(defaultKeybindings).concat(overrides));\n        for (let i = 0, len = this._keybindings.length; i < len; i++) {\n            const k = this._keybindings[i];\n            if (k.chords.length === 0) {\n                // unbound\n                continue;\n            }\n            // substitute with constants that are registered after startup - https://github.com/microsoft/vscode/issues/174218#issuecomment-1437972127\n            const when = k.when?.substituteConstants();\n            if (when && when.type === 0 /* ContextKeyExprType.False */) {\n                // when condition is false\n                continue;\n            }\n            this._addKeyPress(k.chords[0], k);\n        }\n    }\n    static _isTargetedForRemoval(defaultKb, keypress, when) {\n        if (keypress) {\n            for (let i = 0; i < keypress.length; i++) {\n                if (keypress[i] !== defaultKb.chords[i]) {\n                    return false;\n                }\n            }\n        }\n        // `true` means always, as does `undefined`\n        // so we will treat `true` === `undefined`\n        if (when && when.type !== 1 /* ContextKeyExprType.True */) {\n            if (!defaultKb.when) {\n                return false;\n            }\n            if (!expressionsAreEqualWithConstantSubstitution(when, defaultKb.when)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    /**\n     * Looks for rules containing \"-commandId\" and removes them.\n     */\n    static handleRemovals(rules) {\n        // Do a first pass and construct a hash-map for removals\n        const removals = new Map();\n        for (let i = 0, len = rules.length; i < len; i++) {\n            const rule = rules[i];\n            if (rule.command && rule.command.charAt(0) === '-') {\n                const command = rule.command.substring(1);\n                if (!removals.has(command)) {\n                    removals.set(command, [rule]);\n                }\n                else {\n                    removals.get(command).push(rule);\n                }\n            }\n        }\n        if (removals.size === 0) {\n            // There are no removals\n            return rules;\n        }\n        // Do a second pass and keep only non-removed keybindings\n        const result = [];\n        for (let i = 0, len = rules.length; i < len; i++) {\n            const rule = rules[i];\n            if (!rule.command || rule.command.length === 0) {\n                result.push(rule);\n                continue;\n            }\n            if (rule.command.charAt(0) === '-') {\n                continue;\n            }\n            const commandRemovals = removals.get(rule.command);\n            if (!commandRemovals || !rule.isDefault) {\n                result.push(rule);\n                continue;\n            }\n            let isRemoved = false;\n            for (const commandRemoval of commandRemovals) {\n                const when = commandRemoval.when;\n                if (this._isTargetedForRemoval(rule, commandRemoval.chords, when)) {\n                    isRemoved = true;\n                    break;\n                }\n            }\n            if (!isRemoved) {\n                result.push(rule);\n                continue;\n            }\n        }\n        return result;\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            const conflict = conflicts[i];\n            if (conflict.command === item.command) {\n                continue;\n            }\n            // Test if the shorter keybinding is a prefix of the longer one.\n            // If the shorter keybinding is a prefix, it effectively will shadow the longer one and is considered a conflict.\n            let isShorterKbPrefix = true;\n            for (let i = 1; i < conflict.chords.length && i < item.chords.length; i++) {\n                if (conflict.chords[i] !== item.chords[i]) {\n                    // The ith step does not conflict\n                    isShorterKbPrefix = false;\n                    break;\n                }\n            }\n            if (!isShorterKbPrefix) {\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        const 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 || b.type === 1 /* ContextKeyExprType.True */) {\n            return true;\n        }\n        if (!a || a.type === 1 /* ContextKeyExprType.True */) {\n            return false;\n        }\n        return implies(a, b);\n    }\n    getKeybindings() {\n        return this._keybindings;\n    }\n    lookupPrimaryKeybinding(commandId, context) {\n        const items = this._lookupMap.get(commandId);\n        if (typeof items === 'undefined' || items.length === 0) {\n            return null;\n        }\n        if (items.length === 1) {\n            return items[0];\n        }\n        for (let i = items.length - 1; i >= 0; i--) {\n            const item = items[i];\n            if (context.contextMatchesRules(item.when)) {\n                return item;\n            }\n        }\n        return items[items.length - 1];\n    }\n    /**\n     * Looks up a keybinding trigged as a result of pressing a sequence of chords - `[...currentChords, keypress]`\n     *\n     * Example: resolving 3 chords pressed sequentially - `cmd+k cmd+p cmd+i`:\n     * \t`currentChords = [ 'cmd+k' , 'cmd+p' ]` and `keypress = `cmd+i` - last pressed chord\n     */\n    resolve(context, currentChords, keypress) {\n        const pressedChords = [...currentChords, keypress];\n        this._log(`| Resolving ${pressedChords}`);\n        const kbCandidates = this._map.get(pressedChords[0]);\n        if (kbCandidates === undefined) {\n            // No bindings with such 0-th chord\n            this._log(`\\\\ No keybinding entries.`);\n            return NoMatchingKb;\n        }\n        let lookupMap = null;\n        if (pressedChords.length < 2) {\n            lookupMap = kbCandidates;\n        }\n        else {\n            // Fetch all chord bindings for `currentChords`\n            lookupMap = [];\n            for (let i = 0, len = kbCandidates.length; i < len; i++) {\n                const candidate = kbCandidates[i];\n                if (pressedChords.length > candidate.chords.length) { // # of pressed chords can't be less than # of chords in a keybinding to invoke\n                    continue;\n                }\n                let prefixMatches = true;\n                for (let i = 1; i < pressedChords.length; i++) {\n                    if (candidate.chords[i] !== pressedChords[i]) {\n                        prefixMatches = false;\n                        break;\n                    }\n                }\n                if (prefixMatches) {\n                    lookupMap.push(candidate);\n                }\n            }\n        }\n        // check there's a keybinding with a matching when clause\n        const result = this._findCommand(context, lookupMap);\n        if (!result) {\n            this._log(`\\\\ From ${lookupMap.length} keybinding entries, no when clauses matched the context.`);\n            return NoMatchingKb;\n        }\n        // check we got all chords necessary to be sure a particular keybinding needs to be invoked\n        if (pressedChords.length < result.chords.length) {\n            // The chord sequence is not complete\n            this._log(`\\\\ From ${lookupMap.length} keybinding entries, awaiting ${result.chords.length - pressedChords.length} more chord(s), when: ${printWhenExplanation(result.when)}, source: ${printSourceExplanation(result)}.`);\n            return MoreChordsNeeded;\n        }\n        this._log(`\\\\ From ${lookupMap.length} keybinding entries, matched ${result.command}, when: ${printWhenExplanation(result.when)}, source: ${printSourceExplanation(result)}.`);\n        return KbFound(result.command, result.commandArgs, result.bubble);\n    }\n    _findCommand(context, matches) {\n        for (let i = matches.length - 1; i >= 0; i--) {\n            const 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 *--------------------------------------------------------------------------------------------*/\nimport { IntervalTimer, TimeoutTimer } from '../../../base/common/async.js';\nimport { illegalState } from '../../../base/common/errors.js';\nimport { Emitter, Event } from '../../../base/common/event.js';\nimport { IME } from '../../../base/common/ime.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as nls from '../../../nls.js';\nimport { NoMatchingKb } from './keybindingResolver.js';\nconst HIGH_FREQ_COMMANDS = /^(cursor|delete|undo|redo|tab|editor\\.action\\.clipboard)/;\nexport class AbstractKeybindingService extends Disposable {\n    get onDidUpdateKeybindings() {\n        return this._onDidUpdateKeybindings ? this._onDidUpdateKeybindings.event : Event.None; // Sinon stubbing walks properties on prototype\n    }\n    get inChordMode() {\n        return this._currentChords.length > 0;\n    }\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._currentChords = [];\n        this._currentChordChecker = new IntervalTimer();\n        this._currentChordStatusMessage = null;\n        this._ignoreSingleModifiers = KeybindingModifierSet.EMPTY;\n        this._currentSingleModifier = null;\n        this._currentSingleModifierClearTimeout = new TimeoutTimer();\n        this._currentlyDispatchingCommandId = null;\n        this._logging = false;\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, context) {\n        const result = this._getResolver().lookupPrimaryKeybinding(commandId, context || this._contextKeyService);\n        if (!result) {\n            return undefined;\n        }\n        return result.resolvedKeybinding;\n    }\n    dispatchEvent(e, target) {\n        return this._dispatch(e, target);\n    }\n    // TODO@ulugbekna: update namings to align with `_doDispatch`\n    // TODO@ulugbekna: this fn doesn't seem to take into account single-modifier keybindings, eg `shift shift`\n    softDispatch(e, target) {\n        this._log(`/ Soft dispatching keyboard event`);\n        const keybinding = this.resolveKeyboardEvent(e);\n        if (keybinding.hasMultipleChords()) {\n            console.warn('keyboard event should not be mapped to multiple chords');\n            return NoMatchingKb;\n        }\n        const [firstChord,] = keybinding.getDispatchChords();\n        if (firstChord === null) {\n            // cannot be dispatched, probably only modifier keys\n            this._log(`\\\\ Keyboard event cannot be dispatched`);\n            return NoMatchingKb;\n        }\n        const contextValue = this._contextKeyService.getContext(target);\n        const currentChords = this._currentChords.map((({ keypress }) => keypress));\n        return this._getResolver().resolve(contextValue, currentChords, firstChord);\n    }\n    _scheduleLeaveChordMode() {\n        const chordLastInteractedTime = 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() - chordLastInteractedTime > 5000) {\n                // 5 seconds elapsed => leave chord mode\n                this._leaveChordMode();\n            }\n        }, 500);\n    }\n    _expectAnotherChord(firstChord, keypressLabel) {\n        this._currentChords.push({ keypress: firstChord, label: keypressLabel });\n        switch (this._currentChords.length) {\n            case 0:\n                throw illegalState('impossible');\n            case 1:\n                // TODO@ulugbekna: revise this message and the one below (at least, fix terminology)\n                this._currentChordStatusMessage = this._notificationService.status(nls.localize('first.chord', \"({0}) was pressed. Waiting for second key of chord...\", keypressLabel));\n                break;\n            default: {\n                const fullKeypressLabel = this._currentChords.map(({ label }) => label).join(', ');\n                this._currentChordStatusMessage = this._notificationService.status(nls.localize('next.chord', \"({0}) was pressed. Waiting for next key of chord...\", fullKeypressLabel));\n            }\n        }\n        this._scheduleLeaveChordMode();\n        if (IME.enabled) {\n            IME.disable();\n        }\n    }\n    _leaveChordMode() {\n        if (this._currentChordStatusMessage) {\n            this._currentChordStatusMessage.dispose();\n            this._currentChordStatusMessage = null;\n        }\n        this._currentChordChecker.cancel();\n        this._currentChords = [];\n        IME.enable();\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.getSingleModifierDispatchChords();\n        if (singleModifier) {\n            if (this._ignoreSingleModifiers.has(singleModifier)) {\n                this._log(`+ Ignoring single modifier ${singleModifier} due to it being pressed together with other keys.`);\n                this._ignoreSingleModifiers = KeybindingModifierSet.EMPTY;\n                this._currentSingleModifierClearTimeout.cancel();\n                this._currentSingleModifier = null;\n                return false;\n            }\n            this._ignoreSingleModifiers = KeybindingModifierSet.EMPTY;\n            if (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 === 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._log(`+ Clearing single modifier due to modifier mismatch: ${this._currentSingleModifier} ${singleModifier}`);\n            this._currentSingleModifierClearTimeout.cancel();\n            this._currentSingleModifier = null;\n            return false;\n        }\n        // When pressing a modifier and holding it pressed with any other modifier or key combination,\n        // the pressed modifiers should no longer be considered for single modifier dispatch.\n        const [firstChord,] = keybinding.getChords();\n        this._ignoreSingleModifiers = new KeybindingModifierSet(firstChord);\n        if (this._currentSingleModifier !== null) {\n            this._log(`+ Clearing single modifier due to other key up.`);\n        }\n        this._currentSingleModifierClearTimeout.cancel();\n        this._currentSingleModifier = null;\n        return false;\n    }\n    _doDispatch(userKeypress, target, isSingleModiferChord = false) {\n        let shouldPreventDefault = false;\n        if (userKeypress.hasMultipleChords()) { // warn - because user can press a single chord at a time\n            console.warn('Unexpected keyboard event mapped to multiple chords');\n            return false;\n        }\n        let userPressedChord = null;\n        let currentChords = null;\n        if (isSingleModiferChord) {\n            // The keybinding is the second keypress of a single modifier chord, e.g. \"shift shift\".\n            // A single modifier can only occur when the same modifier is pressed in short sequence,\n            // hence we disregard `_currentChord` and use the same modifier instead.\n            const [dispatchKeyname,] = userKeypress.getSingleModifierDispatchChords();\n            userPressedChord = dispatchKeyname;\n            currentChords = dispatchKeyname ? [dispatchKeyname] : []; // TODO@ulugbekna: in the `else` case we assign an empty array - make sure `resolve` can handle an empty array well\n        }\n        else {\n            [userPressedChord,] = userKeypress.getDispatchChords();\n            currentChords = this._currentChords.map(({ keypress }) => keypress);\n        }\n        if (userPressedChord === 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 = userKeypress.getLabel();\n        const resolveResult = this._getResolver().resolve(contextValue, currentChords, userPressedChord);\n        switch (resolveResult.kind) {\n            case 0 /* ResultKind.NoMatchingKb */: {\n                this._logService.trace('KeybindingService#dispatch', keypressLabel, `[ No matching keybinding ]`);\n                if (this.inChordMode) {\n                    const currentChordsLabel = this._currentChords.map(({ label }) => label).join(', ');\n                    this._log(`+ Leaving multi-chord mode: Nothing bound to \"${currentChordsLabel}, ${keypressLabel}\".`);\n                    this._notificationService.status(nls.localize('missing.chord', \"The key combination ({0}, {1}) is not a command.\", currentChordsLabel, keypressLabel), { hideAfter: 10 * 1000 /* 10s */ });\n                    this._leaveChordMode();\n                    shouldPreventDefault = true;\n                }\n                return shouldPreventDefault;\n            }\n            case 1 /* ResultKind.MoreChordsNeeded */: {\n                this._logService.trace('KeybindingService#dispatch', keypressLabel, `[ Several keybindings match - more chords needed ]`);\n                shouldPreventDefault = true;\n                this._expectAnotherChord(userPressedChord, keypressLabel);\n                this._log(this._currentChords.length === 1 ? `+ Entering multi-chord mode...` : `+ Continuing multi-chord mode...`);\n                return shouldPreventDefault;\n            }\n            case 2 /* ResultKind.KbFound */: {\n                this._logService.trace('KeybindingService#dispatch', keypressLabel, `[ Will dispatch command ${resolveResult.commandId} ]`);\n                if (resolveResult.commandId === null || resolveResult.commandId === '') {\n                    if (this.inChordMode) {\n                        const currentChordsLabel = this._currentChords.map(({ label }) => label).join(', ');\n                        this._log(`+ Leaving chord mode: Nothing bound to \"${currentChordsLabel}, ${keypressLabel}\".`);\n                        this._notificationService.status(nls.localize('missing.chord', \"The key combination ({0}, {1}) is not a command.\", currentChordsLabel, keypressLabel), { hideAfter: 10 * 1000 /* 10s */ });\n                        this._leaveChordMode();\n                        shouldPreventDefault = true;\n                    }\n                }\n                else {\n                    if (this.inChordMode) {\n                        this._leaveChordMode();\n                    }\n                    if (!resolveResult.isBubble) {\n                        shouldPreventDefault = true;\n                    }\n                    this._log(`+ Invoking command ${resolveResult.commandId}.`);\n                    this._currentlyDispatchingCommandId = resolveResult.commandId;\n                    try {\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                    }\n                    finally {\n                        this._currentlyDispatchingCommandId = null;\n                    }\n                    if (!HIGH_FREQ_COMMANDS.test(resolveResult.commandId)) {\n                        this._telemetryService.publicLog2('workbenchActionExecuted', { id: resolveResult.commandId, from: 'keybinding', detail: userKeypress.getUserSettingsLabel() ?? undefined });\n                    }\n                }\n                return shouldPreventDefault;\n            }\n        }\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 /* KeyCode.KeyA */ && event.keyCode <= 56 /* KeyCode.KeyZ */)\n            || (event.keyCode >= 21 /* KeyCode.Digit0 */ && event.keyCode <= 30 /* KeyCode.Digit9 */)) {\n            return true;\n        }\n        return false;\n    }\n}\nclass KeybindingModifierSet {\n    static { this.EMPTY = new KeybindingModifierSet(null); }\n    constructor(source) {\n        this._ctrlKey = source ? source.ctrlKey : false;\n        this._shiftKey = source ? source.shiftKey : false;\n        this._altKey = source ? source.altKey : false;\n        this._metaKey = source ? source.metaKey : false;\n    }\n    has(modifier) {\n        switch (modifier) {\n            case 'ctrl': return this._ctrlKey;\n            case 'shift': return this._shiftKey;\n            case 'alt': return this._altKey;\n            case 'meta': return this._metaKey;\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 ResolvedKeybindingItem {\n    constructor(resolvedKeybinding, command, commandArgs, when, isDefault, extensionId, isBuiltinExtension) {\n        this._resolvedKeybindingItemBrand = undefined;\n        this.resolvedKeybinding = resolvedKeybinding;\n        this.chords = resolvedKeybinding ? toEmptyArrayIfContainsNull(resolvedKeybinding.getDispatchChords()) : [];\n        if (resolvedKeybinding && this.chords.length === 0) {\n            // handle possible single modifier chord keybindings\n            this.chords = toEmptyArrayIfContainsNull(resolvedKeybinding.getSingleModifierDispatchChords());\n        }\n        this.bubble = (command ? command.charCodeAt(0) === 94 /* CharCode.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 toEmptyArrayIfContainsNull(arr) {\n    const result = [];\n    for (let i = 0, len = arr.length; i < len; i++) {\n        const element = arr[i];\n        if (!element) {\n            return [];\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 * 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 /* OperatingSystem.Macintosh */] = mac;\n        this.modifierLabels[1 /* OperatingSystem.Windows */] = windows;\n        this.modifierLabels[3 /* OperatingSystem.Linux */] = linux;\n    }\n    toLabel(OS, chords, keyLabelProvider) {\n        if (chords.length === 0) {\n            return null;\n        }\n        const result = [];\n        for (let i = 0, len = chords.length; i < len; i++) {\n            const chord = chords[i];\n            const keyLabel = keyLabelProvider(chord);\n            if (keyLabel === null) {\n                // this keybinding cannot be expressed...\n                return null;\n            }\n            result[i] = _simpleAsString(chord, 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: '\\u2303',\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: 'optKey.long', comment: ['This is the long form for the Alt/Option key on the keyboard'] }, \"Option\"),\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});\n/**\n * A label provider that prints modifiers in a suitable format for Electron Accelerators.\n * See https://github.com/electron/electron/blob/master/docs/api/accelerator.md\n */\nexport const ElectronAcceleratorLabelProvider = new ModifierLabelProvider({\n    ctrlKey: 'Ctrl',\n    shiftKey: 'Shift',\n    altKey: 'Alt',\n    metaKey: 'Cmd',\n    separator: '+',\n}, {\n    ctrlKey: 'Ctrl',\n    shiftKey: 'Shift',\n    altKey: 'Alt',\n    metaKey: 'Super',\n    separator: '+',\n});\n/**\n * A label provider that prints modifiers in a suitable format for user settings.\n */\nexport const UserSettingsLabelProvider = new ModifierLabelProvider({\n    ctrlKey: 'ctrl',\n    shiftKey: 'shift',\n    altKey: 'alt',\n    metaKey: 'cmd',\n    separator: '+',\n}, {\n    ctrlKey: 'ctrl',\n    shiftKey: 'shift',\n    altKey: 'alt',\n    metaKey: 'win',\n    separator: '+',\n}, {\n    ctrlKey: 'ctrl',\n    shiftKey: 'shift',\n    altKey: 'alt',\n    metaKey: 'meta',\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","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { AriaLabelProvider, ElectronAcceleratorLabelProvider, UILabelProvider, UserSettingsLabelProvider } from '../../../base/common/keybindingLabels.js';\nimport { ResolvedKeybinding, ResolvedChord } from '../../../base/common/keybindings.js';\nexport class BaseResolvedKeybinding extends ResolvedKeybinding {\n    constructor(os, chords) {\n        super();\n        if (chords.length === 0) {\n            throw illegalArgument(`chords`);\n        }\n        this._os = os;\n        this._chords = chords;\n    }\n    getLabel() {\n        return UILabelProvider.toLabel(this._os, this._chords, (keybinding) => this._getLabel(keybinding));\n    }\n    getAriaLabel() {\n        return AriaLabelProvider.toLabel(this._os, this._chords, (keybinding) => this._getAriaLabel(keybinding));\n    }\n    getElectronAccelerator() {\n        if (this._chords.length > 1) {\n            // [Electron Accelerators] Electron cannot handle chords\n            return null;\n        }\n        if (this._chords[0].isDuplicateModifierCase()) {\n            // [Electron Accelerators] Electron cannot handle modifier only keybindings\n            // e.g. \"shift shift\"\n            return null;\n        }\n        return ElectronAcceleratorLabelProvider.toLabel(this._os, this._chords, (keybinding) => this._getElectronAccelerator(keybinding));\n    }\n    getUserSettingsLabel() {\n        return UserSettingsLabelProvider.toLabel(this._os, this._chords, (keybinding) => this._getUserSettingsLabel(keybinding));\n    }\n    hasMultipleChords() {\n        return (this._chords.length > 1);\n    }\n    getChords() {\n        return this._chords.map((keybinding) => this._getChord(keybinding));\n    }\n    _getChord(keybinding) {\n        return new ResolvedChord(keybinding.ctrlKey, keybinding.shiftKey, keybinding.altKey, keybinding.metaKey, this._getLabel(keybinding), this._getAriaLabel(keybinding));\n    }\n    getDispatchChords() {\n        return this._chords.map((keybinding) => this._getChordDispatch(keybinding));\n    }\n    getSingleModifierDispatchChords() {\n        return this._chords.map((keybinding) => this._getSingleModifierChordDispatch(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, IMMUTABLE_CODE_TO_KEY_CODE } from '../../../base/common/keyCodes.js';\nimport { KeyCodeChord } from '../../../base/common/keybindings.js';\nimport { BaseResolvedKeybinding } from './baseResolvedKeybinding.js';\nimport { toEmptyArrayIfContainsNull } from './resolvedKeybindingItem.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(chords, os) {\n        super(os, chords);\n    }\n    _keyCodeToUILabel(keyCode) {\n        if (this._os === 2 /* OperatingSystem.Macintosh */) {\n            switch (keyCode) {\n                case 15 /* KeyCode.LeftArrow */:\n                    return '←';\n                case 16 /* KeyCode.UpArrow */:\n                    return '↑';\n                case 17 /* KeyCode.RightArrow */:\n                    return '→';\n                case 18 /* KeyCode.DownArrow */:\n                    return '↓';\n            }\n        }\n        return KeyCodeUtils.toString(keyCode);\n    }\n    _getLabel(chord) {\n        if (chord.isDuplicateModifierCase()) {\n            return '';\n        }\n        return this._keyCodeToUILabel(chord.keyCode);\n    }\n    _getAriaLabel(chord) {\n        if (chord.isDuplicateModifierCase()) {\n            return '';\n        }\n        return KeyCodeUtils.toString(chord.keyCode);\n    }\n    _getElectronAccelerator(chord) {\n        return KeyCodeUtils.toElectronAccelerator(chord.keyCode);\n    }\n    _getUserSettingsLabel(chord) {\n        if (chord.isDuplicateModifierCase()) {\n            return '';\n        }\n        const result = KeyCodeUtils.toUserSettingsUS(chord.keyCode);\n        return (result ? result.toLowerCase() : result);\n    }\n    _getChordDispatch(chord) {\n        return USLayoutResolvedKeybinding.getDispatchStr(chord);\n    }\n    static getDispatchStr(chord) {\n        if (chord.isModifierKey()) {\n            return null;\n        }\n        let result = '';\n        if (chord.ctrlKey) {\n            result += 'ctrl+';\n        }\n        if (chord.shiftKey) {\n            result += 'shift+';\n        }\n        if (chord.altKey) {\n            result += 'alt+';\n        }\n        if (chord.metaKey) {\n            result += 'meta+';\n        }\n        result += KeyCodeUtils.toString(chord.keyCode);\n        return result;\n    }\n    _getSingleModifierChordDispatch(keybinding) {\n        if (keybinding.keyCode === 5 /* KeyCode.Ctrl */ && !keybinding.shiftKey && !keybinding.altKey && !keybinding.metaKey) {\n            return 'ctrl';\n        }\n        if (keybinding.keyCode === 4 /* KeyCode.Shift */ && !keybinding.ctrlKey && !keybinding.altKey && !keybinding.metaKey) {\n            return 'shift';\n        }\n        if (keybinding.keyCode === 6 /* KeyCode.Alt */ && !keybinding.ctrlKey && !keybinding.shiftKey && !keybinding.metaKey) {\n            return 'alt';\n        }\n        if (keybinding.keyCode === 57 /* KeyCode.Meta */ && !keybinding.ctrlKey && !keybinding.shiftKey && !keybinding.altKey) {\n            return 'meta';\n        }\n        return null;\n    }\n    /**\n     * *NOTE*: Check return value for `KeyCode.Unknown`.\n     */\n    static _scanCodeToKeyCode(scanCode) {\n        const immutableKeyCode = IMMUTABLE_CODE_TO_KEY_CODE[scanCode];\n        if (immutableKeyCode !== -1 /* KeyCode.DependsOnKbLayout */) {\n            return immutableKeyCode;\n        }\n        switch (scanCode) {\n            case 10 /* ScanCode.KeyA */: return 31 /* KeyCode.KeyA */;\n            case 11 /* ScanCode.KeyB */: return 32 /* KeyCode.KeyB */;\n            case 12 /* ScanCode.KeyC */: return 33 /* KeyCode.KeyC */;\n            case 13 /* ScanCode.KeyD */: return 34 /* KeyCode.KeyD */;\n            case 14 /* ScanCode.KeyE */: return 35 /* KeyCode.KeyE */;\n            case 15 /* ScanCode.KeyF */: return 36 /* KeyCode.KeyF */;\n            case 16 /* ScanCode.KeyG */: return 37 /* KeyCode.KeyG */;\n            case 17 /* ScanCode.KeyH */: return 38 /* KeyCode.KeyH */;\n            case 18 /* ScanCode.KeyI */: return 39 /* KeyCode.KeyI */;\n            case 19 /* ScanCode.KeyJ */: return 40 /* KeyCode.KeyJ */;\n            case 20 /* ScanCode.KeyK */: return 41 /* KeyCode.KeyK */;\n            case 21 /* ScanCode.KeyL */: return 42 /* KeyCode.KeyL */;\n            case 22 /* ScanCode.KeyM */: return 43 /* KeyCode.KeyM */;\n            case 23 /* ScanCode.KeyN */: return 44 /* KeyCode.KeyN */;\n            case 24 /* ScanCode.KeyO */: return 45 /* KeyCode.KeyO */;\n            case 25 /* ScanCode.KeyP */: return 46 /* KeyCode.KeyP */;\n            case 26 /* ScanCode.KeyQ */: return 47 /* KeyCode.KeyQ */;\n            case 27 /* ScanCode.KeyR */: return 48 /* KeyCode.KeyR */;\n            case 28 /* ScanCode.KeyS */: return 49 /* KeyCode.KeyS */;\n            case 29 /* ScanCode.KeyT */: return 50 /* KeyCode.KeyT */;\n            case 30 /* ScanCode.KeyU */: return 51 /* KeyCode.KeyU */;\n            case 31 /* ScanCode.KeyV */: return 52 /* KeyCode.KeyV */;\n            case 32 /* ScanCode.KeyW */: return 53 /* KeyCode.KeyW */;\n            case 33 /* ScanCode.KeyX */: return 54 /* KeyCode.KeyX */;\n            case 34 /* ScanCode.KeyY */: return 55 /* KeyCode.KeyY */;\n            case 35 /* ScanCode.KeyZ */: return 56 /* KeyCode.KeyZ */;\n            case 36 /* ScanCode.Digit1 */: return 22 /* KeyCode.Digit1 */;\n            case 37 /* ScanCode.Digit2 */: return 23 /* KeyCode.Digit2 */;\n            case 38 /* ScanCode.Digit3 */: return 24 /* KeyCode.Digit3 */;\n            case 39 /* ScanCode.Digit4 */: return 25 /* KeyCode.Digit4 */;\n            case 40 /* ScanCode.Digit5 */: return 26 /* KeyCode.Digit5 */;\n            case 41 /* ScanCode.Digit6 */: return 27 /* KeyCode.Digit6 */;\n            case 42 /* ScanCode.Digit7 */: return 28 /* KeyCode.Digit7 */;\n            case 43 /* ScanCode.Digit8 */: return 29 /* KeyCode.Digit8 */;\n            case 44 /* ScanCode.Digit9 */: return 30 /* KeyCode.Digit9 */;\n            case 45 /* ScanCode.Digit0 */: return 21 /* KeyCode.Digit0 */;\n            case 51 /* ScanCode.Minus */: return 88 /* KeyCode.Minus */;\n            case 52 /* ScanCode.Equal */: return 86 /* KeyCode.Equal */;\n            case 53 /* ScanCode.BracketLeft */: return 92 /* KeyCode.BracketLeft */;\n            case 54 /* ScanCode.BracketRight */: return 94 /* KeyCode.BracketRight */;\n            case 55 /* ScanCode.Backslash */: return 93 /* KeyCode.Backslash */;\n            case 56 /* ScanCode.IntlHash */: return 0 /* KeyCode.Unknown */; // missing\n            case 57 /* ScanCode.Semicolon */: return 85 /* KeyCode.Semicolon */;\n            case 58 /* ScanCode.Quote */: return 95 /* KeyCode.Quote */;\n            case 59 /* ScanCode.Backquote */: return 91 /* KeyCode.Backquote */;\n            case 60 /* ScanCode.Comma */: return 87 /* KeyCode.Comma */;\n            case 61 /* ScanCode.Period */: return 89 /* KeyCode.Period */;\n            case 62 /* ScanCode.Slash */: return 90 /* KeyCode.Slash */;\n            case 106 /* ScanCode.IntlBackslash */: return 97 /* KeyCode.IntlBackslash */;\n        }\n        return 0 /* KeyCode.Unknown */;\n    }\n    static _toKeyCodeChord(chord) {\n        if (!chord) {\n            return null;\n        }\n        if (chord instanceof KeyCodeChord) {\n            return chord;\n        }\n        const keyCode = this._scanCodeToKeyCode(chord.scanCode);\n        if (keyCode === 0 /* KeyCode.Unknown */) {\n            return null;\n        }\n        return new KeyCodeChord(chord.ctrlKey, chord.shiftKey, chord.altKey, chord.metaKey, keyCode);\n    }\n    static resolveKeybinding(keybinding, os) {\n        const chords = toEmptyArrayIfContainsNull(keybinding.chords.map(chord => this._toKeyCodeChord(chord)));\n        if (chords.length > 0) {\n            return [new USLayoutResolvedKeybinding(chords, os)];\n        }\n        return [];\n    }\n}\n","import { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const ILabelService = createDecorator('labelService');\n","import { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IProgressService = createDecorator('progressService');\nexport const emptyProgressRunner = Object.freeze({\n    total() { },\n    worked() { },\n    done() { }\n});\nexport class Progress {\n    static { this.None = Object.freeze({ report() { } }); }\n    constructor(callback) {\n        this.callback = callback;\n    }\n    report(item) {\n        this._value = item;\n        this.callback(this._value);\n    }\n}\nexport const IEditorProgressService = createDecorator('editorProgressService');\n","import { compare, compareIgnoreCase, compareSubstring, compareSubstringIgnoreCase } 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 /* CharCode.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._from = 0;\n        this._to = 0;\n        this._value = key;\n        this._valueLen = key.length;\n        for (let pos = key.length - 1; pos >= 0; pos--, this._valueLen--) {\n            const ch = this._value.charCodeAt(pos);\n            if (!(ch === 47 /* CharCode.Slash */ || this._splitOnBackslash && ch === 92 /* CharCode.Backslash */)) {\n                break;\n            }\n        }\n        return this.next();\n    }\n    hasNext() {\n        return this._to < this._valueLen;\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._valueLen; this._to++) {\n            const ch = this._value.charCodeAt(this._to);\n            if (ch === 47 /* CharCode.Slash */ || this._splitOnBackslash && ch === 92 /* CharCode.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, _ignoreQueryAndFragment) {\n        this._ignorePathCasing = _ignorePathCasing;\n        this._ignoreQueryAndFragment = _ignoreQueryAndFragment;\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 /* UriIteratorState.Scheme */);\n        }\n        if (this._value.authority) {\n            this._states.push(2 /* UriIteratorState.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 /* UriIteratorState.Path */);\n            }\n        }\n        if (!this._ignoreQueryAndFragment(key)) {\n            if (this._value.query) {\n                this._states.push(4 /* UriIteratorState.Query */);\n            }\n            if (this._value.fragment) {\n                this._states.push(5 /* UriIteratorState.Fragment */);\n            }\n        }\n        this._stateIdx = 0;\n        return this;\n    }\n    next() {\n        if (this._states[this._stateIdx] === 3 /* UriIteratorState.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 /* UriIteratorState.Path */ && this._pathIterator.hasNext())\n            || this._stateIdx < this._states.length - 1;\n    }\n    cmp(a) {\n        if (this._states[this._stateIdx] === 1 /* UriIteratorState.Scheme */) {\n            return compareIgnoreCase(a, this._value.scheme);\n        }\n        else if (this._states[this._stateIdx] === 2 /* UriIteratorState.Authority */) {\n            return compareIgnoreCase(a, this._value.authority);\n        }\n        else if (this._states[this._stateIdx] === 3 /* UriIteratorState.Path */) {\n            return this._pathIterator.cmp(a);\n        }\n        else if (this._states[this._stateIdx] === 4 /* UriIteratorState.Query */) {\n            return compare(a, this._value.query);\n        }\n        else if (this._states[this._stateIdx] === 5 /* UriIteratorState.Fragment */) {\n            return compare(a, this._value.fragment);\n        }\n        throw new Error();\n    }\n    value() {\n        if (this._states[this._stateIdx] === 1 /* UriIteratorState.Scheme */) {\n            return this._value.scheme;\n        }\n        else if (this._states[this._stateIdx] === 2 /* UriIteratorState.Authority */) {\n            return this._value.authority;\n        }\n        else if (this._states[this._stateIdx] === 3 /* UriIteratorState.Path */) {\n            return this._pathIterator.value();\n        }\n        else if (this._states[this._stateIdx] === 4 /* UriIteratorState.Query */) {\n            return this._value.query;\n        }\n        else if (this._states[this._stateIdx] === 5 /* UriIteratorState.Fragment */) {\n            return this._value.fragment;\n        }\n        throw new Error();\n    }\n}\nclass TernarySearchTreeNode {\n    constructor() {\n        this.height = 1;\n    }\n    rotateLeft() {\n        const tmp = this.right;\n        this.right = tmp.left;\n        tmp.left = this;\n        this.updateHeight();\n        tmp.updateHeight();\n        return tmp;\n    }\n    rotateRight() {\n        const tmp = this.left;\n        this.left = tmp.right;\n        tmp.right = this;\n        this.updateHeight();\n        tmp.updateHeight();\n        return tmp;\n    }\n    updateHeight() {\n        this.height = 1 + Math.max(this.heightLeft, this.heightRight);\n    }\n    balanceFactor() {\n        return this.heightRight - this.heightLeft;\n    }\n    get heightLeft() {\n        return this.left?.height ?? 0;\n    }\n    get heightRight() {\n        return this.right?.height ?? 0;\n    }\n}\nexport class TernarySearchTree {\n    static forUris(ignorePathCasing = () => false, ignoreQueryAndFragment = () => false) {\n        return new TernarySearchTree(new UriIterator(ignorePathCasing, ignoreQueryAndFragment));\n    }\n    static forStrings() {\n        return new TernarySearchTree(new StringIterator());\n    }\n    static forConfigKeys() {\n        return new TernarySearchTree(new ConfigKeysIterator());\n    }\n    constructor(segments) {\n        this._iter = segments;\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        const stack = [];\n        // find insert_node\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                stack.push([-1 /* Dir.Left */, node]);\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                stack.push([1 /* Dir.Right */, node]);\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                stack.push([0 /* Dir.Mid */, node]);\n                node = node.mid;\n            }\n            else {\n                break;\n            }\n        }\n        // set value\n        const oldElement = node.value;\n        node.value = element;\n        node.key = key;\n        // balance\n        for (let i = stack.length - 1; i >= 0; i--) {\n            const node = stack[i][1];\n            node.updateHeight();\n            const bf = node.balanceFactor();\n            if (bf < -1 || bf > 1) {\n                // needs rotate\n                const d1 = stack[i][0];\n                const d2 = stack[i + 1][0];\n                if (d1 === 1 /* Dir.Right */ && d2 === 1 /* Dir.Right */) {\n                    //right, right -> rotate left\n                    stack[i][1] = node.rotateLeft();\n                }\n                else if (d1 === -1 /* Dir.Left */ && d2 === -1 /* Dir.Left */) {\n                    // left, left -> rotate right\n                    stack[i][1] = node.rotateRight();\n                }\n                else if (d1 === 1 /* Dir.Right */ && d2 === -1 /* Dir.Left */) {\n                    // right, left -> double rotate right, left\n                    node.right = stack[i + 1][1] = stack[i + 1][1].rotateRight();\n                    stack[i][1] = node.rotateLeft();\n                }\n                else if (d1 === -1 /* Dir.Left */ && d2 === 1 /* Dir.Right */) {\n                    // left, right -> double rotate left, right\n                    node.left = stack[i + 1][1] = stack[i + 1][1].rotateLeft();\n                    stack[i][1] = node.rotateRight();\n                }\n                else {\n                    throw new Error();\n                }\n                // patch path to parent\n                if (i > 0) {\n                    switch (stack[i - 1][0]) {\n                        case -1 /* Dir.Left */:\n                            stack[i - 1][1].left = stack[i][1];\n                            break;\n                        case 1 /* Dir.Right */:\n                            stack[i - 1][1].right = stack[i][1];\n                            break;\n                        case 0 /* Dir.Mid */:\n                            stack[i - 1][1].mid = stack[i][1];\n                            break;\n                    }\n                }\n                else {\n                    this._root = stack[0][1];\n                }\n            }\n        }\n        return oldElement;\n    }\n    get(key) {\n        return this._getNode(key)?.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?.value === undefined && 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 node\n        while (node) {\n            const val = iter.cmp(node.segment);\n            if (val > 0) {\n                // left\n                stack.push([-1 /* Dir.Left */, node]);\n                node = node.left;\n            }\n            else if (val < 0) {\n                // right\n                stack.push([1 /* Dir.Right */, node]);\n                node = node.right;\n            }\n            else if (iter.hasNext()) {\n                // mid\n                iter.next();\n                stack.push([0 /* Dir.Mid */, node]);\n                node = node.mid;\n            }\n            else {\n                break;\n            }\n        }\n        if (!node) {\n            // node not found\n            return;\n        }\n        if (superStr) {\n            // removing children, reset height\n            node.left = undefined;\n            node.mid = undefined;\n            node.right = undefined;\n            node.height = 1;\n        }\n        else {\n            // removing element\n            node.key = undefined;\n            node.value = undefined;\n        }\n        // BST node removal\n        if (!node.mid && !node.value) {\n            if (node.left && node.right) {\n                // full node\n                // replace deleted-node with the min-node of the right branch.\n                // If there is no true min-node leave things as they are\n                const min = this._min(node.right);\n                if (min.key) {\n                    const { key, value, segment } = min;\n                    this._delete(min.key, false);\n                    node.key = key;\n                    node.value = value;\n                    node.segment = segment;\n                }\n            }\n            else {\n                // empty or half empty\n                const newChild = node.left ?? node.right;\n                if (stack.length > 0) {\n                    const [dir, parent] = stack[stack.length - 1];\n                    switch (dir) {\n                        case -1 /* Dir.Left */:\n                            parent.left = newChild;\n                            break;\n                        case 0 /* Dir.Mid */:\n                            parent.mid = newChild;\n                            break;\n                        case 1 /* Dir.Right */:\n                            parent.right = newChild;\n                            break;\n                    }\n                }\n                else {\n                    this._root = newChild;\n                }\n            }\n        }\n        // AVL balance\n        for (let i = stack.length - 1; i >= 0; i--) {\n            const node = stack[i][1];\n            node.updateHeight();\n            const bf = node.balanceFactor();\n            if (bf > 1) {\n                // right heavy\n                if (node.right.balanceFactor() >= 0) {\n                    // right, right -> rotate left\n                    stack[i][1] = node.rotateLeft();\n                }\n                else {\n                    // right, left -> double rotate\n                    node.right = node.right.rotateRight();\n                    stack[i][1] = node.rotateLeft();\n                }\n            }\n            else if (bf < -1) {\n                // left heavy\n                if (node.left.balanceFactor() <= 0) {\n                    // left, left -> rotate right\n                    stack[i][1] = node.rotateRight();\n                }\n                else {\n                    // left, right -> double rotate\n                    node.left = node.left.rotateLeft();\n                    stack[i][1] = node.rotateRight();\n                }\n            }\n            // patch path to parent\n            if (i > 0) {\n                switch (stack[i - 1][0]) {\n                    case -1 /* Dir.Left */:\n                        stack[i - 1][1].left = stack[i][1];\n                        break;\n                    case 1 /* Dir.Right */:\n                        stack[i - 1][1].right = stack[i][1];\n                        break;\n                    case 0 /* Dir.Mid */:\n                        stack[i - 1][1].mid = stack[i][1];\n                        break;\n                }\n            }\n            else {\n                this._root = stack[0][1];\n            }\n        }\n    }\n    _min(node) {\n        while (node.left) {\n            node = node.left;\n        }\n        return node;\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        return this._findSuperstrOrElement(key, false);\n    }\n    _findSuperstrOrElement(key, allowValue) {\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                    if (allowValue) {\n                        return node.value;\n                    }\n                    else {\n                        return undefined;\n                    }\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        const result = [];\n        this._dfsEntries(node, result);\n        return result[Symbol.iterator]();\n    }\n    _dfsEntries(node, bucket) {\n        // DFS\n        if (!node) {\n            return;\n        }\n        if (node.left) {\n            this._dfsEntries(node.left, bucket);\n        }\n        if (node.value) {\n            bucket.push([node.key, node.value]);\n        }\n        if (node.mid) {\n            this._dfsEntries(node.mid, bucket);\n        }\n        if (node.right) {\n            this._dfsEntries(node.right, bucket);\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 { basename } from '../../../base/common/path.js';\nimport { TernarySearchTree } from '../../../base/common/ternarySearchTree.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IWorkspaceContextService = createDecorator('contextService');\nexport function isSingleFolderWorkspaceIdentifier(obj) {\n    const singleFolderIdentifier = obj;\n    return typeof singleFolderIdentifier?.id === 'string' && URI.isUri(singleFolderIdentifier.uri);\n}\nexport function isEmptyWorkspaceIdentifier(obj) {\n    const emptyWorkspaceIdentifier = obj;\n    return typeof emptyWorkspaceIdentifier?.id === 'string'\n        && !isSingleFolderWorkspaceIdentifier(obj)\n        && !isWorkspaceIdentifier(obj);\n}\nexport const EXTENSION_DEVELOPMENT_EMPTY_WINDOW_WORKSPACE = { id: 'ext-dev' };\nexport const UNKNOWN_EMPTY_WINDOW_WORKSPACE = { id: 'empty-window' };\nexport function toWorkspaceIdentifier(arg0, isExtensionDevelopment) {\n    // Empty workspace\n    if (typeof arg0 === 'string' || typeof arg0 === 'undefined') {\n        // With a backupPath, the basename is the empty workspace identifier\n        if (typeof arg0 === 'string') {\n            return {\n                id: basename(arg0)\n            };\n        }\n        // Extension development empty windows have backups disabled\n        // so we return a constant workspace identifier for extension\n        // authors to allow to restore their workspace state even then.\n        if (isExtensionDevelopment) {\n            return EXTENSION_DEVELOPMENT_EMPTY_WINDOW_WORKSPACE;\n        }\n        return UNKNOWN_EMPTY_WINDOW_WORKSPACE;\n    }\n    // Multi root\n    const workspace = arg0;\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 window\n    return {\n        id: workspace.id\n    };\n}\nexport function isWorkspaceIdentifier(obj) {\n    const workspaceIdentifier = obj;\n    return typeof workspaceIdentifier?.id === 'string' && URI.isUri(workspaceIdentifier.configPath);\n}\nexport class Workspace {\n    constructor(_id, folders, _transient, _configuration, _ignorePathCasing) {\n        this._id = _id;\n        this._transient = _transient;\n        this._configuration = _configuration;\n        this._ignorePathCasing = _ignorePathCasing;\n        this._foldersMap = TernarySearchTree.forUris(this._ignorePathCasing, () => true);\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 transient() {\n        return this._transient;\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) || null;\n    }\n    updateFoldersMap() {\n        this._foldersMap = TernarySearchTree.forUris(this._ignorePathCasing, () => true);\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, transient: this.transient, configuration: this.configuration };\n    }\n}\nexport class WorkspaceFolder {\n    constructor(data, \n    /**\n     * Provides access to the original metadata for this workspace\n     * folder. This can be different from the metadata provided in\n     * this class:\n     * - raw paths can be relative\n     * - raw paths are not normalized\n     */\n    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}\nexport const WORKSPACE_EXTENSION = 'code-workspace';\nexport const WORKSPACE_FILTER = [{ name: localize('codeWorkspace', \"Code Workspace\"), extensions: [WORKSPACE_EXTENSION] }];\nexport const STANDALONE_EDITOR_WORKSPACE_ID = '4064f6ec-cb38-4ad0-af64-ee6467e63c82';\nexport function isStandaloneEditorWorkspace(workspace) {\n    return workspace.id === STANDALONE_EDITOR_WORKSPACE_ID;\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 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 || (StandaloneCodeEditorNLS = {}));\nexport var ToggleHighContrastNLS;\n(function (ToggleHighContrastNLS) {\n    ToggleHighContrastNLS.toggleHighContrast = nls.localize('toggleHighContrast', \"Toggle High Contrast Theme\");\n})(ToggleHighContrastNLS || (ToggleHighContrastNLS = {}));\nexport var StandaloneServicesNLS;\n(function (StandaloneServicesNLS) {\n    StandaloneServicesNLS.bulkEditServiceSummary = nls.localize('bulkEditServiceSummary', \"Made {0} edits in {1} files\");\n})(StandaloneServicesNLS || (StandaloneServicesNLS = {}));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 IWorkspaceTrustManagementService = createDecorator('workspaceTrustManagementService');\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { parse } from '../../../base/common/glob.js';\nimport { Mimes } from '../../../base/common/mime.js';\nimport { Schemas } from '../../../base/common/network.js';\nimport { basename, posix } from '../../../base/common/path.js';\nimport { DataUri } from '../../../base/common/resources.js';\nimport { startsWithUTF8BOM } from '../../../base/common/strings.js';\nimport { PLAINTEXT_LANGUAGE_ID } from '../languages/modesRegistry.js';\nlet registeredAssociations = [];\nlet nonUserRegisteredAssociations = [];\nlet userRegisteredAssociations = [];\n/**\n * Associate a language to the registry (platform).\n * * **NOTE**: This association will lose over associations registered using `registerConfiguredLanguageAssociation`.\n * * **NOTE**: Use `clearPlatformLanguageAssociations` to remove all associations registered using this function.\n */\nexport function registerPlatformLanguageAssociation(association, warnOnOverwrite = false) {\n    _registerLanguageAssociation(association, false, warnOnOverwrite);\n}\nfunction _registerLanguageAssociation(association, userConfigured, warnOnOverwrite) {\n    // Register\n    const associationItem = toLanguageAssociationItem(association, userConfigured);\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 toLanguageAssociationItem(association, userConfigured) {\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: userConfigured,\n        filenameLowercase: association.filename ? association.filename.toLowerCase() : undefined,\n        extensionLowercase: association.extension ? association.extension.toLowerCase() : undefined,\n        filepatternLowercase: association.filepattern ? parse(association.filepattern.toLowerCase()) : undefined,\n        filepatternOnPath: association.filepattern ? association.filepattern.indexOf(posix.sep) >= 0 : false\n    };\n}\n/**\n * Clear language associations from the registry (platform).\n */\nexport function clearPlatformLanguageAssociations() {\n    registeredAssociations = registeredAssociations.filter(a => a.userConfigured);\n    nonUserRegisteredAssociations = [];\n}\n/**\n * @see `getMimeTypes`\n */\nexport function getLanguageIds(resource, firstLine) {\n    return getAssociations(resource, firstLine).map(item => item.id);\n}\nfunction getAssociations(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            }\n            case Schemas.vscodeNotebookCell:\n                // File path not relevant for language detection of cell\n                path = undefined;\n                break;\n            default:\n                path = resource.path;\n        }\n    }\n    if (!path) {\n        return [{ id: 'unknown', mime: Mimes.unknown }];\n    }\n    path = path.toLowerCase();\n    const filename = basename(path);\n    // 1.) User configured mappings have highest priority\n    const configuredLanguage = getAssociationByPath(path, filename, userRegisteredAssociations);\n    if (configuredLanguage) {\n        return [configuredLanguage, { id: PLAINTEXT_LANGUAGE_ID, mime: Mimes.text }];\n    }\n    // 2.) Registered mappings have middle priority\n    const registeredLanguage = getAssociationByPath(path, filename, nonUserRegisteredAssociations);\n    if (registeredLanguage) {\n        return [registeredLanguage, { id: PLAINTEXT_LANGUAGE_ID, mime: Mimes.text }];\n    }\n    // 3.) Firstline has lowest priority\n    if (firstLine) {\n        const firstlineLanguage = getAssociationByFirstline(firstLine);\n        if (firstlineLanguage) {\n            return [firstlineLanguage, { id: PLAINTEXT_LANGUAGE_ID, mime: Mimes.text }];\n        }\n    }\n    return [{ id: 'unknown', mime: Mimes.unknown }];\n}\nfunction getAssociationByPath(path, filename, associations) {\n    let filenameMatch = undefined;\n    let patternMatch = undefined;\n    let extensionMatch = undefined;\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 (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 priority\n    if (filenameMatch) {\n        return filenameMatch;\n    }\n    // 2.) Match on pattern\n    if (patternMatch) {\n        return patternMatch;\n    }\n    // 3.) Match on extension comes next\n    if (extensionMatch) {\n        return extensionMatch;\n    }\n    return undefined;\n}\nfunction getAssociationByFirstline(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;\n            }\n        }\n    }\n    return 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 { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { regExpLeadsToEndlessLoop } from '../../../base/common/strings.js';\nimport { clearPlatformLanguageAssociations, getLanguageIds, registerPlatformLanguageAssociation } from './languagesAssociations.js';\nimport { ModesRegistry, PLAINTEXT_LANGUAGE_ID } from '../languages/modesRegistry.js';\nimport { Extensions } from '../../../platform/configuration/common/configurationRegistry.js';\nimport { Registry } from '../../../platform/registry/common/platform.js';\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst NULL_LANGUAGE_ID = 'vs.editor.nullLanguage';\nexport class LanguageIdCodec {\n    constructor() {\n        this._languageIdToLanguage = [];\n        this._languageToLanguageId = new Map();\n        this._register(NULL_LANGUAGE_ID, 0 /* LanguageId.Null */);\n        this._register(PLAINTEXT_LANGUAGE_ID, 1 /* LanguageId.PlainText */);\n        this._nextLanguageId = 2;\n    }\n    _register(language, languageId) {\n        this._languageIdToLanguage[languageId] = language;\n        this._languageToLanguageId.set(language, languageId);\n    }\n    register(language) {\n        if (this._languageToLanguageId.has(language)) {\n            return;\n        }\n        const languageId = this._nextLanguageId++;\n        this._register(language, languageId);\n    }\n    encodeLanguageId(languageId) {\n        return this._languageToLanguageId.get(languageId) || 0 /* LanguageId.Null */;\n    }\n    decodeLanguageId(languageId) {\n        return this._languageIdToLanguage[languageId] || NULL_LANGUAGE_ID;\n    }\n}\nexport class LanguagesRegistry extends Disposable {\n    static { this.instanceCount = 0; }\n    constructor(useModesRegistry = true, warnOnOverwrite = false) {\n        super();\n        this._onDidChange = this._register(new Emitter());\n        this.onDidChange = this._onDidChange.event;\n        LanguagesRegistry.instanceCount++;\n        this._warnOnOverwrite = warnOnOverwrite;\n        this.languageIdCodec = new LanguageIdCodec();\n        this._dynamicLanguages = [];\n        this._languages = {};\n        this._mimeTypesMap = {};\n        this._nameMap = {};\n        this._lowercaseNameMap = {};\n        if (useModesRegistry) {\n            this._initializeFromRegistry();\n            this._register(ModesRegistry.onDidChangeLanguages((m) => {\n                this._initializeFromRegistry();\n            }));\n        }\n    }\n    dispose() {\n        LanguagesRegistry.instanceCount--;\n        super.dispose();\n    }\n    _initializeFromRegistry() {\n        this._languages = {};\n        this._mimeTypesMap = {};\n        this._nameMap = {};\n        this._lowercaseNameMap = {};\n        clearPlatformLanguageAssociations();\n        const desc = [].concat(ModesRegistry.getLanguages()).concat(this._dynamicLanguages);\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            const 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(this.getRegisteredLanguageIds());\n        this._onDidChange.fire();\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            this.languageIdCodec.register(langId);\n            resolvedLanguage = {\n                identifier: langId,\n                name: null,\n                mimetypes: [],\n                aliases: [],\n                extensions: [],\n                filenames: [],\n                configurationFiles: [],\n                icons: []\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 (const extension of lang.extensions) {\n                registerPlatformLanguageAssociation({ id: langId, mime: primaryMime, extension: extension }, this._warnOnOverwrite);\n            }\n        }\n        if (Array.isArray(lang.filenames)) {\n            for (const filename of lang.filenames) {\n                registerPlatformLanguageAssociation({ id: langId, mime: primaryMime, filename: filename }, this._warnOnOverwrite);\n                resolvedLanguage.filenames.push(filename);\n            }\n        }\n        if (Array.isArray(lang.filenamePatterns)) {\n            for (const filenamePattern of lang.filenamePatterns) {\n                registerPlatformLanguageAssociation({ 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                const firstLineRegex = new RegExp(firstLineRegexStr);\n                if (!regExpLeadsToEndlessLoop(firstLineRegex)) {\n                    registerPlatformLanguageAssociation({ id: langId, mime: primaryMime, firstline: firstLineRegex }, this._warnOnOverwrite);\n                }\n            }\n            catch (err) {\n                // Most likely, the regex was bad\n                console.warn(`[${lang.id}]: Invalid regular expression \\`${firstLineRegexStr}\\`: `, 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        const 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            const 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        if (lang.icon) {\n            resolvedLanguage.icons.push(lang.icon);\n        }\n    }\n    isRegisteredLanguageId(languageId) {\n        if (!languageId) {\n            return false;\n        }\n        return hasOwnProperty.call(this._languages, languageId);\n    }\n    getRegisteredLanguageIds() {\n        return Object.keys(this._languages);\n    }\n    getLanguageIdByLanguageName(languageName) {\n        const languageNameLower = languageName.toLowerCase();\n        if (!hasOwnProperty.call(this._lowercaseNameMap, languageNameLower)) {\n            return null;\n        }\n        return this._lowercaseNameMap[languageNameLower];\n    }\n    getLanguageIdByMimeType(mimeType) {\n        if (!mimeType) {\n            return null;\n        }\n        if (hasOwnProperty.call(this._mimeTypesMap, mimeType)) {\n            return this._mimeTypesMap[mimeType];\n        }\n        return null;\n    }\n    guessLanguageIdByFilepathOrFirstLine(resource, firstLine) {\n        if (!resource && !firstLine) {\n            return [];\n        }\n        return getLanguageIds(resource, firstLine);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 './arrays.js';\n/**\n * Compares two items for equality using strict equality.\n*/\nexport const strictEquals = (a, b) => a === b;\n/**\n * Checks if the items of two arrays are equal.\n * By default, strict equality is used to compare elements, but a custom equality comparer can be provided.\n */\nexport function itemsEquals(itemEquals = strictEquals) {\n    return (a, b) => arrays.equals(a, b, itemEquals);\n}\n/**\n * Uses `item.equals(other)` to determine equality.\n */\nexport function itemEquals() {\n    return (a, b) => a.equals(b);\n}\nexport function equalsIfDefined(equalsOrV1, v2, equals) {\n    if (equals !== undefined) {\n        const v1 = equalsOrV1;\n        if (v1 === undefined || v1 === null || v2 === undefined || v2 === null) {\n            return v2 === v1;\n        }\n        return equals(v1, v2);\n    }\n    else {\n        const equals = equalsOrV1;\n        return (v1, v2) => {\n            if (v1 === undefined || v1 === null || v2 === undefined || v2 === null) {\n                return v2 === v1;\n            }\n            return equals(v1, v2);\n        };\n    }\n}\n/**\n * Drills into arrays (items ordered) and objects (keys unordered) and uses strict equality on everything else.\n*/\nexport function structuralEquals(a, b) {\n    if (a === b) {\n        return true;\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return false;\n        }\n        for (let i = 0; i < a.length; i++) {\n            if (!structuralEquals(a[i], b[i])) {\n                return false;\n            }\n        }\n        return true;\n    }\n    if (a && typeof a === 'object' && b && typeof b === 'object') {\n        if (Object.getPrototypeOf(a) === Object.prototype && Object.getPrototypeOf(b) === Object.prototype) {\n            const aObj = a;\n            const bObj = b;\n            const keysA = Object.keys(aObj);\n            const keysB = Object.keys(bObj);\n            const keysBSet = new Set(keysB);\n            if (keysA.length !== keysB.length) {\n                return false;\n            }\n            for (const key of keysA) {\n                if (!keysBSet.has(key)) {\n                    return false;\n                }\n                if (!structuralEquals(aObj[key], bObj[key])) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n    return false;\n}\nconst objIds = 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 *--------------------------------------------------------------------------------------------*/\nexport class DebugNameData {\n    constructor(owner, debugNameSource, referenceFn) {\n        this.owner = owner;\n        this.debugNameSource = debugNameSource;\n        this.referenceFn = referenceFn;\n    }\n    getDebugName(target) {\n        return getDebugName(target, this);\n    }\n}\nconst countPerName = new Map();\nconst cachedDebugName = new WeakMap();\nexport function getDebugName(target, data) {\n    const cached = cachedDebugName.get(target);\n    if (cached) {\n        return cached;\n    }\n    const dbgName = computeDebugName(target, data);\n    if (dbgName) {\n        let count = countPerName.get(dbgName) ?? 0;\n        count++;\n        countPerName.set(dbgName, count);\n        const result = count === 1 ? dbgName : `${dbgName}#${count}`;\n        cachedDebugName.set(target, result);\n        return result;\n    }\n    return undefined;\n}\nfunction computeDebugName(self, data) {\n    const cached = cachedDebugName.get(self);\n    if (cached) {\n        return cached;\n    }\n    const ownerStr = data.owner ? formatOwner(data.owner) + `.` : '';\n    let result;\n    const debugNameSource = data.debugNameSource;\n    if (debugNameSource !== undefined) {\n        if (typeof debugNameSource === 'function') {\n            result = debugNameSource();\n            if (result !== undefined) {\n                return ownerStr + result;\n            }\n        }\n        else {\n            return ownerStr + debugNameSource;\n        }\n    }\n    const referenceFn = data.referenceFn;\n    if (referenceFn !== undefined) {\n        result = getFunctionName(referenceFn);\n        if (result !== undefined) {\n            return ownerStr + result;\n        }\n    }\n    if (data.owner !== undefined) {\n        const key = findKey(data.owner, self);\n        if (key !== undefined) {\n            return ownerStr + key;\n        }\n    }\n    return undefined;\n}\nfunction findKey(obj, value) {\n    for (const key in obj) {\n        if (obj[key] === value) {\n            return key;\n        }\n    }\n    return undefined;\n}\nconst countPerClassName = new Map();\nconst ownerId = new WeakMap();\nfunction formatOwner(owner) {\n    const id = ownerId.get(owner);\n    if (id) {\n        return id;\n    }\n    const className = getClassName(owner);\n    let count = countPerClassName.get(className) ?? 0;\n    count++;\n    countPerClassName.set(className, count);\n    const result = count === 1 ? className : `${className}#${count}`;\n    ownerId.set(owner, result);\n    return result;\n}\nfunction getClassName(obj) {\n    const ctor = obj.constructor;\n    if (ctor) {\n        return ctor.name;\n    }\n    return 'Object';\n}\nexport function getFunctionName(fn) {\n    const fnSrc = fn.toString();\n    // Pattern: /** @description ... */\n    const regexp = /\\/\\*\\*\\s*@description\\s*([^*]*)\\*\\//;\n    const match = regexp.exec(fnSrc);\n    const result = match ? match[1] : undefined;\n    return result?.trim();\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 globalObservableLogger;\nexport function setLogger(logger) {\n    globalObservableLogger = logger;\n}\nexport function getLogger() {\n    return globalObservableLogger;\n}\nexport class ConsoleObservableLogger {\n    constructor() {\n        this.indentation = 0;\n        this.changedObservablesSets = new WeakMap();\n    }\n    textToConsoleArgs(text) {\n        return consoleTextToArgs([\n            normalText(repeat('|  ', this.indentation)),\n            text,\n        ]);\n    }\n    formatInfo(info) {\n        if (!info.hadValue) {\n            return [\n                normalText(` `),\n                styled(formatValue(info.newValue, 60), {\n                    color: 'green',\n                }),\n                normalText(` (initial)`),\n            ];\n        }\n        return info.didChange\n            ? [\n                normalText(` `),\n                styled(formatValue(info.oldValue, 70), {\n                    color: 'red',\n                    strikeThrough: true,\n                }),\n                normalText(` `),\n                styled(formatValue(info.newValue, 60), {\n                    color: 'green',\n                }),\n            ]\n            : [normalText(` (unchanged)`)];\n    }\n    handleObservableChanged(observable, info) {\n        console.log(...this.textToConsoleArgs([\n            formatKind('observable value changed'),\n            styled(observable.debugName, { color: 'BlueViolet' }),\n            ...this.formatInfo(info),\n        ]));\n    }\n    formatChanges(changes) {\n        if (changes.size === 0) {\n            return undefined;\n        }\n        return styled(' (changed deps: ' +\n            [...changes].map((o) => o.debugName).join(', ') +\n            ')', { color: 'gray' });\n    }\n    handleDerivedCreated(derived) {\n        const existingHandleChange = derived.handleChange;\n        this.changedObservablesSets.set(derived, new Set());\n        derived.handleChange = (observable, change) => {\n            this.changedObservablesSets.get(derived).add(observable);\n            return existingHandleChange.apply(derived, [observable, change]);\n        };\n    }\n    handleDerivedRecomputed(derived, info) {\n        const changedObservables = this.changedObservablesSets.get(derived);\n        console.log(...this.textToConsoleArgs([\n            formatKind('derived recomputed'),\n            styled(derived.debugName, { color: 'BlueViolet' }),\n            ...this.formatInfo(info),\n            this.formatChanges(changedObservables),\n            { data: [{ fn: derived._debugNameData.referenceFn ?? derived._computeFn }] }\n        ]));\n        changedObservables.clear();\n    }\n    handleFromEventObservableTriggered(observable, info) {\n        console.log(...this.textToConsoleArgs([\n            formatKind('observable from event triggered'),\n            styled(observable.debugName, { color: 'BlueViolet' }),\n            ...this.formatInfo(info),\n            { data: [{ fn: observable._getValue }] }\n        ]));\n    }\n    handleAutorunCreated(autorun) {\n        const existingHandleChange = autorun.handleChange;\n        this.changedObservablesSets.set(autorun, new Set());\n        autorun.handleChange = (observable, change) => {\n            this.changedObservablesSets.get(autorun).add(observable);\n            return existingHandleChange.apply(autorun, [observable, change]);\n        };\n    }\n    handleAutorunTriggered(autorun) {\n        const changedObservables = this.changedObservablesSets.get(autorun);\n        console.log(...this.textToConsoleArgs([\n            formatKind('autorun'),\n            styled(autorun.debugName, { color: 'BlueViolet' }),\n            this.formatChanges(changedObservables),\n            { data: [{ fn: autorun._debugNameData.referenceFn ?? autorun._runFn }] }\n        ]));\n        changedObservables.clear();\n        this.indentation++;\n    }\n    handleAutorunFinished(autorun) {\n        this.indentation--;\n    }\n    handleBeginTransaction(transaction) {\n        let transactionName = transaction.getDebugName();\n        if (transactionName === undefined) {\n            transactionName = '';\n        }\n        console.log(...this.textToConsoleArgs([\n            formatKind('transaction'),\n            styled(transactionName, { color: 'BlueViolet' }),\n            { data: [{ fn: transaction._fn }] }\n        ]));\n        this.indentation++;\n    }\n    handleEndTransaction() {\n        this.indentation--;\n    }\n}\nfunction consoleTextToArgs(text) {\n    const styles = new Array();\n    const data = [];\n    let firstArg = '';\n    function process(t) {\n        if ('length' in t) {\n            for (const item of t) {\n                if (item) {\n                    process(item);\n                }\n            }\n        }\n        else if ('text' in t) {\n            firstArg += `%c${t.text}`;\n            styles.push(t.style);\n            if (t.data) {\n                data.push(...t.data);\n            }\n        }\n        else if ('data' in t) {\n            data.push(...t.data);\n        }\n    }\n    process(text);\n    const result = [firstArg, ...styles];\n    result.push(...data);\n    return result;\n}\nfunction normalText(text) {\n    return styled(text, { color: 'black' });\n}\nfunction formatKind(kind) {\n    return styled(padStr(`${kind}: `, 10), { color: 'black', bold: true });\n}\nfunction styled(text, options = {\n    color: 'black',\n}) {\n    function objToCss(styleObj) {\n        return Object.entries(styleObj).reduce((styleString, [propName, propValue]) => {\n            return `${styleString}${propName}:${propValue};`;\n        }, '');\n    }\n    const style = {\n        color: options.color,\n    };\n    if (options.strikeThrough) {\n        style['text-decoration'] = 'line-through';\n    }\n    if (options.bold) {\n        style['font-weight'] = 'bold';\n    }\n    return {\n        text,\n        style: objToCss(style),\n    };\n}\nfunction formatValue(value, availableLen) {\n    switch (typeof value) {\n        case 'number':\n            return '' + value;\n        case 'string':\n            if (value.length + 2 <= availableLen) {\n                return `\"${value}\"`;\n            }\n            return `\"${value.substr(0, availableLen - 7)}\"+...`;\n        case 'boolean':\n            return value ? 'true' : 'false';\n        case 'undefined':\n            return 'undefined';\n        case 'object':\n            if (value === null) {\n                return 'null';\n            }\n            if (Array.isArray(value)) {\n                return formatArray(value, availableLen);\n            }\n            return formatObject(value, availableLen);\n        case 'symbol':\n            return value.toString();\n        case 'function':\n            return `[[Function${value.name ? ' ' + value.name : ''}]]`;\n        default:\n            return '' + value;\n    }\n}\nfunction formatArray(value, availableLen) {\n    let result = '[ ';\n    let first = true;\n    for (const val of value) {\n        if (!first) {\n            result += ', ';\n        }\n        if (result.length - 5 > availableLen) {\n            result += '...';\n            break;\n        }\n        first = false;\n        result += `${formatValue(val, availableLen - result.length)}`;\n    }\n    result += ' ]';\n    return result;\n}\nfunction formatObject(value, availableLen) {\n    let result = '{ ';\n    let first = true;\n    for (const [key, val] of Object.entries(value)) {\n        if (!first) {\n            result += ', ';\n        }\n        if (result.length - 5 > availableLen) {\n            result += '...';\n            break;\n        }\n        first = false;\n        result += `${key}: ${formatValue(val, availableLen - result.length)}`;\n    }\n    result += ' }';\n    return result;\n}\nfunction repeat(str, count) {\n    let result = '';\n    for (let i = 1; i <= count; i++) {\n        result += str;\n    }\n    return result;\n}\nfunction padStr(str, length) {\n    while (str.length < length) {\n        str += ' ';\n    }\n    return str;\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { strictEquals } from '../equals.js';\nimport { DebugNameData, getFunctionName } from './debugName.js';\nimport { getLogger } from './logging.js';\nlet _recomputeInitiallyAndOnChange;\nexport function _setRecomputeInitiallyAndOnChange(recomputeInitiallyAndOnChange) {\n    _recomputeInitiallyAndOnChange = recomputeInitiallyAndOnChange;\n}\nlet _keepObserved;\nexport function _setKeepObserved(keepObserved) {\n    _keepObserved = keepObserved;\n}\nlet _derived;\n/**\n * @internal\n * This is to allow splitting files.\n*/\nexport function _setDerivedOpts(derived) {\n    _derived = derived;\n}\nexport class ConvenientObservable {\n    get TChange() { return null; }\n    reportChanges() {\n        this.get();\n    }\n    /** @sealed */\n    read(reader) {\n        if (reader) {\n            return reader.readObservable(this);\n        }\n        else {\n            return this.get();\n        }\n    }\n    map(fnOrOwner, fnOrUndefined) {\n        const owner = fnOrUndefined === undefined ? undefined : fnOrOwner;\n        const fn = fnOrUndefined === undefined ? fnOrOwner : fnOrUndefined;\n        return _derived({\n            owner,\n            debugName: () => {\n                const name = getFunctionName(fn);\n                if (name !== undefined) {\n                    return name;\n                }\n                // regexp to match `x => x.y` or `x => x?.y` where x and y can be arbitrary identifiers (uses backref):\n                const regexp = /^\\s*\\(?\\s*([a-zA-Z_$][a-zA-Z_$0-9]*)\\s*\\)?\\s*=>\\s*\\1(?:\\??)\\.([a-zA-Z_$][a-zA-Z_$0-9]*)\\s*$/;\n                const match = regexp.exec(fn.toString());\n                if (match) {\n                    return `${this.debugName}.${match[2]}`;\n                }\n                if (!owner) {\n                    return `${this.debugName} (mapped)`;\n                }\n                return undefined;\n            },\n            debugReferenceFn: fn,\n        }, (reader) => fn(this.read(reader), reader));\n    }\n    /**\n     * @sealed\n     * Converts an observable of an observable value into a direct observable of the value.\n    */\n    flatten() {\n        return _derived({\n            owner: undefined,\n            debugName: () => `${this.debugName} (flattened)`,\n        }, (reader) => this.read(reader).read(reader));\n    }\n    recomputeInitiallyAndOnChange(store, handleValue) {\n        store.add(_recomputeInitiallyAndOnChange(this, handleValue));\n        return this;\n    }\n    /**\n     * Ensures that this observable is observed. This keeps the cache alive.\n     * However, in case of deriveds, it does not force eager evaluation (only when the value is read/get).\n     * Use `recomputeInitiallyAndOnChange` for eager evaluation.\n     */\n    keepObserved(store) {\n        store.add(_keepObserved(this));\n        return this;\n    }\n}\nexport class BaseObservable extends ConvenientObservable {\n    constructor() {\n        super(...arguments);\n        this.observers = new Set();\n    }\n    addObserver(observer) {\n        const len = this.observers.size;\n        this.observers.add(observer);\n        if (len === 0) {\n            this.onFirstObserverAdded();\n        }\n    }\n    removeObserver(observer) {\n        const deleted = this.observers.delete(observer);\n        if (deleted && this.observers.size === 0) {\n            this.onLastObserverRemoved();\n        }\n    }\n    onFirstObserverAdded() { }\n    onLastObserverRemoved() { }\n}\n/**\n * Starts a transaction in which many observables can be changed at once.\n * {@link fn} should start with a JS Doc using `@description` to give the transaction a debug name.\n * Reaction run on demand or when the transaction ends.\n */\nexport function transaction(fn, getDebugName) {\n    const tx = new TransactionImpl(fn, getDebugName);\n    try {\n        fn(tx);\n    }\n    finally {\n        tx.finish();\n    }\n}\nlet _globalTransaction = undefined;\nexport function globalTransaction(fn) {\n    if (_globalTransaction) {\n        fn(_globalTransaction);\n    }\n    else {\n        const tx = new TransactionImpl(fn, undefined);\n        _globalTransaction = tx;\n        try {\n            fn(tx);\n        }\n        finally {\n            tx.finish(); // During finish, more actions might be added to the transaction.\n            // Which is why we only clear the global transaction after finish.\n            _globalTransaction = undefined;\n        }\n    }\n}\nexport async function asyncTransaction(fn, getDebugName) {\n    const tx = new TransactionImpl(fn, getDebugName);\n    try {\n        await fn(tx);\n    }\n    finally {\n        tx.finish();\n    }\n}\n/**\n * Allows to chain transactions.\n */\nexport function subtransaction(tx, fn, getDebugName) {\n    if (!tx) {\n        transaction(fn, getDebugName);\n    }\n    else {\n        fn(tx);\n    }\n}\nexport class TransactionImpl {\n    constructor(_fn, _getDebugName) {\n        this._fn = _fn;\n        this._getDebugName = _getDebugName;\n        this.updatingObservers = [];\n        getLogger()?.handleBeginTransaction(this);\n    }\n    getDebugName() {\n        if (this._getDebugName) {\n            return this._getDebugName();\n        }\n        return getFunctionName(this._fn);\n    }\n    updateObserver(observer, observable) {\n        // When this gets called while finish is active, they will still get considered\n        this.updatingObservers.push({ observer, observable });\n        observer.beginUpdate(observable);\n    }\n    finish() {\n        const updatingObservers = this.updatingObservers;\n        for (let i = 0; i < updatingObservers.length; i++) {\n            const { observer, observable } = updatingObservers[i];\n            observer.endUpdate(observable);\n        }\n        // Prevent anyone from updating observers from now on.\n        this.updatingObservers = null;\n        getLogger()?.handleEndTransaction();\n    }\n}\nexport function observableValue(nameOrOwner, initialValue) {\n    let debugNameData;\n    if (typeof nameOrOwner === 'string') {\n        debugNameData = new DebugNameData(undefined, nameOrOwner, undefined);\n    }\n    else {\n        debugNameData = new DebugNameData(nameOrOwner, undefined, undefined);\n    }\n    return new ObservableValue(debugNameData, initialValue, strictEquals);\n}\nexport class ObservableValue extends BaseObservable {\n    get debugName() {\n        return this._debugNameData.getDebugName(this) ?? 'ObservableValue';\n    }\n    constructor(_debugNameData, initialValue, _equalityComparator) {\n        super();\n        this._debugNameData = _debugNameData;\n        this._equalityComparator = _equalityComparator;\n        this._value = initialValue;\n    }\n    get() {\n        return this._value;\n    }\n    set(value, tx, change) {\n        if (change === undefined && this._equalityComparator(this._value, value)) {\n            return;\n        }\n        let _tx;\n        if (!tx) {\n            tx = _tx = new TransactionImpl(() => { }, () => `Setting ${this.debugName}`);\n        }\n        try {\n            const oldValue = this._value;\n            this._setValue(value);\n            getLogger()?.handleObservableChanged(this, { oldValue, newValue: value, change, didChange: true, hadValue: true });\n            for (const observer of this.observers) {\n                tx.updateObserver(observer, this);\n                observer.handleChange(this, change);\n            }\n        }\n        finally {\n            if (_tx) {\n                _tx.finish();\n            }\n        }\n    }\n    toString() {\n        return `${this.debugName}: ${this._value}`;\n    }\n    _setValue(newValue) {\n        this._value = newValue;\n    }\n}\n/**\n * A disposable observable. When disposed, its value is also disposed.\n * When a new value is set, the previous value is disposed.\n */\nexport function disposableObservableValue(nameOrOwner, initialValue) {\n    let debugNameData;\n    if (typeof nameOrOwner === 'string') {\n        debugNameData = new DebugNameData(undefined, nameOrOwner, undefined);\n    }\n    else {\n        debugNameData = new DebugNameData(nameOrOwner, undefined, undefined);\n    }\n    return new DisposableObservableValue(debugNameData, initialValue, strictEquals);\n}\nexport class DisposableObservableValue extends ObservableValue {\n    _setValue(newValue) {\n        if (this._value === newValue) {\n            return;\n        }\n        if (this._value) {\n            this._value.dispose();\n        }\n        this._value = newValue;\n    }\n    dispose() {\n        this._value?.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 { assertFn } from '../assert.js';\nimport { strictEquals } from '../equals.js';\nimport { DisposableStore } from '../lifecycle.js';\nimport { BaseObservable, _setDerivedOpts } from './base.js';\nimport { DebugNameData } from './debugName.js';\nimport { getLogger } from './logging.js';\nexport function derived(computeFnOrOwner, computeFn) {\n    if (computeFn !== undefined) {\n        return new Derived(new DebugNameData(computeFnOrOwner, undefined, computeFn), computeFn, undefined, undefined, undefined, strictEquals);\n    }\n    return new Derived(new DebugNameData(undefined, undefined, computeFnOrOwner), computeFnOrOwner, undefined, undefined, undefined, strictEquals);\n}\nexport function derivedWithSetter(owner, computeFn, setter) {\n    return new DerivedWithSetter(new DebugNameData(owner, undefined, computeFn), computeFn, undefined, undefined, undefined, strictEquals, setter);\n}\nexport function derivedOpts(options, computeFn) {\n    return new Derived(new DebugNameData(options.owner, options.debugName, options.debugReferenceFn), computeFn, undefined, undefined, options.onLastObserverRemoved, options.equalsFn ?? strictEquals);\n}\n_setDerivedOpts(derivedOpts);\n/**\n * Represents an observable that is derived from other observables.\n * The value is only recomputed when absolutely needed.\n *\n * {@link computeFn} should start with a JS Doc using `@description` to name the derived.\n *\n * Use `createEmptyChangeSummary` to create a \"change summary\" that can collect the changes.\n * Use `handleChange` to add a reported change to the change summary.\n * The compute function is given the last change summary.\n * The change summary is discarded after the compute function was called.\n *\n * @see derived\n */\nexport function derivedHandleChanges(options, computeFn) {\n    return new Derived(new DebugNameData(options.owner, options.debugName, undefined), computeFn, options.createEmptyChangeSummary, options.handleChange, undefined, options.equalityComparer ?? strictEquals);\n}\nexport function derivedWithStore(computeFnOrOwner, computeFnOrUndefined) {\n    let computeFn;\n    let owner;\n    if (computeFnOrUndefined === undefined) {\n        computeFn = computeFnOrOwner;\n        owner = undefined;\n    }\n    else {\n        owner = computeFnOrOwner;\n        computeFn = computeFnOrUndefined;\n    }\n    const store = new DisposableStore();\n    return new Derived(new DebugNameData(owner, undefined, computeFn), r => {\n        store.clear();\n        return computeFn(r, store);\n    }, undefined, undefined, () => store.dispose(), strictEquals);\n}\nexport function derivedDisposable(computeFnOrOwner, computeFnOrUndefined) {\n    let computeFn;\n    let owner;\n    if (computeFnOrUndefined === undefined) {\n        computeFn = computeFnOrOwner;\n        owner = undefined;\n    }\n    else {\n        owner = computeFnOrOwner;\n        computeFn = computeFnOrUndefined;\n    }\n    let store = undefined;\n    return new Derived(new DebugNameData(owner, undefined, computeFn), r => {\n        if (!store) {\n            store = new DisposableStore();\n        }\n        else {\n            store.clear();\n        }\n        const result = computeFn(r);\n        if (result) {\n            store.add(result);\n        }\n        return result;\n    }, undefined, undefined, () => {\n        if (store) {\n            store.dispose();\n            store = undefined;\n        }\n    }, strictEquals);\n}\nexport class Derived extends BaseObservable {\n    get debugName() {\n        return this._debugNameData.getDebugName(this) ?? '(anonymous)';\n    }\n    constructor(_debugNameData, _computeFn, createChangeSummary, _handleChange, _handleLastObserverRemoved = undefined, _equalityComparator) {\n        super();\n        this._debugNameData = _debugNameData;\n        this._computeFn = _computeFn;\n        this.createChangeSummary = createChangeSummary;\n        this._handleChange = _handleChange;\n        this._handleLastObserverRemoved = _handleLastObserverRemoved;\n        this._equalityComparator = _equalityComparator;\n        this.state = 0 /* DerivedState.initial */;\n        this.value = undefined;\n        this.updateCount = 0;\n        this.dependencies = new Set();\n        this.dependenciesToBeRemoved = new Set();\n        this.changeSummary = undefined;\n        this.changeSummary = this.createChangeSummary?.();\n        getLogger()?.handleDerivedCreated(this);\n    }\n    onLastObserverRemoved() {\n        /**\n         * We are not tracking changes anymore, thus we have to assume\n         * that our cache is invalid.\n         */\n        this.state = 0 /* DerivedState.initial */;\n        this.value = undefined;\n        for (const d of this.dependencies) {\n            d.removeObserver(this);\n        }\n        this.dependencies.clear();\n        this._handleLastObserverRemoved?.();\n    }\n    get() {\n        if (this.observers.size === 0) {\n            // Without observers, we don't know when to clean up stuff.\n            // Thus, we don't cache anything to prevent memory leaks.\n            const result = this._computeFn(this, this.createChangeSummary?.());\n            // Clear new dependencies\n            this.onLastObserverRemoved();\n            return result;\n        }\n        else {\n            do {\n                // We might not get a notification for a dependency that changed while it is updating,\n                // thus we also have to ask all our depedencies if they changed in this case.\n                if (this.state === 1 /* DerivedState.dependenciesMightHaveChanged */) {\n                    for (const d of this.dependencies) {\n                        /** might call {@link handleChange} indirectly, which could make us stale */\n                        d.reportChanges();\n                        if (this.state === 2 /* DerivedState.stale */) {\n                            // The other dependencies will refresh on demand, so early break\n                            break;\n                        }\n                    }\n                }\n                // We called report changes of all dependencies.\n                // If we are still not stale, we can assume to be up to date again.\n                if (this.state === 1 /* DerivedState.dependenciesMightHaveChanged */) {\n                    this.state = 3 /* DerivedState.upToDate */;\n                }\n                this._recomputeIfNeeded();\n                // In case recomputation changed one of our dependencies, we need to recompute again.\n            } while (this.state !== 3 /* DerivedState.upToDate */);\n            return this.value;\n        }\n    }\n    _recomputeIfNeeded() {\n        if (this.state === 3 /* DerivedState.upToDate */) {\n            return;\n        }\n        const emptySet = this.dependenciesToBeRemoved;\n        this.dependenciesToBeRemoved = this.dependencies;\n        this.dependencies = emptySet;\n        const hadValue = this.state !== 0 /* DerivedState.initial */;\n        const oldValue = this.value;\n        this.state = 3 /* DerivedState.upToDate */;\n        const changeSummary = this.changeSummary;\n        this.changeSummary = this.createChangeSummary?.();\n        try {\n            /** might call {@link handleChange} indirectly, which could invalidate us */\n            this.value = this._computeFn(this, changeSummary);\n        }\n        finally {\n            // We don't want our observed observables to think that they are (not even temporarily) not being observed.\n            // Thus, we only unsubscribe from observables that are definitely not read anymore.\n            for (const o of this.dependenciesToBeRemoved) {\n                o.removeObserver(this);\n            }\n            this.dependenciesToBeRemoved.clear();\n        }\n        const didChange = hadValue && !(this._equalityComparator(oldValue, this.value));\n        getLogger()?.handleDerivedRecomputed(this, {\n            oldValue,\n            newValue: this.value,\n            change: undefined,\n            didChange,\n            hadValue,\n        });\n        if (didChange) {\n            for (const r of this.observers) {\n                r.handleChange(this, undefined);\n            }\n        }\n    }\n    toString() {\n        return `LazyDerived<${this.debugName}>`;\n    }\n    // IObserver Implementation\n    beginUpdate(_observable) {\n        this.updateCount++;\n        const propagateBeginUpdate = this.updateCount === 1;\n        if (this.state === 3 /* DerivedState.upToDate */) {\n            this.state = 1 /* DerivedState.dependenciesMightHaveChanged */;\n            // If we propagate begin update, that will already signal a possible change.\n            if (!propagateBeginUpdate) {\n                for (const r of this.observers) {\n                    r.handlePossibleChange(this);\n                }\n            }\n        }\n        if (propagateBeginUpdate) {\n            for (const r of this.observers) {\n                r.beginUpdate(this); // This signals a possible change\n            }\n        }\n    }\n    endUpdate(_observable) {\n        this.updateCount--;\n        if (this.updateCount === 0) {\n            // End update could change the observer list.\n            const observers = [...this.observers];\n            for (const r of observers) {\n                r.endUpdate(this);\n            }\n        }\n        assertFn(() => this.updateCount >= 0);\n    }\n    handlePossibleChange(observable) {\n        // In all other states, observers already know that we might have changed.\n        if (this.state === 3 /* DerivedState.upToDate */ && this.dependencies.has(observable) && !this.dependenciesToBeRemoved.has(observable)) {\n            this.state = 1 /* DerivedState.dependenciesMightHaveChanged */;\n            for (const r of this.observers) {\n                r.handlePossibleChange(this);\n            }\n        }\n    }\n    handleChange(observable, change) {\n        if (this.dependencies.has(observable) && !this.dependenciesToBeRemoved.has(observable)) {\n            const shouldReact = this._handleChange ? this._handleChange({\n                changedObservable: observable,\n                change,\n                didChange: (o) => o === observable,\n            }, this.changeSummary) : true;\n            const wasUpToDate = this.state === 3 /* DerivedState.upToDate */;\n            if (shouldReact && (this.state === 1 /* DerivedState.dependenciesMightHaveChanged */ || wasUpToDate)) {\n                this.state = 2 /* DerivedState.stale */;\n                if (wasUpToDate) {\n                    for (const r of this.observers) {\n                        r.handlePossibleChange(this);\n                    }\n                }\n            }\n        }\n    }\n    // IReader Implementation\n    readObservable(observable) {\n        // Subscribe before getting the value to enable caching\n        observable.addObserver(this);\n        /** This might call {@link handleChange} indirectly, which could invalidate us */\n        const value = observable.get();\n        // Which is why we only add the observable to the dependencies now.\n        this.dependencies.add(observable);\n        this.dependenciesToBeRemoved.delete(observable);\n        return value;\n    }\n    addObserver(observer) {\n        const shouldCallBeginUpdate = !this.observers.has(observer) && this.updateCount > 0;\n        super.addObserver(observer);\n        if (shouldCallBeginUpdate) {\n            observer.beginUpdate(this);\n        }\n    }\n    removeObserver(observer) {\n        const shouldCallEndUpdate = this.observers.has(observer) && this.updateCount > 0;\n        super.removeObserver(observer);\n        if (shouldCallEndUpdate) {\n            // Calling end update after removing the observer makes sure endUpdate cannot be called twice here.\n            observer.endUpdate(this);\n        }\n    }\n}\nexport class DerivedWithSetter extends Derived {\n    constructor(debugNameData, computeFn, createChangeSummary, handleChange, handleLastObserverRemoved = undefined, equalityComparator, set) {\n        super(debugNameData, computeFn, createChangeSummary, handleChange, handleLastObserverRemoved, equalityComparator);\n        this.set = set;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { assertFn } from '../assert.js';\nimport { DisposableStore, markAsDisposed, toDisposable, trackDisposable } from '../lifecycle.js';\nimport { DebugNameData } from './debugName.js';\nimport { getLogger } from './logging.js';\n/**\n * Runs immediately and whenever a transaction ends and an observed observable changed.\n * {@link fn} should start with a JS Doc using `@description` to name the autorun.\n */\nexport function autorun(fn) {\n    return new AutorunObserver(new DebugNameData(undefined, undefined, fn), fn, undefined, undefined);\n}\n/**\n * Runs immediately and whenever a transaction ends and an observed observable changed.\n * {@link fn} should start with a JS Doc using `@description` to name the autorun.\n */\nexport function autorunOpts(options, fn) {\n    return new AutorunObserver(new DebugNameData(options.owner, options.debugName, options.debugReferenceFn ?? fn), fn, undefined, undefined);\n}\n/**\n * Runs immediately and whenever a transaction ends and an observed observable changed.\n * {@link fn} should start with a JS Doc using `@description` to name the autorun.\n *\n * Use `createEmptyChangeSummary` to create a \"change summary\" that can collect the changes.\n * Use `handleChange` to add a reported change to the change summary.\n * The run function is given the last change summary.\n * The change summary is discarded after the run function was called.\n *\n * @see autorun\n */\nexport function autorunHandleChanges(options, fn) {\n    return new AutorunObserver(new DebugNameData(options.owner, options.debugName, options.debugReferenceFn ?? fn), fn, options.createEmptyChangeSummary, options.handleChange);\n}\n/**\n * @see autorunHandleChanges (but with a disposable store that is cleared before the next run or on dispose)\n */\nexport function autorunWithStoreHandleChanges(options, fn) {\n    const store = new DisposableStore();\n    const disposable = autorunHandleChanges({\n        owner: options.owner,\n        debugName: options.debugName,\n        debugReferenceFn: options.debugReferenceFn ?? fn,\n        createEmptyChangeSummary: options.createEmptyChangeSummary,\n        handleChange: options.handleChange,\n    }, (reader, changeSummary) => {\n        store.clear();\n        fn(reader, changeSummary, store);\n    });\n    return toDisposable(() => {\n        disposable.dispose();\n        store.dispose();\n    });\n}\n/**\n * @see autorun (but with a disposable store that is cleared before the next run or on dispose)\n */\nexport function autorunWithStore(fn) {\n    const store = new DisposableStore();\n    const disposable = autorunOpts({\n        owner: undefined,\n        debugName: undefined,\n        debugReferenceFn: fn,\n    }, reader => {\n        store.clear();\n        fn(reader, store);\n    });\n    return toDisposable(() => {\n        disposable.dispose();\n        store.dispose();\n    });\n}\nexport class AutorunObserver {\n    get debugName() {\n        return this._debugNameData.getDebugName(this) ?? '(anonymous)';\n    }\n    constructor(_debugNameData, _runFn, createChangeSummary, _handleChange) {\n        this._debugNameData = _debugNameData;\n        this._runFn = _runFn;\n        this.createChangeSummary = createChangeSummary;\n        this._handleChange = _handleChange;\n        this.state = 2 /* AutorunState.stale */;\n        this.updateCount = 0;\n        this.disposed = false;\n        this.dependencies = new Set();\n        this.dependenciesToBeRemoved = new Set();\n        this.changeSummary = this.createChangeSummary?.();\n        getLogger()?.handleAutorunCreated(this);\n        this._runIfNeeded();\n        trackDisposable(this);\n    }\n    dispose() {\n        this.disposed = true;\n        for (const o of this.dependencies) {\n            o.removeObserver(this);\n        }\n        this.dependencies.clear();\n        markAsDisposed(this);\n    }\n    _runIfNeeded() {\n        if (this.state === 3 /* AutorunState.upToDate */) {\n            return;\n        }\n        const emptySet = this.dependenciesToBeRemoved;\n        this.dependenciesToBeRemoved = this.dependencies;\n        this.dependencies = emptySet;\n        this.state = 3 /* AutorunState.upToDate */;\n        const isDisposed = this.disposed;\n        try {\n            if (!isDisposed) {\n                getLogger()?.handleAutorunTriggered(this);\n                const changeSummary = this.changeSummary;\n                this.changeSummary = this.createChangeSummary?.();\n                this._runFn(this, changeSummary);\n            }\n        }\n        finally {\n            if (!isDisposed) {\n                getLogger()?.handleAutorunFinished(this);\n            }\n            // We don't want our observed observables to think that they are (not even temporarily) not being observed.\n            // Thus, we only unsubscribe from observables that are definitely not read anymore.\n            for (const o of this.dependenciesToBeRemoved) {\n                o.removeObserver(this);\n            }\n            this.dependenciesToBeRemoved.clear();\n        }\n    }\n    toString() {\n        return `Autorun<${this.debugName}>`;\n    }\n    // IObserver implementation\n    beginUpdate() {\n        if (this.state === 3 /* AutorunState.upToDate */) {\n            this.state = 1 /* AutorunState.dependenciesMightHaveChanged */;\n        }\n        this.updateCount++;\n    }\n    endUpdate() {\n        if (this.updateCount === 1) {\n            do {\n                if (this.state === 1 /* AutorunState.dependenciesMightHaveChanged */) {\n                    this.state = 3 /* AutorunState.upToDate */;\n                    for (const d of this.dependencies) {\n                        d.reportChanges();\n                        if (this.state === 2 /* AutorunState.stale */) {\n                            // The other dependencies will refresh on demand\n                            break;\n                        }\n                    }\n                }\n                this._runIfNeeded();\n            } while (this.state !== 3 /* AutorunState.upToDate */);\n        }\n        this.updateCount--;\n        assertFn(() => this.updateCount >= 0);\n    }\n    handlePossibleChange(observable) {\n        if (this.state === 3 /* AutorunState.upToDate */ && this.dependencies.has(observable) && !this.dependenciesToBeRemoved.has(observable)) {\n            this.state = 1 /* AutorunState.dependenciesMightHaveChanged */;\n        }\n    }\n    handleChange(observable, change) {\n        if (this.dependencies.has(observable) && !this.dependenciesToBeRemoved.has(observable)) {\n            const shouldReact = this._handleChange ? this._handleChange({\n                changedObservable: observable,\n                change,\n                didChange: (o) => o === observable,\n            }, this.changeSummary) : true;\n            if (shouldReact) {\n                this.state = 2 /* AutorunState.stale */;\n            }\n        }\n    }\n    // IReader implementation\n    readObservable(observable) {\n        // In case the run action disposes the autorun\n        if (this.disposed) {\n            return observable.get();\n        }\n        observable.addObserver(this);\n        const value = observable.get();\n        this.dependencies.add(observable);\n        this.dependenciesToBeRemoved.delete(observable);\n        return value;\n    }\n}\n(function (autorun) {\n    autorun.Observer = AutorunObserver;\n})(autorun || (autorun = {}));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 } from '../event.js';\nimport { DisposableStore, toDisposable } from '../lifecycle.js';\nimport { BaseObservable, ConvenientObservable, _setKeepObserved, _setRecomputeInitiallyAndOnChange, subtransaction, transaction } from './base.js';\nimport { DebugNameData } from './debugName.js';\nimport { derived, derivedOpts } from './derived.js';\nimport { getLogger } from './logging.js';\nimport { strictEquals } from '../equals.js';\n/**\n * Represents an efficient observable whose value never changes.\n */\nexport function constObservable(value) {\n    return new ConstObservable(value);\n}\nclass ConstObservable extends ConvenientObservable {\n    constructor(value) {\n        super();\n        this.value = value;\n    }\n    get debugName() {\n        return this.toString();\n    }\n    get() {\n        return this.value;\n    }\n    addObserver(observer) {\n        // NO OP\n    }\n    removeObserver(observer) {\n        // NO OP\n    }\n    toString() {\n        return `Const: ${this.value}`;\n    }\n}\nexport function observableFromEvent(...args) {\n    let owner;\n    let event;\n    let getValue;\n    if (args.length === 3) {\n        [owner, event, getValue] = args;\n    }\n    else {\n        [event, getValue] = args;\n    }\n    return new FromEventObservable(new DebugNameData(owner, undefined, getValue), event, getValue, () => FromEventObservable.globalTransaction, strictEquals);\n}\nexport function observableFromEventOpts(options, event, getValue) {\n    return new FromEventObservable(new DebugNameData(options.owner, options.debugName, options.debugReferenceFn ?? getValue), event, getValue, () => FromEventObservable.globalTransaction, options.equalsFn ?? strictEquals);\n}\nexport class FromEventObservable extends BaseObservable {\n    constructor(_debugNameData, event, _getValue, _getTransaction, _equalityComparator) {\n        super();\n        this._debugNameData = _debugNameData;\n        this.event = event;\n        this._getValue = _getValue;\n        this._getTransaction = _getTransaction;\n        this._equalityComparator = _equalityComparator;\n        this.hasValue = false;\n        this.handleEvent = (args) => {\n            const newValue = this._getValue(args);\n            const oldValue = this.value;\n            const didChange = !this.hasValue || !(this._equalityComparator(oldValue, newValue));\n            let didRunTransaction = false;\n            if (didChange) {\n                this.value = newValue;\n                if (this.hasValue) {\n                    didRunTransaction = true;\n                    subtransaction(this._getTransaction(), (tx) => {\n                        getLogger()?.handleFromEventObservableTriggered(this, { oldValue, newValue, change: undefined, didChange, hadValue: this.hasValue });\n                        for (const o of this.observers) {\n                            tx.updateObserver(o, this);\n                            o.handleChange(this, undefined);\n                        }\n                    }, () => {\n                        const name = this.getDebugName();\n                        return 'Event fired' + (name ? `: ${name}` : '');\n                    });\n                }\n                this.hasValue = true;\n            }\n            if (!didRunTransaction) {\n                getLogger()?.handleFromEventObservableTriggered(this, { oldValue, newValue, change: undefined, didChange, hadValue: this.hasValue });\n            }\n        };\n    }\n    getDebugName() {\n        return this._debugNameData.getDebugName(this);\n    }\n    get debugName() {\n        const name = this.getDebugName();\n        return 'From Event' + (name ? `: ${name}` : '');\n    }\n    onFirstObserverAdded() {\n        this.subscription = this.event(this.handleEvent);\n    }\n    onLastObserverRemoved() {\n        this.subscription.dispose();\n        this.subscription = undefined;\n        this.hasValue = false;\n        this.value = undefined;\n    }\n    get() {\n        if (this.subscription) {\n            if (!this.hasValue) {\n                this.handleEvent(undefined);\n            }\n            return this.value;\n        }\n        else {\n            // no cache, as there are no subscribers to keep it updated\n            const value = this._getValue(undefined);\n            return value;\n        }\n    }\n}\n(function (observableFromEvent) {\n    observableFromEvent.Observer = FromEventObservable;\n    function batchEventsGlobally(tx, fn) {\n        let didSet = false;\n        if (FromEventObservable.globalTransaction === undefined) {\n            FromEventObservable.globalTransaction = tx;\n            didSet = true;\n        }\n        try {\n            fn();\n        }\n        finally {\n            if (didSet) {\n                FromEventObservable.globalTransaction = undefined;\n            }\n        }\n    }\n    observableFromEvent.batchEventsGlobally = batchEventsGlobally;\n})(observableFromEvent || (observableFromEvent = {}));\nexport function observableSignalFromEvent(debugName, event) {\n    return new FromEventObservableSignal(debugName, event);\n}\nclass FromEventObservableSignal extends BaseObservable {\n    constructor(debugName, event) {\n        super();\n        this.debugName = debugName;\n        this.event = event;\n        this.handleEvent = () => {\n            transaction((tx) => {\n                for (const o of this.observers) {\n                    tx.updateObserver(o, this);\n                    o.handleChange(this, undefined);\n                }\n            }, () => this.debugName);\n        };\n    }\n    onFirstObserverAdded() {\n        this.subscription = this.event(this.handleEvent);\n    }\n    onLastObserverRemoved() {\n        this.subscription.dispose();\n        this.subscription = undefined;\n    }\n    get() {\n        // NO OP\n    }\n}\nexport function observableSignal(debugNameOrOwner) {\n    if (typeof debugNameOrOwner === 'string') {\n        return new ObservableSignal(debugNameOrOwner);\n    }\n    else {\n        return new ObservableSignal(undefined, debugNameOrOwner);\n    }\n}\nclass ObservableSignal extends BaseObservable {\n    get debugName() {\n        return new DebugNameData(this._owner, this._debugName, undefined).getDebugName(this) ?? 'Observable Signal';\n    }\n    toString() {\n        return this.debugName;\n    }\n    constructor(_debugName, _owner) {\n        super();\n        this._debugName = _debugName;\n        this._owner = _owner;\n    }\n    trigger(tx, change) {\n        if (!tx) {\n            transaction(tx => {\n                this.trigger(tx, change);\n            }, () => `Trigger signal ${this.debugName}`);\n            return;\n        }\n        for (const o of this.observers) {\n            tx.updateObserver(o, this);\n            o.handleChange(this, change);\n        }\n    }\n    get() {\n        // NO OP\n    }\n}\n/**\n * This makes sure the observable is being observed and keeps its cache alive.\n */\nexport function keepObserved(observable) {\n    const o = new KeepAliveObserver(false, undefined);\n    observable.addObserver(o);\n    return toDisposable(() => {\n        observable.removeObserver(o);\n    });\n}\n_setKeepObserved(keepObserved);\n/**\n * This converts the given observable into an autorun.\n */\nexport function recomputeInitiallyAndOnChange(observable, handleValue) {\n    const o = new KeepAliveObserver(true, handleValue);\n    observable.addObserver(o);\n    if (handleValue) {\n        handleValue(observable.get());\n    }\n    else {\n        observable.reportChanges();\n    }\n    return toDisposable(() => {\n        observable.removeObserver(o);\n    });\n}\n_setRecomputeInitiallyAndOnChange(recomputeInitiallyAndOnChange);\nexport class KeepAliveObserver {\n    constructor(_forceRecompute, _handleValue) {\n        this._forceRecompute = _forceRecompute;\n        this._handleValue = _handleValue;\n        this._counter = 0;\n    }\n    beginUpdate(observable) {\n        this._counter++;\n    }\n    endUpdate(observable) {\n        this._counter--;\n        if (this._counter === 0 && this._forceRecompute) {\n            if (this._handleValue) {\n                this._handleValue(observable.get());\n            }\n            else {\n                observable.reportChanges();\n            }\n        }\n    }\n    handlePossibleChange(observable) {\n        // NO OP\n    }\n    handleChange(observable, change) {\n        // NO OP\n    }\n}\nexport function derivedObservableWithCache(owner, computeFn) {\n    let lastValue = undefined;\n    const observable = derivedOpts({ owner, debugReferenceFn: computeFn }, reader => {\n        lastValue = computeFn(reader, lastValue);\n        return lastValue;\n    });\n    return observable;\n}\nexport function derivedObservableWithWritableCache(owner, computeFn) {\n    let lastValue = undefined;\n    const onChange = observableSignal('derivedObservableWithWritableCache');\n    const observable = derived(owner, reader => {\n        onChange.read(reader);\n        lastValue = computeFn(reader, lastValue);\n        return lastValue;\n    });\n    return Object.assign(observable, {\n        clearCache: (tx) => {\n            lastValue = undefined;\n            onChange.trigger(tx);\n        },\n        setCache: (newValue, tx) => {\n            lastValue = newValue;\n            onChange.trigger(tx);\n        }\n    });\n}\n/**\n * When the items array changes, referential equal items are not mapped again.\n */\nexport function mapObservableArrayCached(owner, items, map, keySelector) {\n    let m = new ArrayMap(map, keySelector);\n    const self = derivedOpts({\n        debugReferenceFn: map,\n        owner,\n        onLastObserverRemoved: () => {\n            m.dispose();\n            m = new ArrayMap(map);\n        }\n    }, (reader) => {\n        m.setItems(items.read(reader));\n        return m.getItems();\n    });\n    return self;\n}\nclass ArrayMap {\n    constructor(_map, _keySelector) {\n        this._map = _map;\n        this._keySelector = _keySelector;\n        this._cache = new Map();\n        this._items = [];\n    }\n    dispose() {\n        this._cache.forEach(entry => entry.store.dispose());\n        this._cache.clear();\n    }\n    setItems(items) {\n        const newItems = [];\n        const itemsToRemove = new Set(this._cache.keys());\n        for (const item of items) {\n            const key = this._keySelector ? this._keySelector(item) : item;\n            let entry = this._cache.get(key);\n            if (!entry) {\n                const store = new DisposableStore();\n                const out = this._map(item, store);\n                entry = { out, store };\n                this._cache.set(key, entry);\n            }\n            else {\n                itemsToRemove.delete(key);\n            }\n            newItems.push(entry.out);\n        }\n        for (const item of itemsToRemove) {\n            const entry = this._cache.get(item);\n            entry.store.dispose();\n            this._cache.delete(item);\n        }\n        this._items = newItems;\n    }\n    getItems() {\n        return this._items;\n    }\n}\nexport class ValueWithChangeEventFromObservable {\n    constructor(observable) {\n        this.observable = observable;\n    }\n    get onDidChange() {\n        return Event.fromObservableLight(this.observable);\n    }\n    get value() {\n        return this.observable.get();\n    }\n}\nexport function observableFromValueWithChangeEvent(owner, value) {\n    if (value instanceof ValueWithChangeEventFromObservable) {\n        return value.observable;\n    }\n    return observableFromEvent(owner, value.onDidChange, () => value.value);\n}\n/**\n * Works like a derived.\n * However, if the value is not undefined, it is cached and will not be recomputed anymore.\n * In that case, the derived will unsubscribe from its dependencies.\n*/\nexport function derivedConstOnceDefined(owner, fn) {\n    return derivedObservableWithCache(owner, (reader, lastValue) => lastValue ?? fn(reader));\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { autorun } from './autorun.js';\nimport { observableValue, transaction } from './base.js';\nimport { CancellationError } from '../errors.js';\n/**\n * A promise whose state is observable.\n */\nexport class ObservablePromise {\n    static fromFn(fn) {\n        return new ObservablePromise(fn());\n    }\n    constructor(promise) {\n        this._value = observableValue(this, undefined);\n        /**\n         * The current state of the promise.\n         * Is `undefined` if the promise didn't resolve yet.\n         */\n        this.promiseResult = this._value;\n        this.promise = promise.then(value => {\n            transaction(tx => {\n                /** @description onPromiseResolved */\n                this._value.set(new PromiseResult(value, undefined), tx);\n            });\n            return value;\n        }, error => {\n            transaction(tx => {\n                /** @description onPromiseRejected */\n                this._value.set(new PromiseResult(undefined, error), tx);\n            });\n            throw error;\n        });\n    }\n}\nexport class PromiseResult {\n    constructor(\n    /**\n     * The value of the resolved promise.\n     * Undefined if the promise rejected.\n     */\n    data, \n    /**\n     * The error in case of a rejected promise.\n     * Undefined if the promise resolved.\n     */\n    error) {\n        this.data = data;\n        this.error = error;\n    }\n}\nexport function waitForState(observable, predicate, isError, cancellationToken) {\n    if (!predicate) {\n        predicate = state => state !== null && state !== undefined;\n    }\n    return new Promise((resolve, reject) => {\n        let isImmediateRun = true;\n        let shouldDispose = false;\n        const stateObs = observable.map(state => {\n            /** @description waitForState.state */\n            return {\n                isFinished: predicate(state),\n                error: isError ? isError(state) : false,\n                state\n            };\n        });\n        const d = autorun(reader => {\n            /** @description waitForState */\n            const { isFinished, error, state } = stateObs.read(reader);\n            if (isFinished || error) {\n                if (isImmediateRun) {\n                    // The variable `d` is not initialized yet\n                    shouldDispose = true;\n                }\n                else {\n                    d.dispose();\n                }\n                if (error) {\n                    reject(error === true ? state : error);\n                }\n                else {\n                    resolve(state);\n                }\n            }\n        });\n        if (cancellationToken) {\n            const dc = cancellationToken.onCancellationRequested(() => {\n                d.dispose();\n                dc.dispose();\n                reject(new CancellationError());\n            });\n            if (cancellationToken.isCancellationRequested) {\n                d.dispose();\n                dc.dispose();\n                reject(new CancellationError());\n                return;\n            }\n        }\n        isImmediateRun = false;\n        if (shouldDispose) {\n            d.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 { BaseObservable, TransactionImpl } from './base.js';\n/**\n * Holds off updating observers until the value is actually read.\n*/\nexport class LazyObservableValue extends BaseObservable {\n    get debugName() {\n        return this._debugNameData.getDebugName(this) ?? 'LazyObservableValue';\n    }\n    constructor(_debugNameData, initialValue, _equalityComparator) {\n        super();\n        this._debugNameData = _debugNameData;\n        this._equalityComparator = _equalityComparator;\n        this._isUpToDate = true;\n        this._deltas = [];\n        this._updateCounter = 0;\n        this._value = initialValue;\n    }\n    get() {\n        this._update();\n        return this._value;\n    }\n    _update() {\n        if (this._isUpToDate) {\n            return;\n        }\n        this._isUpToDate = true;\n        if (this._deltas.length > 0) {\n            for (const observer of this.observers) {\n                for (const change of this._deltas) {\n                    observer.handleChange(this, change);\n                }\n            }\n            this._deltas.length = 0;\n        }\n        else {\n            for (const observer of this.observers) {\n                observer.handleChange(this, undefined);\n            }\n        }\n    }\n    _beginUpdate() {\n        this._updateCounter++;\n        if (this._updateCounter === 1) {\n            for (const observer of this.observers) {\n                observer.beginUpdate(this);\n            }\n        }\n    }\n    _endUpdate() {\n        this._updateCounter--;\n        if (this._updateCounter === 0) {\n            this._update();\n            // End update could change the observer list.\n            const observers = [...this.observers];\n            for (const r of observers) {\n                r.endUpdate(this);\n            }\n        }\n    }\n    addObserver(observer) {\n        const shouldCallBeginUpdate = !this.observers.has(observer) && this._updateCounter > 0;\n        super.addObserver(observer);\n        if (shouldCallBeginUpdate) {\n            observer.beginUpdate(this);\n        }\n    }\n    removeObserver(observer) {\n        const shouldCallEndUpdate = this.observers.has(observer) && this._updateCounter > 0;\n        super.removeObserver(observer);\n        if (shouldCallEndUpdate) {\n            // Calling end update after removing the observer makes sure endUpdate cannot be called twice here.\n            observer.endUpdate(this);\n        }\n    }\n    set(value, tx, change) {\n        if (change === undefined && this._equalityComparator(this._value, value)) {\n            return;\n        }\n        let _tx;\n        if (!tx) {\n            tx = _tx = new TransactionImpl(() => { }, () => `Setting ${this.debugName}`);\n        }\n        try {\n            this._isUpToDate = false;\n            this._setValue(value);\n            if (change !== undefined) {\n                this._deltas.push(change);\n            }\n            tx.updateObserver({\n                beginUpdate: () => this._beginUpdate(),\n                endUpdate: () => this._endUpdate(),\n                handleChange: (observable, change) => { },\n                handlePossibleChange: (observable) => { },\n            }, this);\n            if (this._updateCounter > 1) {\n                // We already started begin/end update, so we need to manually call handlePossibleChange\n                for (const observer of this.observers) {\n                    observer.handlePossibleChange(this);\n                }\n            }\n        }\n        finally {\n            if (_tx) {\n                _tx.finish();\n            }\n        }\n    }\n    toString() {\n        return `${this.debugName}: ${this._value}`;\n    }\n    _setValue(newValue) {\n        this._value = newValue;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { strictEquals } from '../equals.js';\nimport { ObservableValue } from './base.js';\nimport { DebugNameData } from './debugName.js';\nimport { LazyObservableValue } from './lazyObservableValue.js';\nexport function observableValueOpts(options, initialValue) {\n    if (options.lazy) {\n        return new LazyObservableValue(new DebugNameData(options.owner, options.debugName, undefined), initialValue, options.equalsFn ?? strictEquals);\n    }\n    return new ObservableValue(new DebugNameData(options.owner, options.debugName, undefined), initialValue, options.equalsFn ?? strictEquals);\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { LanguagesRegistry } from './languagesRegistry.js';\nimport { firstOrDefault } from '../../../base/common/arrays.js';\nimport { TokenizationRegistry } from '../languages.js';\nimport { PLAINTEXT_LANGUAGE_ID } from '../languages/modesRegistry.js';\nimport { observableFromEvent } from '../../../base/common/observable.js';\nexport class LanguageService extends Disposable {\n    static { this.instanceCount = 0; }\n    constructor(warnOnOverwrite = false) {\n        super();\n        this._onDidRequestBasicLanguageFeatures = this._register(new Emitter());\n        this.onDidRequestBasicLanguageFeatures = this._onDidRequestBasicLanguageFeatures.event;\n        this._onDidRequestRichLanguageFeatures = this._register(new Emitter());\n        this.onDidRequestRichLanguageFeatures = this._onDidRequestRichLanguageFeatures.event;\n        this._onDidChange = this._register(new Emitter({ leakWarningThreshold: 200 /* https://github.com/microsoft/vscode/issues/119968 */ }));\n        this.onDidChange = this._onDidChange.event;\n        this._requestedBasicLanguages = new Set();\n        this._requestedRichLanguages = new Set();\n        LanguageService.instanceCount++;\n        this._registry = this._register(new LanguagesRegistry(true, warnOnOverwrite));\n        this.languageIdCodec = this._registry.languageIdCodec;\n        this._register(this._registry.onDidChange(() => this._onDidChange.fire()));\n    }\n    dispose() {\n        LanguageService.instanceCount--;\n        super.dispose();\n    }\n    isRegisteredLanguageId(languageId) {\n        return this._registry.isRegisteredLanguageId(languageId);\n    }\n    getLanguageIdByLanguageName(languageName) {\n        return this._registry.getLanguageIdByLanguageName(languageName);\n    }\n    getLanguageIdByMimeType(mimeType) {\n        return this._registry.getLanguageIdByMimeType(mimeType);\n    }\n    guessLanguageIdByFilepathOrFirstLine(resource, firstLine) {\n        const languageIds = this._registry.guessLanguageIdByFilepathOrFirstLine(resource, firstLine);\n        return firstOrDefault(languageIds, null);\n    }\n    createById(languageId) {\n        return new LanguageSelection(this.onDidChange, () => {\n            return this._createAndGetLanguageIdentifier(languageId);\n        });\n    }\n    createByFilepathOrFirstLine(resource, firstLine) {\n        return new LanguageSelection(this.onDidChange, () => {\n            const languageId = this.guessLanguageIdByFilepathOrFirstLine(resource, firstLine);\n            return this._createAndGetLanguageIdentifier(languageId);\n        });\n    }\n    _createAndGetLanguageIdentifier(languageId) {\n        if (!languageId || !this.isRegisteredLanguageId(languageId)) {\n            // Fall back to plain text if language is unknown\n            languageId = PLAINTEXT_LANGUAGE_ID;\n        }\n        return languageId;\n    }\n    requestBasicLanguageFeatures(languageId) {\n        if (!this._requestedBasicLanguages.has(languageId)) {\n            this._requestedBasicLanguages.add(languageId);\n            this._onDidRequestBasicLanguageFeatures.fire(languageId);\n        }\n    }\n    requestRichLanguageFeatures(languageId) {\n        if (!this._requestedRichLanguages.has(languageId)) {\n            this._requestedRichLanguages.add(languageId);\n            // Ensure basic features are requested\n            this.requestBasicLanguageFeatures(languageId);\n            // Ensure tokenizers are created\n            TokenizationRegistry.getOrCreate(languageId);\n            this._onDidRequestRichLanguageFeatures.fire(languageId);\n        }\n    }\n}\nclass LanguageSelection {\n    constructor(onDidChangeLanguages, selector) {\n        this._value = observableFromEvent(this, onDidChangeLanguages, () => selector());\n        this.onDidChange = Event.fromObservable(this._value);\n    }\n    get languageId() {\n        return this._value.get();\n    }\n}\n","import { Mimes } from '../common/mime.js';\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: Mimes.text,\n    /**\n     * Internal type used to pass around text/uri-list data.\n     *\n     * This is needed to work around https://bugs.chromium.org/p/chromium/issues/detail?id=239745.\n     */\n    INTERNAL_URI_LIST: 'application/vnd.code.uri-list',\n};\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { Lazy } from '../../../common/lazy.js';\nconst nullHoverDelegateFactory = () => ({\n    get delay() { return -1; },\n    dispose: () => { },\n    showHover: () => { return undefined; },\n});\nlet hoverDelegateFactory = nullHoverDelegateFactory;\nconst defaultHoverDelegateMouse = new Lazy(() => hoverDelegateFactory('mouse', false));\nconst defaultHoverDelegateElement = new Lazy(() => hoverDelegateFactory('element', false));\n// TODO: Remove when getDefaultHoverDelegate is no longer used\nexport function setHoverDelegateFactory(hoverDelegateProvider) {\n    hoverDelegateFactory = hoverDelegateProvider;\n}\n// TODO: Refine type for use in new IHoverService interface\nexport function getDefaultHoverDelegate(placement) {\n    if (placement === 'element') {\n        return defaultHoverDelegateElement.value;\n    }\n    return defaultHoverDelegateMouse.value;\n}\n// TODO: Create equivalent in IHoverService\nexport function createInstantHoverDelegate() {\n    // Creates a hover delegate with instant hover enabled.\n    // This hover belongs to the consumer and requires the them to dispose it.\n    // Instant hover only makes sense for 'element' placement.\n    return hoverDelegateFactory('element', 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 *--------------------------------------------------------------------------------------------*/\nlet baseHoverDelegate = {\n    showHover: () => undefined,\n    hideHover: () => undefined,\n    showAndFocusLastHover: () => undefined,\n    setupManagedHover: () => null,\n    showManagedHover: () => undefined\n};\n/**\n * Sets the hover delegate for use **only in the `base/` layer**.\n */\nexport function setBaseLayerHoverDelegate(hoverDelegate) {\n    baseHoverDelegate = hoverDelegate;\n}\n/**\n * Gets the hover delegate for use **only in the `base/` layer**.\n *\n * Since the hover service depends on various platform services, this delegate essentially bypasses\n * the standard dependency injection mechanism by injecting a global hover service at start up. The\n * only reason this should be used is if `IHoverService` is not available.\n */\nexport function getBaseLayerHoverDelegate() {\n    return baseHoverDelegate;\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 *--------------------------------------------------------------------------------------------*/\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 *--------------------------------------------------------------------------------------------*/\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 (const 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 (const 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    get paddingTop() {\n        return this._paddingTop;\n    }\n    set paddingTop(paddingTop) {\n        this._size = this._size + paddingTop - this._paddingTop;\n        this._paddingTop = paddingTop;\n    }\n    constructor(topPadding) {\n        this.groups = [];\n        this._size = 0;\n        this._paddingTop = 0;\n        this._paddingTop = topPadding ?? 0;\n        this._size = this._paddingTop;\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._paddingTop + 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        if (position < this._paddingTop) {\n            return 0;\n        }\n        let index = 0;\n        let size = this._paddingTop;\n        for (const 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 (const group of this.groups) {\n            const groupCount = group.range.end - group.range.start;\n            const newCount = count + groupCount;\n            if (index < newCount) {\n                return this._paddingTop + 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';\nexport class RowCache {\n    constructor(renderers) {\n        this.renderers = renderers;\n        this.cache = new Map();\n        this.transactionNodesPendingRemoval = new Set();\n        this.inTransaction = false;\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     * @returns A row and `isReusingConnectedDomNode` if the row's node is already in the dom in a stale position.\n     */\n    alloc(templateId) {\n        let result = this.getTemplateCache(templateId).pop();\n        let isStale = false;\n        if (result) {\n            isStale = this.transactionNodesPendingRemoval.has(result.domNode);\n            if (isStale) {\n                this.transactionNodesPendingRemoval.delete(result.domNode);\n            }\n        }\n        else {\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 { row: result, isReusingConnectedDomNode: isStale };\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    /**\n     * Begin a set of changes that use the cache. This lets us skip work when a row is removed and then inserted again.\n     */\n    transact(makeChanges) {\n        if (this.inTransaction) {\n            throw new Error('Already in transaction');\n        }\n        this.inTransaction = true;\n        try {\n            makeChanges();\n        }\n        finally {\n            for (const domNode of this.transactionNodesPendingRemoval) {\n                this.doRemoveNode(domNode);\n            }\n            this.transactionNodesPendingRemoval.clear();\n            this.inTransaction = false;\n        }\n    }\n    releaseRow(row) {\n        const { domNode, templateId } = row;\n        if (domNode) {\n            if (this.inTransaction) {\n                this.transactionNodesPendingRemoval.add(domNode);\n            }\n            else {\n                this.doRemoveNode(domNode);\n            }\n        }\n        const cache = this.getTemplateCache(templateId);\n        cache.push(row);\n    }\n    doRemoveNode(domNode) {\n        domNode.classList.remove('scrolling');\n        domNode.remove();\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        this.transactionNodesPendingRemoval.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 { DataTransfers } from '../../dnd.js';\nimport { $, addDisposableListener, animate, getContentHeight, getContentWidth, getTopLeftOffset, getWindow, isAncestor, isHTMLElement, isSVGElement, scheduleAtNextAnimationFrame } from '../../dom.js';\nimport { DomEmitter } from '../../event.js';\nimport { EventType as TouchEventType, Gesture } from '../../touch.js';\nimport { SmoothScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { distinct, equals } from '../../../common/arrays.js';\nimport { Delayer, disposableTimeout } from '../../../common/async.js';\nimport { memoize } from '../../../common/decorators.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../../common/lifecycle.js';\nimport { Range } from '../../../common/range.js';\nimport { Scrollable } from '../../../common/scrollable.js';\nimport { RangeMap, shift } from './rangeMap.js';\nimport { RowCache } from './rowCache.js';\nimport { BugIndicatingError } from '../../../common/errors.js';\nimport { clamp } from '../../../common/numbers.js';\nconst StaticDND = {\n    CurrentDragAndDropData: undefined\n};\nconst DefaultOptions = {\n    useShadows: true,\n    verticalScrollMode: 1 /* ScrollbarVisibility.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        dispose() { }\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?.getSetSize) {\n            this.getSetSize = accessibilityProvider.getSetSize.bind(accessibilityProvider);\n        }\n        else {\n            this.getSetSize = (e, i, l) => l;\n        }\n        if (accessibilityProvider?.getPosInSet) {\n            this.getPosInSet = accessibilityProvider.getPosInSet.bind(accessibilityProvider);\n        }\n        else {\n            this.getPosInSet = (e, i) => i + 1;\n        }\n        if (accessibilityProvider?.getRole) {\n            this.getRole = accessibilityProvider.getRole.bind(accessibilityProvider);\n        }\n        else {\n            this.getRole = _ => 'listitem';\n        }\n        if (accessibilityProvider?.isChecked) {\n            this.isChecked = accessibilityProvider.isChecked.bind(accessibilityProvider);\n        }\n        else {\n            this.isChecked = _ => undefined;\n        }\n    }\n}\n/**\n * The {@link ListView} is a virtual scrolling engine.\n *\n * Given that it only renders elements within its viewport, it can hold large\n * collections of elements and stay very performant. The performance bottleneck\n * usually lies within the user's rendering code for each element.\n *\n * @remarks It is a low-level widget, not meant to be used directly. Refer to the\n * List widget instead.\n */\nexport class ListView {\n    static { this.InstanceCount = 0; }\n    get contentHeight() { return this.rangeMap.size; }\n    get onDidScroll() { return this.scrollableElement.onScroll; }\n    get scrollableElementDomNode() { return this.scrollableElement.getDomNode(); }\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    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._onDidChangeContentWidth = new Emitter();\n        this.onDidChangeContentHeight = Event.latch(this._onDidChangeContentHeight.event, undefined, this.disposables);\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 = this.createRangeMap(options.paddingTop ?? 0);\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 = options.horizontalScrolling ?? DefaultOptions.horizontalScrolling;\n        this.domNode.classList.toggle('horizontal-scrolling', this._horizontalScrolling);\n        this.paddingBottom = typeof options.paddingBottom === 'undefined' ? 0 : options.paddingBottom;\n        this.accessibilityProvider = new ListViewAccessibilityProvider(options.accessibilityProvider);\n        this.rowsContainer = document.createElement('div');\n        this.rowsContainer.className = 'monaco-list-rows';\n        const transformOptimization = options.transformOptimization ?? DefaultOptions.transformOptimization;\n        if (transformOptimization) {\n            this.rowsContainer.style.transform = 'translate3d(0px, 0px, 0px)';\n            this.rowsContainer.style.overflow = 'hidden';\n            this.rowsContainer.style.contain = 'strict';\n        }\n        this.disposables.add(Gesture.addTarget(this.rowsContainer));\n        this.scrollable = this.disposables.add(new Scrollable({\n            forceIntegerValues: true,\n            smoothScrollDuration: (options.smoothScrolling ?? false) ? 125 : 0,\n            scheduleAtNextAnimationFrame: cb => scheduleAtNextAnimationFrame(getWindow(this.domNode), cb)\n        }));\n        this.scrollableElement = this.disposables.add(new SmoothScrollableElement(this.rowsContainer, {\n            alwaysConsumeMouseWheel: options.alwaysConsumeMouseWheel ?? DefaultOptions.alwaysConsumeMouseWheel,\n            horizontal: 1 /* ScrollbarVisibility.Auto */,\n            vertical: options.verticalScrollMode ?? DefaultOptions.verticalScrollMode,\n            useShadows: options.useShadows ?? DefaultOptions.useShadows,\n            mouseWheelScrollSensitivity: options.mouseWheelScrollSensitivity,\n            fastScrollSensitivity: options.fastScrollSensitivity,\n            scrollByPage: options.scrollByPage\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        this.disposables.add(addDisposableListener(this.rowsContainer, TouchEventType.Change, e => this.onTouchChange(e)));\n        // Prevent the monaco-scrollable-element from scrolling\n        // https://github.com/microsoft/vscode/issues/44181\n        this.disposables.add(addDisposableListener(this.scrollableElement.getDomNode(), 'scroll', e => e.target.scrollTop = 0));\n        this.disposables.add(addDisposableListener(this.domNode, 'dragover', e => this.onDragOver(this.toDragEvent(e))));\n        this.disposables.add(addDisposableListener(this.domNode, 'drop', e => this.onDrop(this.toDragEvent(e))));\n        this.disposables.add(addDisposableListener(this.domNode, 'dragleave', e => this.onDragLeave(this.toDragEvent(e))));\n        this.disposables.add(addDisposableListener(this.domNode, 'dragend', e => this.onDragEnd(e)));\n        this.setRowLineHeight = options.setRowLineHeight ?? DefaultOptions.setRowLineHeight;\n        this.setRowHeight = options.setRowHeight ?? DefaultOptions.setRowHeight;\n        this.supportDynamicHeights = options.supportDynamicHeights ?? DefaultOptions.supportDynamicHeights;\n        this.dnd = options.dnd ?? this.disposables.add(DefaultOptions.dnd);\n        this.layout(options.initialSize?.height, options.initialSize?.width);\n    }\n    updateOptions(options) {\n        if (options.paddingBottom !== undefined) {\n            this.paddingBottom = options.paddingBottom;\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        let scrollableOptions;\n        if (options.scrollByPage !== undefined) {\n            scrollableOptions = { ...(scrollableOptions ?? {}), scrollByPage: options.scrollByPage };\n        }\n        if (options.mouseWheelScrollSensitivity !== undefined) {\n            scrollableOptions = { ...(scrollableOptions ?? {}), mouseWheelScrollSensitivity: options.mouseWheelScrollSensitivity };\n        }\n        if (options.fastScrollSensitivity !== undefined) {\n            scrollableOptions = { ...(scrollableOptions ?? {}), fastScrollSensitivity: options.fastScrollSensitivity };\n        }\n        if (scrollableOptions) {\n            this.scrollableElement.updateOptions(scrollableOptions);\n        }\n        if (options.paddingTop !== undefined && options.paddingTop !== this.rangeMap.paddingTop) {\n            // trigger a rerender\n            const lastRenderRange = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\n            const offset = options.paddingTop - this.rangeMap.paddingTop;\n            this.rangeMap.paddingTop = options.paddingTop;\n            this.render(lastRenderRange, Math.max(0, this.lastRenderTop + offset), this.lastRenderHeight, undefined, undefined, true);\n            this.setScrollTop(this.lastRenderTop);\n            this.eventuallyUpdateScrollDimensions();\n            if (this.supportDynamicHeights) {\n                this._rerender(this.lastRenderTop, this.lastRenderHeight);\n            }\n        }\n    }\n    createRangeMap(paddingTop) {\n        return new RangeMap(paddingTop);\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.end - 1; i >= removeRange.start; i--) {\n            const item = this.items[i];\n            item.dragStartDisposable.dispose();\n            item.checkedDisposable.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.unshift(item.row);\n            }\n            item.row = null;\n            item.stale = true;\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            checkedDisposable: Disposable.None,\n            stale: false\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 = this.createRangeMap(this.rangeMap.paddingTop);\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)).reverse();\n        for (const range of insertRanges) {\n            for (let i = range.end - 1; i >= range.start; i--) {\n                const item = this.items[i];\n                const rows = rowsToDispose.get(item.templateId);\n                const row = rows?.pop();\n                this.insertItemInDOM(i, 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(getWindow(this.domNode), () => {\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        this._onDidChangeContentWidth.fire(this.scrollWidth);\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    get firstVisibleIndex() {\n        const range = this.getRenderRange(this.lastRenderTop, this.lastRenderHeight);\n        return range.start;\n    }\n    element(index) {\n        return this.items[index].element;\n    }\n    indexOf(element) {\n        return this.items.findIndex(item => item.element === 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        const 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).reverse();\n        const rangesToRemove = Range.relativeComplement(previousRenderRange, renderRange);\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        this.cache.transact(() => {\n            for (const range of rangesToRemove) {\n                for (let i = range.start; i < range.end; i++) {\n                    this.removeItemFromDOM(i);\n                }\n            }\n            for (const range of rangesToInsert) {\n                for (let i = range.end - 1; i >= range.start; i--) {\n                    this.insertItemInDOM(i);\n                }\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, row) {\n        const item = this.items[index];\n        if (!item.row) {\n            if (row) {\n                item.row = row;\n                item.stale = true;\n            }\n            else {\n                const result = this.cache.alloc(item.templateId);\n                item.row = result.row;\n                item.stale ||= result.isReusingConnectedDomNode;\n            }\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 === 'boolean') {\n            item.row.domNode.setAttribute('aria-checked', String(!!checked));\n        }\n        else if (checked) {\n            const update = (checked) => item.row.domNode.setAttribute('aria-checked', String(!!checked));\n            update(checked.value);\n            item.checkedDisposable = checked.onDidChange(() => update(checked.value));\n        }\n        if (item.stale || !item.row.domNode.parentElement) {\n            const referenceNode = this.items.at(index + 1)?.row?.domNode ?? null;\n            if (item.row.domNode.parentElement !== this.rowsContainer || item.row.domNode.nextElementSibling !== referenceNode) {\n                this.rowsContainer.insertBefore(item.row.domNode, referenceNode);\n            }\n            item.stale = false;\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        renderer?.renderElement(item.element, index, item.row.templateData, item.size);\n        const uri = this.dnd.getDragURI(item.element);\n        item.dragStartDisposable.dispose();\n        item.row.domNode.draggable = !!uri;\n        if (uri) {\n            item.dragStartDisposable = addDisposableListener(item.row.domNode, 'dragstart', 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 = 'fit-content';\n        item.width = getContentWidth(item.row.domNode);\n        const style = getWindow(item.row.domNode).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('data-parity', index % 2 === 0 ? 'even' : 'odd');\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        item.checkedDisposable.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.paddingBottom;\n    }\n    // Events\n    get onMouseClick() { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'click')).event, e => this.toMouseEvent(e), this.disposables); }\n    get onMouseDblClick() { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'dblclick')).event, e => this.toMouseEvent(e), this.disposables); }\n    get onMouseMiddleClick() { return Event.filter(Event.map(this.disposables.add(new DomEmitter(this.domNode, 'auxclick')).event, e => this.toMouseEvent(e), this.disposables), e => e.browserEvent.button === 1, this.disposables); }\n    get onMouseDown() { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'mousedown')).event, e => this.toMouseEvent(e), this.disposables); }\n    get onMouseOver() { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'mouseover')).event, e => this.toMouseEvent(e), this.disposables); }\n    get onMouseOut() { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'mouseout')).event, e => this.toMouseEvent(e), this.disposables); }\n    get onContextMenu() { return Event.any(Event.map(this.disposables.add(new DomEmitter(this.domNode, 'contextmenu')).event, e => this.toMouseEvent(e), this.disposables), Event.map(this.disposables.add(new DomEmitter(this.domNode, TouchEventType.Contextmenu)).event, e => this.toGestureEvent(e), this.disposables)); }\n    get onTouchStart() { return Event.map(this.disposables.add(new DomEmitter(this.domNode, 'touchstart')).event, e => this.toTouchEvent(e), this.disposables); }\n    get onTap() { return Event.map(this.disposables.add(new DomEmitter(this.rowsContainer, TouchEventType.Tap)).event, e => this.toGestureEvent(e), this.disposables); }\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        const sector = this.getTargetSector(browserEvent, index);\n        return { browserEvent, index, element, sector };\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.TEXT, 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            const getDragImageContainer = (e) => {\n                while (e && !e.classList.contains('monaco-workbench')) {\n                    e = e.parentElement;\n                }\n                return e || this.domNode.ownerDocument;\n            };\n            const container = getDragImageContainer(this.domNode);\n            container.appendChild(dragImage);\n            event.dataTransfer.setDragImage(dragImage, -10, -10);\n            setTimeout(() => dragImage.remove(), 0);\n        }\n        this.domNode.classList.add('dragging');\n        this.currentDragData = new ElementsDragAndDropData(elements);\n        StaticDND.CurrentDragAndDropData = new ExternalElementsDragAndDropData(elements);\n        this.dnd.onDragStart?.(this.currentDragData, event);\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.sector, 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?.type === 0 /* ListDragOverEffectType.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        let dragOverEffectPosition = typeof result !== 'boolean' && result.effect && result.effect.position ? result.effect.position : \"drop-target\" /* ListDragOverEffectPosition.Over */;\n        if (equalsDragFeedback(this.currentDragFeedback, feedback) && this.currentDragFeedbackPosition === dragOverEffectPosition) {\n            return true;\n        }\n        this.currentDragFeedback = feedback;\n        this.currentDragFeedbackPosition = dragOverEffectPosition;\n        this.currentDragFeedbackDisposable.dispose();\n        if (feedback[0] === -1) { // entire list feedback\n            this.domNode.classList.add(dragOverEffectPosition);\n            this.rowsContainer.classList.add(dragOverEffectPosition);\n            this.currentDragFeedbackDisposable = toDisposable(() => {\n                this.domNode.classList.remove(dragOverEffectPosition);\n                this.rowsContainer.classList.remove(dragOverEffectPosition);\n            });\n        }\n        else {\n            if (feedback.length > 1 && dragOverEffectPosition !== \"drop-target\" /* ListDragOverEffectPosition.Over */) {\n                throw new Error('Can\\'t use multiple feedbacks with position different than \\'over\\'');\n            }\n            // Make sure there is no flicker when moving between two items\n            // Always use the before feedback if possible\n            if (dragOverEffectPosition === \"drop-target-after\" /* ListDragOverEffectPosition.After */) {\n                if (feedback[0] < this.length - 1) {\n                    feedback[0] += 1;\n                    dragOverEffectPosition = \"drop-target-before\" /* ListDragOverEffectPosition.Before */;\n                }\n            }\n            for (const index of feedback) {\n                const item = this.items[index];\n                item.dropTarget = true;\n                item.row?.domNode.classList.add(dragOverEffectPosition);\n            }\n            this.currentDragFeedbackDisposable = toDisposable(() => {\n                for (const index of feedback) {\n                    const item = this.items[index];\n                    item.dropTarget = false;\n                    item.row?.domNode.classList.remove(dragOverEffectPosition);\n                }\n            });\n        }\n        return true;\n    }\n    onDragLeave(event) {\n        this.onDragLeaveTimeout.dispose();\n        this.onDragLeaveTimeout = disposableTimeout(() => this.clearDragOverFeedback(), 100, this.disposables);\n        if (this.currentDragData) {\n            this.dnd.onDragLeave?.(this.currentDragData, event.element, event.index, event.browserEvent);\n        }\n    }\n    onDrop(event) {\n        if (!this.canDrop) {\n            return;\n        }\n        const dragData = this.currentDragData;\n        this.teardownDragAndDropScrollTopAnimation();\n        this.clearDragOverFeedback();\n        this.domNode.classList.remove('dragging');\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.sector, event.browserEvent);\n    }\n    onDragEnd(event) {\n        this.canDrop = false;\n        this.teardownDragAndDropScrollTopAnimation();\n        this.clearDragOverFeedback();\n        this.domNode.classList.remove('dragging');\n        this.currentDragData = undefined;\n        StaticDND.CurrentDragAndDropData = undefined;\n        this.dnd.onDragEnd?.(event);\n    }\n    clearDragOverFeedback() {\n        this.currentDragFeedback = undefined;\n        this.currentDragFeedbackPosition = 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(getWindow(this.domNode), 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, this.disposables);\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    getTargetSector(browserEvent, targetIndex) {\n        if (targetIndex === undefined) {\n            return undefined;\n        }\n        const relativePosition = browserEvent.offsetY / this.items[targetIndex].size;\n        const sector = Math.floor(relativePosition / 0.25);\n        return clamp(sector, 0, 3);\n    }\n    getItemIndexFromEventTarget(target) {\n        const scrollableElement = this.scrollableElement.getDomNode();\n        let element = target;\n        while ((isHTMLElement(element) || isSVGElement(element)) && 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).reverse();\n                for (const range of renderRanges) {\n                    for (let i = range.end - 1; i >= range.start; i--) {\n                        this.insertItemInDOM(i);\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 (!!this.virtualDelegate.getDynamicHeight) {\n            const newSize = this.virtualDelegate.getDynamicHeight(item.element);\n            if (newSize !== null) {\n                const size = item.size;\n                item.size = newSize;\n                item.lastDynamicHeightWidth = this.renderWidth;\n                return newSize - size;\n            }\n        }\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 (item.row) {\n            item.row.domNode.style.height = '';\n            item.size = item.row.domNode.offsetHeight;\n            if (item.size === 0 && !isAncestor(item.row.domNode, getWindow(item.row.domNode).document.body)) {\n                console.warn('Measuring item node that is not in DOM! Add ListView to the DOM before measuring row height!', new Error().stack);\n            }\n            item.lastDynamicHeightWidth = this.renderWidth;\n            return item.size - 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            throw new BugIndicatingError('Missing renderer for templateId: ' + item.templateId);\n        }\n        renderer.renderElement(item.element, index, row.templateData, undefined);\n        item.size = row.domNode.offsetHeight;\n        renderer.disposeElement?.(item.element, index, row.templateData, undefined);\n        this.virtualDelegate.setDynamicHeight?.(item.element, item.size);\n        item.lastDynamicHeightWidth = this.renderWidth;\n        row.domNode.remove();\n        this.cache.release(row);\n        return item.size - size;\n    }\n    getElementDomId(index) {\n        return `${this.domId}_${index}`;\n    }\n    // Dispose\n    dispose() {\n        for (const item of this.items) {\n            item.dragStartDisposable.dispose();\n            item.checkedDisposable.dispose();\n            if (item.row) {\n                const renderer = this.renderers.get(item.row.templateId);\n                if (renderer) {\n                    renderer.disposeElement?.(item.element, -1, item.row.templateData, undefined);\n                    renderer.disposeTemplate(item.row.templateData);\n                }\n            }\n        }\n        this.items = [];\n        this.domNode?.remove();\n        this.dragOverAnimationDisposable?.dispose();\n        this.disposables.dispose();\n    }\n}\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, \"onMouseOver\", null);\n__decorate([\n    memoize\n], ListView.prototype, \"onMouseOut\", 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 *--------------------------------------------------------------------------------------------*/\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 { asCssValueWithDefault, createStyleSheet, EventHelper, getActiveElement, getWindow, isHTMLElement, isMouseEvent } from '../../dom.js';\nimport { DomEmitter } from '../../event.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { Gesture } from '../../touch.js';\nimport { alert } from '../aria/aria.js';\nimport { CombinedSpliceable } from './splice.js';\nimport { binarySearch, firstOrDefault, range } from '../../../common/arrays.js';\nimport { timeout } from '../../../common/async.js';\nimport { Color } from '../../../common/color.js';\nimport { memoize } from '../../../common/decorators.js';\nimport { Emitter, Event, EventBufferer } from '../../../common/event.js';\nimport { matchesFuzzy2, matchesPrefix } from '../../../common/filters.js';\nimport { DisposableStore, dispose } from '../../../common/lifecycle.js';\nimport { clamp } from '../../../common/numbers.js';\nimport * as platform from '../../../common/platform.js';\nimport { isNumber } from '../../../common/types.js';\nimport './list.css';\nimport { ListError } from './list.js';\nimport { ListView } from './listView.js';\nimport { StandardMouseEvent } from '../../mouseEvent.js';\nimport { autorun, constObservable } from '../../../common/observable.js';\nclass TraitRenderer {\n    constructor(trait) {\n        this.trait = trait;\n        this.renderedElements = [];\n    }\n    get templateId() {\n        return `template:${this.trait.name}`;\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    get name() { return this._trait; }\n    get renderer() {\n        return new TraitRenderer(this);\n    }\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    splice(start, deleteCount, elements) {\n        const diff = elements.length - deleteCount;\n        const end = start + deleteCount;\n        const sortedIndexes = [];\n        let i = 0;\n        while (i < this.sortedIndexes.length && this.sortedIndexes[i] < start) {\n            sortedIndexes.push(this.sortedIndexes[i++]);\n        }\n        for (let j = 0; j < elements.length; j++) {\n            if (elements[j]) {\n                sortedIndexes.push(j + start);\n            }\n        }\n        while (i < this.sortedIndexes.length && this.sortedIndexes[i] >= end) {\n            sortedIndexes.push(this.sortedIndexes[i++] + diff);\n        }\n        this.renderer.splice(start, deleteCount, elements.length);\n        this._set(sortedIndexes, sortedIndexes);\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, new Array(elements.length).fill(false));\n        }\n        const pastElementsWithTrait = this.trait.get().map(i => this.identityProvider.getId(this.view.element(i)).toString());\n        if (pastElementsWithTrait.length === 0) {\n            return this.trait.splice(start, deleteCount, new Array(elements.length).fill(false));\n        }\n        const pastElementsWithTraitSet = new Set(pastElementsWithTrait);\n        const elementsWithTrait = elements.map(e => pastElementsWithTraitSet.has(this.identityProvider.getId(e).toString()));\n        this.trait.splice(start, deleteCount, elementsWithTrait);\n    }\n}\nexport function isInputElement(e) {\n    return e.tagName === 'INPUT' || e.tagName === 'TEXTAREA';\n}\nfunction isListElementDescendantOfClass(e, className) {\n    if (e.classList.contains(className)) {\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 isListElementDescendantOfClass(e.parentElement, className);\n}\nexport function isMonacoEditor(e) {\n    return isListElementDescendantOfClass(e, 'monaco-editor');\n}\nexport function isMonacoCustomToggle(e) {\n    return isListElementDescendantOfClass(e, 'monaco-custom-toggle');\n}\nexport function isActionItem(e) {\n    return isListElementDescendantOfClass(e, 'action-item');\n}\nexport function isStickyScrollElement(e) {\n    return isListElementDescendantOfClass(e, 'monaco-tree-sticky-row');\n}\nexport function isStickyScrollContainer(e) {\n    return e.classList.contains('monaco-tree-sticky-container');\n}\nexport function isButton(e) {\n    if ((e.tagName === 'A' && e.classList.contains('monaco-button')) ||\n        (e.tagName === 'DIV' && e.classList.contains('monaco-button-dropdown'))) {\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 isButton(e.parentElement);\n}\nclass KeyboardController {\n    get onKeyDown() {\n        return Event.chain(this.disposables.add(new DomEmitter(this.view.domNode, 'keydown')).event, $ => $.filter(e => !isInputElement(e.target))\n            .map(e => new StandardKeyboardEvent(e)));\n    }\n    constructor(list, view, options) {\n        this.list = list;\n        this.view = view;\n        this.disposables = new DisposableStore();\n        this.multipleSelectionDisposables = new DisposableStore();\n        this.multipleSelectionSupport = options.multipleSelectionSupport;\n        this.disposables.add(this.onKeyDown(e => {\n            switch (e.keyCode) {\n                case 3 /* KeyCode.Enter */:\n                    return this.onEnter(e);\n                case 16 /* KeyCode.UpArrow */:\n                    return this.onUpArrow(e);\n                case 18 /* KeyCode.DownArrow */:\n                    return this.onDownArrow(e);\n                case 11 /* KeyCode.PageUp */:\n                    return this.onPageUpArrow(e);\n                case 12 /* KeyCode.PageDown */:\n                    return this.onPageDownArrow(e);\n                case 9 /* KeyCode.Escape */:\n                    return this.onEscape(e);\n                case 31 /* KeyCode.KeyA */:\n                    if (this.multipleSelectionSupport && (platform.isMacintosh ? e.metaKey : e.ctrlKey)) {\n                        this.onCtrlA(e);\n                    }\n            }\n        }));\n    }\n    updateOptions(optionsUpdate) {\n        if (optionsUpdate.multipleSelectionSupport !== undefined) {\n            this.multipleSelectionSupport = optionsUpdate.multipleSelectionSupport;\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        const el = this.list.getFocus()[0];\n        this.list.setAnchor(el);\n        this.list.reveal(el);\n        this.view.domNode.focus();\n    }\n    onDownArrow(e) {\n        e.preventDefault();\n        e.stopPropagation();\n        this.list.focusNext(1, false, e.browserEvent);\n        const el = this.list.getFocus()[0];\n        this.list.setAnchor(el);\n        this.list.reveal(el);\n        this.view.domNode.focus();\n    }\n    onPageUpArrow(e) {\n        e.preventDefault();\n        e.stopPropagation();\n        this.list.focusPreviousPage(e.browserEvent);\n        const el = this.list.getFocus()[0];\n        this.list.setAnchor(el);\n        this.list.reveal(el);\n        this.view.domNode.focus();\n    }\n    onPageDownArrow(e) {\n        e.preventDefault();\n        e.stopPropagation();\n        this.list.focusNextPage(e.browserEvent);\n        const el = this.list.getFocus()[0];\n        this.list.setAnchor(el);\n        this.list.reveal(el);\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.list.setAnchor(undefined);\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.list.setAnchor(undefined);\n            this.view.domNode.focus();\n        }\n    }\n    dispose() {\n        this.disposables.dispose();\n        this.multipleSelectionDisposables.dispose();\n    }\n}\n__decorate([\n    memoize\n], KeyboardController.prototype, \"onKeyDown\", null);\nexport var TypeNavigationMode;\n(function (TypeNavigationMode) {\n    TypeNavigationMode[TypeNavigationMode[\"Automatic\"] = 0] = \"Automatic\";\n    TypeNavigationMode[TypeNavigationMode[\"Trigger\"] = 1] = \"Trigger\";\n})(TypeNavigationMode || (TypeNavigationMode = {}));\nvar TypeNavigationControllerState;\n(function (TypeNavigationControllerState) {\n    TypeNavigationControllerState[TypeNavigationControllerState[\"Idle\"] = 0] = \"Idle\";\n    TypeNavigationControllerState[TypeNavigationControllerState[\"Typing\"] = 1] = \"Typing\";\n})(TypeNavigationControllerState || (TypeNavigationControllerState = {}));\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 /* KeyCode.KeyA */ && event.keyCode <= 56 /* KeyCode.KeyZ */)\n            || (event.keyCode >= 21 /* KeyCode.Digit0 */ && event.keyCode <= 30 /* KeyCode.Digit9 */)\n            || (event.keyCode >= 98 /* KeyCode.Numpad0 */ && event.keyCode <= 107 /* KeyCode.Numpad9 */)\n            || (event.keyCode >= 85 /* KeyCode.Semicolon */ && event.keyCode <= 95 /* KeyCode.Quote */);\n    }\n};\nclass TypeNavigationController {\n    constructor(list, view, keyboardNavigationLabelProvider, keyboardNavigationEventFilter, delegate) {\n        this.list = list;\n        this.view = view;\n        this.keyboardNavigationLabelProvider = keyboardNavigationLabelProvider;\n        this.keyboardNavigationEventFilter = keyboardNavigationEventFilter;\n        this.delegate = delegate;\n        this.enabled = false;\n        this.state = TypeNavigationControllerState.Idle;\n        this.mode = TypeNavigationMode.Automatic;\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        if (options.typeNavigationEnabled ?? true) {\n            this.enable();\n        }\n        else {\n            this.disable();\n        }\n        this.mode = options.typeNavigationMode ?? TypeNavigationMode.Automatic;\n    }\n    enable() {\n        if (this.enabled) {\n            return;\n        }\n        let typing = false;\n        const onChar = Event.chain(this.enabledDisposables.add(new DomEmitter(this.view.domNode, 'keydown')).event, $ => $.filter(e => !isInputElement(e.target))\n            .filter(() => this.mode === TypeNavigationMode.Automatic || this.triggered)\n            .map(event => new StandardKeyboardEvent(event))\n            .filter(e => typing || this.keyboardNavigationEventFilter(e))\n            .filter(e => this.delegate.mightProducePrintableCharacter(e))\n            .forEach(e => EventHelper.stop(e, true))\n            .map(event => event.browserEvent.key));\n        const onClear = Event.debounce(onChar, () => null, 800, undefined, undefined, undefined, this.enabledDisposables);\n        const onInput = Event.reduce(Event.any(onChar, onClear), (r, i) => i === null ? null : ((r || '') + i), undefined, this.enabledDisposables);\n        onInput(this.onInput, this, this.enabledDisposables);\n        onClear(this.onClear, this, this.enabledDisposables);\n        onChar(() => typing = true, undefined, this.enabledDisposables);\n        onClear(() => typing = false, undefined, 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        const focus = this.list.getFocus();\n        if (focus.length > 0 && focus[0] === this.previouslyFocused) {\n            // List: re-announce element on typing end since typed keys will interrupt 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 = this.list.options.accessibilityProvider?.getAriaLabel(this.list.element(focus[0]));\n            if (typeof ariaLabel === 'string') {\n                alert(ariaLabel);\n            }\n            else if (ariaLabel) {\n                alert(ariaLabel.get());\n            }\n        }\n        this.previouslyFocused = -1;\n    }\n    onInput(word) {\n        if (!word) {\n            this.state = TypeNavigationControllerState.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 === TypeNavigationControllerState.Idle ? 1 : 0;\n        this.state = TypeNavigationControllerState.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 (this.list.options.typeNavigationEnabled) {\n                if (typeof labelStr !== 'undefined') {\n                    // If prefix is found, focus and return early\n                    if (matchesPrefix(word, labelStr)) {\n                        this.previouslyFocused = start;\n                        this.list.setFocus([index]);\n                        this.list.reveal(index);\n                        return;\n                    }\n                    const fuzzy = matchesFuzzy2(word, labelStr);\n                    if (fuzzy) {\n                        const fuzzyScore = fuzzy[0].end - fuzzy[0].start;\n                        // ensures that when fuzzy matching, doesn't clash with prefix matching (1 input vs 1+ should be prefix and fuzzy respecitvely). Also makes sure that exact matches are prioritized.\n                        if (fuzzyScore > 1 && fuzzy.length === 1) {\n                            this.previouslyFocused = start;\n                            this.list.setFocus([index]);\n                            this.list.reveal(index);\n                            return;\n                        }\n                    }\n                }\n            }\n            else 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(this.disposables.add(new DomEmitter(view.domNode, 'keydown')).event, $ => $\n            .filter(e => !isInputElement(e.target))\n            .map(e => new StandardKeyboardEvent(e)));\n        const onTab = Event.chain(onKeyDown, $ => $.filter(e => e.keyCode === 2 /* KeyCode.Tab */ && !e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey));\n        onTab(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 || !(isHTMLElement(tabIndexElement)) || tabIndexElement.tabIndex === -1) {\n            return;\n        }\n        const style = getWindow(tabIndexElement).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 isMouseEvent(event) && 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        if (list.options.multipleSelectionSupport !== false) {\n            this.multipleSelectionController = this.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    updateOptions(optionsUpdate) {\n        if (optionsUpdate.multipleSelectionSupport !== undefined) {\n            this.multipleSelectionController = undefined;\n            if (optionsUpdate.multipleSelectionSupport) {\n                this.multipleSelectionController = this.list.options.multipleSelectionController || DefaultMultipleSelectionController;\n            }\n        }\n    }\n    isSelectionSingleChangeEvent(event) {\n        if (!this.multipleSelectionController) {\n            return false;\n        }\n        return this.multipleSelectionController.isSelectionSingleChangeEvent(event);\n    }\n    isSelectionRangeChangeEvent(event) {\n        if (!this.multipleSelectionController) {\n            return false;\n        }\n        return this.multipleSelectionController.isSelectionRangeChangeEvent(event);\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 (getActiveElement() !== e.browserEvent.target) {\n            this.list.domFocus();\n        }\n    }\n    onContextMenu(e) {\n        if (isInputElement(e.browserEvent.target) || 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        if (e.browserEvent.isHandledByList) {\n            return;\n        }\n        e.browserEvent.isHandledByList = true;\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.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.isSelectionChangeEvent(e)) {\n            return;\n        }\n        if (e.browserEvent.isHandledByList) {\n            return;\n        }\n        e.browserEvent.isHandledByList = true;\n        const focus = this.list.getFocus();\n        this.list.setSelection(focus, e.browserEvent);\n    }\n    changeSelection(e) {\n        const focus = e.index;\n        let anchor = this.list.getAnchor();\n        if (this.isSelectionRangeChangeEvent(e)) {\n            if (typeof anchor === 'undefined') {\n                const currentFocus = this.list.getFocus()[0];\n                anchor = currentFocus ?? focus;\n                this.list.setAnchor(anchor);\n            }\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            content.push(`.monaco-list${suffix} .monaco-list-rows { background: ${styles.listBackground}; }`);\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.listActiveSelectionIconForeground) {\n            content.push(`.monaco-list${suffix}:focus .monaco-list-row.selected .codicon { color: ${styles.listActiveSelectionIconForeground}; }`);\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.listInactiveSelectionIconForeground) {\n            content.push(`.monaco-list${suffix} .monaco-list-row.focused .codicon { color:  ${styles.listInactiveSelectionIconForeground}; }`);\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):not(.dragging) .monaco-list-row:hover:not(.selected):not(.focused) { background-color: ${styles.listHoverBackground}; }`);\n        }\n        if (styles.listHoverForeground) {\n            content.push(`.monaco-list${suffix}:not(.drop-target):not(.dragging) .monaco-list-row:hover:not(.selected):not(.focused) { color:  ${styles.listHoverForeground}; }`);\n        }\n        /**\n         * Outlines\n         */\n        const focusAndSelectionOutline = asCssValueWithDefault(styles.listFocusAndSelectionOutline, asCssValueWithDefault(styles.listSelectionOutline, styles.listFocusOutline ?? ''));\n        if (focusAndSelectionOutline) { // default: listFocusOutline\n            content.push(`.monaco-list${suffix}:focus .monaco-list-row.focused.selected { outline: 1px solid ${focusAndSelectionOutline}; outline-offset: -1px;}`);\n        }\n        if (styles.listFocusOutline) { // default: set\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\t.monaco-workbench.context-menu-visible .monaco-list${suffix}.last-focused .monaco-list-row.focused { outline: 1px solid ${styles.listFocusOutline}; outline-offset: -1px; }\n\t\t\t`);\n        }\n        const inactiveFocusAndSelectionOutline = asCssValueWithDefault(styles.listSelectionOutline, styles.listInactiveFocusOutline ?? '');\n        if (inactiveFocusAndSelectionOutline) {\n            content.push(`.monaco-list${suffix} .monaco-list-row.focused.selected { outline: 1px dotted ${inactiveFocusAndSelectionOutline}; outline-offset: -1px; }`);\n        }\n        if (styles.listSelectionOutline) { // default: activeContrastBorder\n            content.push(`.monaco-list${suffix} .monaco-list-row.selected { outline: 1px dotted ${styles.listSelectionOutline}; outline-offset: -1px; }`);\n        }\n        if (styles.listInactiveFocusOutline) { // default: null\n            content.push(`.monaco-list${suffix} .monaco-list-row.focused { outline: 1px dotted ${styles.listInactiveFocusOutline}; outline-offset: -1px; }`);\n        }\n        if (styles.listHoverOutline) { // default: activeContrastBorder\n            content.push(`.monaco-list${suffix} .monaco-list-row:hover { outline: 1px dashed ${styles.listHoverOutline}; outline-offset: -1px; }`);\n        }\n        if (styles.listDropOverBackground) {\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.listDropOverBackground} !important; color: inherit !important; }\n\t\t\t`);\n        }\n        if (styles.listDropBetweenBackground) {\n            content.push(`\n\t\t\t.monaco-list${suffix} .monaco-list-rows.drop-target-before .monaco-list-row:first-child::before,\n\t\t\t.monaco-list${suffix} .monaco-list-row.drop-target-before::before {\n\t\t\t\tcontent: \"\"; position: absolute; top: 0px; left: 0px; width: 100%; height: 1px;\n\t\t\t\tbackground-color: ${styles.listDropBetweenBackground};\n\t\t\t}`);\n            content.push(`\n\t\t\t.monaco-list${suffix} .monaco-list-rows.drop-target-after .monaco-list-row:last-child::after,\n\t\t\t.monaco-list${suffix} .monaco-list-row.drop-target-after::after {\n\t\t\t\tcontent: \"\"; position: absolute; bottom: 0px; left: 0px; width: 100%; height: 1px;\n\t\t\t\tbackground-color: ${styles.listDropBetweenBackground};\n\t\t\t}`);\n        }\n        if (styles.tableColumnsBorder) {\n            content.push(`\n\t\t\t\t.monaco-table > .monaco-split-view2,\n\t\t\t\t.monaco-table > .monaco-split-view2 .monaco-sash.vertical::before,\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table:hover > .monaco-split-view2,\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table:hover > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\t\t\tborder-color: ${styles.tableColumnsBorder};\n\t\t\t\t}\n\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table > .monaco-split-view2,\n\t\t\t\t.monaco-workbench:not(.reduce-motion) .monaco-table > .monaco-split-view2 .monaco-sash.vertical::before {\n\t\t\t\t\tborder-color: transparent;\n\t\t\t\t}\n\t\t\t`);\n        }\n        if (styles.tableOddRowsBackgroundColor) {\n            content.push(`\n\t\t\t\t.monaco-table .monaco-list-row[data-parity=odd]:not(.focused):not(.selected):not(:hover) .monaco-table-tr,\n\t\t\t\t.monaco-table .monaco-list:not(:focus) .monaco-list-row[data-parity=odd].focused:not(.selected):not(:hover) .monaco-table-tr,\n\t\t\t\t.monaco-table .monaco-list:not(.focused) .monaco-list-row[data-parity=odd].focused:not(.selected):not(:hover) .monaco-table-tr {\n\t\t\t\t\tbackground-color: ${styles.tableOddRowsBackgroundColor};\n\t\t\t\t}\n\t\t\t`);\n        }\n        this.styleElement.textContent = content.join('\\n');\n    }\n}\nexport const unthemedListStyles = {\n    listFocusBackground: '#7FB0D0',\n    listActiveSelectionBackground: '#0E639C',\n    listActiveSelectionForeground: '#FFFFFF',\n    listActiveSelectionIconForeground: '#FFFFFF',\n    listFocusAndSelectionOutline: '#90C2F9',\n    listFocusAndSelectionBackground: '#094771',\n    listFocusAndSelectionForeground: '#FFFFFF',\n    listInactiveSelectionBackground: '#3F3F46',\n    listInactiveSelectionIconForeground: '#FFFFFF',\n    listHoverBackground: '#2A2D2E',\n    listDropOverBackground: '#383B3D',\n    listDropBetweenBackground: '#EEEEEE',\n    treeIndentGuidesStroke: '#a9a9a9',\n    treeInactiveIndentGuidesStroke: Color.fromHex('#a9a9a9').transparent(0.4).toString(),\n    tableColumnsBorder: Color.fromHex('#cccccc').transparent(0.2).toString(),\n    tableOddRowsBackgroundColor: Color.fromHex('#cccccc').transparent(0.04).toString(),\n    listBackground: undefined,\n    listFocusForeground: undefined,\n    listInactiveSelectionForeground: undefined,\n    listInactiveFocusForeground: undefined,\n    listInactiveFocusBackground: undefined,\n    listHoverForeground: undefined,\n    listFocusOutline: undefined,\n    listInactiveFocusOutline: undefined,\n    listSelectionOutline: undefined,\n    listHoverOutline: undefined,\n    treeStickyScrollBackground: undefined,\n    treeStickyScrollBorder: undefined,\n    treeStickyScrollShadow: undefined\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        dispose() { }\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            renderer.disposeElement?.(element, index, templateData[i], height);\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, disposables: new DisposableStore() };\n    }\n    renderElement(element, index, data) {\n        const ariaLabel = this.accessibilityProvider.getAriaLabel(element);\n        const observable = (ariaLabel && typeof ariaLabel !== 'string') ? ariaLabel : constObservable(ariaLabel);\n        data.disposables.add(autorun(reader => {\n            this.setAriaLabel(reader.readObservable(observable), data.container);\n        }));\n        const ariaLevel = this.accessibilityProvider.getAriaLevel && this.accessibilityProvider.getAriaLevel(element);\n        if (typeof ariaLevel === 'number') {\n            data.container.setAttribute('aria-level', `${ariaLevel}`);\n        }\n        else {\n            data.container.removeAttribute('aria-level');\n        }\n    }\n    setAriaLabel(ariaLabel, element) {\n        if (ariaLabel) {\n            element.setAttribute('aria-label', ariaLabel);\n        }\n        else {\n            element.removeAttribute('aria-label');\n        }\n    }\n    disposeElement(element, index, templateData, height) {\n        templateData.disposables.clear();\n    }\n    disposeTemplate(templateData) {\n        templateData.disposables.dispose();\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        this.dnd.onDragStart?.(data, originalEvent);\n    }\n    onDragOver(data, targetElement, targetIndex, targetSector, originalEvent) {\n        return this.dnd.onDragOver(data, targetElement, targetIndex, targetSector, originalEvent);\n    }\n    onDragLeave(data, targetElement, targetIndex, originalEvent) {\n        this.dnd.onDragLeave?.(data, targetElement, targetIndex, originalEvent);\n    }\n    onDragEnd(originalEvent) {\n        this.dnd.onDragEnd?.(originalEvent);\n    }\n    drop(data, targetElement, targetIndex, targetSector, originalEvent) {\n        this.dnd.drop(data, targetElement, targetIndex, targetSector, originalEvent);\n    }\n    dispose() {\n        this.dnd.dispose();\n    }\n}\n/**\n * The {@link List} is a virtual scrolling widget, built on top of the {@link ListView}\n * widget.\n *\n * Features:\n * - Customizable keyboard and mouse support\n * - Element traits: focus, selection, achor\n * - Accessibility support\n * - Touch support\n * - Performant template-based rendering\n * - Horizontal scrolling\n * - Variable element height support\n * - Dynamic element height support\n * - Drag-and-drop support\n */\nexport class List {\n    get onDidChangeFocus() {\n        return Event.map(this.eventBufferer.wrapEvent(this.focus.onChange), e => this.toListEvent(e), this.disposables);\n    }\n    get onDidChangeSelection() {\n        return Event.map(this.eventBufferer.wrapEvent(this.selection.onChange), e => this.toListEvent(e), this.disposables);\n    }\n    get domId() { return this.view.domId; }\n    get onDidScroll() { return this.view.onDidScroll; }\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 onMouseOver() { return this.view.onMouseOver; }\n    get onMouseOut() { return this.view.onMouseOut; }\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(this.disposables.add(new DomEmitter(this.view.domNode, 'keydown')).event, $ => $.map(e => new StandardKeyboardEvent(e))\n            .filter(e => didJustPressContextMenuKey = e.keyCode === 58 /* KeyCode.ContextMenu */ || (e.shiftKey && e.keyCode === 68 /* KeyCode.F10 */))\n            .map(e => EventHelper.stop(e, true))\n            .filter(() => false));\n        const fromKeyUp = Event.chain(this.disposables.add(new DomEmitter(this.view.domNode, 'keyup')).event, $ => $.forEach(() => didJustPressContextMenuKey = false)\n            .map(e => new StandardKeyboardEvent(e))\n            .filter(e => e.keyCode === 58 /* KeyCode.ContextMenu */ || (e.shiftKey && e.keyCode === 68 /* KeyCode.F10 */))\n            .map(e => EventHelper.stop(e, true))\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        const fromMouse = Event.chain(this.view.onContextMenu, $ => $.filter(_ => !didJustPressContextMenuKey)\n            .map(({ element, index, browserEvent }) => ({ element, index, anchor: new StandardMouseEvent(getWindow(this.view.domNode), browserEvent), browserEvent })));\n        return Event.any(fromKeyDown, fromKeyUp, fromMouse);\n    }\n    get onKeyDown() { return this.disposables.add(new DomEmitter(this.view.domNode, 'keydown')).event; }\n    get onDidFocus() { return Event.signal(this.disposables.add(new DomEmitter(this.view.domNode, 'focus', true)).event); }\n    get onDidBlur() { return Event.signal(this.disposables.add(new DomEmitter(this.view.domNode, 'blur', true)).event); }\n    constructor(user, container, virtualDelegate, renderers, _options = DefaultOptions) {\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 ? this._options.accessibilityProvider?.getWidgetRole() : 'list';\n        this.selection = new SelectionTrait(role !== 'listbox');\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            this.accessibilityProvider.onDidChangeActiveDescendant?.(this.onDidChangeActiveDescendant, this, this.disposables);\n        }\n        renderers = renderers.map(r => new PipelineRenderer(r.templateId, [...baseRenderers, r]));\n        const viewOptions = {\n            ..._options,\n            dnd: _options.dnd && new ListViewDragAndDrop(this, _options.dnd)\n        };\n        this.view = this.createListView(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.disposables.add(new DOMFocusController(this, this.view));\n        if (typeof _options.keyboardSupport !== 'boolean' || _options.keyboardSupport) {\n            this.keyboardController = new KeyboardController(this, this.view, _options);\n            this.disposables.add(this.keyboardController);\n        }\n        if (_options.keyboardNavigationLabelProvider) {\n            const delegate = _options.keyboardNavigationDelegate || DefaultKeyboardNavigationDelegate;\n            this.typeNavigationController = new TypeNavigationController(this, this.view, _options.keyboardNavigationLabelProvider, _options.keyboardNavigationEventFilter ?? (() => true), delegate);\n            this.disposables.add(this.typeNavigationController);\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 (this._options.multipleSelectionSupport !== false) {\n            this.view.domNode.setAttribute('aria-multiselectable', 'true');\n        }\n    }\n    createListView(container, virtualDelegate, renderers, viewOptions) {\n        return new ListView(container, virtualDelegate, renderers, viewOptions);\n    }\n    createMouseController(options) {\n        return new MouseController(this);\n    }\n    updateOptions(optionsUpdate = {}) {\n        this._options = { ...this._options, ...optionsUpdate };\n        this.typeNavigationController?.updateOptions(this._options);\n        if (this._options.multipleSelectionController !== undefined) {\n            if (this._options.multipleSelectionSupport) {\n                this.view.domNode.setAttribute('aria-multiselectable', 'true');\n            }\n            else {\n                this.view.domNode.removeAttribute('aria-multiselectable');\n            }\n        }\n        this.mouseController.updateOptions(optionsUpdate);\n        this.keyboardController?.updateOptions(optionsUpdate);\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    indexOf(element) {\n        return this.view.indexOf(element);\n    }\n    indexAt(position) {\n        return this.view.indexAt(position);\n    }\n    get length() {\n        return this.view.length;\n    }\n    get contentHeight() {\n        return this.view.contentHeight;\n    }\n    get onDidChangeContentHeight() {\n        return this.view.onDidChangeContentHeight;\n    }\n    get scrollTop() {\n        return this.view.getScrollTop();\n    }\n    set scrollTop(scrollTop) {\n        this.view.setScrollTop(scrollTop);\n    }\n    get scrollHeight() {\n        return this.view.scrollHeight;\n    }\n    get renderHeight() {\n        return this.view.renderHeight;\n    }\n    get firstVisibleIndex() {\n        return this.view.firstVisibleIndex;\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    getAnchorElement() {\n        const anchor = this.getAnchor();\n        return typeof anchor === 'undefined' ? undefined : this.element(anchor);\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    async focusNextPage(browserEvent, filter) {\n        let lastPageIndex = this.view.indexAt(this.view.getScrollTop() + this.view.renderHeight);\n        lastPageIndex = lastPageIndex === 0 ? 0 : lastPageIndex - 1;\n        const currentlyFocusedElementIndex = this.getFocus()[0];\n        if (currentlyFocusedElementIndex !== lastPageIndex && (currentlyFocusedElementIndex === undefined || lastPageIndex > currentlyFocusedElementIndex)) {\n            const lastGoodPageIndex = this.findPreviousIndex(lastPageIndex, false, filter);\n            if (lastGoodPageIndex > -1 && currentlyFocusedElementIndex !== 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            let nextpageScrollTop = previousScrollTop + this.view.renderHeight;\n            if (lastPageIndex > currentlyFocusedElementIndex) {\n                // scroll last page element to the top only if the last page element is below the focused element\n                nextpageScrollTop -= this.view.elementHeight(lastPageIndex);\n            }\n            this.view.setScrollTop(nextpageScrollTop);\n            if (this.view.getScrollTop() !== previousScrollTop) {\n                this.setFocus([]);\n                // Let the scroll event listener run\n                await timeout(0);\n                await this.focusNextPage(browserEvent, filter);\n            }\n        }\n    }\n    async focusPreviousPage(browserEvent, filter, getPaddingTop = () => 0) {\n        let firstPageIndex;\n        const paddingTop = getPaddingTop();\n        const scrollTop = this.view.getScrollTop() + paddingTop;\n        if (scrollTop === 0) {\n            firstPageIndex = this.view.indexAt(scrollTop);\n        }\n        else {\n            firstPageIndex = this.view.indexAfter(scrollTop - 1);\n        }\n        const currentlyFocusedElementIndex = this.getFocus()[0];\n        if (currentlyFocusedElementIndex !== firstPageIndex && (currentlyFocusedElementIndex === undefined || currentlyFocusedElementIndex >= firstPageIndex)) {\n            const firstGoodPageIndex = this.findNextIndex(firstPageIndex, false, filter);\n            if (firstGoodPageIndex > -1 && currentlyFocusedElementIndex !== 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 - paddingTop);\n            if (this.view.getScrollTop() + getPaddingTop() !== previousScrollTop) {\n                this.setFocus([]);\n                // Let the scroll event listener run\n                await timeout(0);\n                await this.focusPreviousPage(browserEvent, filter, getPaddingTop);\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, paddingTop = 0) {\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 + paddingTop;\n            this.view.setScrollTop(m * clamp(relativeTop, 0, 1) + elementTop - paddingTop);\n        }\n        else {\n            const viewItemBottom = elementTop + elementHeight;\n            const scrollBottom = scrollTop + this.view.renderHeight;\n            if (elementTop < scrollTop + paddingTop && viewItemBottom >= scrollBottom) {\n                // The element is already overflowing the viewport, no-op\n            }\n            else if (elementTop < scrollTop + paddingTop || (viewItemBottom >= scrollBottom && elementHeight >= this.view.renderHeight)) {\n                this.view.setScrollTop(elementTop - paddingTop);\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, paddingTop = 0) {\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 + paddingTop || elementTop + elementHeight > scrollTop + this.view.renderHeight) {\n            return null;\n        }\n        // y = mx + b\n        const m = elementHeight - this.view.renderHeight + paddingTop;\n        return Math.abs((scrollTop + paddingTop - elementTop) / m);\n    }\n    getHTMLElement() {\n        return this.view.domNode;\n    }\n    getScrollableElement() {\n        return this.view.scrollableElementDomNode;\n    }\n    getElementID(index) {\n        return this.view.getElementDomId(index);\n    }\n    getElementTop(index) {\n        return this.view.elementTop(index);\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        const focus = this.focus.get();\n        if (focus.length > 0) {\n            let id;\n            if (this.accessibilityProvider?.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__decorate([\n    memoize\n], List.prototype, \"onKeyDown\", null);\n__decorate([\n    memoize\n], List.prototype, \"onDidFocus\", null);\n__decorate([\n    memoize\n], List.prototype, \"onDidBlur\", 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 '../../dom.js';\nimport { DomEmitter } from '../../event.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { renderMarkdown } from '../../markdownRenderer.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { List } from '../list/listWidget.js';\nimport * as arrays from '../../../common/arrays.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { KeyCodeUtils } from '../../../common/keyCodes.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { isMacintosh } from '../../../common/platform.js';\nimport './selectBoxCustom.css';\nimport { localize } from '../../../../nls.js';\nconst $ = dom.$;\nconst SELECT_OPTION_ENTRY_TEMPLATE_ID = 'selectOption.entry.template';\nclass SelectListRenderer {\n    get templateId() { return SELECT_OPTION_ENTRY_TEMPLATE_ID; }\n    renderTemplate(container) {\n        const data = Object.create(null);\n        data.root = container;\n        data.text = dom.append(container, $('.option-text'));\n        data.detail = dom.append(container, $('.option-detail'));\n        data.decoratorRight = dom.append(container, $('.option-decorator-right'));\n        return data;\n    }\n    renderElement(element, index, templateData) {\n        const data = templateData;\n        const text = element.text;\n        const detail = element.detail;\n        const decoratorRight = element.decoratorRight;\n        const isDisabled = element.isDisabled;\n        data.text.textContent = text;\n        data.detail.textContent = !!detail ? detail : '';\n        data.decoratorRight.innerText = !!decoratorRight ? decoratorRight : '';\n        // pseudo-select disabled option\n        if (isDisabled) {\n            data.root.classList.add('option-disabled');\n        }\n        else {\n            // Make sure we do class removal from prior template rendering\n            data.root.classList.remove('option-disabled');\n        }\n    }\n    disposeTemplate(_templateData) {\n        // noop\n    }\n}\nexport class SelectBoxList extends Disposable {\n    static { this.DEFAULT_DROPDOWN_MINIMUM_BOTTOM_MARGIN = 32; }\n    static { this.DEFAULT_DROPDOWN_MINIMUM_TOP_MARGIN = 2; }\n    static { this.DEFAULT_MINIMUM_VISIBLE_OPTIONS = 3; }\n    constructor(options, selected, contextViewProvider, styles, selectBoxOptions) {\n        super();\n        this.options = [];\n        this._currentSelection = 0;\n        this._hasDetails = false;\n        this._skipLayout = false;\n        this._sticky = false; // for dev purposes only\n        this._isVisible = false;\n        this.styles = styles;\n        this.selectBoxOptions = selectBoxOptions || Object.create(null);\n        if (typeof this.selectBoxOptions.minBottomMargin !== 'number') {\n            this.selectBoxOptions.minBottomMargin = SelectBoxList.DEFAULT_DROPDOWN_MINIMUM_BOTTOM_MARGIN;\n        }\n        else if (this.selectBoxOptions.minBottomMargin < 0) {\n            this.selectBoxOptions.minBottomMargin = 0;\n        }\n        this.selectElement = document.createElement('select');\n        // Use custom CSS vars for padding calculation\n        this.selectElement.className = 'monaco-select-box monaco-select-box-dropdown-padding';\n        if (typeof this.selectBoxOptions.ariaLabel === 'string') {\n            this.selectElement.setAttribute('aria-label', this.selectBoxOptions.ariaLabel);\n        }\n        if (typeof this.selectBoxOptions.ariaDescription === 'string') {\n            this.selectElement.setAttribute('aria-description', this.selectBoxOptions.ariaDescription);\n        }\n        this._onDidSelect = new Emitter();\n        this._register(this._onDidSelect);\n        this.registerListeners();\n        this.constructSelectDropDown(contextViewProvider);\n        this.selected = selected || 0;\n        if (options) {\n            this.setOptions(options, selected);\n        }\n        this.initStyleSheet();\n    }\n    setTitle(title) {\n        if (!this._hover && title) {\n            this._hover = this._register(getBaseLayerHoverDelegate().setupManagedHover(getDefaultHoverDelegate('mouse'), this.selectElement, title));\n        }\n        else if (this._hover) {\n            this._hover.update(title);\n        }\n    }\n    // IDelegate - List renderer\n    getHeight() {\n        return 22;\n    }\n    getTemplateId() {\n        return SELECT_OPTION_ENTRY_TEMPLATE_ID;\n    }\n    constructSelectDropDown(contextViewProvider) {\n        // SetUp ContextView container to hold select Dropdown\n        this.contextViewProvider = contextViewProvider;\n        this.selectDropDownContainer = dom.$('.monaco-select-box-dropdown-container');\n        // Use custom CSS vars for padding calculation (shared with parent select)\n        this.selectDropDownContainer.classList.add('monaco-select-box-dropdown-padding');\n        // Setup container for select option details\n        this.selectionDetailsPane = dom.append(this.selectDropDownContainer, $('.select-box-details-pane'));\n        // Create span flex box item/div we can measure and control\n        const widthControlOuterDiv = dom.append(this.selectDropDownContainer, $('.select-box-dropdown-container-width-control'));\n        const widthControlInnerDiv = dom.append(widthControlOuterDiv, $('.width-control-div'));\n        this.widthControlElement = document.createElement('span');\n        this.widthControlElement.className = 'option-text-width-control';\n        dom.append(widthControlInnerDiv, this.widthControlElement);\n        // Always default to below position\n        this._dropDownPosition = 0 /* AnchorPosition.BELOW */;\n        // Inline stylesheet for themes\n        this.styleElement = dom.createStyleSheet(this.selectDropDownContainer);\n        // Prevent dragging of dropdown #114329\n        this.selectDropDownContainer.setAttribute('draggable', 'true');\n        this._register(dom.addDisposableListener(this.selectDropDownContainer, dom.EventType.DRAG_START, (e) => {\n            dom.EventHelper.stop(e, true);\n        }));\n    }\n    registerListeners() {\n        // Parent native select keyboard listeners\n        this._register(dom.addStandardDisposableListener(this.selectElement, 'change', (e) => {\n            this.selected = e.target.selectedIndex;\n            this._onDidSelect.fire({\n                index: e.target.selectedIndex,\n                selected: e.target.value\n            });\n            if (!!this.options[this.selected] && !!this.options[this.selected].text) {\n                this.setTitle(this.options[this.selected].text);\n            }\n        }));\n        // Have to implement both keyboard and mouse controllers to handle disabled options\n        // Intercept mouse events to override normal select actions on parents\n        this._register(dom.addDisposableListener(this.selectElement, dom.EventType.CLICK, (e) => {\n            dom.EventHelper.stop(e);\n            if (this._isVisible) {\n                this.hideSelectDropDown(true);\n            }\n            else {\n                this.showSelectDropDown();\n            }\n        }));\n        this._register(dom.addDisposableListener(this.selectElement, dom.EventType.MOUSE_DOWN, (e) => {\n            dom.EventHelper.stop(e);\n        }));\n        // Intercept touch events\n        // The following implementation is slightly different from the mouse event handlers above.\n        // Use the following helper variable, otherwise the list flickers.\n        let listIsVisibleOnTouchStart;\n        this._register(dom.addDisposableListener(this.selectElement, 'touchstart', (e) => {\n            listIsVisibleOnTouchStart = this._isVisible;\n        }));\n        this._register(dom.addDisposableListener(this.selectElement, 'touchend', (e) => {\n            dom.EventHelper.stop(e);\n            if (listIsVisibleOnTouchStart) {\n                this.hideSelectDropDown(true);\n            }\n            else {\n                this.showSelectDropDown();\n            }\n        }));\n        // Intercept keyboard handling\n        this._register(dom.addDisposableListener(this.selectElement, dom.EventType.KEY_DOWN, (e) => {\n            const event = new StandardKeyboardEvent(e);\n            let showDropDown = false;\n            // Create and drop down select list on keyboard select\n            if (isMacintosh) {\n                if (event.keyCode === 18 /* KeyCode.DownArrow */ || event.keyCode === 16 /* KeyCode.UpArrow */ || event.keyCode === 10 /* KeyCode.Space */ || event.keyCode === 3 /* KeyCode.Enter */) {\n                    showDropDown = true;\n                }\n            }\n            else {\n                if (event.keyCode === 18 /* KeyCode.DownArrow */ && event.altKey || event.keyCode === 16 /* KeyCode.UpArrow */ && event.altKey || event.keyCode === 10 /* KeyCode.Space */ || event.keyCode === 3 /* KeyCode.Enter */) {\n                    showDropDown = true;\n                }\n            }\n            if (showDropDown) {\n                this.showSelectDropDown();\n                dom.EventHelper.stop(e, true);\n            }\n        }));\n    }\n    get onDidSelect() {\n        return this._onDidSelect.event;\n    }\n    setOptions(options, selected) {\n        if (!arrays.equals(this.options, options)) {\n            this.options = options;\n            this.selectElement.options.length = 0;\n            this._hasDetails = false;\n            this._cachedMaxDetailsHeight = undefined;\n            this.options.forEach((option, index) => {\n                this.selectElement.add(this.createOption(option.text, index, option.isDisabled));\n                if (typeof option.description === 'string') {\n                    this._hasDetails = true;\n                }\n            });\n        }\n        if (selected !== undefined) {\n            this.select(selected);\n            // Set current = selected since this is not necessarily a user exit\n            this._currentSelection = this.selected;\n        }\n    }\n    setOptionsList() {\n        // Mirror options in drop-down\n        // Populate select list for non-native select mode\n        this.selectList?.splice(0, this.selectList.length, this.options);\n    }\n    select(index) {\n        if (index >= 0 && index < this.options.length) {\n            this.selected = index;\n        }\n        else if (index > this.options.length - 1) {\n            // Adjust index to end of list\n            // This could make client out of sync with the select\n            this.select(this.options.length - 1);\n        }\n        else if (this.selected < 0) {\n            this.selected = 0;\n        }\n        this.selectElement.selectedIndex = this.selected;\n        if (!!this.options[this.selected] && !!this.options[this.selected].text) {\n            this.setTitle(this.options[this.selected].text);\n        }\n    }\n    focus() {\n        if (this.selectElement) {\n            this.selectElement.tabIndex = 0;\n            this.selectElement.focus();\n        }\n    }\n    blur() {\n        if (this.selectElement) {\n            this.selectElement.tabIndex = -1;\n            this.selectElement.blur();\n        }\n    }\n    setFocusable(focusable) {\n        this.selectElement.tabIndex = focusable ? 0 : -1;\n    }\n    render(container) {\n        this.container = container;\n        container.classList.add('select-container');\n        container.appendChild(this.selectElement);\n        this.styleSelectElement();\n    }\n    initStyleSheet() {\n        const content = [];\n        // Style non-native select mode\n        if (this.styles.listFocusBackground) {\n            content.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.focused { background-color: ${this.styles.listFocusBackground} !important; }`);\n        }\n        if (this.styles.listFocusForeground) {\n            content.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.focused { color: ${this.styles.listFocusForeground} !important; }`);\n        }\n        if (this.styles.decoratorRightForeground) {\n            content.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row:not(.focused) .option-decorator-right { color: ${this.styles.decoratorRightForeground}; }`);\n        }\n        if (this.styles.selectBackground && this.styles.selectBorder && this.styles.selectBorder !== this.styles.selectBackground) {\n            content.push(`.monaco-select-box-dropdown-container { border: 1px solid ${this.styles.selectBorder} } `);\n            content.push(`.monaco-select-box-dropdown-container > .select-box-details-pane.border-top { border-top: 1px solid ${this.styles.selectBorder} } `);\n            content.push(`.monaco-select-box-dropdown-container > .select-box-details-pane.border-bottom { border-bottom: 1px solid ${this.styles.selectBorder} } `);\n        }\n        else if (this.styles.selectListBorder) {\n            content.push(`.monaco-select-box-dropdown-container > .select-box-details-pane.border-top { border-top: 1px solid ${this.styles.selectListBorder} } `);\n            content.push(`.monaco-select-box-dropdown-container > .select-box-details-pane.border-bottom { border-bottom: 1px solid ${this.styles.selectListBorder} } `);\n        }\n        // Hover foreground - ignore for disabled options\n        if (this.styles.listHoverForeground) {\n            content.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row:not(.option-disabled):not(.focused):hover { color: ${this.styles.listHoverForeground} !important; }`);\n        }\n        // Hover background - ignore for disabled options\n        if (this.styles.listHoverBackground) {\n            content.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row:not(.option-disabled):not(.focused):hover { background-color: ${this.styles.listHoverBackground} !important; }`);\n        }\n        // Match quick input outline styles - ignore for disabled options\n        if (this.styles.listFocusOutline) {\n            content.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.focused { outline: 1.6px dotted ${this.styles.listFocusOutline} !important; outline-offset: -1.6px !important; }`);\n        }\n        if (this.styles.listHoverOutline) {\n            content.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row:not(.option-disabled):not(.focused):hover { outline: 1.6px dashed ${this.styles.listHoverOutline} !important; outline-offset: -1.6px !important; }`);\n        }\n        // Clear list styles on focus and on hover for disabled options\n        content.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.option-disabled.focused { background-color: transparent !important; color: inherit !important; outline: none !important; }`);\n        content.push(`.monaco-select-box-dropdown-container > .select-box-dropdown-list-container .monaco-list .monaco-list-row.option-disabled:hover { background-color: transparent !important; color: inherit !important; outline: none !important; }`);\n        this.styleElement.textContent = content.join('\\n');\n    }\n    styleSelectElement() {\n        const background = this.styles.selectBackground ?? '';\n        const foreground = this.styles.selectForeground ?? '';\n        const border = this.styles.selectBorder ?? '';\n        this.selectElement.style.backgroundColor = background;\n        this.selectElement.style.color = foreground;\n        this.selectElement.style.borderColor = border;\n    }\n    styleList() {\n        const background = this.styles.selectBackground ?? '';\n        const listBackground = dom.asCssValueWithDefault(this.styles.selectListBackground, background);\n        this.selectDropDownListContainer.style.backgroundColor = listBackground;\n        this.selectionDetailsPane.style.backgroundColor = listBackground;\n        const optionsBorder = this.styles.focusBorder ?? '';\n        this.selectDropDownContainer.style.outlineColor = optionsBorder;\n        this.selectDropDownContainer.style.outlineOffset = '-1px';\n        this.selectList.style(this.styles);\n    }\n    createOption(value, index, disabled) {\n        const option = document.createElement('option');\n        option.value = value;\n        option.text = value;\n        option.disabled = !!disabled;\n        return option;\n    }\n    // ContextView dropdown methods\n    showSelectDropDown() {\n        this.selectionDetailsPane.innerText = '';\n        if (!this.contextViewProvider || this._isVisible) {\n            return;\n        }\n        // Lazily create and populate list only at open, moved from constructor\n        this.createSelectList(this.selectDropDownContainer);\n        this.setOptionsList();\n        // This allows us to flip the position based on measurement\n        // Set drop-down position above/below from required height and margins\n        // If pre-layout cannot fit at least one option do not show drop-down\n        this.contextViewProvider.showContextView({\n            getAnchor: () => this.selectElement,\n            render: (container) => this.renderSelectDropDown(container, true),\n            layout: () => {\n                this.layoutSelectDropDown();\n            },\n            onHide: () => {\n                this.selectDropDownContainer.classList.remove('visible');\n                this.selectElement.classList.remove('synthetic-focus');\n            },\n            anchorPosition: this._dropDownPosition\n        }, this.selectBoxOptions.optionsAsChildren ? this.container : undefined);\n        // Hide so we can relay out\n        this._isVisible = true;\n        this.hideSelectDropDown(false);\n        this.contextViewProvider.showContextView({\n            getAnchor: () => this.selectElement,\n            render: (container) => this.renderSelectDropDown(container),\n            layout: () => this.layoutSelectDropDown(),\n            onHide: () => {\n                this.selectDropDownContainer.classList.remove('visible');\n                this.selectElement.classList.remove('synthetic-focus');\n            },\n            anchorPosition: this._dropDownPosition\n        }, this.selectBoxOptions.optionsAsChildren ? this.container : undefined);\n        // Track initial selection the case user escape, blur\n        this._currentSelection = this.selected;\n        this._isVisible = true;\n        this.selectElement.setAttribute('aria-expanded', 'true');\n    }\n    hideSelectDropDown(focusSelect) {\n        if (!this.contextViewProvider || !this._isVisible) {\n            return;\n        }\n        this._isVisible = false;\n        this.selectElement.setAttribute('aria-expanded', 'false');\n        if (focusSelect) {\n            this.selectElement.focus();\n        }\n        this.contextViewProvider.hideContextView();\n    }\n    renderSelectDropDown(container, preLayoutPosition) {\n        container.appendChild(this.selectDropDownContainer);\n        // Pre-Layout allows us to change position\n        this.layoutSelectDropDown(preLayoutPosition);\n        return {\n            dispose: () => {\n                // contextView will dispose itself if moving from one View to another\n                this.selectDropDownContainer.remove(); // remove to take out the CSS rules we add\n            }\n        };\n    }\n    // Iterate over detailed descriptions, find max height\n    measureMaxDetailsHeight() {\n        let maxDetailsPaneHeight = 0;\n        this.options.forEach((_option, index) => {\n            this.updateDetail(index);\n            if (this.selectionDetailsPane.offsetHeight > maxDetailsPaneHeight) {\n                maxDetailsPaneHeight = this.selectionDetailsPane.offsetHeight;\n            }\n        });\n        return maxDetailsPaneHeight;\n    }\n    layoutSelectDropDown(preLayoutPosition) {\n        // Avoid recursion from layout called in onListFocus\n        if (this._skipLayout) {\n            return false;\n        }\n        // Layout ContextView drop down select list and container\n        // Have to manage our vertical overflow, sizing, position below or above\n        // Position has to be determined and set prior to contextView instantiation\n        if (this.selectList) {\n            // Make visible to enable measurements\n            this.selectDropDownContainer.classList.add('visible');\n            const window = dom.getWindow(this.selectElement);\n            const selectPosition = dom.getDomNodePagePosition(this.selectElement);\n            const styles = dom.getWindow(this.selectElement).getComputedStyle(this.selectElement);\n            const verticalPadding = parseFloat(styles.getPropertyValue('--dropdown-padding-top')) + parseFloat(styles.getPropertyValue('--dropdown-padding-bottom'));\n            const maxSelectDropDownHeightBelow = (window.innerHeight - selectPosition.top - selectPosition.height - (this.selectBoxOptions.minBottomMargin || 0));\n            const maxSelectDropDownHeightAbove = (selectPosition.top - SelectBoxList.DEFAULT_DROPDOWN_MINIMUM_TOP_MARGIN);\n            // Determine optimal width - min(longest option), opt(parent select, excluding margins), max(ContextView controlled)\n            const selectWidth = this.selectElement.offsetWidth;\n            const selectMinWidth = this.setWidthControlElement(this.widthControlElement);\n            const selectOptimalWidth = Math.max(selectMinWidth, Math.round(selectWidth)).toString() + 'px';\n            this.selectDropDownContainer.style.width = selectOptimalWidth;\n            // Get initial list height and determine space above and below\n            this.selectList.getHTMLElement().style.height = '';\n            this.selectList.layout();\n            let listHeight = this.selectList.contentHeight;\n            if (this._hasDetails && this._cachedMaxDetailsHeight === undefined) {\n                this._cachedMaxDetailsHeight = this.measureMaxDetailsHeight();\n            }\n            const maxDetailsPaneHeight = this._hasDetails ? this._cachedMaxDetailsHeight : 0;\n            const minRequiredDropDownHeight = listHeight + verticalPadding + maxDetailsPaneHeight;\n            const maxVisibleOptionsBelow = ((Math.floor((maxSelectDropDownHeightBelow - verticalPadding - maxDetailsPaneHeight) / this.getHeight())));\n            const maxVisibleOptionsAbove = ((Math.floor((maxSelectDropDownHeightAbove - verticalPadding - maxDetailsPaneHeight) / this.getHeight())));\n            // If we are only doing pre-layout check/adjust position only\n            // Calculate vertical space available, flip up if insufficient\n            // Use reflected padding on parent select, ContextView style\n            // properties not available before DOM attachment\n            if (preLayoutPosition) {\n                // Check if select moved out of viewport , do not open\n                // If at least one option cannot be shown, don't open the drop-down or hide/remove if open\n                if ((selectPosition.top + selectPosition.height) > (window.innerHeight - 22)\n                    || selectPosition.top < SelectBoxList.DEFAULT_DROPDOWN_MINIMUM_TOP_MARGIN\n                    || ((maxVisibleOptionsBelow < 1) && (maxVisibleOptionsAbove < 1))) {\n                    // Indicate we cannot open\n                    return false;\n                }\n                // Determine if we have to flip up\n                // Always show complete list items - never more than Max available vertical height\n                if (maxVisibleOptionsBelow < SelectBoxList.DEFAULT_MINIMUM_VISIBLE_OPTIONS\n                    && maxVisibleOptionsAbove > maxVisibleOptionsBelow\n                    && this.options.length > maxVisibleOptionsBelow) {\n                    this._dropDownPosition = 1 /* AnchorPosition.ABOVE */;\n                    this.selectDropDownListContainer.remove();\n                    this.selectionDetailsPane.remove();\n                    this.selectDropDownContainer.appendChild(this.selectionDetailsPane);\n                    this.selectDropDownContainer.appendChild(this.selectDropDownListContainer);\n                    this.selectionDetailsPane.classList.remove('border-top');\n                    this.selectionDetailsPane.classList.add('border-bottom');\n                }\n                else {\n                    this._dropDownPosition = 0 /* AnchorPosition.BELOW */;\n                    this.selectDropDownListContainer.remove();\n                    this.selectionDetailsPane.remove();\n                    this.selectDropDownContainer.appendChild(this.selectDropDownListContainer);\n                    this.selectDropDownContainer.appendChild(this.selectionDetailsPane);\n                    this.selectionDetailsPane.classList.remove('border-bottom');\n                    this.selectionDetailsPane.classList.add('border-top');\n                }\n                // Do full layout on showSelectDropDown only\n                return true;\n            }\n            // Check if select out of viewport or cutting into status bar\n            if ((selectPosition.top + selectPosition.height) > (window.innerHeight - 22)\n                || selectPosition.top < SelectBoxList.DEFAULT_DROPDOWN_MINIMUM_TOP_MARGIN\n                || (this._dropDownPosition === 0 /* AnchorPosition.BELOW */ && maxVisibleOptionsBelow < 1)\n                || (this._dropDownPosition === 1 /* AnchorPosition.ABOVE */ && maxVisibleOptionsAbove < 1)) {\n                // Cannot properly layout, close and hide\n                this.hideSelectDropDown(true);\n                return false;\n            }\n            // SetUp list dimensions and layout - account for container padding\n            // Use position to check above or below available space\n            if (this._dropDownPosition === 0 /* AnchorPosition.BELOW */) {\n                if (this._isVisible && maxVisibleOptionsBelow + maxVisibleOptionsAbove < 1) {\n                    // If drop-down is visible, must be doing a DOM re-layout, hide since we don't fit\n                    // Hide drop-down, hide contextview, focus on parent select\n                    this.hideSelectDropDown(true);\n                    return false;\n                }\n                // Adjust list height to max from select bottom to margin (default/minBottomMargin)\n                if (minRequiredDropDownHeight > maxSelectDropDownHeightBelow) {\n                    listHeight = (maxVisibleOptionsBelow * this.getHeight());\n                }\n            }\n            else {\n                if (minRequiredDropDownHeight > maxSelectDropDownHeightAbove) {\n                    listHeight = (maxVisibleOptionsAbove * this.getHeight());\n                }\n            }\n            // Set adjusted list height and relayout\n            this.selectList.layout(listHeight);\n            this.selectList.domFocus();\n            // Finally set focus on selected item\n            if (this.selectList.length > 0) {\n                this.selectList.setFocus([this.selected || 0]);\n                this.selectList.reveal(this.selectList.getFocus()[0] || 0);\n            }\n            if (this._hasDetails) {\n                // Leave the selectDropDownContainer to size itself according to children (list + details) - #57447\n                this.selectList.getHTMLElement().style.height = (listHeight + verticalPadding) + 'px';\n                this.selectDropDownContainer.style.height = '';\n            }\n            else {\n                this.selectDropDownContainer.style.height = (listHeight + verticalPadding) + 'px';\n            }\n            this.updateDetail(this.selected);\n            this.selectDropDownContainer.style.width = selectOptimalWidth;\n            // Maintain focus outline on parent select as well as list container - tabindex for focus\n            this.selectDropDownListContainer.setAttribute('tabindex', '0');\n            this.selectElement.classList.add('synthetic-focus');\n            this.selectDropDownContainer.classList.add('synthetic-focus');\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    setWidthControlElement(container) {\n        let elementWidth = 0;\n        if (container) {\n            let longest = 0;\n            let longestLength = 0;\n            this.options.forEach((option, index) => {\n                const detailLength = !!option.detail ? option.detail.length : 0;\n                const rightDecoratorLength = !!option.decoratorRight ? option.decoratorRight.length : 0;\n                const len = option.text.length + detailLength + rightDecoratorLength;\n                if (len > longestLength) {\n                    longest = index;\n                    longestLength = len;\n                }\n            });\n            container.textContent = this.options[longest].text + (!!this.options[longest].decoratorRight ? (this.options[longest].decoratorRight + ' ') : '');\n            elementWidth = dom.getTotalWidth(container);\n        }\n        return elementWidth;\n    }\n    createSelectList(parent) {\n        // If we have already constructive list on open, skip\n        if (this.selectList) {\n            return;\n        }\n        // SetUp container for list\n        this.selectDropDownListContainer = dom.append(parent, $('.select-box-dropdown-list-container'));\n        this.listRenderer = new SelectListRenderer();\n        this.selectList = this._register(new List('SelectBoxCustom', this.selectDropDownListContainer, this, [this.listRenderer], {\n            useShadows: false,\n            verticalScrollMode: 3 /* ScrollbarVisibility.Visible */,\n            keyboardSupport: false,\n            mouseSupport: false,\n            accessibilityProvider: {\n                getAriaLabel: element => {\n                    let label = element.text;\n                    if (element.detail) {\n                        label += `. ${element.detail}`;\n                    }\n                    if (element.decoratorRight) {\n                        label += `. ${element.decoratorRight}`;\n                    }\n                    if (element.description) {\n                        label += `. ${element.description}`;\n                    }\n                    return label;\n                },\n                getWidgetAriaLabel: () => localize({ key: 'selectBox', comment: ['Behave like native select dropdown element.'] }, \"Select Box\"),\n                getRole: () => isMacintosh ? '' : 'option',\n                getWidgetRole: () => 'listbox'\n            }\n        }));\n        if (this.selectBoxOptions.ariaLabel) {\n            this.selectList.ariaLabel = this.selectBoxOptions.ariaLabel;\n        }\n        // SetUp list keyboard controller - control navigation, disabled items, focus\n        const onKeyDown = this._register(new DomEmitter(this.selectDropDownListContainer, 'keydown'));\n        const onSelectDropDownKeyDown = Event.chain(onKeyDown.event, $ => $.filter(() => this.selectList.length > 0)\n            .map(e => new StandardKeyboardEvent(e)));\n        this._register(Event.chain(onSelectDropDownKeyDown, $ => $.filter(e => e.keyCode === 3 /* KeyCode.Enter */))(this.onEnter, this));\n        this._register(Event.chain(onSelectDropDownKeyDown, $ => $.filter(e => e.keyCode === 2 /* KeyCode.Tab */))(this.onEnter, this)); // Tab should behave the same as enter, #79339\n        this._register(Event.chain(onSelectDropDownKeyDown, $ => $.filter(e => e.keyCode === 9 /* KeyCode.Escape */))(this.onEscape, this));\n        this._register(Event.chain(onSelectDropDownKeyDown, $ => $.filter(e => e.keyCode === 16 /* KeyCode.UpArrow */))(this.onUpArrow, this));\n        this._register(Event.chain(onSelectDropDownKeyDown, $ => $.filter(e => e.keyCode === 18 /* KeyCode.DownArrow */))(this.onDownArrow, this));\n        this._register(Event.chain(onSelectDropDownKeyDown, $ => $.filter(e => e.keyCode === 12 /* KeyCode.PageDown */))(this.onPageDown, this));\n        this._register(Event.chain(onSelectDropDownKeyDown, $ => $.filter(e => e.keyCode === 11 /* KeyCode.PageUp */))(this.onPageUp, this));\n        this._register(Event.chain(onSelectDropDownKeyDown, $ => $.filter(e => e.keyCode === 14 /* KeyCode.Home */))(this.onHome, this));\n        this._register(Event.chain(onSelectDropDownKeyDown, $ => $.filter(e => e.keyCode === 13 /* KeyCode.End */))(this.onEnd, this));\n        this._register(Event.chain(onSelectDropDownKeyDown, $ => $.filter(e => (e.keyCode >= 21 /* KeyCode.Digit0 */ && e.keyCode <= 56 /* KeyCode.KeyZ */) || (e.keyCode >= 85 /* KeyCode.Semicolon */ && e.keyCode <= 113 /* KeyCode.NumpadDivide */)))(this.onCharacter, this));\n        // SetUp list mouse controller - control navigation, disabled items, focus\n        this._register(dom.addDisposableListener(this.selectList.getHTMLElement(), dom.EventType.POINTER_UP, e => this.onPointerUp(e)));\n        this._register(this.selectList.onMouseOver(e => typeof e.index !== 'undefined' && this.selectList.setFocus([e.index])));\n        this._register(this.selectList.onDidChangeFocus(e => this.onListFocus(e)));\n        this._register(dom.addDisposableListener(this.selectDropDownContainer, dom.EventType.FOCUS_OUT, e => {\n            if (!this._isVisible || dom.isAncestor(e.relatedTarget, this.selectDropDownContainer)) {\n                return;\n            }\n            this.onListBlur();\n        }));\n        this.selectList.getHTMLElement().setAttribute('aria-label', this.selectBoxOptions.ariaLabel || '');\n        this.selectList.getHTMLElement().setAttribute('aria-expanded', 'true');\n        this.styleList();\n    }\n    // List methods\n    // List mouse controller - active exit, select option, fire onDidSelect if change, return focus to parent select\n    // Also takes in touchend events\n    onPointerUp(e) {\n        if (!this.selectList.length) {\n            return;\n        }\n        dom.EventHelper.stop(e);\n        const target = e.target;\n        if (!target) {\n            return;\n        }\n        // Check our mouse event is on an option (not scrollbar)\n        if (target.classList.contains('slider')) {\n            return;\n        }\n        const listRowElement = target.closest('.monaco-list-row');\n        if (!listRowElement) {\n            return;\n        }\n        const index = Number(listRowElement.getAttribute('data-index'));\n        const disabled = listRowElement.classList.contains('option-disabled');\n        // Ignore mouse selection of disabled options\n        if (index >= 0 && index < this.options.length && !disabled) {\n            this.selected = index;\n            this.select(this.selected);\n            this.selectList.setFocus([this.selected]);\n            this.selectList.reveal(this.selectList.getFocus()[0]);\n            // Only fire if selection change\n            if (this.selected !== this._currentSelection) {\n                // Set current = selected\n                this._currentSelection = this.selected;\n                this._onDidSelect.fire({\n                    index: this.selectElement.selectedIndex,\n                    selected: this.options[this.selected].text\n                });\n                if (!!this.options[this.selected] && !!this.options[this.selected].text) {\n                    this.setTitle(this.options[this.selected].text);\n                }\n            }\n            this.hideSelectDropDown(true);\n        }\n    }\n    // List Exit - passive - implicit no selection change, hide drop-down\n    onListBlur() {\n        if (this._sticky) {\n            return;\n        }\n        if (this.selected !== this._currentSelection) {\n            // Reset selected to current if no change\n            this.select(this._currentSelection);\n        }\n        this.hideSelectDropDown(false);\n    }\n    renderDescriptionMarkdown(text, actionHandler) {\n        const cleanRenderedMarkdown = (element) => {\n            for (let i = 0; i < element.childNodes.length; i++) {\n                const child = element.childNodes.item(i);\n                const tagName = child.tagName && child.tagName.toLowerCase();\n                if (tagName === 'img') {\n                    child.remove();\n                }\n                else {\n                    cleanRenderedMarkdown(child);\n                }\n            }\n        };\n        const rendered = renderMarkdown({ value: text, supportThemeIcons: true }, { actionHandler });\n        rendered.element.classList.add('select-box-description-markdown');\n        cleanRenderedMarkdown(rendered.element);\n        return rendered.element;\n    }\n    // List Focus Change - passive - update details pane with newly focused element's data\n    onListFocus(e) {\n        // Skip during initial layout\n        if (!this._isVisible || !this._hasDetails) {\n            return;\n        }\n        this.updateDetail(e.indexes[0]);\n    }\n    updateDetail(selectedIndex) {\n        this.selectionDetailsPane.innerText = '';\n        const option = this.options[selectedIndex];\n        const description = option?.description ?? '';\n        const descriptionIsMarkdown = option?.descriptionIsMarkdown ?? false;\n        if (description) {\n            if (descriptionIsMarkdown) {\n                const actionHandler = option.descriptionMarkdownActionHandler;\n                this.selectionDetailsPane.appendChild(this.renderDescriptionMarkdown(description, actionHandler));\n            }\n            else {\n                this.selectionDetailsPane.innerText = description;\n            }\n            this.selectionDetailsPane.style.display = 'block';\n        }\n        else {\n            this.selectionDetailsPane.style.display = 'none';\n        }\n        // Avoid recursion\n        this._skipLayout = true;\n        this.contextViewProvider.layout();\n        this._skipLayout = false;\n    }\n    // List keyboard controller\n    // List exit - active - hide ContextView dropdown, reset selection, return focus to parent select\n    onEscape(e) {\n        dom.EventHelper.stop(e);\n        // Reset selection to value when opened\n        this.select(this._currentSelection);\n        this.hideSelectDropDown(true);\n    }\n    // List exit - active - hide ContextView dropdown, return focus to parent select, fire onDidSelect if change\n    onEnter(e) {\n        dom.EventHelper.stop(e);\n        // Only fire if selection change\n        if (this.selected !== this._currentSelection) {\n            this._currentSelection = this.selected;\n            this._onDidSelect.fire({\n                index: this.selectElement.selectedIndex,\n                selected: this.options[this.selected].text\n            });\n            if (!!this.options[this.selected] && !!this.options[this.selected].text) {\n                this.setTitle(this.options[this.selected].text);\n            }\n        }\n        this.hideSelectDropDown(true);\n    }\n    // List navigation - have to handle a disabled option (jump over)\n    onDownArrow(e) {\n        if (this.selected < this.options.length - 1) {\n            dom.EventHelper.stop(e, true);\n            // Skip disabled options\n            const nextOptionDisabled = this.options[this.selected + 1].isDisabled;\n            if (nextOptionDisabled && this.options.length > this.selected + 2) {\n                this.selected += 2;\n            }\n            else if (nextOptionDisabled) {\n                return;\n            }\n            else {\n                this.selected++;\n            }\n            // Set focus/selection - only fire event when closing drop-down or on blur\n            this.select(this.selected);\n            this.selectList.setFocus([this.selected]);\n            this.selectList.reveal(this.selectList.getFocus()[0]);\n        }\n    }\n    onUpArrow(e) {\n        if (this.selected > 0) {\n            dom.EventHelper.stop(e, true);\n            // Skip disabled options\n            const previousOptionDisabled = this.options[this.selected - 1].isDisabled;\n            if (previousOptionDisabled && this.selected > 1) {\n                this.selected -= 2;\n            }\n            else {\n                this.selected--;\n            }\n            // Set focus/selection - only fire event when closing drop-down or on blur\n            this.select(this.selected);\n            this.selectList.setFocus([this.selected]);\n            this.selectList.reveal(this.selectList.getFocus()[0]);\n        }\n    }\n    onPageUp(e) {\n        dom.EventHelper.stop(e);\n        this.selectList.focusPreviousPage();\n        // Allow scrolling to settle\n        setTimeout(() => {\n            this.selected = this.selectList.getFocus()[0];\n            // Shift selection down if we land on a disabled option\n            if (this.options[this.selected].isDisabled && this.selected < this.options.length - 1) {\n                this.selected++;\n                this.selectList.setFocus([this.selected]);\n            }\n            this.selectList.reveal(this.selected);\n            this.select(this.selected);\n        }, 1);\n    }\n    onPageDown(e) {\n        dom.EventHelper.stop(e);\n        this.selectList.focusNextPage();\n        // Allow scrolling to settle\n        setTimeout(() => {\n            this.selected = this.selectList.getFocus()[0];\n            // Shift selection up if we land on a disabled option\n            if (this.options[this.selected].isDisabled && this.selected > 0) {\n                this.selected--;\n                this.selectList.setFocus([this.selected]);\n            }\n            this.selectList.reveal(this.selected);\n            this.select(this.selected);\n        }, 1);\n    }\n    onHome(e) {\n        dom.EventHelper.stop(e);\n        if (this.options.length < 2) {\n            return;\n        }\n        this.selected = 0;\n        if (this.options[this.selected].isDisabled && this.selected > 1) {\n            this.selected++;\n        }\n        this.selectList.setFocus([this.selected]);\n        this.selectList.reveal(this.selected);\n        this.select(this.selected);\n    }\n    onEnd(e) {\n        dom.EventHelper.stop(e);\n        if (this.options.length < 2) {\n            return;\n        }\n        this.selected = this.options.length - 1;\n        if (this.options[this.selected].isDisabled && this.selected > 1) {\n            this.selected--;\n        }\n        this.selectList.setFocus([this.selected]);\n        this.selectList.reveal(this.selected);\n        this.select(this.selected);\n    }\n    // Mimic option first character navigation of native select\n    onCharacter(e) {\n        const ch = KeyCodeUtils.toString(e.keyCode);\n        let optionIndex = -1;\n        for (let i = 0; i < this.options.length - 1; i++) {\n            optionIndex = (i + this.selected + 1) % this.options.length;\n            if (this.options[optionIndex].text.charAt(0).toUpperCase() === ch && !this.options[optionIndex].isDisabled) {\n                this.select(optionIndex);\n                this.selectList.setFocus([optionIndex]);\n                this.selectList.reveal(this.selectList.getFocus()[0]);\n                dom.EventHelper.stop(e);\n                break;\n            }\n        }\n    }\n    dispose() {\n        this.hideSelectDropDown(false);\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 * as dom from '../../dom.js';\nimport { EventType, Gesture } from '../../touch.js';\nimport * as arrays from '../../../common/arrays.js';\nimport { Emitter } from '../../../common/event.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { isMacintosh } from '../../../common/platform.js';\nexport class SelectBoxNative extends Disposable {\n    constructor(options, selected, styles, selectBoxOptions) {\n        super();\n        this.selected = 0;\n        this.selectBoxOptions = selectBoxOptions || Object.create(null);\n        this.options = [];\n        this.selectElement = document.createElement('select');\n        this.selectElement.className = 'monaco-select-box';\n        if (typeof this.selectBoxOptions.ariaLabel === 'string') {\n            this.selectElement.setAttribute('aria-label', this.selectBoxOptions.ariaLabel);\n        }\n        if (typeof this.selectBoxOptions.ariaDescription === 'string') {\n            this.selectElement.setAttribute('aria-description', this.selectBoxOptions.ariaDescription);\n        }\n        this._onDidSelect = this._register(new Emitter());\n        this.styles = styles;\n        this.registerListeners();\n        this.setOptions(options, selected);\n    }\n    registerListeners() {\n        this._register(Gesture.addTarget(this.selectElement));\n        [EventType.Tap].forEach(eventType => {\n            this._register(dom.addDisposableListener(this.selectElement, eventType, (e) => {\n                this.selectElement.focus();\n            }));\n        });\n        this._register(dom.addStandardDisposableListener(this.selectElement, 'click', (e) => {\n            dom.EventHelper.stop(e, true);\n        }));\n        this._register(dom.addStandardDisposableListener(this.selectElement, 'change', (e) => {\n            this.selectElement.title = e.target.value;\n            this._onDidSelect.fire({\n                index: e.target.selectedIndex,\n                selected: e.target.value\n            });\n        }));\n        this._register(dom.addStandardDisposableListener(this.selectElement, 'keydown', (e) => {\n            let showSelect = false;\n            if (isMacintosh) {\n                if (e.keyCode === 18 /* KeyCode.DownArrow */ || e.keyCode === 16 /* KeyCode.UpArrow */ || e.keyCode === 10 /* KeyCode.Space */) {\n                    showSelect = true;\n                }\n            }\n            else {\n                if (e.keyCode === 18 /* KeyCode.DownArrow */ && e.altKey || e.keyCode === 10 /* KeyCode.Space */ || e.keyCode === 3 /* KeyCode.Enter */) {\n                    showSelect = true;\n                }\n            }\n            if (showSelect) {\n                // Space, Enter, is used to expand select box, do not propagate it (prevent action bar action run)\n                e.stopPropagation();\n            }\n        }));\n    }\n    get onDidSelect() {\n        return this._onDidSelect.event;\n    }\n    setOptions(options, selected) {\n        if (!this.options || !arrays.equals(this.options, options)) {\n            this.options = options;\n            this.selectElement.options.length = 0;\n            this.options.forEach((option, index) => {\n                this.selectElement.add(this.createOption(option.text, index, option.isDisabled));\n            });\n        }\n        if (selected !== undefined) {\n            this.select(selected);\n        }\n    }\n    select(index) {\n        if (this.options.length === 0) {\n            this.selected = 0;\n        }\n        else if (index >= 0 && index < this.options.length) {\n            this.selected = index;\n        }\n        else if (index > this.options.length - 1) {\n            // Adjust index to end of list\n            // This could make client out of sync with the select\n            this.select(this.options.length - 1);\n        }\n        else if (this.selected < 0) {\n            this.selected = 0;\n        }\n        this.selectElement.selectedIndex = this.selected;\n        if ((this.selected < this.options.length) && typeof this.options[this.selected].text === 'string') {\n            this.selectElement.title = this.options[this.selected].text;\n        }\n        else {\n            this.selectElement.title = '';\n        }\n    }\n    focus() {\n        if (this.selectElement) {\n            this.selectElement.tabIndex = 0;\n            this.selectElement.focus();\n        }\n    }\n    blur() {\n        if (this.selectElement) {\n            this.selectElement.tabIndex = -1;\n            this.selectElement.blur();\n        }\n    }\n    setFocusable(focusable) {\n        this.selectElement.tabIndex = focusable ? 0 : -1;\n    }\n    render(container) {\n        container.classList.add('select-container');\n        container.appendChild(this.selectElement);\n        this.setOptions(this.options, this.selected);\n        this.applyStyles();\n    }\n    applyStyles() {\n        // Style native select\n        if (this.selectElement) {\n            this.selectElement.style.backgroundColor = this.styles.selectBackground ?? '';\n            this.selectElement.style.color = this.styles.selectForeground ?? '';\n            this.selectElement.style.borderColor = this.styles.selectBorder ?? '';\n        }\n    }\n    createOption(value, index, disabled) {\n        const option = document.createElement('option');\n        option.value = value;\n        option.text = value;\n        option.disabled = !!disabled;\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 { SelectBoxList } from './selectBoxCustom.js';\nimport { SelectBoxNative } from './selectBoxNative.js';\nimport { Widget } from '../widget.js';\nimport { isMacintosh } from '../../../common/platform.js';\nimport './selectBox.css';\nexport class SelectBox extends Widget {\n    constructor(options, selected, contextViewProvider, styles, selectBoxOptions) {\n        super();\n        // Default to native SelectBox for OSX unless overridden\n        if (isMacintosh && !selectBoxOptions?.useCustomDrawn) {\n            this.selectBoxDelegate = new SelectBoxNative(options, selected, styles, selectBoxOptions);\n        }\n        else {\n            this.selectBoxDelegate = new SelectBoxList(options, selected, contextViewProvider, styles, selectBoxOptions);\n        }\n        this._register(this.selectBoxDelegate);\n    }\n    // Public SelectBox Methods - routed through delegate interface\n    get onDidSelect() {\n        return this.selectBoxDelegate.onDidSelect;\n    }\n    setOptions(options, selected) {\n        this.selectBoxDelegate.setOptions(options, selected);\n    }\n    select(index) {\n        this.selectBoxDelegate.select(index);\n    }\n    focus() {\n        this.selectBoxDelegate.focus();\n    }\n    blur() {\n        this.selectBoxDelegate.blur();\n    }\n    setFocusable(focusable) {\n        this.selectBoxDelegate.setFocusable(focusable);\n    }\n    render(container) {\n        this.selectBoxDelegate.render(container);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { isFirefox } from '../../browser.js';\nimport { DataTransfers } from '../../dnd.js';\nimport { addDisposableListener, EventHelper, EventType } from '../../dom.js';\nimport { EventType as TouchEventType, Gesture } from '../../touch.js';\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { SelectBox } from '../selectBox/selectBox.js';\nimport { Action, ActionRunner, Separator } from '../../../common/actions.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport * as platform from '../../../common/platform.js';\nimport * as types from '../../../common/types.js';\nimport './actionbar.css';\nimport * as nls from '../../../../nls.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nexport class BaseActionViewItem extends Disposable {\n    get action() {\n        return this._action;\n    }\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    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 => e.dataTransfer?.setData(DataTransfers.TEXT, this._action.label)));\n            }\n        }\n        this._register(addDisposableListener(element, TouchEventType.Tap, e => this.onClick(e, true))); // Preserve focus on tap #125470\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                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, preserveFocus = false) {\n        EventHelper.stop(event, true);\n        const context = types.isUndefinedOrNull(this._context) ? this.options?.useEventAsContext ? event : { preserveFocus } : 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    getClass() {\n        return this.action.class;\n    }\n    getTooltip() {\n        return this.action.tooltip;\n    }\n    updateTooltip() {\n        if (!this.element) {\n            return;\n        }\n        const title = this.getTooltip() ?? '';\n        this.updateAriaLabel();\n        if (this.options.hoverDelegate?.showNativeHover) {\n            /* While custom hover is not inside custom hover */\n            this.element.title = title;\n        }\n        else {\n            if (!this.customHover && title !== '') {\n                const hoverDelegate = this.options.hoverDelegate ?? getDefaultHoverDelegate('element');\n                this.customHover = this._store.add(getBaseLayerHoverDelegate().setupManagedHover(hoverDelegate, this.element, title));\n            }\n            else if (this.customHover) {\n                this.customHover.update(title);\n            }\n        }\n    }\n    updateAriaLabel() {\n        if (this.element) {\n            const title = this.getTooltip() ?? '';\n            this.element.setAttribute('aria-label', title);\n        }\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        this._context = undefined;\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        types.assertType(this.element);\n        const label = document.createElement('a');\n        label.classList.add('action-label');\n        label.setAttribute('role', this.getDefaultAriaRole());\n        this.label = label;\n        this.element.appendChild(label);\n        if (this.options.label && this.options.keybinding) {\n            const kbLabel = document.createElement('span');\n            kbLabel.classList.add('keybinding');\n            kbLabel.textContent = this.options.keybinding;\n            this.element.appendChild(kbLabel);\n        }\n        this.updateClass();\n        this.updateLabel();\n        this.updateTooltip();\n        this.updateEnabled();\n        this.updateChecked();\n    }\n    getDefaultAriaRole() {\n        if (this._action.id === Separator.ID) {\n            return 'presentation'; // A separator is a presentation item\n        }\n        else {\n            if (this.options.isMenu) {\n                return 'menuitem';\n            }\n            else if (this.options.isTabList) {\n                return 'tab';\n            }\n            else {\n                return 'button';\n            }\n        }\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.action.label;\n        }\n    }\n    getTooltip() {\n        let title = null;\n        if (this.action.tooltip) {\n            title = this.action.tooltip;\n        }\n        else if (!this.options.label && this.action.label && this.options.icon) {\n            title = this.action.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        return title ?? undefined;\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.getClass();\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            this.label?.classList.remove('codicon');\n        }\n    }\n    updateEnabled() {\n        if (this.action.enabled) {\n            if (this.label) {\n                this.label.removeAttribute('aria-disabled');\n                this.label.classList.remove('disabled');\n            }\n            this.element?.classList.remove('disabled');\n        }\n        else {\n            if (this.label) {\n                this.label.setAttribute('aria-disabled', 'true');\n                this.label.classList.add('disabled');\n            }\n            this.element?.classList.add('disabled');\n        }\n    }\n    updateAriaLabel() {\n        if (this.label) {\n            const title = this.getTooltip() ?? '';\n            this.label.setAttribute('aria-label', title);\n        }\n    }\n    updateChecked() {\n        if (this.label) {\n            if (this.action.checked !== undefined) {\n                this.label.classList.toggle('checked', this.action.checked);\n                if (this.options.isTabList) {\n                    this.label.setAttribute('aria-selected', this.action.checked ? 'true' : 'false');\n                }\n                else {\n                    this.label.setAttribute('aria-checked', this.action.checked ? 'true' : 'false');\n                    this.label.setAttribute('role', 'checkbox');\n                }\n            }\n            else {\n                this.label.classList.remove('checked');\n                this.label.removeAttribute(this.options.isTabList ? 'aria-selected' : 'aria-checked');\n                this.label.setAttribute('role', this.getDefaultAriaRole());\n            }\n        }\n    }\n}\nexport class SelectActionViewItem extends BaseActionViewItem {\n    constructor(ctx, action, options, selected, contextViewProvider, styles, selectBoxOptions) {\n        super(ctx, action);\n        this.selectBox = new SelectBox(options, selected, contextViewProvider, styles, selectBoxOptions);\n        this.selectBox.setFocusable(false);\n        this._register(this.selectBox);\n        this.registerListeners();\n    }\n    select(index) {\n        this.selectBox.select(index);\n    }\n    registerListeners() {\n        this._register(this.selectBox.onDidSelect(e => this.runAction(e.selected, e.index)));\n    }\n    runAction(option, index) {\n        this.actionRunner.run(this._action, this.getActionContext(option, index));\n    }\n    getActionContext(option, index) {\n        return option;\n    }\n    setFocusable(focusable) {\n        this.selectBox.setFocusable(focusable);\n    }\n    focus() {\n        this.selectBox?.focus();\n    }\n    blur() {\n        this.selectBox?.blur();\n    }\n    render(container) {\n        this.selectBox.render(container);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { $, addDisposableListener, append, EventHelper, EventType, isMouseEvent } from '../../dom.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { EventType as GestureEventType, Gesture } from '../../touch.js';\nimport { ActionRunner } from '../../../common/actions.js';\nimport { Emitter } from '../../../common/event.js';\nimport './dropdown.css';\nclass BaseDropdown extends ActionRunner {\n    constructor(container, options) {\n        super();\n        this._onDidChangeVisibility = this._register(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 (isMouseEvent(e) && (e.detail > 1 || e.button !== 0)) {\n                    // prevent right click trigger to allow separate context menu (https://github.com/microsoft/vscode/issues/151064)\n                    // prevent multiple clicks to open multiple context menus (https://github.com/microsoft/vscode/issues/41363)\n                    return;\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 /* KeyCode.Enter */) || event.equals(10 /* KeyCode.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._options = _options;\n        this._actions = [];\n        this.actions = _options.actions || [];\n    }\n    set menuOptions(options) {\n        this._menuOptions = options;\n    }\n    get menuOptions() {\n        return this._menuOptions;\n    }\n    get actions() {\n        if (this._options.actionProvider) {\n            return this._options.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._options.contextMenuProvider.showContextMenu({\n            getAnchor: () => this.element,\n            getActions: () => this.actions,\n            getActionsContext: () => this.menuOptions ? this.menuOptions.context : null,\n            getActionViewItem: (action, options) => this.menuOptions && this.menuOptions.actionViewItemProvider ? this.menuOptions.actionViewItemProvider(action, options) : undefined,\n            getKeyBinding: action => this.menuOptions && this.menuOptions.getKeyBinding ? this.menuOptions.getKeyBinding(action) : undefined,\n            getMenuClassName: () => this._options.menuClassName || '',\n            onHide: () => this.onHide(),\n            actionRunner: this.menuOptions ? this.menuOptions.actionRunner : undefined,\n            anchorAlignment: this.menuOptions ? this.menuOptions.anchorAlignment : 0 /* AnchorAlignment.LEFT */,\n            domForShadowRoot: this._options.menuAsChild ? this.element : undefined,\n            skipTelemetry: this._options.skipTelemetry\n        });\n    }\n    hide() {\n        super.hide();\n    }\n    onHide() {\n        this.hide();\n        this.element.classList.remove('active');\n    }\n}\n","import { $, append } from '../../dom.js';\nimport { BaseActionViewItem } from '../actionbar/actionViewItems.js';\nimport { DropdownMenu } from './dropdown.js';\nimport { Emitter } from '../../../common/event.js';\nimport './dropdown.css';\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.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.onDidChangeVisibility = this._onDidChangeVisibility.event;\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            if (this._action.label) {\n                this._register(getBaseLayerHoverDelegate().setupManagedHover(this.options.hoverDelegate ?? getDefaultHoverDelegate('mouse'), this.element, this._action.label));\n            }\n            this.element.ariaLabel = 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            skipTelemetry: this.options.skipTelemetry\n        };\n        this.dropdownMenu = this._register(new DropdownMenu(container, options));\n        this._register(this.dropdownMenu.onDidChangeVisibility(visible => {\n            this.element?.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 = {\n                ...this.dropdownMenu.menuOptions,\n                get anchorAlignment() {\n                    return that.options.anchorAlignmentProvider();\n                }\n            };\n        }\n        this.updateTooltip();\n        this.updateEnabled();\n    }\n    getTooltip() {\n        let title = null;\n        if (this.action.tooltip) {\n            title = this.action.tooltip;\n        }\n        else if (this.action.label) {\n            title = this.action.label;\n        }\n        return title ?? undefined;\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    show() {\n        this.dropdownMenu?.show();\n    }\n    updateEnabled() {\n        const disabled = !this.action.enabled;\n        this.actionItem?.classList.toggle('disabled', disabled);\n        this.element?.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 *--------------------------------------------------------------------------------------------*/\nexport function isLocalizedString(thing) {\n    return thing\n        && typeof thing === 'object'\n        && typeof thing.original === 'string'\n        && typeof thing.value === 'string';\n}\nexport function isICommandActionToggleInfo(thing) {\n    return thing ? thing.condition !== undefined : 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 { ThrottledDelayer } from '../../../common/async.js';\nimport { Event, PauseableEmitter } from '../../../common/event.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { stringify } from '../../../common/marshalling.js';\nimport { isObject, isUndefinedOrNull } from '../../../common/types.js';\nexport var StorageHint;\n(function (StorageHint) {\n    // A hint to the storage that the storage\n    // does not exist on disk yet. This allows\n    // the storage library to improve startup\n    // time by not checking the storage for data.\n    StorageHint[StorageHint[\"STORAGE_DOES_NOT_EXIST\"] = 0] = \"STORAGE_DOES_NOT_EXIST\";\n    // A hint to the storage that the storage\n    // is backed by an in-memory storage.\n    StorageHint[StorageHint[\"STORAGE_IN_MEMORY\"] = 1] = \"STORAGE_IN_MEMORY\";\n})(StorageHint || (StorageHint = {}));\nexport var 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    static { this.DEFAULT_FLUSH_DELAY = 100; }\n    constructor(database, options = Object.create(null)) {\n        super();\n        this.database = database;\n        this.options = options;\n        this._onDidChangeStorage = this._register(new PauseableEmitter());\n        this.onDidChangeStorage = this._onDidChangeStorage.event;\n        this.state = StorageState.None;\n        this.cache = new Map();\n        this.flushDelayer = this._register(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        this._onDidChangeStorage.pause();\n        try {\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            e.changed?.forEach((value, key) => this.acceptExternal(key, value));\n            e.deleted?.forEach(key => this.acceptExternal(key, undefined));\n        }\n        finally {\n            this._onDidChangeStorage.resume();\n        }\n    }\n    acceptExternal(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, external: true });\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    async set(key, value, external = false) {\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, external);\n        }\n        // Otherwise, convert to String and store\n        const valueStr = isObject(value) || Array.isArray(value) ? stringify(value) : 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, external });\n        // Accumulate work by scheduling after timeout\n        return this.doFlush();\n    }\n    async delete(key, external = false) {\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, external });\n        // Accumulate work by scheduling after timeout\n        return this.doFlush();\n    }\n    get hasPending() {\n        return this.pendingInserts.size > 0 || this.pendingDeletes.size > 0;\n    }\n    async flushPending() {\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            if (!this.hasPending) {\n                while (this.whenFlushedCallbacks.length) {\n                    this.whenFlushedCallbacks.pop()?.();\n                }\n            }\n        });\n    }\n    async doFlush(delay) {\n        if (this.options.hint === StorageHint.STORAGE_IN_MEMORY) {\n            return this.flushPending(); // return early if in-memory\n        }\n        return this.flushDelayer.trigger(() => this.flushPending(), delay);\n    }\n}\nexport class InMemoryStorageDatabase {\n    constructor() {\n        this.onDidChangeItemsExternal = Event.None;\n        this.items = new Map();\n    }\n    async updateItems(request) {\n        request.insert?.forEach((value, key) => this.items.set(key, value));\n        request.delete?.forEach(key => this.items.delete(key));\n    }\n}\n","import { Emitter, Event, PauseableEmitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { isUndefinedOrNull } from '../../../base/common/types.js';\nimport { InMemoryStorageDatabase, Storage, StorageHint } from '../../../base/parts/storage/common/storage.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const 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 function loadKeyTargets(storage) {\n    const keysRaw = storage.get(TARGET_KEY);\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}\nexport class AbstractStorageService extends Disposable {\n    static { this.DEFAULT_FLUSH_INTERVAL = 60 * 1000; } // every minute\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._profileKeyTargets = undefined;\n        this._applicationKeyTargets = undefined;\n    }\n    onDidChangeValue(scope, key, disposable) {\n        return Event.filter(this._onDidChangeValue.event, e => e.scope === scope && (key === undefined || e.key === key), disposable);\n    }\n    emitDidChangeValue(scope, event) {\n        const { key, external } = event;\n        // Specially handle `TARGET_KEY`\n        if (key === TARGET_KEY) {\n            // Clear our cached version which is now out of date\n            switch (scope) {\n                case -1 /* StorageScope.APPLICATION */:\n                    this._applicationKeyTargets = undefined;\n                    break;\n                case 0 /* StorageScope.PROFILE */:\n                    this._profileKeyTargets = undefined;\n                    break;\n                case 1 /* StorageScope.WORKSPACE */:\n                    this._workspaceKeyTargets = undefined;\n                    break;\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], external });\n        }\n    }\n    get(key, scope, fallbackValue) {\n        return this.getStorage(scope)?.get(key, fallbackValue);\n    }\n    getBoolean(key, scope, fallbackValue) {\n        return this.getStorage(scope)?.getBoolean(key, fallbackValue);\n    }\n    getNumber(key, scope, fallbackValue) {\n        return this.getStorage(scope)?.getNumber(key, fallbackValue);\n    }\n    store(key, value, scope, target, external = false) {\n        // We remove the key for undefined/null values\n        if (isUndefinedOrNull(value)) {\n            this.remove(key, scope, external);\n            return;\n        }\n        // Update our datastructures but send events only after\n        this.withPausedEmitters(() => {\n            // Update key-target map\n            this.updateKeyTarget(key, scope, target);\n            // Store actual value\n            this.getStorage(scope)?.set(key, value, external);\n        });\n    }\n    remove(key, scope, external = false) {\n        // Update our datastructures but send events only after\n        this.withPausedEmitters(() => {\n            // Update key-target map\n            this.updateKeyTarget(key, scope, undefined);\n            // Remove actual key\n            this.getStorage(scope)?.delete(key, external);\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, external = false) {\n        // Add\n        const keyTargets = this.getKeyTargets(scope);\n        if (typeof target === 'number') {\n            if (keyTargets[key] !== target) {\n                keyTargets[key] = target;\n                this.getStorage(scope)?.set(TARGET_KEY, JSON.stringify(keyTargets), external);\n            }\n        }\n        // Remove\n        else {\n            if (typeof keyTargets[key] === 'number') {\n                delete keyTargets[key];\n                this.getStorage(scope)?.set(TARGET_KEY, JSON.stringify(keyTargets), external);\n            }\n        }\n    }\n    get workspaceKeyTargets() {\n        if (!this._workspaceKeyTargets) {\n            this._workspaceKeyTargets = this.loadKeyTargets(1 /* StorageScope.WORKSPACE */);\n        }\n        return this._workspaceKeyTargets;\n    }\n    get profileKeyTargets() {\n        if (!this._profileKeyTargets) {\n            this._profileKeyTargets = this.loadKeyTargets(0 /* StorageScope.PROFILE */);\n        }\n        return this._profileKeyTargets;\n    }\n    get applicationKeyTargets() {\n        if (!this._applicationKeyTargets) {\n            this._applicationKeyTargets = this.loadKeyTargets(-1 /* StorageScope.APPLICATION */);\n        }\n        return this._applicationKeyTargets;\n    }\n    getKeyTargets(scope) {\n        switch (scope) {\n            case -1 /* StorageScope.APPLICATION */:\n                return this.applicationKeyTargets;\n            case 0 /* StorageScope.PROFILE */:\n                return this.profileKeyTargets;\n            default:\n                return this.workspaceKeyTargets;\n        }\n    }\n    loadKeyTargets(scope) {\n        const storage = this.getStorage(scope);\n        return storage ? loadKeyTargets(storage) : Object.create(null);\n    }\n}\nexport class InMemoryStorageService extends AbstractStorageService {\n    constructor() {\n        super();\n        this.applicationStorage = this._register(new Storage(new InMemoryStorageDatabase(), { hint: StorageHint.STORAGE_IN_MEMORY }));\n        this.profileStorage = this._register(new Storage(new InMemoryStorageDatabase(), { hint: StorageHint.STORAGE_IN_MEMORY }));\n        this.workspaceStorage = this._register(new Storage(new InMemoryStorageDatabase(), { hint: StorageHint.STORAGE_IN_MEMORY }));\n        this._register(this.workspaceStorage.onDidChangeStorage(e => this.emitDidChangeValue(1 /* StorageScope.WORKSPACE */, e)));\n        this._register(this.profileStorage.onDidChangeStorage(e => this.emitDidChangeValue(0 /* StorageScope.PROFILE */, e)));\n        this._register(this.applicationStorage.onDidChangeStorage(e => this.emitDidChangeValue(-1 /* StorageScope.APPLICATION */, e)));\n    }\n    getStorage(scope) {\n        switch (scope) {\n            case -1 /* StorageScope.APPLICATION */:\n                return this.applicationStorage;\n            case 0 /* StorageScope.PROFILE */:\n                return this.profileStorage;\n            default:\n                return this.workspaceStorage;\n        }\n    }\n}\n","import { keybindingLabelBackground, keybindingLabelBorder, keybindingLabelBottomBorder, keybindingLabelForeground, asCssVariable, widgetShadow, buttonForeground, buttonSeparator, buttonBackground, buttonHoverBackground, buttonSecondaryForeground, buttonSecondaryBackground, buttonSecondaryHoverBackground, buttonBorder, progressBarBackground, inputActiveOptionBorder, inputActiveOptionForeground, inputActiveOptionBackground, editorWidgetBackground, editorWidgetForeground, contrastBorder, checkboxBorder, checkboxBackground, checkboxForeground, problemsErrorIconForeground, problemsWarningIconForeground, problemsInfoIconForeground, inputBackground, inputForeground, inputBorder, textLinkForeground, inputValidationInfoBorder, inputValidationInfoBackground, inputValidationInfoForeground, inputValidationWarningBorder, inputValidationWarningBackground, inputValidationWarningForeground, inputValidationErrorBorder, inputValidationErrorBackground, inputValidationErrorForeground, listFilterWidgetBackground, listFilterWidgetNoMatchesOutline, listFilterWidgetOutline, listFilterWidgetShadow, badgeBackground, badgeForeground, breadcrumbsBackground, breadcrumbsForeground, breadcrumbsFocusForeground, breadcrumbsActiveSelectionForeground, activeContrastBorder, listActiveSelectionBackground, listActiveSelectionForeground, listActiveSelectionIconForeground, listDropOverBackground, listFocusAndSelectionOutline, listFocusBackground, listFocusForeground, listFocusOutline, listHoverBackground, listHoverForeground, listInactiveFocusBackground, listInactiveFocusOutline, listInactiveSelectionBackground, listInactiveSelectionForeground, listInactiveSelectionIconForeground, tableColumnsBorder, tableOddRowsBackgroundColor, treeIndentGuidesStroke, asCssVariableWithDefault, editorWidgetBorder, focusBorder, pickerGroupForeground, quickInputListFocusBackground, quickInputListFocusForeground, quickInputListFocusIconForeground, selectBackground, selectBorder, selectForeground, selectListBackground, treeInactiveIndentGuidesStroke, menuBorder, menuForeground, menuBackground, menuSelectionForeground, menuSelectionBackground, menuSelectionBorder, menuSeparatorBackground, scrollbarShadow, scrollbarSliderActiveBackground, scrollbarSliderBackground, scrollbarSliderHoverBackground, listDropBetweenBackground, radioActiveBackground, radioActiveForeground, radioInactiveBackground, radioInactiveForeground, radioInactiveBorder, radioInactiveHoverBackground, radioActiveBorder } from '../common/colorRegistry.js';\nimport { Color } from '../../../base/common/color.js';\nfunction overrideStyles(override, styles) {\n    const result = { ...styles };\n    for (const key in override) {\n        const val = override[key];\n        result[key] = val !== undefined ? asCssVariable(val) : undefined;\n    }\n    return result;\n}\nexport const defaultKeybindingLabelStyles = {\n    keybindingLabelBackground: asCssVariable(keybindingLabelBackground),\n    keybindingLabelForeground: asCssVariable(keybindingLabelForeground),\n    keybindingLabelBorder: asCssVariable(keybindingLabelBorder),\n    keybindingLabelBottomBorder: asCssVariable(keybindingLabelBottomBorder),\n    keybindingLabelShadow: asCssVariable(widgetShadow)\n};\nexport const defaultButtonStyles = {\n    buttonForeground: asCssVariable(buttonForeground),\n    buttonSeparator: asCssVariable(buttonSeparator),\n    buttonBackground: asCssVariable(buttonBackground),\n    buttonHoverBackground: asCssVariable(buttonHoverBackground),\n    buttonSecondaryForeground: asCssVariable(buttonSecondaryForeground),\n    buttonSecondaryBackground: asCssVariable(buttonSecondaryBackground),\n    buttonSecondaryHoverBackground: asCssVariable(buttonSecondaryHoverBackground),\n    buttonBorder: asCssVariable(buttonBorder),\n};\nexport const defaultProgressBarStyles = {\n    progressBarBackground: asCssVariable(progressBarBackground)\n};\nexport const defaultToggleStyles = {\n    inputActiveOptionBorder: asCssVariable(inputActiveOptionBorder),\n    inputActiveOptionForeground: asCssVariable(inputActiveOptionForeground),\n    inputActiveOptionBackground: asCssVariable(inputActiveOptionBackground)\n};\nexport const defaultRadioStyles = {\n    activeForeground: asCssVariable(radioActiveForeground),\n    activeBackground: asCssVariable(radioActiveBackground),\n    activeBorder: asCssVariable(radioActiveBorder),\n    inactiveForeground: asCssVariable(radioInactiveForeground),\n    inactiveBackground: asCssVariable(radioInactiveBackground),\n    inactiveBorder: asCssVariable(radioInactiveBorder),\n    inactiveHoverBackground: asCssVariable(radioInactiveHoverBackground),\n};\nexport const defaultCheckboxStyles = {\n    checkboxBackground: asCssVariable(checkboxBackground),\n    checkboxBorder: asCssVariable(checkboxBorder),\n    checkboxForeground: asCssVariable(checkboxForeground)\n};\nexport const defaultDialogStyles = {\n    dialogBackground: asCssVariable(editorWidgetBackground),\n    dialogForeground: asCssVariable(editorWidgetForeground),\n    dialogShadow: asCssVariable(widgetShadow),\n    dialogBorder: asCssVariable(contrastBorder),\n    errorIconForeground: asCssVariable(problemsErrorIconForeground),\n    warningIconForeground: asCssVariable(problemsWarningIconForeground),\n    infoIconForeground: asCssVariable(problemsInfoIconForeground),\n    textLinkForeground: asCssVariable(textLinkForeground)\n};\nexport const defaultInputBoxStyles = {\n    inputBackground: asCssVariable(inputBackground),\n    inputForeground: asCssVariable(inputForeground),\n    inputBorder: asCssVariable(inputBorder),\n    inputValidationInfoBorder: asCssVariable(inputValidationInfoBorder),\n    inputValidationInfoBackground: asCssVariable(inputValidationInfoBackground),\n    inputValidationInfoForeground: asCssVariable(inputValidationInfoForeground),\n    inputValidationWarningBorder: asCssVariable(inputValidationWarningBorder),\n    inputValidationWarningBackground: asCssVariable(inputValidationWarningBackground),\n    inputValidationWarningForeground: asCssVariable(inputValidationWarningForeground),\n    inputValidationErrorBorder: asCssVariable(inputValidationErrorBorder),\n    inputValidationErrorBackground: asCssVariable(inputValidationErrorBackground),\n    inputValidationErrorForeground: asCssVariable(inputValidationErrorForeground)\n};\nexport const defaultFindWidgetStyles = {\n    listFilterWidgetBackground: asCssVariable(listFilterWidgetBackground),\n    listFilterWidgetOutline: asCssVariable(listFilterWidgetOutline),\n    listFilterWidgetNoMatchesOutline: asCssVariable(listFilterWidgetNoMatchesOutline),\n    listFilterWidgetShadow: asCssVariable(listFilterWidgetShadow),\n    inputBoxStyles: defaultInputBoxStyles,\n    toggleStyles: defaultToggleStyles\n};\nexport const defaultCountBadgeStyles = {\n    badgeBackground: asCssVariable(badgeBackground),\n    badgeForeground: asCssVariable(badgeForeground),\n    badgeBorder: asCssVariable(contrastBorder)\n};\nexport const defaultBreadcrumbsWidgetStyles = {\n    breadcrumbsBackground: asCssVariable(breadcrumbsBackground),\n    breadcrumbsForeground: asCssVariable(breadcrumbsForeground),\n    breadcrumbsHoverForeground: asCssVariable(breadcrumbsFocusForeground),\n    breadcrumbsFocusForeground: asCssVariable(breadcrumbsFocusForeground),\n    breadcrumbsFocusAndSelectionForeground: asCssVariable(breadcrumbsActiveSelectionForeground)\n};\nexport const defaultListStyles = {\n    listBackground: undefined,\n    listInactiveFocusForeground: undefined,\n    listFocusBackground: asCssVariable(listFocusBackground),\n    listFocusForeground: asCssVariable(listFocusForeground),\n    listFocusOutline: asCssVariable(listFocusOutline),\n    listActiveSelectionBackground: asCssVariable(listActiveSelectionBackground),\n    listActiveSelectionForeground: asCssVariable(listActiveSelectionForeground),\n    listActiveSelectionIconForeground: asCssVariable(listActiveSelectionIconForeground),\n    listFocusAndSelectionOutline: asCssVariable(listFocusAndSelectionOutline),\n    listFocusAndSelectionBackground: asCssVariable(listActiveSelectionBackground),\n    listFocusAndSelectionForeground: asCssVariable(listActiveSelectionForeground),\n    listInactiveSelectionBackground: asCssVariable(listInactiveSelectionBackground),\n    listInactiveSelectionIconForeground: asCssVariable(listInactiveSelectionIconForeground),\n    listInactiveSelectionForeground: asCssVariable(listInactiveSelectionForeground),\n    listInactiveFocusBackground: asCssVariable(listInactiveFocusBackground),\n    listInactiveFocusOutline: asCssVariable(listInactiveFocusOutline),\n    listHoverBackground: asCssVariable(listHoverBackground),\n    listHoverForeground: asCssVariable(listHoverForeground),\n    listDropOverBackground: asCssVariable(listDropOverBackground),\n    listDropBetweenBackground: asCssVariable(listDropBetweenBackground),\n    listSelectionOutline: asCssVariable(activeContrastBorder),\n    listHoverOutline: asCssVariable(activeContrastBorder),\n    treeIndentGuidesStroke: asCssVariable(treeIndentGuidesStroke),\n    treeInactiveIndentGuidesStroke: asCssVariable(treeInactiveIndentGuidesStroke),\n    treeStickyScrollBackground: undefined,\n    treeStickyScrollBorder: undefined,\n    treeStickyScrollShadow: asCssVariable(scrollbarShadow),\n    tableColumnsBorder: asCssVariable(tableColumnsBorder),\n    tableOddRowsBackgroundColor: asCssVariable(tableOddRowsBackgroundColor),\n};\nexport function getListStyles(override) {\n    return overrideStyles(override, defaultListStyles);\n}\nexport const defaultSelectBoxStyles = {\n    selectBackground: asCssVariable(selectBackground),\n    selectListBackground: asCssVariable(selectListBackground),\n    selectForeground: asCssVariable(selectForeground),\n    decoratorRightForeground: asCssVariable(pickerGroupForeground),\n    selectBorder: asCssVariable(selectBorder),\n    focusBorder: asCssVariable(focusBorder),\n    listFocusBackground: asCssVariable(quickInputListFocusBackground),\n    listInactiveSelectionIconForeground: asCssVariable(quickInputListFocusIconForeground),\n    listFocusForeground: asCssVariable(quickInputListFocusForeground),\n    listFocusOutline: asCssVariableWithDefault(activeContrastBorder, Color.transparent.toString()),\n    listHoverBackground: asCssVariable(listHoverBackground),\n    listHoverForeground: asCssVariable(listHoverForeground),\n    listHoverOutline: asCssVariable(activeContrastBorder),\n    selectListBorder: asCssVariable(editorWidgetBorder),\n    listBackground: undefined,\n    listActiveSelectionBackground: undefined,\n    listActiveSelectionForeground: undefined,\n    listActiveSelectionIconForeground: undefined,\n    listFocusAndSelectionBackground: undefined,\n    listDropOverBackground: undefined,\n    listDropBetweenBackground: undefined,\n    listInactiveSelectionBackground: undefined,\n    listInactiveSelectionForeground: undefined,\n    listInactiveFocusBackground: undefined,\n    listInactiveFocusOutline: undefined,\n    listSelectionOutline: undefined,\n    listFocusAndSelectionForeground: undefined,\n    listFocusAndSelectionOutline: undefined,\n    listInactiveFocusForeground: undefined,\n    tableColumnsBorder: undefined,\n    tableOddRowsBackgroundColor: undefined,\n    treeIndentGuidesStroke: undefined,\n    treeInactiveIndentGuidesStroke: undefined,\n    treeStickyScrollBackground: undefined,\n    treeStickyScrollBorder: undefined,\n    treeStickyScrollShadow: undefined\n};\nexport const defaultMenuStyles = {\n    shadowColor: asCssVariable(widgetShadow),\n    borderColor: asCssVariable(menuBorder),\n    foregroundColor: asCssVariable(menuForeground),\n    backgroundColor: asCssVariable(menuBackground),\n    selectionForegroundColor: asCssVariable(menuSelectionForeground),\n    selectionBackgroundColor: asCssVariable(menuSelectionBackground),\n    selectionBorderColor: asCssVariable(menuSelectionBorder),\n    separatorColor: asCssVariable(menuSeparatorBackground),\n    scrollbarShadow: asCssVariable(scrollbarShadow),\n    scrollbarSliderBackground: asCssVariable(scrollbarSliderBackground),\n    scrollbarSliderHoverBackground: asCssVariable(scrollbarSliderHoverBackground),\n    scrollbarSliderActiveBackground: asCssVariable(scrollbarSliderActiveBackground)\n};\n","/*---------------------------------------------------------------------------------------------\n *  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 { $, addDisposableListener, append, asCSSUrl, EventType, ModifierKeyEmitter, prepend } from '../../../base/browser/dom.js';\nimport { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js';\nimport { ActionViewItem, BaseActionViewItem, SelectActionViewItem } from '../../../base/browser/ui/actionbar/actionViewItems.js';\nimport { DropdownMenuActionViewItem } from '../../../base/browser/ui/dropdown/dropdownActionViewItem.js';\nimport { ActionRunner, Separator, SubmenuAction } from '../../../base/common/actions.js';\nimport { UILabelProvider } from '../../../base/common/keybindingLabels.js';\nimport { combinedDisposable, MutableDisposable, toDisposable } from '../../../base/common/lifecycle.js';\nimport { isLinux, isWindows, OS } from '../../../base/common/platform.js';\nimport './menuEntryActionViewItem.css';\nimport { localize } from '../../../nls.js';\nimport { IMenuService, MenuItemAction, SubmenuItemAction } from '../common/actions.js';\nimport { isICommandActionToggleInfo } from '../../action/common/action.js';\nimport { IContextKeyService } from '../../contextkey/common/contextkey.js';\nimport { IContextMenuService, IContextViewService } from '../../contextview/browser/contextView.js';\nimport { IInstantiationService } from '../../instantiation/common/instantiation.js';\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\nimport { INotificationService } from '../../notification/common/notification.js';\nimport { IStorageService } from '../../storage/common/storage.js';\nimport { IThemeService } from '../../theme/common/themeService.js';\nimport { ThemeIcon } from '../../../base/common/themables.js';\nimport { isDark } from '../../theme/common/theme.js';\nimport { assertType } from '../../../base/common/types.js';\nimport { asCssVariable, selectBorder } from '../../theme/common/colorRegistry.js';\nimport { defaultSelectBoxStyles } from '../../theme/browser/defaultStyles.js';\nimport { IAccessibilityService } from '../../accessibility/common/accessibility.js';\nexport function createAndFillInContextMenuActions(menu, optionsOrTarget, targetOrPrimaryGroup, primaryGroupOrUndefined) {\n    let target;\n    let primaryGroup;\n    let groups;\n    if (Array.isArray(menu)) {\n        groups = menu;\n        target = optionsOrTarget;\n        primaryGroup = targetOrPrimaryGroup;\n    }\n    else {\n        const options = optionsOrTarget;\n        groups = menu.getActions(options);\n        target = targetOrPrimaryGroup;\n        primaryGroup = primaryGroupOrUndefined;\n    }\n    const modifierKeyEmitter = ModifierKeyEmitter.getInstance();\n    const useAlternativeActions = modifierKeyEmitter.keyStatus.altKey || ((isWindows || isLinux) && modifierKeyEmitter.keyStatus.shiftKey);\n    fillInActions(groups, target, useAlternativeActions, primaryGroup ? actionGroup => actionGroup === primaryGroup : actionGroup => actionGroup === 'navigation');\n}\nexport function createAndFillInActionBarActions(menu, optionsOrTarget, targetOrPrimaryGroup, primaryGroupOrShouldInlineSubmenu, shouldInlineSubmenuOrUseSeparatorsInPrimaryActions, useSeparatorsInPrimaryActionsOrUndefined) {\n    let target;\n    let primaryGroup;\n    let shouldInlineSubmenu;\n    let useSeparatorsInPrimaryActions;\n    let groups;\n    if (Array.isArray(menu)) {\n        groups = menu;\n        target = optionsOrTarget;\n        primaryGroup = targetOrPrimaryGroup;\n        shouldInlineSubmenu = primaryGroupOrShouldInlineSubmenu;\n        useSeparatorsInPrimaryActions = shouldInlineSubmenuOrUseSeparatorsInPrimaryActions;\n    }\n    else {\n        const options = optionsOrTarget;\n        groups = menu.getActions(options);\n        target = targetOrPrimaryGroup;\n        primaryGroup = primaryGroupOrShouldInlineSubmenu;\n        shouldInlineSubmenu = shouldInlineSubmenuOrUseSeparatorsInPrimaryActions;\n        useSeparatorsInPrimaryActions = useSeparatorsInPrimaryActionsOrUndefined;\n    }\n    const isPrimaryAction = typeof primaryGroup === 'string' ? (actionGroup) => actionGroup === primaryGroup : primaryGroup;\n    // Action bars handle alternative actions on their own so the alternative actions should be ignored\n    fillInActions(groups, target, false, isPrimaryAction, shouldInlineSubmenu, useSeparatorsInPrimaryActions);\n}\nfunction fillInActions(groups, target, useAlternativeActions, isPrimaryAction = actionGroup => actionGroup === 'navigation', shouldInlineSubmenu = () => false, useSeparatorsInPrimaryActions = 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 (isPrimaryAction(group)) {\n            target = primaryBucket;\n            if (target.length > 0 && useSeparatorsInPrimaryActions) {\n                target.push(new Separator());\n            }\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 = isPrimaryAction(group) ? 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 (shouldInlineSubmenu(action, group, target.length)) {\n            target.splice(index, 1, ...submenuActions);\n        }\n    }\n}\nlet MenuEntryActionViewItem = class MenuEntryActionViewItem extends ActionViewItem {\n    constructor(action, _options, _keybindingService, _notificationService, _contextKeyService, _themeService, _contextMenuService, _accessibilityService) {\n        super(undefined, action, { icon: !!(action.class || action.item.icon), label: !action.class && !action.item.icon, draggable: _options?.draggable, keybinding: _options?.keybinding, hoverDelegate: _options?.hoverDelegate });\n        this._options = _options;\n        this._keybindingService = _keybindingService;\n        this._notificationService = _notificationService;\n        this._contextKeyService = _contextKeyService;\n        this._themeService = _themeService;\n        this._contextMenuService = _contextMenuService;\n        this._accessibilityService = _accessibilityService;\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    async onClick(event) {\n        event.preventDefault();\n        event.stopPropagation();\n        try {\n            await this.actionRunner.run(this._commandAction, this._context);\n        }\n        catch (err) {\n            this._notificationService.error(err);\n        }\n    }\n    render(container) {\n        super.render(container);\n        container.classList.add('menu-entry');\n        if (this.options.icon) {\n            this._updateItemClass(this._menuItemAction.item);\n        }\n        if (this._menuItemAction.alt) {\n            let isMouseOver = false;\n            const updateAltState = () => {\n                const wantsAltCommand = !!this._menuItemAction.alt?.enabled &&\n                    (!this._accessibilityService.isMotionReduced() || isMouseOver) && (this._altKey.keyStatus.altKey ||\n                    (this._altKey.keyStatus.shiftKey && isMouseOver));\n                if (wantsAltCommand !== this._wantsAltCommand) {\n                    this._wantsAltCommand = wantsAltCommand;\n                    this.updateLabel();\n                    this.updateTooltip();\n                    this.updateClass();\n                }\n            };\n            this._register(this._altKey.event(updateAltState));\n            this._register(addDisposableListener(container, 'mouseleave', _ => {\n                isMouseOver = false;\n                updateAltState();\n            }));\n            this._register(addDisposableListener(container, 'mouseenter', _ => {\n                isMouseOver = true;\n                updateAltState();\n            }));\n            updateAltState();\n        }\n    }\n    updateLabel() {\n        if (this.options.label && this.label) {\n            this.label.textContent = this._commandAction.label;\n        }\n    }\n    getTooltip() {\n        const keybinding = this._keybindingService.lookupKeybinding(this._commandAction.id, this._contextKeyService);\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?.enabled) {\n            const altTooltip = this._menuItemAction.alt.tooltip || this._menuItemAction.alt.label;\n            const altKeybinding = this._keybindingService.lookupKeybinding(this._menuItemAction.alt.id, this._contextKeyService);\n            const altKeybindingLabel = altKeybinding && altKeybinding.getLabel();\n            const altTitleSection = altKeybindingLabel\n                ? localize('titleAndKb', \"{0} ({1})\", altTooltip, altKeybindingLabel)\n                : altTooltip;\n            title = localize('titleAndKbAndAlt', \"{0}\\n[{1}] {2}\", title, UILabelProvider.modifierLabels[OS].altKey, altTitleSection);\n        }\n        return title;\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 {\n                this._updateItemClass(this._menuItemAction.item);\n            }\n        }\n    }\n    _updateItemClass(item) {\n        this._itemClassDispose.value = undefined;\n        const { element, label } = this;\n        if (!element || !label) {\n            return;\n        }\n        const icon = this._commandAction.checked && isICommandActionToggleInfo(item.toggled) && item.toggled.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            label.style.backgroundImage = (isDark(this._themeService.getColorTheme().type)\n                ? asCSSUrl(icon.dark)\n                : asCSSUrl(icon.light));\n            label.classList.add('icon');\n            this._itemClassDispose.value = combinedDisposable(toDisposable(() => {\n                label.style.backgroundImage = '';\n                label.classList.remove('icon');\n            }), this._themeService.onDidColorThemeChange(() => {\n                // refresh when the theme changes in case we go between dark <-> light\n                this.updateClass();\n            }));\n        }\n    }\n};\nMenuEntryActionViewItem = __decorate([\n    __param(2, IKeybindingService),\n    __param(3, INotificationService),\n    __param(4, IContextKeyService),\n    __param(5, IThemeService),\n    __param(6, IContextMenuService),\n    __param(7, IAccessibilityService)\n], MenuEntryActionViewItem);\nexport { MenuEntryActionViewItem };\nexport class TextOnlyMenuEntryActionViewItem extends MenuEntryActionViewItem {\n    render(container) {\n        this.options.label = true;\n        this.options.icon = false;\n        super.render(container);\n        container.classList.add('text-only');\n        container.classList.toggle('use-comma', this._options?.useComma ?? false);\n    }\n    updateLabel() {\n        const kb = this._keybindingService.lookupKeybinding(this._action.id, this._contextKeyService);\n        if (!kb) {\n            return super.updateLabel();\n        }\n        if (this.label) {\n            const kb2 = TextOnlyMenuEntryActionViewItem._symbolPrintEnter(kb);\n            if (this._options?.conversational) {\n                this.label.textContent = localize({ key: 'content2', comment: ['A label with keybindg like \"ESC to dismiss\"'] }, '{1} to {0}', this._action.label, kb2);\n            }\n            else {\n                this.label.textContent = localize({ key: 'content', comment: ['A label', 'A keybinding'] }, '{0} ({1})', this._action.label, kb2);\n            }\n        }\n    }\n    static _symbolPrintEnter(kb) {\n        return kb.getLabel()\n            ?.replace(/\\benter\\b/gi, '\\u23CE')\n            .replace(/\\bEscape\\b/gi, 'Esc');\n    }\n}\nlet SubmenuEntryActionViewItem = class SubmenuEntryActionViewItem extends DropdownMenuActionViewItem {\n    constructor(action, options, _keybindingService, _contextMenuService, _themeService) {\n        const dropdownOptions = {\n            ...options,\n            menuAsChild: options?.menuAsChild ?? false,\n            classNames: options?.classNames ?? (ThemeIcon.isThemeIcon(action.item.icon) ? ThemeIcon.asClassName(action.item.icon) : undefined),\n            keybindingProvider: options?.keybindingProvider ?? (action => _keybindingService.lookupKeybinding(action.id))\n        };\n        super(action, { getActions: () => action.actions }, _contextMenuService, dropdownOptions);\n        this._keybindingService = _keybindingService;\n        this._contextMenuService = _contextMenuService;\n        this._themeService = _themeService;\n    }\n    render(container) {\n        super.render(container);\n        assertType(this.element);\n        container.classList.add('menu-entry');\n        const action = this._action;\n        const { icon } = action.item;\n        if (icon && !ThemeIcon.isThemeIcon(icon)) {\n            this.element.classList.add('icon');\n            const setBackgroundImage = () => {\n                if (this.element) {\n                    this.element.style.backgroundImage = (isDark(this._themeService.getColorTheme().type)\n                        ? asCSSUrl(icon.dark)\n                        : asCSSUrl(icon.light));\n                }\n            };\n            setBackgroundImage();\n            this._register(this._themeService.onDidColorThemeChange(() => {\n                // refresh when the theme changes in case we go between dark <-> light\n                setBackgroundImage();\n            }));\n        }\n    }\n};\nSubmenuEntryActionViewItem = __decorate([\n    __param(2, IKeybindingService),\n    __param(3, IContextMenuService),\n    __param(4, IThemeService)\n], SubmenuEntryActionViewItem);\nexport { SubmenuEntryActionViewItem };\nlet DropdownWithDefaultActionViewItem = class DropdownWithDefaultActionViewItem extends BaseActionViewItem {\n    constructor(submenuAction, options, _keybindingService, _notificationService, _contextMenuService, _menuService, _instaService, _storageService) {\n        super(null, submenuAction);\n        this._keybindingService = _keybindingService;\n        this._notificationService = _notificationService;\n        this._contextMenuService = _contextMenuService;\n        this._menuService = _menuService;\n        this._instaService = _instaService;\n        this._storageService = _storageService;\n        this._container = null;\n        this._options = options;\n        this._storageKey = `${submenuAction.item.submenu.id}_lastActionId`;\n        // determine default action\n        let defaultAction;\n        const defaultActionId = options?.persistLastActionId ? _storageService.get(this._storageKey, 1 /* StorageScope.WORKSPACE */) : undefined;\n        if (defaultActionId) {\n            defaultAction = submenuAction.actions.find(a => defaultActionId === a.id);\n        }\n        if (!defaultAction) {\n            defaultAction = submenuAction.actions[0];\n        }\n        this._defaultAction = this._instaService.createInstance(MenuEntryActionViewItem, defaultAction, { keybinding: this._getDefaultActionKeybindingLabel(defaultAction) });\n        const dropdownOptions = {\n            keybindingProvider: action => this._keybindingService.lookupKeybinding(action.id),\n            ...options,\n            menuAsChild: options?.menuAsChild ?? true,\n            classNames: options?.classNames ?? ['codicon', 'codicon-chevron-down'],\n            actionRunner: options?.actionRunner ?? new ActionRunner(),\n        };\n        this._dropdown = new DropdownMenuActionViewItem(submenuAction, submenuAction.actions, this._contextMenuService, dropdownOptions);\n        this._register(this._dropdown.actionRunner.onDidRun((e) => {\n            if (e.action instanceof MenuItemAction) {\n                this.update(e.action);\n            }\n        }));\n    }\n    update(lastAction) {\n        if (this._options?.persistLastActionId) {\n            this._storageService.store(this._storageKey, lastAction.id, 1 /* StorageScope.WORKSPACE */, 1 /* StorageTarget.MACHINE */);\n        }\n        this._defaultAction.dispose();\n        this._defaultAction = this._instaService.createInstance(MenuEntryActionViewItem, lastAction, { keybinding: this._getDefaultActionKeybindingLabel(lastAction) });\n        this._defaultAction.actionRunner = new class extends ActionRunner {\n            async runAction(action, context) {\n                await action.run(undefined);\n            }\n        }();\n        if (this._container) {\n            this._defaultAction.render(prepend(this._container, $('.action-container')));\n        }\n    }\n    _getDefaultActionKeybindingLabel(defaultAction) {\n        let defaultActionKeybinding;\n        if (this._options?.renderKeybindingWithDefaultActionLabel) {\n            const kb = this._keybindingService.lookupKeybinding(defaultAction.id);\n            if (kb) {\n                defaultActionKeybinding = `(${kb.getLabel()})`;\n            }\n        }\n        return defaultActionKeybinding;\n    }\n    setActionContext(newContext) {\n        super.setActionContext(newContext);\n        this._defaultAction.setActionContext(newContext);\n        this._dropdown.setActionContext(newContext);\n    }\n    render(container) {\n        this._container = container;\n        super.render(this._container);\n        this._container.classList.add('monaco-dropdown-with-default');\n        const primaryContainer = $('.action-container');\n        this._defaultAction.render(append(this._container, primaryContainer));\n        this._register(addDisposableListener(primaryContainer, EventType.KEY_DOWN, (e) => {\n            const event = new StandardKeyboardEvent(e);\n            if (event.equals(17 /* KeyCode.RightArrow */)) {\n                this._defaultAction.element.tabIndex = -1;\n                this._dropdown.focus();\n                event.stopPropagation();\n            }\n        }));\n        const dropdownContainer = $('.dropdown-action-container');\n        this._dropdown.render(append(this._container, dropdownContainer));\n        this._register(addDisposableListener(dropdownContainer, EventType.KEY_DOWN, (e) => {\n            const event = new StandardKeyboardEvent(e);\n            if (event.equals(15 /* KeyCode.LeftArrow */)) {\n                this._defaultAction.element.tabIndex = 0;\n                this._dropdown.setFocusable(false);\n                this._defaultAction.element?.focus();\n                event.stopPropagation();\n            }\n        }));\n    }\n    focus(fromRight) {\n        if (fromRight) {\n            this._dropdown.focus();\n        }\n        else {\n            this._defaultAction.element.tabIndex = 0;\n            this._defaultAction.element.focus();\n        }\n    }\n    blur() {\n        this._defaultAction.element.tabIndex = -1;\n        this._dropdown.blur();\n        this._container.blur();\n    }\n    setFocusable(focusable) {\n        if (focusable) {\n            this._defaultAction.element.tabIndex = 0;\n        }\n        else {\n            this._defaultAction.element.tabIndex = -1;\n            this._dropdown.setFocusable(false);\n        }\n    }\n    dispose() {\n        this._defaultAction.dispose();\n        this._dropdown.dispose();\n        super.dispose();\n    }\n};\nDropdownWithDefaultActionViewItem = __decorate([\n    __param(2, IKeybindingService),\n    __param(3, INotificationService),\n    __param(4, IContextMenuService),\n    __param(5, IMenuService),\n    __param(6, IInstantiationService),\n    __param(7, IStorageService)\n], DropdownWithDefaultActionViewItem);\nexport { DropdownWithDefaultActionViewItem };\nlet SubmenuEntrySelectActionViewItem = class SubmenuEntrySelectActionViewItem extends SelectActionViewItem {\n    constructor(action, contextViewService) {\n        super(null, action, action.actions.map(a => ({\n            text: a.id === Separator.ID ? '\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500\\u2500' : a.label,\n            isDisabled: !a.enabled,\n        })), 0, contextViewService, defaultSelectBoxStyles, { ariaLabel: action.tooltip, optionsAsChildren: true });\n        this.select(Math.max(0, action.actions.findIndex(a => a.checked)));\n    }\n    render(container) {\n        super.render(container);\n        container.style.borderColor = asCssVariable(selectBorder);\n    }\n    runAction(option, index) {\n        const action = this.action.actions[index];\n        if (action) {\n            this.actionRunner.run(action);\n        }\n    }\n};\nSubmenuEntrySelectActionViewItem = __decorate([\n    __param(1, IContextViewService)\n], SubmenuEntrySelectActionViewItem);\n/**\n * Creates action view items for menu actions or submenu actions.\n */\nexport function createActionViewItem(instaService, action, options) {\n    if (action instanceof MenuItemAction) {\n        return instaService.createInstance(MenuEntryActionViewItem, action, options);\n    }\n    else if (action instanceof SubmenuItemAction) {\n        if (action.item.isSelection) {\n            return instaService.createInstance(SubmenuEntrySelectActionViewItem, action);\n        }\n        else {\n            if (action.item.rememberDefaultAction) {\n                return instaService.createInstance(DropdownWithDefaultActionViewItem, action, { ...options, persistLastActionId: true });\n            }\n            else {\n                return instaService.createInstance(SubmenuEntryActionViewItem, action, options);\n            }\n        }\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 *--------------------------------------------------------------------------------------------*/\nimport * as DOM from '../../dom.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { ActionViewItem, BaseActionViewItem } from './actionViewItems.js';\nimport { createInstantHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { ActionRunner, Separator } from '../../../common/actions.js';\nimport { Emitter } from '../../../common/event.js';\nimport { Disposable, DisposableMap, DisposableStore, dispose } from '../../../common/lifecycle.js';\nimport * as types from '../../../common/types.js';\nimport './actionbar.css';\nexport class ActionBar extends Disposable {\n    constructor(container, options = {}) {\n        super();\n        this._actionRunnerDisposables = this._register(new DisposableStore());\n        this.viewItemDisposables = this._register(new DisposableMap());\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({ onWillAddFirstListener: () => 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._onWillRun = this._register(new Emitter());\n        this.onWillRun = this._onWillRun.event;\n        this.options = options;\n        this._context = options.context ?? null;\n        this._orientation = this.options.orientation ?? 0 /* ActionsOrientation.HORIZONTAL */;\n        this._triggerKeys = {\n            keyDown: this.options.triggerKeys?.keyDown ?? false,\n            keys: this.options.triggerKeys?.keys ?? [3 /* KeyCode.Enter */, 10 /* KeyCode.Space */]\n        };\n        this._hoverDelegate = options.hoverDelegate ?? this._register(createInstantHoverDelegate());\n        if (this.options.actionRunner) {\n            this._actionRunner = this.options.actionRunner;\n        }\n        else {\n            this._actionRunner = new ActionRunner();\n            this._actionRunnerDisposables.add(this._actionRunner);\n        }\n        this._actionRunnerDisposables.add(this._actionRunner.onDidRun(e => this._onDidRun.fire(e)));\n        this._actionRunnerDisposables.add(this._actionRunner.onWillRun(e => this._onWillRun.fire(e)));\n        this.viewItems = [];\n        this.focusedItem = undefined;\n        this.domNode = document.createElement('div');\n        this.domNode.className = 'monaco-action-bar';\n        let previousKeys;\n        let nextKeys;\n        switch (this._orientation) {\n            case 0 /* ActionsOrientation.HORIZONTAL */:\n                previousKeys = [15 /* KeyCode.LeftArrow */];\n                nextKeys = [17 /* KeyCode.RightArrow */];\n                break;\n            case 1 /* ActionsOrientation.VERTICAL */:\n                previousKeys = [16 /* KeyCode.UpArrow */];\n                nextKeys = [18 /* KeyCode.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 /* KeyCode.Escape */) && this.cancelHasListener) {\n                this._onDidCancel.fire();\n            }\n            else if (event.equals(14 /* KeyCode.Home */)) {\n                eventHandled = this.focusFirst();\n            }\n            else if (event.equals(13 /* KeyCode.End */)) {\n                eventHandled = this.focusLast();\n            }\n            else if (event.equals(2 /* KeyCode.Tab */) && focusedItem instanceof BaseActionViewItem && focusedItem.trapsArrowNavigation) {\n                // Tab, so forcibly focus next #219199\n                eventHandled = this.focusNext(undefined, true);\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 /* KeyCode.Tab */) || event.equals(1024 /* KeyMod.Shift */ | 2 /* KeyCode.Tab */) || event.equals(16 /* KeyCode.UpArrow */) || event.equals(18 /* KeyCode.DownArrow */) || event.equals(15 /* KeyCode.LeftArrow */) || event.equals(17 /* KeyCode.RightArrow */)) {\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.previouslyFocusedItem = this.focusedItem;\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        if (this.options.highlightToggledItems) {\n            this.actionsList.classList.add('highlight-toggled');\n        }\n        this.actionsList.setAttribute('role', this.options.ariaRole || '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    refreshRole() {\n        if (this.length() >= 1) {\n            this.actionsList.setAttribute('role', this.options.ariaRole || 'toolbar');\n        }\n        else {\n            this.actionsList.setAttribute('role', 'presentation');\n        }\n    }\n    // Some action bars should not be focusable at times\n    // When an action bar is not focusable make sure to make all the elements inside it not focusable\n    // When an action bar is focusable again, make sure the first item can be focused\n    setFocusable(focusable) {\n        this.focusable = focusable;\n        if (this.focusable) {\n            const firstEnabled = this.viewItems.find(vi => vi instanceof BaseActionViewItem && vi.isEnabled());\n            if (firstEnabled instanceof BaseActionViewItem) {\n                firstEnabled.setFocusable(true);\n            }\n        }\n        else {\n            this.viewItems.forEach(vi => {\n                if (vi instanceof BaseActionViewItem) {\n                    vi.setFocusable(false);\n                }\n            });\n        }\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                this.viewItems[this.focusedItem]?.showHover?.();\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        this._actionRunner = actionRunner;\n        // when setting a new `IActionRunner` make sure to dispose old listeners and\n        // start to forward events from the new listener\n        this._actionRunnerDisposables.clear();\n        this._actionRunnerDisposables.add(this._actionRunner.onDidRun(e => this._onDidRun.fire(e)));\n        this._actionRunnerDisposables.add(this._actionRunner.onWillRun(e => this._onWillRun.fire(e)));\n        this.viewItems.forEach(item => item.actionRunner = actionRunner);\n    }\n    getContainer() {\n        return this.domNode;\n    }\n    getAction(indexOrElement) {\n        // by index\n        if (typeof indexOrElement === 'number') {\n            return this.viewItems[indexOrElement]?.action;\n        }\n        // by element\n        if (DOM.isHTMLElement(indexOrElement)) {\n            while (indexOrElement.parentElement !== this.actionsList) {\n                if (!indexOrElement.parentElement) {\n                    return undefined;\n                }\n                indexOrElement = indexOrElement.parentElement;\n            }\n            for (let i = 0; i < this.actionsList.childNodes.length; i++) {\n                if (this.actionsList.childNodes[i] === indexOrElement) {\n                    return this.viewItems[i].action;\n                }\n            }\n        }\n        return undefined;\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            let item;\n            const viewItemOptions = { hoverDelegate: this._hoverDelegate, ...options, isTabList: this.options.ariaRole === 'tablist' };\n            if (this.options.actionViewItemProvider) {\n                item = this.options.actionViewItemProvider(action, viewItemOptions);\n            }\n            if (!item) {\n                item = new ActionViewItem(this.context, action, viewItemOptions);\n            }\n            // Prevent native context menu on actions\n            if (!this.options.allowContextMenu) {\n                this.viewItemDisposables.set(item, DOM.addDisposableListener(actionViewItemElement, DOM.EventType.CONTEXT_MENU, (e) => {\n                    DOM.EventHelper.stop(e, true);\n                }));\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            }\n            else {\n                this.actionsList.insertBefore(actionViewItemElement, this.actionsList.children[index]);\n                this.viewItems.splice(index, 0, item);\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        this.refreshRole();\n    }\n    clear() {\n        if (this.isEmpty()) {\n            return;\n        }\n        this.viewItems = dispose(this.viewItems);\n        this.viewItemDisposables.clearAndDisposeAll();\n        DOM.clearNode(this.actionsList);\n        this.refreshRole();\n    }\n    length() {\n        return this.viewItems.length;\n    }\n    isEmpty() {\n        return this.viewItems.length === 0;\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(undefined, undefined, true);\n        }\n        else {\n            if (index !== undefined) {\n                this.focusedItem = index;\n            }\n            this.updateFocus(undefined, undefined, true);\n        }\n    }\n    focusFirst() {\n        this.focusedItem = this.length() - 1;\n        return this.focusNext(true);\n    }\n    focusLast() {\n        this.focusedItem = 0;\n        return this.focusPrevious(true);\n    }\n    focusNext(forceLoop, forceFocus) {\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 (!forceLoop && 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()) || item.action.id === Separator.ID));\n        this.updateFocus(undefined, undefined, forceFocus);\n        return true;\n    }\n    focusPrevious(forceLoop) {\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 (!forceLoop && 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()) || item.action.id === Separator.ID));\n        this.updateFocus(true);\n        return true;\n    }\n    updateFocus(fromRight, preventScroll, forceFocus = false) {\n        if (typeof this.focusedItem === 'undefined') {\n            this.actionsList.focus({ preventScroll });\n        }\n        if (this.previouslyFocusedItem !== undefined && this.previouslyFocusedItem !== this.focusedItem) {\n            this.viewItems[this.previouslyFocusedItem]?.blur();\n        }\n        const actionViewItem = this.focusedItem !== undefined ? this.viewItems[this.focusedItem] : undefined;\n        if (actionViewItem) {\n            let focusItem = true;\n            if (!types.isFunction(actionViewItem.focus)) {\n                focusItem = false;\n            }\n            if (this.options.focusOnlyEnabledItems && types.isFunction(actionViewItem.isEnabled) && !actionViewItem.isEnabled()) {\n                focusItem = false;\n            }\n            if (actionViewItem.action.id === Separator.ID) {\n                focusItem = false;\n            }\n            if (!focusItem) {\n                this.actionsList.focus({ preventScroll });\n                this.previouslyFocusedItem = undefined;\n            }\n            else if (forceFocus || this.previouslyFocusedItem !== this.focusedItem) {\n                actionViewItem.focus(fromRight);\n                this.previouslyFocusedItem = this.focusedItem;\n            }\n            if (focusItem) {\n                actionViewItem.showHover?.();\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    async run(action, context) {\n        await this._actionRunner.run(action, context);\n    }\n    dispose() {\n        this._context = undefined;\n        this.viewItems = dispose(this.viewItems);\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 { isFirefox } from '../../browser.js';\nimport { EventType as TouchEventType, Gesture } from '../../touch.js';\nimport { $, addDisposableListener, append, clearNode, createStyleSheet, Dimension, EventHelper, EventType, getActiveElement, getWindow, isAncestor, isInShadowDOM } from '../../dom.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { StandardMouseEvent } from '../../mouseEvent.js';\nimport { ActionBar } from '../actionbar/actionbar.js';\nimport { ActionViewItem, BaseActionViewItem } from '../actionbar/actionViewItems.js';\nimport { layout } from '../contextview/contextview.js';\nimport { DomScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { EmptySubmenuAction, Separator, SubmenuAction } from '../../../common/actions.js';\nimport { RunOnceScheduler } from '../../../common/async.js';\nimport { Codicon } from '../../../common/codicons.js';\nimport { getCodiconFontCharacters } from '../../../common/codiconsUtil.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { stripIcons } from '../../../common/iconLabels.js';\nimport { DisposableStore } from '../../../common/lifecycle.js';\nimport { isLinux, isMacintosh } from '../../../common/platform.js';\nimport * as strings from '../../../common/strings.js';\nexport const MENU_MNEMONIC_REGEX = /\\(&([^\\s&])\\)|(^|[^&])&([^\\s&])/;\nexport const MENU_ESCAPED_MNEMONIC_REGEX = /(&amp;)?(&amp;)([^\\s&])/g;\nexport var HorizontalDirection;\n(function (HorizontalDirection) {\n    HorizontalDirection[HorizontalDirection[\"Right\"] = 0] = \"Right\";\n    HorizontalDirection[HorizontalDirection[\"Left\"] = 1] = \"Left\";\n})(HorizontalDirection || (HorizontalDirection = {}));\nexport var VerticalDirection;\n(function (VerticalDirection) {\n    VerticalDirection[VerticalDirection[\"Above\"] = 0] = \"Above\";\n    VerticalDirection[VerticalDirection[\"Below\"] = 1] = \"Below\";\n})(VerticalDirection || (VerticalDirection = {}));\nexport class Menu extends ActionBar {\n    constructor(container, actions, options, menuStyles) {\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 /* ActionsOrientation.VERTICAL */,\n            actionViewItemProvider: action => this.doGetActionViewItem(action, options, parentData),\n            context: options.context,\n            actionRunner: options.actionRunner,\n            ariaLabel: options.ariaLabel,\n            ariaRole: 'menu',\n            focusOnlyEnabledItems: true,\n            triggerKeys: { keys: [3 /* KeyCode.Enter */, ...(isMacintosh || isLinux ? [10 /* KeyCode.Space */] : [])], keyDown: true }\n        });\n        this.menuStyles = menuStyles;\n        this.menuElement = menuElement;\n        this.actionsList.tabIndex = 0;\n        this.initializeOrUpdateStyleSheet(container, menuStyles);\n        this._register(Gesture.addTarget(menuElement));\n        this._register(addDisposableListener(menuElement, EventType.KEY_DOWN, (e) => {\n            const event = new StandardKeyboardEvent(e);\n            // Stop tab navigation of menus\n            if (event.equals(2 /* KeyCode.Tab */)) {\n                e.preventDefault();\n            }\n        }));\n        if (options.enableMnemonics) {\n            this._register(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 /* KeyCode.Home */) || event.equals(11 /* KeyCode.PageUp */)) {\n                    this.focusedItem = this.viewItems.length - 1;\n                    this.focusNext();\n                    EventHelper.stop(e, true);\n                }\n                else if (event.equals(13 /* KeyCode.End */) || event.equals(12 /* KeyCode.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            const 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        // Support touch on actions list to focus items (needed for submenus)\n        this._register(Gesture.addTarget(this.actionsList));\n        this._register(addDisposableListener(this.actionsList, TouchEventType.Tap, e => {\n            let target = e.initialTarget;\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        const 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 /* ScrollbarVisibility.Hidden */,\n            vertical: 3 /* ScrollbarVisibility.Visible */,\n            verticalScrollbarSize: 7,\n            handleMouseWheel: true,\n            useShadows: true\n        }));\n        const scrollElement = this.scrollableElement.getDomNode();\n        scrollElement.style.position = '';\n        this.styleScrollElement(scrollElement, menuStyles);\n        // Support scroll on menu drag\n        this._register(addDisposableListener(menuElement, TouchEventType.Change, e => {\n            EventHelper.stop(e, true);\n            const scrollTop = this.scrollableElement.getScrollPosition().scrollTop;\n            this.scrollableElement.setScrollPosition({ scrollTop: scrollTop - e.translationY });\n        }));\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        const window = getWindow(container);\n        menuElement.style.maxHeight = `${Math.max(10, window.innerHeight - container.getBoundingClientRect().top - 35)}px`;\n        actions = actions.filter((a, idx) => {\n            if (options.submenuIds?.has(a.id)) {\n                console.warn(`Found submenu cycle: ${a.id}`);\n                return false;\n            }\n            // Filter out consecutive or useless separators\n            if (a instanceof Separator) {\n                if (idx === actions.length - 1 || idx === 0) {\n                    return false;\n                }\n                const prevAction = actions[idx - 1];\n                if (prevAction instanceof Separator) {\n                    return false;\n                }\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    initializeOrUpdateStyleSheet(container, style) {\n        if (!this.styleSheet) {\n            if (isInShadowDOM(container)) {\n                this.styleSheet = createStyleSheet(container);\n            }\n            else {\n                if (!Menu.globalStyleSheet) {\n                    Menu.globalStyleSheet = createStyleSheet();\n                }\n                this.styleSheet = Menu.globalStyleSheet;\n            }\n        }\n        this.styleSheet.textContent = getMenuWidgetCSS(style, isInShadowDOM(container));\n    }\n    styleScrollElement(scrollElement, style) {\n        const fgColor = style.foregroundColor ?? '';\n        const bgColor = style.backgroundColor ?? '';\n        const border = style.borderColor ? `1px solid ${style.borderColor}` : '';\n        const borderRadius = '5px';\n        const shadow = style.shadowColor ? `0 2px 8px ${style.shadowColor}` : '';\n        scrollElement.style.outline = border;\n        scrollElement.style.borderRadius = borderRadius;\n        scrollElement.style.color = fgColor;\n        scrollElement.style.backgroundColor = bgColor;\n        scrollElement.style.boxShadow = shadow;\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            const 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, 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 }, this.menuStyles);\n        }\n        else if (action instanceof SubmenuAction) {\n            const menuActionViewItem = new SubmenuMenuActionViewItem(action, action.actions, parentData, { ...options, submenuIds: new Set([...(options.submenuIds || []), action.id]) }, this.menuStyles);\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, this.menuStyles);\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, menuStyle) {\n        options.isMenu = true;\n        super(action, action, options);\n        this.menuStyle = menuStyle;\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            const label = this.action.label;\n            if (label) {\n                const 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(getWindow(this.element), 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 timeout 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' + ThemeIcon.asCSSSelector(Codicon.menuSelection)));\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        this.applyStyle();\n    }\n    blur() {\n        super.blur();\n        this.applyStyle();\n    }\n    focus() {\n        super.focus();\n        this.item?.focus();\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.action.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                    this.item?.setAttribute('aria-keyshortcuts', (!!matches[1] ? matches[1] : matches[3]).toLocaleLowerCase());\n                }\n                else {\n                    this.label.innerText = label.replace(/&&/g, '&').trim();\n                }\n            }\n        }\n    }\n    updateTooltip() {\n        // menus should function like native menus and they do not have tooltips\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.action.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.action.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        const checked = this.action.checked;\n        this.item.classList.toggle('checked', !!checked);\n        if (checked !== undefined) {\n            this.item.setAttribute('role', 'menuitemcheckbox');\n            this.item.setAttribute('aria-checked', checked ? 'true' : 'false');\n        }\n        else {\n            this.item.setAttribute('role', 'menuitem');\n            this.item.setAttribute('aria-checked', '');\n        }\n    }\n    getMnemonic() {\n        return this.mnemonic;\n    }\n    applyStyle() {\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 outline = isSelected && this.menuStyle.selectionBorderColor ? `1px solid ${this.menuStyle.selectionBorderColor}` : '';\n        const outlineOffset = isSelected && this.menuStyle.selectionBorderColor ? `-1px` : '';\n        if (this.item) {\n            this.item.style.color = fgColor ?? '';\n            this.item.style.backgroundColor = bgColor ?? '';\n            this.item.style.outline = outline;\n            this.item.style.outlineOffset = outlineOffset;\n        }\n        if (this.check) {\n            this.check.style.color = fgColor ?? '';\n        }\n    }\n}\nclass SubmenuMenuActionViewItem extends BaseMenuActionViewItem {\n    constructor(action, submenuActions, parentData, submenuOptions, menuStyles) {\n        super(action, action, submenuOptions, menuStyles);\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 : { horizontal: HorizontalDirection.Right, vertical: VerticalDirection.Below };\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' + ThemeIcon.asCSSSelector(Codicon.menuSubmenu)));\n            this.submenuIndicator.setAttribute('aria-hidden', 'true');\n        }\n        this._register(addDisposableListener(this.element, EventType.KEY_UP, e => {\n            const event = new StandardKeyboardEvent(e);\n            if (event.equals(17 /* KeyCode.RightArrow */) || event.equals(3 /* KeyCode.Enter */)) {\n                EventHelper.stop(e, true);\n                this.createSubmenu(true);\n            }\n        }));\n        this._register(addDisposableListener(this.element, EventType.KEY_DOWN, e => {\n            const event = new StandardKeyboardEvent(e);\n            if (getActiveElement() === this.item) {\n                if (event.equals(17 /* KeyCode.RightArrow */) || event.equals(3 /* KeyCode.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            if (this.parentData.submenu === this.mysubmenu) {\n                this.parentData.parent.focus(false);\n                this.cleanupExistingSubmenu(true);\n            }\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 { }\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.horizontal === HorizontalDirection.Right ? 0 /* LayoutAnchorPosition.Before */ : 1 /* LayoutAnchorPosition.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 /* LayoutAnchorPosition.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 = getWindow(this.parentData.parent.domNode).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, this.menuStyle);\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 window = getWindow(this.element);\n            const { top, left } = this.calculateSubmenuMenuLayout(new Dimension(window.innerWidth, window.innerHeight), Dimension.lift(viewBox), entryBoxUpdated, this.expandDirection);\n            // subtract offsets caused by transform parent\n            this.submenuContainer.style.left = `${left - viewBox.left}px`;\n            this.submenuContainer.style.top = `${top - viewBox.top}px`;\n            this.submenuDisposables.add(addDisposableListener(this.submenuContainer, EventType.KEY_UP, e => {\n                const event = new StandardKeyboardEvent(e);\n                if (event.equals(15 /* KeyCode.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                const event = new StandardKeyboardEvent(e);\n                if (event.equals(15 /* KeyCode.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        if (this.item) {\n            this.item?.setAttribute('aria-expanded', value);\n        }\n    }\n    applyStyle() {\n        super.applyStyle();\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 ?? '';\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    constructor(context, action, options, menuStyles) {\n        super(context, action, options);\n        this.menuStyles = menuStyles;\n    }\n    render(container) {\n        super.render(container);\n        if (this.label) {\n            this.label.style.borderBottomColor = this.menuStyles.separatorColor ? `${this.menuStyles.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}\nexport function formatRule(c) {\n    const fontCharacter = getCodiconFontCharacters()[c.id];\n    return `.codicon-${c.id}:before { content: '\\\\${fontCharacter.toString(16)}'; }`;\n}\nfunction getMenuWidgetCSS(style, isForShadowDom) {\n    let result = /* css */ `\n.monaco-menu {\n\tfont-size: 13px;\n\tborder-radius: 5px;\n\tmin-width: 160px;\n}\n\n${formatRule(Codicon.menuSelection)}\n${formatRule(Codicon.menuSubmenu)}\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 .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\tcolor: var(--vscode-disabledForeground);\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 var(--vscode-menu-separatorBackground);\n\tpadding-top: 1px;\n\tpadding: 30px;\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\tmargin: 0 4px;\n\tborder-radius: 4px;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item:hover .keybinding,\n.monaco-menu .monaco-action-bar.vertical .action-menu-item:focus .keybinding {\n\topacity: unset;\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\twidth: 100%;\n\theight: 0px !important;\n\topacity: 1;\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.hc-black .context-view.monaco-menu-container,\n.hc-light .context-view.monaco-menu-container,\n:host-context(.hc-black) .context-view.monaco-menu-container,\n:host-context(.hc-light) .context-view.monaco-menu-container {\n\tbox-shadow: none;\n}\n\n.hc-black .monaco-menu .monaco-action-bar.vertical .action-item.focused,\n.hc-light .monaco-menu .monaco-action-bar.vertical .action-item.focused,\n:host-context(.hc-black) .monaco-menu .monaco-action-bar.vertical .action-item.focused,\n:host-context(.hc-light) .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: 4px 0;\n}\n\n.monaco-menu .monaco-action-bar.vertical .action-menu-item {\n\theight: 2em;\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\tmax-height: 100%;\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\tmargin: 5px 0 !important;\n\tpadding: 0;\n\tborder-radius: 0;\n}\n\n.linux .monaco-menu .monaco-action-bar.vertical .action-label.separator,\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.linux .monaco-menu .monaco-action-bar.vertical .submenu-indicator,\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    if (isForShadowDom) {\n        // Only define scrollbar styles when used inside shadow dom,\n        // otherwise leave their styling to the global workbench styling.\n        result += `\n\t\t\t/* Arrows */\n\t\t\t.monaco-scrollable-element > .scrollbar > .scra {\n\t\t\t\tcursor: pointer;\n\t\t\t\tfont-size: 11px !important;\n\t\t\t}\n\n\t\t\t.monaco-scrollable-element > .visible {\n\t\t\t\topacity: 1;\n\n\t\t\t\t/* Background rule added for IE9 - to allow clicks on dom node */\n\t\t\t\tbackground:rgba(0,0,0,0);\n\n\t\t\t\ttransition: opacity 100ms linear;\n\t\t\t}\n\t\t\t.monaco-scrollable-element > .invisible {\n\t\t\t\topacity: 0;\n\t\t\t\tpointer-events: none;\n\t\t\t}\n\t\t\t.monaco-scrollable-element > .invisible.fade {\n\t\t\t\ttransition: opacity 800ms linear;\n\t\t\t}\n\n\t\t\t/* Scrollable Content Inset Shadow */\n\t\t\t.monaco-scrollable-element > .shadow {\n\t\t\t\tposition: absolute;\n\t\t\t\tdisplay: none;\n\t\t\t}\n\t\t\t.monaco-scrollable-element > .shadow.top {\n\t\t\t\tdisplay: block;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 3px;\n\t\t\t\theight: 3px;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t.monaco-scrollable-element > .shadow.left {\n\t\t\t\tdisplay: block;\n\t\t\t\ttop: 3px;\n\t\t\t\tleft: 0;\n\t\t\t\theight: 100%;\n\t\t\t\twidth: 3px;\n\t\t\t}\n\t\t\t.monaco-scrollable-element > .shadow.top-left-corner {\n\t\t\t\tdisplay: block;\n\t\t\t\ttop: 0;\n\t\t\t\tleft: 0;\n\t\t\t\theight: 3px;\n\t\t\t\twidth: 3px;\n\t\t\t}\n\t\t`;\n        // Scrollbars\n        const scrollbarShadowColor = style.scrollbarShadow;\n        if (scrollbarShadowColor) {\n            result += `\n\t\t\t\t.monaco-scrollable-element > .shadow.top {\n\t\t\t\t\tbox-shadow: ${scrollbarShadowColor} 0 6px 6px -6px inset;\n\t\t\t\t}\n\n\t\t\t\t.monaco-scrollable-element > .shadow.left {\n\t\t\t\t\tbox-shadow: ${scrollbarShadowColor} 6px 0 6px -6px inset;\n\t\t\t\t}\n\n\t\t\t\t.monaco-scrollable-element > .shadow.top.left {\n\t\t\t\t\tbox-shadow: ${scrollbarShadowColor} 6px 6px 6px -6px inset;\n\t\t\t\t}\n\t\t\t`;\n        }\n        const scrollbarSliderBackgroundColor = style.scrollbarSliderBackground;\n        if (scrollbarSliderBackgroundColor) {\n            result += `\n\t\t\t\t.monaco-scrollable-element > .scrollbar > .slider {\n\t\t\t\t\tbackground: ${scrollbarSliderBackgroundColor};\n\t\t\t\t}\n\t\t\t`;\n        }\n        const scrollbarSliderHoverBackgroundColor = style.scrollbarSliderHoverBackground;\n        if (scrollbarSliderHoverBackgroundColor) {\n            result += `\n\t\t\t\t.monaco-scrollable-element > .scrollbar > .slider:hover {\n\t\t\t\t\tbackground: ${scrollbarSliderHoverBackgroundColor};\n\t\t\t\t}\n\t\t\t`;\n        }\n        const scrollbarSliderActiveBackgroundColor = style.scrollbarSliderActiveBackground;\n        if (scrollbarSliderActiveBackgroundColor) {\n            result += `\n\t\t\t\t.monaco-scrollable-element > .scrollbar > .slider.active {\n\t\t\t\t\tbackground: ${scrollbarSliderActiveBackgroundColor};\n\t\t\t\t}\n\t\t\t`;\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 *--------------------------------------------------------------------------------------------*/\nimport { $, addDisposableListener, EventType, getActiveElement, getWindow, isAncestor, isHTMLElement } from '../../../base/browser/dom.js';\nimport { StandardMouseEvent } from '../../../base/browser/mouseEvent.js';\nimport { Menu } from '../../../base/browser/ui/menu/menu.js';\nimport { ActionRunner } from '../../../base/common/actions.js';\nimport { isCancellationError } from '../../../base/common/errors.js';\nimport { combinedDisposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { defaultMenuStyles } from '../../theme/browser/defaultStyles.js';\nexport class ContextMenuHandler {\n    constructor(contextViewService, telemetryService, notificationService, keybindingService) {\n        this.contextViewService = contextViewService;\n        this.telemetryService = telemetryService;\n        this.notificationService = notificationService;\n        this.keybindingService = keybindingService;\n        this.focusToReturn = null;\n        this.lastContainer = null;\n        this.block = null;\n        this.blockDisposable = 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 = getActiveElement();\n        let menu;\n        const 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                this.lastContainer = container;\n                const 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                    this.blockDisposable?.dispose();\n                    this.blockDisposable = addDisposableListener(this.block, EventType.MOUSE_DOWN, e => e.stopPropagation());\n                }\n                const menuDisposables = new DisposableStore();\n                const actionRunner = delegate.actionRunner || new ActionRunner();\n                actionRunner.onWillRun(evt => this.onActionRun(evt, !delegate.skipTelemetry), 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                }, defaultMenuStyles);\n                menu.onDidCancel(() => this.contextViewService.hideContextView(true), null, menuDisposables);\n                menu.onDidBlur(() => this.contextViewService.hideContextView(true), null, menuDisposables);\n                const targetWindow = getWindow(container);\n                menuDisposables.add(addDisposableListener(targetWindow, EventType.BLUR, () => this.contextViewService.hideContextView(true)));\n                menuDisposables.add(addDisposableListener(targetWindow, EventType.MOUSE_DOWN, (e) => {\n                    if (e.defaultPrevented) {\n                        return;\n                    }\n                    const event = new StandardMouseEvent(targetWindow, 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                }));\n                return combinedDisposable(menuDisposables, menu);\n            },\n            focus: () => {\n                menu?.focus(!!delegate.autoSelectFirstItem);\n            },\n            onHide: (didCancel) => {\n                delegate.onHide?.(!!didCancel);\n                if (this.block) {\n                    this.block.remove();\n                    this.block = null;\n                }\n                this.blockDisposable?.dispose();\n                this.blockDisposable = null;\n                if (!!this.lastContainer && (getActiveElement() === this.lastContainer || isAncestor(getActiveElement(), this.lastContainer))) {\n                    this.focusToReturn?.focus();\n                }\n                this.lastContainer = null;\n            }\n        }, shadowRootElement, !!shadowRootElement);\n    }\n    onActionRun(e, logTelemetry) {\n        if (logTelemetry) {\n            this.telemetryService.publicLog2('workbenchActionExecuted', { id: e.action.id, from: 'contextMenu' });\n        }\n        this.contextViewService.hideContextView(false);\n    }\n    onDidActionRun(e) {\n        if (e.error && !isCancellationError(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 { ModifierKeyEmitter } from '../../../base/browser/dom.js';\nimport { Separator } from '../../../base/common/actions.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { createAndFillInContextMenuActions } from '../../actions/browser/menuEntryActionViewItem.js';\nimport { IMenuService, MenuId } from '../../actions/common/actions.js';\nimport { IContextKeyService } from '../../contextkey/common/contextkey.js';\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\nimport { INotificationService } from '../../notification/common/notification.js';\nimport { ITelemetryService } from '../../telemetry/common/telemetry.js';\nimport { ContextMenuHandler } from './contextMenuHandler.js';\nimport { IContextViewService } from './contextView.js';\nlet ContextMenuService = class ContextMenuService extends Disposable {\n    get contextMenuHandler() {\n        if (!this._contextMenuHandler) {\n            this._contextMenuHandler = new ContextMenuHandler(this.contextViewService, this.telemetryService, this.notificationService, this.keybindingService);\n        }\n        return this._contextMenuHandler;\n    }\n    constructor(telemetryService, notificationService, contextViewService, keybindingService, menuService, contextKeyService) {\n        super();\n        this.telemetryService = telemetryService;\n        this.notificationService = notificationService;\n        this.contextViewService = contextViewService;\n        this.keybindingService = keybindingService;\n        this.menuService = menuService;\n        this.contextKeyService = contextKeyService;\n        this._contextMenuHandler = undefined;\n        this._onDidShowContextMenu = this._store.add(new Emitter());\n        this.onDidShowContextMenu = this._onDidShowContextMenu.event;\n        this._onDidHideContextMenu = this._store.add(new Emitter());\n    }\n    configure(options) {\n        this.contextMenuHandler.configure(options);\n    }\n    // ContextMenu\n    showContextMenu(delegate) {\n        delegate = ContextMenuMenuDelegate.transform(delegate, this.menuService, this.contextKeyService);\n        this.contextMenuHandler.showContextMenu({\n            ...delegate,\n            onHide: (didCancel) => {\n                delegate.onHide?.(didCancel);\n                this._onDidHideContextMenu.fire();\n            }\n        });\n        ModifierKeyEmitter.getInstance().resetKeyStatus();\n        this._onDidShowContextMenu.fire();\n    }\n};\nContextMenuService = __decorate([\n    __param(0, ITelemetryService),\n    __param(1, INotificationService),\n    __param(2, IContextViewService),\n    __param(3, IKeybindingService),\n    __param(4, IMenuService),\n    __param(5, IContextKeyService)\n], ContextMenuService);\nexport { ContextMenuService };\nexport var ContextMenuMenuDelegate;\n(function (ContextMenuMenuDelegate) {\n    function is(thing) {\n        return thing && thing.menuId instanceof MenuId;\n    }\n    function transform(delegate, menuService, globalContextKeyService) {\n        if (!is(delegate)) {\n            return delegate;\n        }\n        const { menuId, menuActionOptions, contextKeyService } = delegate;\n        return {\n            ...delegate,\n            getActions: () => {\n                const target = [];\n                if (menuId) {\n                    const menu = menuService.getMenuActions(menuId, contextKeyService ?? globalContextKeyService, menuActionOptions);\n                    createAndFillInContextMenuActions(menu, target);\n                }\n                if (!delegate.getActions) {\n                    return target;\n                }\n                else {\n                    return Separator.join(delegate.getActions(), target);\n                }\n            }\n        };\n    }\n    ContextMenuMenuDelegate.transform = transform;\n})(ContextMenuMenuDelegate || (ContextMenuMenuDelegate = {}));\n","/*---------------------------------------------------------------------------------------------\n *  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 EditorOpenSource;\n(function (EditorOpenSource) {\n    /**\n     * Default: the editor is opening via a programmatic call\n     * to the editor service API.\n     */\n    EditorOpenSource[EditorOpenSource[\"API\"] = 0] = \"API\";\n    /**\n     * Indicates that a user action triggered the opening, e.g.\n     * via mouse or keyboard use.\n     */\n    EditorOpenSource[EditorOpenSource[\"USER\"] = 1] = \"USER\";\n})(EditorOpenSource || (EditorOpenSource = {}));\n","/*---------------------------------------------------------------------------------------------\n *  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 { mainWindow } from '../../../base/browser/window.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 { matchesScheme, matchesSomeScheme, 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 { EditorOpenSource } from '../../../platform/editor/common/editor.js';\nimport { extractSelection } from '../../../platform/opener/common/opener.js';\nlet CommandOpener = class CommandOpener {\n    constructor(_commandService) {\n        this._commandService = _commandService;\n    }\n    async open(target, options) {\n        if (!matchesScheme(target, Schemas.command)) {\n            return false;\n        }\n        if (!options?.allowCommands) {\n            // silently ignore commands when command-links are disabled, also\n            // suppress other openers by returning TRUE\n            return true;\n        }\n        if (typeof target === 'string') {\n            target = URI.parse(target);\n        }\n        if (Array.isArray(options.allowCommands)) {\n            // Only allow specific commands\n            if (!options.allowCommands.includes(target.path)) {\n                // Suppress other openers by returning TRUE\n                return true;\n            }\n        }\n        // execute as command\n        let args = [];\n        try {\n            args = parse(decodeURIComponent(target.query));\n        }\n        catch {\n            // ignore and retry\n            try {\n                args = parse(target.query);\n            }\n            catch {\n                // ignore error\n            }\n        }\n        if (!Array.isArray(args)) {\n            args = [args];\n        }\n        await this._commandService.executeCommand(target.path, ...args);\n        return true;\n    }\n};\nCommandOpener = __decorate([\n    __param(0, ICommandService)\n], CommandOpener);\nlet EditorOpener = class EditorOpener {\n    constructor(_editorService) {\n        this._editorService = _editorService;\n    }\n    async open(target, options) {\n        if (typeof target === 'string') {\n            target = URI.parse(target);\n        }\n        const { selection, uri } = extractSelection(target);\n        target = uri;\n        if (target.scheme === Schemas.file) {\n            target = normalizePath(target); // workaround for non-normalized paths (https://github.com/microsoft/vscode/issues/12954)\n        }\n        await this._editorService.openCodeEditor({\n            resource: target,\n            options: {\n                selection,\n                source: options?.fromUserGesture ? EditorOpenSource.USER : EditorOpenSource.API,\n                ...options?.editorOptions\n            }\n        }, this._editorService.getFocusedCodeEditor(), options?.openToSide);\n        return true;\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: async (href) => {\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 (matchesSomeScheme(href, Schemas.http, Schemas.https)) {\n                    dom.windowOpenNoOpener(href);\n                }\n                else {\n                    mainWindow.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: async (target, options) => {\n                if (options?.openExternal || matchesSomeScheme(target, Schemas.mailto, Schemas.http, Schemas.https, Schemas.vsls)) {\n                    // open externally\n                    await 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    async open(target, options) {\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 = this._resolvedUriTargets.get(targetURI) ?? target;\n        for (const validator of this._validators) {\n            if (!(await validator.shouldOpen(validationTarget, options))) {\n                return false;\n            }\n        }\n        // check with contributed openers\n        for (const opener of this._openers) {\n            const handled = await opener.open(target, options);\n            if (handled) {\n                return true;\n            }\n        }\n        return false;\n    }\n    async resolveExternalUri(resource, options) {\n        for (const resolver of this._resolvers) {\n            try {\n                const result = await 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            catch {\n                // noop\n            }\n        }\n        throw new Error('Could not resolve external URI: ' + resource.toString());\n    }\n    async _doOpenExternal(resource, options) {\n        //todo@jrieken IExternalUriResolver should support `uri: URI | string`\n        const uri = typeof resource === 'string' ? URI.parse(resource) : resource;\n        let externalUri;\n        try {\n            externalUri = (await this.resolveExternalUri(uri, options)).resolved;\n        }\n        catch {\n            externalUri = uri;\n        }\n        let href;\n        if (typeof resource === 'string' && uri.toString() === externalUri.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(externalUri.toString(true));\n        }\n        if (options?.allowContributedOpeners) {\n            const preferredOpenerId = typeof options?.allowContributedOpeners === 'string' ? options?.allowContributedOpeners : undefined;\n            for (const opener of this._externalOpeners) {\n                const didOpen = await 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    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 { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const IEditorWorkerService = createDecorator('editorWorkerService');\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { localize } from '../../../nls.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.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        const 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 * as nls from '../../../nls.js';\nimport { Color, RGBA } from '../../../base/common/color.js';\nimport { activeContrastBorder, editorBackground, registerColor, editorWarningForeground, editorInfoForeground, editorWarningBorder, editorInfoBorder, contrastBorder, editorFindMatchHighlight, editorWarningBackground } 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', 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', hcDark: '#f38518', hcLight: contrastBorder }, 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', hcDark: null, hcLight: 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, hcDark: activeContrastBorder, hcLight: activeContrastBorder }, nls.localize('rangeHighlightBorder', 'Background color of the border around highlighted ranges.'));\nexport const editorSymbolHighlight = registerColor('editor.symbolHighlightBackground', { dark: editorFindMatchHighlight, light: editorFindMatchHighlight, hcDark: null, hcLight: 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, hcDark: activeContrastBorder, hcLight: activeContrastBorder }, nls.localize('symbolHighlightBorder', 'Background color of the border around highlighted symbols.'));\nexport const editorCursorForeground = registerColor('editorCursor.foreground', { dark: '#AEAFAD', light: Color.black, hcDark: Color.white, hcLight: '#0F4A85' }, 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 editorMultiCursorPrimaryForeground = registerColor('editorMultiCursor.primary.foreground', editorCursorForeground, nls.localize('editorMultiCursorPrimaryForeground', 'Color of the primary editor cursor when multiple cursors are present.'));\nexport const editorMultiCursorPrimaryBackground = registerColor('editorMultiCursor.primary.background', editorCursorBackground, nls.localize('editorMultiCursorPrimaryBackground', 'The background color of the primary editor cursor when multiple cursors are present. Allows customizing the color of a character overlapped by a block cursor.'));\nexport const editorMultiCursorSecondaryForeground = registerColor('editorMultiCursor.secondary.foreground', editorCursorForeground, nls.localize('editorMultiCursorSecondaryForeground', 'Color of secondary editor cursors when multiple cursors are present.'));\nexport const editorMultiCursorSecondaryBackground = registerColor('editorMultiCursor.secondary.background', editorCursorBackground, nls.localize('editorMultiCursorSecondaryBackground', 'The background color of secondary editor cursors when multiple cursors are present. Allows customizing the color of a character overlapped by a block cursor.'));\nexport const editorWhitespaces = registerColor('editorWhitespace.foreground', { dark: '#e3e4e229', light: '#33333333', hcDark: '#e3e4e229', hcLight: '#CCCCCC' }, nls.localize('editorWhitespaces', 'Color of whitespace characters in the editor.'));\nexport const editorLineNumbers = registerColor('editorLineNumber.foreground', { dark: '#858585', light: '#237893', hcDark: Color.white, hcLight: '#292929' }, nls.localize('editorLineNumbers', 'Color of editor line numbers.'));\nexport const deprecatedEditorIndentGuides = registerColor('editorIndentGuide.background', editorWhitespaces, nls.localize('editorIndentGuides', 'Color of the editor indentation guides.'), false, nls.localize('deprecatedEditorIndentGuides', '\\'editorIndentGuide.background\\' is deprecated. Use \\'editorIndentGuide.background1\\' instead.'));\nexport const deprecatedEditorActiveIndentGuides = registerColor('editorIndentGuide.activeBackground', editorWhitespaces, nls.localize('editorActiveIndentGuide', 'Color of the active editor indentation guides.'), false, nls.localize('deprecatedEditorActiveIndentGuide', '\\'editorIndentGuide.activeBackground\\' is deprecated. Use \\'editorIndentGuide.activeBackground1\\' instead.'));\nexport const editorIndentGuide1 = registerColor('editorIndentGuide.background1', deprecatedEditorIndentGuides, nls.localize('editorIndentGuides1', 'Color of the editor indentation guides (1).'));\nexport const editorIndentGuide2 = registerColor('editorIndentGuide.background2', '#00000000', nls.localize('editorIndentGuides2', 'Color of the editor indentation guides (2).'));\nexport const editorIndentGuide3 = registerColor('editorIndentGuide.background3', '#00000000', nls.localize('editorIndentGuides3', 'Color of the editor indentation guides (3).'));\nexport const editorIndentGuide4 = registerColor('editorIndentGuide.background4', '#00000000', nls.localize('editorIndentGuides4', 'Color of the editor indentation guides (4).'));\nexport const editorIndentGuide5 = registerColor('editorIndentGuide.background5', '#00000000', nls.localize('editorIndentGuides5', 'Color of the editor indentation guides (5).'));\nexport const editorIndentGuide6 = registerColor('editorIndentGuide.background6', '#00000000', nls.localize('editorIndentGuides6', 'Color of the editor indentation guides (6).'));\nexport const editorActiveIndentGuide1 = registerColor('editorIndentGuide.activeBackground1', deprecatedEditorActiveIndentGuides, nls.localize('editorActiveIndentGuide1', 'Color of the active editor indentation guides (1).'));\nexport const editorActiveIndentGuide2 = registerColor('editorIndentGuide.activeBackground2', '#00000000', nls.localize('editorActiveIndentGuide2', 'Color of the active editor indentation guides (2).'));\nexport const editorActiveIndentGuide3 = registerColor('editorIndentGuide.activeBackground3', '#00000000', nls.localize('editorActiveIndentGuide3', 'Color of the active editor indentation guides (3).'));\nexport const editorActiveIndentGuide4 = registerColor('editorIndentGuide.activeBackground4', '#00000000', nls.localize('editorActiveIndentGuide4', 'Color of the active editor indentation guides (4).'));\nexport const editorActiveIndentGuide5 = registerColor('editorIndentGuide.activeBackground5', '#00000000', nls.localize('editorActiveIndentGuide5', 'Color of the active editor indentation guides (5).'));\nexport const editorActiveIndentGuide6 = registerColor('editorIndentGuide.activeBackground6', '#00000000', nls.localize('editorActiveIndentGuide6', 'Color of the active editor indentation guides (6).'));\nconst deprecatedEditorActiveLineNumber = registerColor('editorActiveLineNumber.foreground', { dark: '#c6c6c6', light: '#0B216F', hcDark: activeContrastBorder, hcLight: 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', deprecatedEditorActiveLineNumber, nls.localize('editorActiveLineNumber', 'Color of editor active line number'));\nexport const editorDimmedLineNumber = registerColor('editorLineNumber.dimmedForeground', null, nls.localize('editorDimmedLineNumber', 'Color of the final editor line when editor.renderFinalNewline is set to dimmed.'));\nexport const editorRuler = registerColor('editorRuler.foreground', { dark: '#5A5A5A', light: Color.lightgrey, hcDark: Color.white, hcLight: '#292929' }, nls.localize('editorRuler', 'Color of the editor rulers.'));\nexport const editorCodeLensForeground = registerColor('editorCodeLens.foreground', { dark: '#999999', light: '#919191', hcDark: '#999999', hcLight: '#292929' }, nls.localize('editorCodeLensForeground', 'Foreground color of editor CodeLens'));\nexport const editorBracketMatchBackground = registerColor('editorBracketMatch.background', { dark: '#0064001a', light: '#0064001a', hcDark: '#0064001a', hcLight: '#0000' }, nls.localize('editorBracketMatchBackground', 'Background color behind matching brackets'));\nexport const editorBracketMatchBorder = registerColor('editorBracketMatch.border', { dark: '#888', light: '#B9B9B9', hcDark: contrastBorder, hcLight: contrastBorder }, nls.localize('editorBracketMatchBorder', 'Color for matching brackets boxes'));\nexport const editorOverviewRulerBorder = registerColor('editorOverviewRuler.border', { dark: '#7f7f7f4d', light: '#7f7f7f4d', hcDark: '#7f7f7f4d', hcLight: '#666666' }, 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.'));\nexport const editorGutter = registerColor('editorGutter.background', 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, hcDark: Color.fromHex('#fff').transparent(0.8), hcLight: contrastBorder }, 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'), hcDark: null, hcLight: 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.'));\nexport const ghostTextBorder = registerColor('editorGhostText.border', { dark: null, light: null, hcDark: Color.fromHex('#fff').transparent(0.8), hcLight: Color.fromHex('#292929').transparent(0.8) }, nls.localize('editorGhostTextBorder', 'Border color of ghost text in the editor.'));\nexport const ghostTextForeground = registerColor('editorGhostText.foreground', { dark: Color.fromHex('#ffffff56'), light: Color.fromHex('#0007'), hcDark: null, hcLight: null }, nls.localize('editorGhostTextForeground', 'Foreground color of the ghost text in the editor.'));\nexport const ghostTextBackground = registerColor('editorGhostText.background', null, nls.localize('editorGhostTextBackground', 'Background color of the ghost text in the editor.'));\nconst rulerRangeDefault = new Color(new RGBA(0, 122, 204, 0.6));\nexport const overviewRulerRangeHighlight = registerColor('editorOverviewRuler.rangeHighlightForeground', 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)), hcDark: new Color(new RGBA(255, 50, 50, 1)), hcLight: '#B5200D' }, nls.localize('overviewRuleError', 'Overview ruler marker color for errors.'));\nexport const overviewRulerWarning = registerColor('editorOverviewRuler.warningForeground', { dark: editorWarningForeground, light: editorWarningForeground, hcDark: editorWarningBorder, hcLight: editorWarningBorder }, nls.localize('overviewRuleWarning', 'Overview ruler marker color for warnings.'));\nexport const overviewRulerInfo = registerColor('editorOverviewRuler.infoForeground', { dark: editorInfoForeground, light: editorInfoForeground, hcDark: editorInfoBorder, hcLight: editorInfoBorder }, nls.localize('overviewRuleInfo', 'Overview ruler marker color for infos.'));\nexport const editorBracketHighlightingForeground1 = registerColor('editorBracketHighlight.foreground1', { dark: '#FFD700', light: '#0431FAFF', hcDark: '#FFD700', hcLight: '#0431FAFF' }, nls.localize('editorBracketHighlightForeground1', 'Foreground color of brackets (1). Requires enabling bracket pair colorization.'));\nexport const editorBracketHighlightingForeground2 = registerColor('editorBracketHighlight.foreground2', { dark: '#DA70D6', light: '#319331FF', hcDark: '#DA70D6', hcLight: '#319331FF' }, nls.localize('editorBracketHighlightForeground2', 'Foreground color of brackets (2). Requires enabling bracket pair colorization.'));\nexport const editorBracketHighlightingForeground3 = registerColor('editorBracketHighlight.foreground3', { dark: '#179FFF', light: '#7B3814FF', hcDark: '#87CEFA', hcLight: '#7B3814FF' }, nls.localize('editorBracketHighlightForeground3', 'Foreground color of brackets (3). Requires enabling bracket pair colorization.'));\nexport const editorBracketHighlightingForeground4 = registerColor('editorBracketHighlight.foreground4', '#00000000', nls.localize('editorBracketHighlightForeground4', 'Foreground color of brackets (4). Requires enabling bracket pair colorization.'));\nexport const editorBracketHighlightingForeground5 = registerColor('editorBracketHighlight.foreground5', '#00000000', nls.localize('editorBracketHighlightForeground5', 'Foreground color of brackets (5). Requires enabling bracket pair colorization.'));\nexport const editorBracketHighlightingForeground6 = registerColor('editorBracketHighlight.foreground6', '#00000000', nls.localize('editorBracketHighlightForeground6', 'Foreground color of brackets (6). Requires enabling bracket pair colorization.'));\nexport const editorBracketHighlightingUnexpectedBracketForeground = registerColor('editorBracketHighlight.unexpectedBracket.foreground', { dark: new Color(new RGBA(255, 18, 18, 0.8)), light: new Color(new RGBA(255, 18, 18, 0.8)), hcDark: 'new Color(new RGBA(255, 50, 50, 1))', hcLight: '#B5200D' }, nls.localize('editorBracketHighlightUnexpectedBracketForeground', 'Foreground color of unexpected brackets.'));\nexport const editorBracketPairGuideBackground1 = registerColor('editorBracketPairGuide.background1', '#00000000', nls.localize('editorBracketPairGuide.background1', 'Background color of inactive bracket pair guides (1). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideBackground2 = registerColor('editorBracketPairGuide.background2', '#00000000', nls.localize('editorBracketPairGuide.background2', 'Background color of inactive bracket pair guides (2). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideBackground3 = registerColor('editorBracketPairGuide.background3', '#00000000', nls.localize('editorBracketPairGuide.background3', 'Background color of inactive bracket pair guides (3). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideBackground4 = registerColor('editorBracketPairGuide.background4', '#00000000', nls.localize('editorBracketPairGuide.background4', 'Background color of inactive bracket pair guides (4). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideBackground5 = registerColor('editorBracketPairGuide.background5', '#00000000', nls.localize('editorBracketPairGuide.background5', 'Background color of inactive bracket pair guides (5). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideBackground6 = registerColor('editorBracketPairGuide.background6', '#00000000', nls.localize('editorBracketPairGuide.background6', 'Background color of inactive bracket pair guides (6). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideActiveBackground1 = registerColor('editorBracketPairGuide.activeBackground1', '#00000000', nls.localize('editorBracketPairGuide.activeBackground1', 'Background color of active bracket pair guides (1). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideActiveBackground2 = registerColor('editorBracketPairGuide.activeBackground2', '#00000000', nls.localize('editorBracketPairGuide.activeBackground2', 'Background color of active bracket pair guides (2). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideActiveBackground3 = registerColor('editorBracketPairGuide.activeBackground3', '#00000000', nls.localize('editorBracketPairGuide.activeBackground3', 'Background color of active bracket pair guides (3). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideActiveBackground4 = registerColor('editorBracketPairGuide.activeBackground4', '#00000000', nls.localize('editorBracketPairGuide.activeBackground4', 'Background color of active bracket pair guides (4). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideActiveBackground5 = registerColor('editorBracketPairGuide.activeBackground5', '#00000000', nls.localize('editorBracketPairGuide.activeBackground5', 'Background color of active bracket pair guides (5). Requires enabling bracket pair guides.'));\nexport const editorBracketPairGuideActiveBackground6 = registerColor('editorBracketPairGuide.activeBackground6', '#00000000', nls.localize('editorBracketPairGuide.activeBackground6', 'Background color of active bracket pair guides (6). Requires enabling bracket pair guides.'));\nexport const editorUnicodeHighlightBorder = registerColor('editorUnicodeHighlight.border', editorWarningForeground, nls.localize('editorUnicodeHighlight.border', 'Border color used to highlight unicode characters.'));\nexport const editorUnicodeHighlightBackground = registerColor('editorUnicodeHighlight.background', editorWarningBackground, nls.localize('editorUnicodeHighlight.background', 'Background color used to highlight unicode characters.'));\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    const lineHighlight = theme.getColor(editorLineHighlight);\n    const imeBackground = (lineHighlight && !lineHighlight.isTransparent() ? lineHighlight : background);\n    if (imeBackground) {\n        collector.addRule(`.monaco-editor .inputarea.ime-input { background-color: ${imeBackground}; }`);\n    }\n});\n","/*---------------------------------------------------------------------------------------------\n *  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 diffSets(before, after) {\n    const removed = [];\n    const added = [];\n    for (const element of before) {\n        if (!after.has(element)) {\n            removed.push(element);\n        }\n    }\n    for (const element of after) {\n        if (!before.has(element)) {\n            added.push(element);\n        }\n    }\n    return { removed, added };\n}\n/**\n * Computes the intersection of two sets.\n *\n * @param setA - The first set.\n * @param setB - The second iterable.\n * @returns A new set containing the elements that are in both `setA` and `setB`.\n */\nexport function intersection(setA, setB) {\n    const result = new Set();\n    for (const elem of setB) {\n        if (setA.has(elem)) {\n            result.add(elem);\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 __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 } from '../model.js';\nimport { themeColorFromId } from '../../../platform/theme/common/themeService.js';\nimport { overviewRulerWarning, overviewRulerInfo, overviewRulerError } from '../core/editorColorRegistry.js';\nimport { IModelService } from './model.js';\nimport { Range } from '../core/range.js';\nimport { Schemas } from '../../../base/common/network.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { minimapInfo, minimapWarning, minimapError } from '../../../platform/theme/common/colorRegistry.js';\nimport { BidirectionalMap, ResourceMap } from '../../../base/common/map.js';\nimport { diffSets } from '../../../base/common/collections.js';\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 ResourceMap();\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(uri);\n        return markerDecorations ? (markerDecorations.getMarker(decoration) || null) : null;\n    }\n    _handleMarkerChange(changedResources) {\n        changedResources.forEach((resource) => {\n            const markerDecorations = this._markerDecorations.get(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.uri, markerDecorations);\n        this._updateDecorations(markerDecorations);\n    }\n    _onModelRemoved(model) {\n        const markerDecorations = this._markerDecorations.get(model.uri);\n        if (markerDecorations) {\n            markerDecorations.dispose();\n            this._markerDecorations.delete(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            this._markerService?.read({ resource: model.uri }).map(marker => marker.owner).forEach(owner => this._markerService.remove(owner, [model.uri]));\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        if (markerDecorations.update(markers)) {\n            this._onDidChangeMarker.fire(markerDecorations.model);\n        }\n    }\n};\nMarkerDecorationsService = __decorate([\n    __param(0, IModelService),\n    __param(1, IMarkerService)\n], MarkerDecorationsService);\nexport { MarkerDecorationsService };\nclass MarkerDecorations extends Disposable {\n    constructor(model) {\n        super();\n        this.model = model;\n        this._map = new BidirectionalMap();\n        this._register(toDisposable(() => {\n            this.model.deltaDecorations([...this._map.values()], []);\n            this._map.clear();\n        }));\n    }\n    update(markers) {\n        // We use the fact that marker instances are not recreated when different owners\n        // update. So we can compare references to find out what changed since the last update.\n        const { added, removed } = diffSets(new Set(this._map.keys()), new Set(markers));\n        if (added.length === 0 && removed.length === 0) {\n            return false;\n        }\n        const oldIds = removed.map(marker => this._map.get(marker));\n        const newDecorations = added.map(marker => {\n            return {\n                range: this._createDecorationRange(this.model, marker),\n                options: this._createDecorationOption(marker)\n            };\n        });\n        const ids = this.model.deltaDecorations(oldIds, newDecorations);\n        for (const removedMarker of removed) {\n            this._map.delete(removedMarker);\n        }\n        for (let index = 0; index < ids.length; index++) {\n            this._map.set(added[index], ids[index]);\n        }\n        return true;\n    }\n    getMarker(decoration) {\n        return this._map.getKey(decoration.id);\n    }\n    _createDecorationRange(model, rawMarker) {\n        let ret = Range.lift(rawMarker);\n        if (rawMarker.severity === MarkerSeverity.Hint && !this._hasMarkerTag(rawMarker, 1 /* MarkerTag.Unnecessary */) && !this._hasMarkerTag(rawMarker, 2 /* MarkerTag.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            const maxColumn = model.getLineLastNonWhitespaceColumn(ret.startLineNumber) ||\n                model.getLineMaxColumn(ret.startLineNumber);\n            if (maxColumn === 1 || ret.endColumn >= maxColumn) {\n                // empty line or behind eol\n                // keep the range as is, it will be rendered 1ch wide\n                return ret;\n            }\n            const word = model.getWordAtPosition(ret.getStartPosition());\n            if (word) {\n                ret = new Range(ret.startLineNumber, word.startColumn, ret.endLineNumber, word.endColumn);\n            }\n        }\n        else if (rawMarker.endColumn === Number.MAX_VALUE && rawMarker.startColumn === 1 && ret.startLineNumber === ret.endLineNumber) {\n            const 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 /* MarkerTag.Deprecated */)) {\n                    className = undefined;\n                }\n                else if (this._hasMarkerTag(marker, 1 /* MarkerTag.Unnecessary */)) {\n                    className = \"squiggly-unnecessary\" /* ClassName.EditorUnnecessaryDecoration */;\n                }\n                else {\n                    className = \"squiggly-hint\" /* ClassName.EditorHintDecoration */;\n                }\n                zIndex = 0;\n                break;\n            case MarkerSeverity.Info:\n                className = \"squiggly-info\" /* ClassName.EditorInfoDecoration */;\n                color = themeColorFromId(overviewRulerInfo);\n                zIndex = 10;\n                minimap = {\n                    color: themeColorFromId(minimapInfo),\n                    position: 1 /* MinimapPosition.Inline */\n                };\n                break;\n            case MarkerSeverity.Warning:\n                className = \"squiggly-warning\" /* ClassName.EditorWarningDecoration */;\n                color = themeColorFromId(overviewRulerWarning);\n                zIndex = 20;\n                minimap = {\n                    color: themeColorFromId(minimapWarning),\n                    position: 1 /* MinimapPosition.Inline */\n                };\n                break;\n            case MarkerSeverity.Error:\n            default:\n                className = \"squiggly-error\" /* ClassName.EditorErrorDecoration */;\n                color = themeColorFromId(overviewRulerError);\n                zIndex = 30;\n                minimap = {\n                    color: themeColorFromId(minimapError),\n                    position: 1 /* MinimapPosition.Inline */\n                };\n                break;\n        }\n        if (marker.tags) {\n            if (marker.tags.indexOf(1 /* MarkerTag.Unnecessary */) !== -1) {\n                inlineClassName = \"squiggly-inline-unnecessary\" /* ClassName.EditorUnnecessaryInlineDecoration */;\n            }\n            if (marker.tags.indexOf(2 /* MarkerTag.Deprecated */) !== -1) {\n                inlineClassName = \"squiggly-inline-deprecated\" /* ClassName.EditorDeprecatedInlineDecoration */;\n            }\n        }\n        return {\n            description: 'marker-decoration',\n            stickiness: 1 /* TrackedRangeStickiness.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}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 * as strings from '../../../base/common/strings.js';\n/**\n * A column in a position is the gap between two adjacent characters. The methods here\n * work with a concept called \"visible column\". A visible column is a very rough approximation\n * of the horizontal screen position of a column. For example, using a tab size of 4:\n * ```txt\n * |<TAB>|<TAB>|T|ext\n * |     |     | \\---- column = 4, visible column = 9\n * |     |     \\------ column = 3, visible column = 8\n * |     \\------------ column = 2, visible column = 4\n * \\------------------ column = 1, visible column = 0\n * ```\n *\n * **NOTE**: Visual columns do not work well for RTL text or variable-width fonts or characters.\n *\n * **NOTE**: These methods work and make sense both on the model and on the view model.\n */\nexport class CursorColumns {\n    static _nextVisibleColumn(codePoint, visibleColumn, tabSize) {\n        if (codePoint === 9 /* CharCode.Tab */) {\n            return CursorColumns.nextRenderTabStop(visibleColumn, tabSize);\n        }\n        if (strings.isFullWidthCharacter(codePoint) || strings.isEmojiImprecise(codePoint)) {\n            return visibleColumn + 2;\n        }\n        return visibleColumn + 1;\n    }\n    /**\n     * Returns a visible column from a column.\n     * @see {@link CursorColumns}\n     */\n    static visibleColumnFromColumn(lineContent, column, tabSize) {\n        const textLen = Math.min(column - 1, lineContent.length);\n        const text = lineContent.substring(0, textLen);\n        const iterator = new strings.GraphemeIterator(text);\n        let result = 0;\n        while (!iterator.eol()) {\n            const codePoint = strings.getNextCodePoint(text, textLen, iterator.offset);\n            iterator.nextGraphemeLength();\n            result = this._nextVisibleColumn(codePoint, result, tabSize);\n        }\n        return result;\n    }\n    /**\n     * Returns a column from a visible column.\n     * @see {@link CursorColumns}\n     */\n    static columnFromVisibleColumn(lineContent, visibleColumn, tabSize) {\n        if (visibleColumn <= 0) {\n            return 1;\n        }\n        const lineContentLength = lineContent.length;\n        const iterator = new strings.GraphemeIterator(lineContent);\n        let beforeVisibleColumn = 0;\n        let beforeColumn = 1;\n        while (!iterator.eol()) {\n            const codePoint = strings.getNextCodePoint(lineContent, lineContentLength, iterator.offset);\n            iterator.nextGraphemeLength();\n            const afterVisibleColumn = this._nextVisibleColumn(codePoint, beforeVisibleColumn, tabSize);\n            const afterColumn = iterator.offset + 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 lineContentLength + 1;\n    }\n    /**\n     * ATTENTION: This works with 0-based columns (as opposed to the regular 1-based columns)\n     * @see {@link CursorColumns}\n     */\n    static nextRenderTabStop(visibleColumn, tabSize) {\n        return visibleColumn + tabSize - visibleColumn % tabSize;\n    }\n    /**\n     * ATTENTION: This works with 0-based columns (as opposed to the regular 1-based columns)\n     * @see {@link CursorColumns}\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     * @see {@link CursorColumns}\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     * @see {@link CursorColumns}\n     */\n    static prevIndentTabStop(column, indentSize) {\n        return Math.max(0, column - 1 - (column - 1) % indentSize);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 './cursorColumns.js';\nfunction _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 = CursorColumns.nextIndentTabStop(spacesCnt, indentSize);\n        }\n        else {\n            spacesCnt++;\n        }\n    }\n    let result = '';\n    if (!insertSpaces) {\n        const 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}\nexport function normalizeIndentation(str, indentSize, insertSpaces) {\n    let firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(str);\n    if (firstNonWhitespaceIndex === -1) {\n        firstNonWhitespaceIndex = str.length;\n    }\n    return _normalizeIndentationFromWhitespace(str.substring(0, firstNonWhitespaceIndex), indentSize, insertSpaces) + str.substring(firstNonWhitespaceIndex);\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 BracketInfo {\n    constructor(range, \n    /** 0-based level */\n    nestingLevel, nestingLevelOfEqualBracketType, isInvalid) {\n        this.range = range;\n        this.nestingLevel = nestingLevel;\n        this.nestingLevelOfEqualBracketType = nestingLevelOfEqualBracketType;\n        this.isInvalid = isInvalid;\n    }\n}\nexport class BracketPairInfo {\n    constructor(range, openingBracketRange, closingBracketRange, \n    /** 0-based */\n    nestingLevel, nestingLevelOfEqualBracketType, bracketPairNode) {\n        this.range = range;\n        this.openingBracketRange = openingBracketRange;\n        this.closingBracketRange = closingBracketRange;\n        this.nestingLevel = nestingLevel;\n        this.nestingLevelOfEqualBracketType = nestingLevelOfEqualBracketType;\n        this.bracketPairNode = bracketPairNode;\n    }\n    get openingBracketInfo() {\n        return this.bracketPairNode.openingBracket.bracketInfo;\n    }\n}\nexport class BracketPairWithMinIndentationInfo extends BracketPairInfo {\n    constructor(range, openingBracketRange, closingBracketRange, \n    /**\n     * 0-based\n    */\n    nestingLevel, nestingLevelOfEqualBracketType, bracketPairNode, \n    /**\n     * -1 if not requested, otherwise the size of the minimum indentation in the bracket pair in terms of visible columns.\n    */\n    minVisibleColumnIndentation) {\n        super(range, openingBracketRange, closingBracketRange, nestingLevel, nestingLevelOfEqualBracketType, bracketPairNode);\n        this.minVisibleColumnIndentation = minVisibleColumnIndentation;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { Range } from '../../../core/range.js';\nimport { TextLength } from '../../../core/textLength.js';\n/**\n * The end must be greater than or equal to the start.\n*/\nexport function lengthDiff(startLineCount, startColumnCount, endLineCount, endColumnCount) {\n    return (startLineCount !== endLineCount)\n        ? toLength(endLineCount - startLineCount, endColumnCount)\n        : toLength(0, endColumnCount - startColumnCount);\n}\nexport const lengthZero = 0;\nexport function lengthIsZero(length) {\n    return length === 0;\n}\n/*\n * We have 52 bits available in a JS number.\n * We use the upper 26 bits to store the line and the lower 26 bits to store the column.\n */\n///*\nconst factor = 2 ** 26;\n/*/\nconst factor = 1000000;\n// */\nexport function toLength(lineCount, columnCount) {\n    // llllllllllllllllllllllllllcccccccccccccccccccccccccc (52 bits)\n    //       line count (26 bits)    column count (26 bits)\n    // If there is no overflow (all values/sums below 2^26 = 67108864),\n    // we have `toLength(lns1, cols1) + toLength(lns2, cols2) = toLength(lns1 + lns2, cols1 + cols2)`.\n    return (lineCount * factor + columnCount);\n}\nexport function lengthToObj(length) {\n    const l = length;\n    const lineCount = Math.floor(l / factor);\n    const columnCount = l - lineCount * factor;\n    return new TextLength(lineCount, columnCount);\n}\nexport function lengthGetLineCount(length) {\n    return Math.floor(length / factor);\n}\n/**\n * Returns the amount of columns of the given length, assuming that it does not span any line.\n*/\nexport function lengthGetColumnCountIfZeroLineCount(length) {\n    return length;\n}\nexport function lengthAdd(l1, l2) {\n    let r = l1 + l2;\n    if (l2 >= factor) {\n        r = r - (l1 % factor);\n    }\n    return r;\n}\nexport function sumLengths(items, lengthFn) {\n    return items.reduce((a, b) => lengthAdd(a, lengthFn(b)), lengthZero);\n}\nexport function lengthEquals(length1, length2) {\n    return length1 === length2;\n}\n/**\n * Returns a non negative length `result` such that `lengthAdd(length1, result) = length2`, or zero if such length does not exist.\n */\nexport function lengthDiffNonNegative(length1, length2) {\n    const l1 = length1;\n    const l2 = length2;\n    const diff = l2 - l1;\n    if (diff <= 0) {\n        // line-count of length1 is higher than line-count of length2\n        // or they are equal and column-count of length1 is higher than column-count of length2\n        return lengthZero;\n    }\n    const lineCount1 = Math.floor(l1 / factor);\n    const lineCount2 = Math.floor(l2 / factor);\n    const colCount2 = l2 - lineCount2 * factor;\n    if (lineCount1 === lineCount2) {\n        const colCount1 = l1 - lineCount1 * factor;\n        return toLength(0, colCount2 - colCount1);\n    }\n    else {\n        return toLength(lineCount2 - lineCount1, colCount2);\n    }\n}\nexport function lengthLessThan(length1, length2) {\n    // First, compare line counts, then column counts.\n    return length1 < length2;\n}\nexport function lengthLessThanEqual(length1, length2) {\n    return length1 <= length2;\n}\nexport function lengthGreaterThanEqual(length1, length2) {\n    return length1 >= length2;\n}\nexport function positionToLength(position) {\n    return toLength(position.lineNumber - 1, position.column - 1);\n}\nexport function lengthsToRange(lengthStart, lengthEnd) {\n    const l = lengthStart;\n    const lineCount = Math.floor(l / factor);\n    const colCount = l - lineCount * factor;\n    const l2 = lengthEnd;\n    const lineCount2 = Math.floor(l2 / factor);\n    const colCount2 = l2 - lineCount2 * factor;\n    return new Range(lineCount + 1, colCount + 1, lineCount2 + 1, colCount2 + 1);\n}\nexport function lengthOfString(str) {\n    const lines = splitLines(str);\n    return toLength(lines.length - 1, lines[lines.length - 1].length);\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { lengthAdd, lengthDiffNonNegative, lengthLessThanEqual, lengthOfString, lengthToObj, positionToLength, toLength } from './length.js';\nexport class TextEditInfo {\n    static fromModelContentChanges(changes) {\n        // Must be sorted in ascending order\n        const edits = changes.map(c => {\n            const range = Range.lift(c.range);\n            return new TextEditInfo(positionToLength(range.getStartPosition()), positionToLength(range.getEndPosition()), lengthOfString(c.text));\n        }).reverse();\n        return edits;\n    }\n    constructor(startOffset, endOffset, newLength) {\n        this.startOffset = startOffset;\n        this.endOffset = endOffset;\n        this.newLength = newLength;\n    }\n    toString() {\n        return `[${lengthToObj(this.startOffset)}...${lengthToObj(this.endOffset)}) -> ${lengthToObj(this.newLength)}`;\n    }\n}\nexport class BeforeEditPositionMapper {\n    /**\n     * @param edits Must be sorted by offset in ascending order.\n    */\n    constructor(edits) {\n        this.nextEditIdx = 0;\n        this.deltaOldToNewLineCount = 0;\n        this.deltaOldToNewColumnCount = 0;\n        this.deltaLineIdxInOld = -1;\n        this.edits = edits.map(edit => TextEditInfoCache.from(edit));\n    }\n    /**\n     * @param offset Must be equal to or greater than the last offset this method has been called with.\n    */\n    getOffsetBeforeChange(offset) {\n        this.adjustNextEdit(offset);\n        return this.translateCurToOld(offset);\n    }\n    /**\n     * @param offset Must be equal to or greater than the last offset this method has been called with.\n     * Returns null if there is no edit anymore.\n    */\n    getDistanceToNextChange(offset) {\n        this.adjustNextEdit(offset);\n        const nextEdit = this.edits[this.nextEditIdx];\n        const nextChangeOffset = nextEdit ? this.translateOldToCur(nextEdit.offsetObj) : null;\n        if (nextChangeOffset === null) {\n            return null;\n        }\n        return lengthDiffNonNegative(offset, nextChangeOffset);\n    }\n    translateOldToCur(oldOffsetObj) {\n        if (oldOffsetObj.lineCount === this.deltaLineIdxInOld) {\n            return toLength(oldOffsetObj.lineCount + this.deltaOldToNewLineCount, oldOffsetObj.columnCount + this.deltaOldToNewColumnCount);\n        }\n        else {\n            return toLength(oldOffsetObj.lineCount + this.deltaOldToNewLineCount, oldOffsetObj.columnCount);\n        }\n    }\n    translateCurToOld(newOffset) {\n        const offsetObj = lengthToObj(newOffset);\n        if (offsetObj.lineCount - this.deltaOldToNewLineCount === this.deltaLineIdxInOld) {\n            return toLength(offsetObj.lineCount - this.deltaOldToNewLineCount, offsetObj.columnCount - this.deltaOldToNewColumnCount);\n        }\n        else {\n            return toLength(offsetObj.lineCount - this.deltaOldToNewLineCount, offsetObj.columnCount);\n        }\n    }\n    adjustNextEdit(offset) {\n        while (this.nextEditIdx < this.edits.length) {\n            const nextEdit = this.edits[this.nextEditIdx];\n            // After applying the edit, what is its end offset (considering all previous edits)?\n            const nextEditEndOffsetInCur = this.translateOldToCur(nextEdit.endOffsetAfterObj);\n            if (lengthLessThanEqual(nextEditEndOffsetInCur, offset)) {\n                // We are after the edit, skip it\n                this.nextEditIdx++;\n                const nextEditEndOffsetInCurObj = lengthToObj(nextEditEndOffsetInCur);\n                // Before applying the edit, what is its end offset (considering all previous edits)?\n                const nextEditEndOffsetBeforeInCurObj = lengthToObj(this.translateOldToCur(nextEdit.endOffsetBeforeObj));\n                const lineDelta = nextEditEndOffsetInCurObj.lineCount - nextEditEndOffsetBeforeInCurObj.lineCount;\n                this.deltaOldToNewLineCount += lineDelta;\n                const previousColumnDelta = this.deltaLineIdxInOld === nextEdit.endOffsetBeforeObj.lineCount ? this.deltaOldToNewColumnCount : 0;\n                const columnDelta = nextEditEndOffsetInCurObj.columnCount - nextEditEndOffsetBeforeInCurObj.columnCount;\n                this.deltaOldToNewColumnCount = previousColumnDelta + columnDelta;\n                this.deltaLineIdxInOld = nextEdit.endOffsetBeforeObj.lineCount;\n            }\n            else {\n                // We are in or before the edit.\n                break;\n            }\n        }\n    }\n}\nclass TextEditInfoCache {\n    static from(edit) {\n        return new TextEditInfoCache(edit.startOffset, edit.endOffset, edit.newLength);\n    }\n    constructor(startOffset, endOffset, textLength) {\n        this.endOffsetBeforeObj = lengthToObj(endOffset);\n        this.endOffsetAfterObj = lengthToObj(lengthAdd(startOffset, textLength));\n        this.offsetObj = lengthToObj(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 *--------------------------------------------------------------------------------------------*/\nconst emptyArr = [];\n/**\n * Represents an immutable set that works best for a small number of elements (less than 32).\n * It uses bits to encode element membership efficiently.\n*/\nexport class SmallImmutableSet {\n    static { this.cache = new Array(129); }\n    static create(items, additionalItems) {\n        if (items <= 128 && additionalItems.length === 0) {\n            // We create a cache of 128=2^7 elements to cover all sets with up to 7 (dense) elements.\n            let cached = SmallImmutableSet.cache[items];\n            if (!cached) {\n                cached = new SmallImmutableSet(items, additionalItems);\n                SmallImmutableSet.cache[items] = cached;\n            }\n            return cached;\n        }\n        return new SmallImmutableSet(items, additionalItems);\n    }\n    static { this.empty = SmallImmutableSet.create(0, emptyArr); }\n    static getEmpty() {\n        return this.empty;\n    }\n    constructor(items, additionalItems) {\n        this.items = items;\n        this.additionalItems = additionalItems;\n    }\n    add(value, keyProvider) {\n        const key = keyProvider.getKey(value);\n        let idx = key >> 5; // divided by 32\n        if (idx === 0) {\n            // fast path\n            const newItem = (1 << key) | this.items;\n            if (newItem === this.items) {\n                return this;\n            }\n            return SmallImmutableSet.create(newItem, this.additionalItems);\n        }\n        idx--;\n        const newItems = this.additionalItems.slice(0);\n        while (newItems.length < idx) {\n            newItems.push(0);\n        }\n        newItems[idx] |= 1 << (key & 31);\n        return SmallImmutableSet.create(this.items, newItems);\n    }\n    merge(other) {\n        const merged = this.items | other.items;\n        if (this.additionalItems === emptyArr && other.additionalItems === emptyArr) {\n            // fast path\n            if (merged === this.items) {\n                return this;\n            }\n            if (merged === other.items) {\n                return other;\n            }\n            return SmallImmutableSet.create(merged, emptyArr);\n        }\n        // This can be optimized, but it's not a common case\n        const newItems = [];\n        for (let i = 0; i < Math.max(this.additionalItems.length, other.additionalItems.length); i++) {\n            const item1 = this.additionalItems[i] || 0;\n            const item2 = other.additionalItems[i] || 0;\n            newItems.push(item1 | item2);\n        }\n        return SmallImmutableSet.create(merged, newItems);\n    }\n    intersects(other) {\n        if ((this.items & other.items) !== 0) {\n            return true;\n        }\n        for (let i = 0; i < Math.min(this.additionalItems.length, other.additionalItems.length); i++) {\n            if ((this.additionalItems[i] & other.additionalItems[i]) !== 0) {\n                return true;\n            }\n        }\n        return false;\n    }\n}\nexport const identityKeyProvider = {\n    getKey(value) {\n        return value;\n    }\n};\n/**\n * Assigns values a unique incrementing key.\n*/\nexport class DenseKeyProvider {\n    constructor() {\n        this.items = new Map();\n    }\n    getKey(value) {\n        let existing = this.items.get(value);\n        if (existing === undefined) {\n            existing = this.items.size;\n            this.items.set(value, existing);\n        }\n        return existing;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { BugIndicatingError } from '../../../../../base/common/errors.js';\nimport { CursorColumns } from '../../../core/cursorColumns.js';\nimport { lengthAdd, lengthGetLineCount, lengthToObj, lengthZero } from './length.js';\nimport { SmallImmutableSet } from './smallImmutableSet.js';\n/**\n * The base implementation for all AST nodes.\n*/\nclass BaseAstNode {\n    /**\n     * The length of the entire node, which should equal the sum of lengths of all children.\n    */\n    get length() {\n        return this._length;\n    }\n    constructor(length) {\n        this._length = length;\n    }\n}\n/**\n * Represents a bracket pair including its child (e.g. `{ ... }`).\n * Might be unclosed.\n * Immutable, if all children are immutable.\n*/\nexport class PairAstNode extends BaseAstNode {\n    static create(openingBracket, child, closingBracket) {\n        let length = openingBracket.length;\n        if (child) {\n            length = lengthAdd(length, child.length);\n        }\n        if (closingBracket) {\n            length = lengthAdd(length, closingBracket.length);\n        }\n        return new PairAstNode(length, openingBracket, child, closingBracket, child ? child.missingOpeningBracketIds : SmallImmutableSet.getEmpty());\n    }\n    get kind() {\n        return 2 /* AstNodeKind.Pair */;\n    }\n    get listHeight() {\n        return 0;\n    }\n    get childrenLength() {\n        return 3;\n    }\n    getChild(idx) {\n        switch (idx) {\n            case 0: return this.openingBracket;\n            case 1: return this.child;\n            case 2: return this.closingBracket;\n        }\n        throw new Error('Invalid child index');\n    }\n    /**\n     * Avoid using this property, it allocates an array!\n    */\n    get children() {\n        const result = [];\n        result.push(this.openingBracket);\n        if (this.child) {\n            result.push(this.child);\n        }\n        if (this.closingBracket) {\n            result.push(this.closingBracket);\n        }\n        return result;\n    }\n    constructor(length, openingBracket, child, closingBracket, missingOpeningBracketIds) {\n        super(length);\n        this.openingBracket = openingBracket;\n        this.child = child;\n        this.closingBracket = closingBracket;\n        this.missingOpeningBracketIds = missingOpeningBracketIds;\n    }\n    canBeReused(openBracketIds) {\n        if (this.closingBracket === null) {\n            // Unclosed pair ast nodes only\n            // end at the end of the document\n            // or when a parent node is closed.\n            // This could be improved:\n            // Only return false if some next token is neither \"undefined\" nor a bracket that closes a parent.\n            return false;\n        }\n        if (openBracketIds.intersects(this.missingOpeningBracketIds)) {\n            return false;\n        }\n        return true;\n    }\n    deepClone() {\n        return new PairAstNode(this.length, this.openingBracket.deepClone(), this.child && this.child.deepClone(), this.closingBracket && this.closingBracket.deepClone(), this.missingOpeningBracketIds);\n    }\n    computeMinIndentation(offset, textModel) {\n        return this.child ? this.child.computeMinIndentation(lengthAdd(offset, this.openingBracket.length), textModel) : Number.MAX_SAFE_INTEGER;\n    }\n}\nexport class ListAstNode extends BaseAstNode {\n    /**\n     * This method uses more memory-efficient list nodes that can only store 2 or 3 children.\n    */\n    static create23(item1, item2, item3, immutable = false) {\n        let length = item1.length;\n        let missingBracketIds = item1.missingOpeningBracketIds;\n        if (item1.listHeight !== item2.listHeight) {\n            throw new Error('Invalid list heights');\n        }\n        length = lengthAdd(length, item2.length);\n        missingBracketIds = missingBracketIds.merge(item2.missingOpeningBracketIds);\n        if (item3) {\n            if (item1.listHeight !== item3.listHeight) {\n                throw new Error('Invalid list heights');\n            }\n            length = lengthAdd(length, item3.length);\n            missingBracketIds = missingBracketIds.merge(item3.missingOpeningBracketIds);\n        }\n        return immutable\n            ? new Immutable23ListAstNode(length, item1.listHeight + 1, item1, item2, item3, missingBracketIds)\n            : new TwoThreeListAstNode(length, item1.listHeight + 1, item1, item2, item3, missingBracketIds);\n    }\n    static getEmpty() {\n        return new ImmutableArrayListAstNode(lengthZero, 0, [], SmallImmutableSet.getEmpty());\n    }\n    get kind() {\n        return 4 /* AstNodeKind.List */;\n    }\n    get missingOpeningBracketIds() {\n        return this._missingOpeningBracketIds;\n    }\n    /**\n     * Use ListAstNode.create.\n    */\n    constructor(length, listHeight, _missingOpeningBracketIds) {\n        super(length);\n        this.listHeight = listHeight;\n        this._missingOpeningBracketIds = _missingOpeningBracketIds;\n        this.cachedMinIndentation = -1;\n    }\n    throwIfImmutable() {\n        // NOOP\n    }\n    makeLastElementMutable() {\n        this.throwIfImmutable();\n        const childCount = this.childrenLength;\n        if (childCount === 0) {\n            return undefined;\n        }\n        const lastChild = this.getChild(childCount - 1);\n        const mutable = lastChild.kind === 4 /* AstNodeKind.List */ ? lastChild.toMutable() : lastChild;\n        if (lastChild !== mutable) {\n            this.setChild(childCount - 1, mutable);\n        }\n        return mutable;\n    }\n    makeFirstElementMutable() {\n        this.throwIfImmutable();\n        const childCount = this.childrenLength;\n        if (childCount === 0) {\n            return undefined;\n        }\n        const firstChild = this.getChild(0);\n        const mutable = firstChild.kind === 4 /* AstNodeKind.List */ ? firstChild.toMutable() : firstChild;\n        if (firstChild !== mutable) {\n            this.setChild(0, mutable);\n        }\n        return mutable;\n    }\n    canBeReused(openBracketIds) {\n        if (openBracketIds.intersects(this.missingOpeningBracketIds)) {\n            return false;\n        }\n        if (this.childrenLength === 0) {\n            // Don't reuse empty lists.\n            return false;\n        }\n        let lastChild = this;\n        while (lastChild.kind === 4 /* AstNodeKind.List */) {\n            const lastLength = lastChild.childrenLength;\n            if (lastLength === 0) {\n                // Empty lists should never be contained in other lists.\n                throw new BugIndicatingError();\n            }\n            lastChild = lastChild.getChild(lastLength - 1);\n        }\n        return lastChild.canBeReused(openBracketIds);\n    }\n    handleChildrenChanged() {\n        this.throwIfImmutable();\n        const count = this.childrenLength;\n        let length = this.getChild(0).length;\n        let unopenedBrackets = this.getChild(0).missingOpeningBracketIds;\n        for (let i = 1; i < count; i++) {\n            const child = this.getChild(i);\n            length = lengthAdd(length, child.length);\n            unopenedBrackets = unopenedBrackets.merge(child.missingOpeningBracketIds);\n        }\n        this._length = length;\n        this._missingOpeningBracketIds = unopenedBrackets;\n        this.cachedMinIndentation = -1;\n    }\n    computeMinIndentation(offset, textModel) {\n        if (this.cachedMinIndentation !== -1) {\n            return this.cachedMinIndentation;\n        }\n        let minIndentation = Number.MAX_SAFE_INTEGER;\n        let childOffset = offset;\n        for (let i = 0; i < this.childrenLength; i++) {\n            const child = this.getChild(i);\n            if (child) {\n                minIndentation = Math.min(minIndentation, child.computeMinIndentation(childOffset, textModel));\n                childOffset = lengthAdd(childOffset, child.length);\n            }\n        }\n        this.cachedMinIndentation = minIndentation;\n        return minIndentation;\n    }\n}\nclass TwoThreeListAstNode extends ListAstNode {\n    get childrenLength() {\n        return this._item3 !== null ? 3 : 2;\n    }\n    getChild(idx) {\n        switch (idx) {\n            case 0: return this._item1;\n            case 1: return this._item2;\n            case 2: return this._item3;\n        }\n        throw new Error('Invalid child index');\n    }\n    setChild(idx, node) {\n        switch (idx) {\n            case 0:\n                this._item1 = node;\n                return;\n            case 1:\n                this._item2 = node;\n                return;\n            case 2:\n                this._item3 = node;\n                return;\n        }\n        throw new Error('Invalid child index');\n    }\n    get children() {\n        return this._item3 ? [this._item1, this._item2, this._item3] : [this._item1, this._item2];\n    }\n    get item1() {\n        return this._item1;\n    }\n    get item2() {\n        return this._item2;\n    }\n    get item3() {\n        return this._item3;\n    }\n    constructor(length, listHeight, _item1, _item2, _item3, missingOpeningBracketIds) {\n        super(length, listHeight, missingOpeningBracketIds);\n        this._item1 = _item1;\n        this._item2 = _item2;\n        this._item3 = _item3;\n    }\n    deepClone() {\n        return new TwoThreeListAstNode(this.length, this.listHeight, this._item1.deepClone(), this._item2.deepClone(), this._item3 ? this._item3.deepClone() : null, this.missingOpeningBracketIds);\n    }\n    appendChildOfSameHeight(node) {\n        if (this._item3) {\n            throw new Error('Cannot append to a full (2,3) tree node');\n        }\n        this.throwIfImmutable();\n        this._item3 = node;\n        this.handleChildrenChanged();\n    }\n    unappendChild() {\n        if (!this._item3) {\n            throw new Error('Cannot remove from a non-full (2,3) tree node');\n        }\n        this.throwIfImmutable();\n        const result = this._item3;\n        this._item3 = null;\n        this.handleChildrenChanged();\n        return result;\n    }\n    prependChildOfSameHeight(node) {\n        if (this._item3) {\n            throw new Error('Cannot prepend to a full (2,3) tree node');\n        }\n        this.throwIfImmutable();\n        this._item3 = this._item2;\n        this._item2 = this._item1;\n        this._item1 = node;\n        this.handleChildrenChanged();\n    }\n    unprependChild() {\n        if (!this._item3) {\n            throw new Error('Cannot remove from a non-full (2,3) tree node');\n        }\n        this.throwIfImmutable();\n        const result = this._item1;\n        this._item1 = this._item2;\n        this._item2 = this._item3;\n        this._item3 = null;\n        this.handleChildrenChanged();\n        return result;\n    }\n    toMutable() {\n        return this;\n    }\n}\n/**\n * Immutable, if all children are immutable.\n*/\nclass Immutable23ListAstNode extends TwoThreeListAstNode {\n    toMutable() {\n        return new TwoThreeListAstNode(this.length, this.listHeight, this.item1, this.item2, this.item3, this.missingOpeningBracketIds);\n    }\n    throwIfImmutable() {\n        throw new Error('this instance is immutable');\n    }\n}\n/**\n * For debugging.\n*/\nclass ArrayListAstNode extends ListAstNode {\n    get childrenLength() {\n        return this._children.length;\n    }\n    getChild(idx) {\n        return this._children[idx];\n    }\n    setChild(idx, child) {\n        this._children[idx] = child;\n    }\n    get children() {\n        return this._children;\n    }\n    constructor(length, listHeight, _children, missingOpeningBracketIds) {\n        super(length, listHeight, missingOpeningBracketIds);\n        this._children = _children;\n    }\n    deepClone() {\n        const children = new Array(this._children.length);\n        for (let i = 0; i < this._children.length; i++) {\n            children[i] = this._children[i].deepClone();\n        }\n        return new ArrayListAstNode(this.length, this.listHeight, children, this.missingOpeningBracketIds);\n    }\n    appendChildOfSameHeight(node) {\n        this.throwIfImmutable();\n        this._children.push(node);\n        this.handleChildrenChanged();\n    }\n    unappendChild() {\n        this.throwIfImmutable();\n        const item = this._children.pop();\n        this.handleChildrenChanged();\n        return item;\n    }\n    prependChildOfSameHeight(node) {\n        this.throwIfImmutable();\n        this._children.unshift(node);\n        this.handleChildrenChanged();\n    }\n    unprependChild() {\n        this.throwIfImmutable();\n        const item = this._children.shift();\n        this.handleChildrenChanged();\n        return item;\n    }\n    toMutable() {\n        return this;\n    }\n}\n/**\n * Immutable, if all children are immutable.\n*/\nclass ImmutableArrayListAstNode extends ArrayListAstNode {\n    toMutable() {\n        return new ArrayListAstNode(this.length, this.listHeight, [...this.children], this.missingOpeningBracketIds);\n    }\n    throwIfImmutable() {\n        throw new Error('this instance is immutable');\n    }\n}\nconst emptyArray = [];\nclass ImmutableLeafAstNode extends BaseAstNode {\n    get listHeight() {\n        return 0;\n    }\n    get childrenLength() {\n        return 0;\n    }\n    getChild(idx) {\n        return null;\n    }\n    get children() {\n        return emptyArray;\n    }\n    deepClone() {\n        return this;\n    }\n}\nexport class TextAstNode extends ImmutableLeafAstNode {\n    get kind() {\n        return 0 /* AstNodeKind.Text */;\n    }\n    get missingOpeningBracketIds() {\n        return SmallImmutableSet.getEmpty();\n    }\n    canBeReused(_openedBracketIds) {\n        return true;\n    }\n    computeMinIndentation(offset, textModel) {\n        const start = lengthToObj(offset);\n        // Text ast nodes don't have partial indentation (ensured by the tokenizer).\n        // Thus, if this text node does not start at column 0, the first line cannot have any indentation at all.\n        const startLineNumber = (start.columnCount === 0 ? start.lineCount : start.lineCount + 1) + 1;\n        const endLineNumber = lengthGetLineCount(lengthAdd(offset, this.length)) + 1;\n        let result = Number.MAX_SAFE_INTEGER;\n        for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n            const firstNonWsColumn = textModel.getLineFirstNonWhitespaceColumn(lineNumber);\n            const lineContent = textModel.getLineContent(lineNumber);\n            if (firstNonWsColumn === 0) {\n                continue;\n            }\n            const visibleColumn = CursorColumns.visibleColumnFromColumn(lineContent, firstNonWsColumn, textModel.getOptions().tabSize);\n            result = Math.min(result, visibleColumn);\n        }\n        return result;\n    }\n}\nexport class BracketAstNode extends ImmutableLeafAstNode {\n    static create(length, bracketInfo, bracketIds) {\n        const node = new BracketAstNode(length, bracketInfo, bracketIds);\n        return node;\n    }\n    get kind() {\n        return 1 /* AstNodeKind.Bracket */;\n    }\n    get missingOpeningBracketIds() {\n        return SmallImmutableSet.getEmpty();\n    }\n    constructor(length, bracketInfo, \n    /**\n     * In case of a opening bracket, this is the id of the opening bracket.\n     * In case of a closing bracket, this contains the ids of all opening brackets it can close.\n    */\n    bracketIds) {\n        super(length);\n        this.bracketInfo = bracketInfo;\n        this.bracketIds = bracketIds;\n    }\n    get text() {\n        return this.bracketInfo.bracketText;\n    }\n    get languageId() {\n        return this.bracketInfo.languageId;\n    }\n    canBeReused(_openedBracketIds) {\n        // These nodes could be reused,\n        // but not in a general way.\n        // Their parent may be reused.\n        return false;\n    }\n    computeMinIndentation(offset, textModel) {\n        return Number.MAX_SAFE_INTEGER;\n    }\n}\nexport class InvalidBracketAstNode extends ImmutableLeafAstNode {\n    get kind() {\n        return 3 /* AstNodeKind.UnexpectedClosingBracket */;\n    }\n    constructor(closingBrackets, length) {\n        super(length);\n        this.missingOpeningBracketIds = closingBrackets;\n    }\n    canBeReused(openedBracketIds) {\n        return !openedBracketIds.intersects(this.missingOpeningBracketIds);\n    }\n    computeMinIndentation(offset, textModel) {\n        return Number.MAX_SAFE_INTEGER;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { NotSupportedError } from '../../../../../base/common/errors.js';\nimport { TokenMetadata } from '../../../encodedTokenAttributes.js';\nimport { TextAstNode } from './ast.js';\nimport { lengthAdd, lengthDiff, lengthGetColumnCountIfZeroLineCount, lengthToObj, lengthZero, toLength } from './length.js';\nimport { SmallImmutableSet } from './smallImmutableSet.js';\nexport class Token {\n    constructor(length, kind, \n    /**\n     * If this token is an opening bracket, this is the id of the opening bracket.\n     * If this token is a closing bracket, this is the id of the first opening bracket that is closed by this bracket.\n     * Otherwise, it is -1.\n     */\n    bracketId, \n    /**\n     * If this token is an opening bracket, this just contains `bracketId`.\n     * If this token is a closing bracket, this lists all opening bracket ids, that it closes.\n     * Otherwise, it is empty.\n     */\n    bracketIds, astNode) {\n        this.length = length;\n        this.kind = kind;\n        this.bracketId = bracketId;\n        this.bracketIds = bracketIds;\n        this.astNode = astNode;\n    }\n}\nexport class TextBufferTokenizer {\n    constructor(textModel, bracketTokens) {\n        this.textModel = textModel;\n        this.bracketTokens = bracketTokens;\n        this.reader = new NonPeekableTextBufferTokenizer(this.textModel, this.bracketTokens);\n        this._offset = lengthZero;\n        this.didPeek = false;\n        this.peeked = null;\n        this.textBufferLineCount = textModel.getLineCount();\n        this.textBufferLastLineLength = textModel.getLineLength(this.textBufferLineCount);\n    }\n    get offset() {\n        return this._offset;\n    }\n    get length() {\n        return toLength(this.textBufferLineCount - 1, this.textBufferLastLineLength);\n    }\n    skip(length) {\n        this.didPeek = false;\n        this._offset = lengthAdd(this._offset, length);\n        const obj = lengthToObj(this._offset);\n        this.reader.setPosition(obj.lineCount, obj.columnCount);\n    }\n    read() {\n        let token;\n        if (this.peeked) {\n            this.didPeek = false;\n            token = this.peeked;\n        }\n        else {\n            token = this.reader.read();\n        }\n        if (token) {\n            this._offset = lengthAdd(this._offset, token.length);\n        }\n        return token;\n    }\n    peek() {\n        if (!this.didPeek) {\n            this.peeked = this.reader.read();\n            this.didPeek = true;\n        }\n        return this.peeked;\n    }\n}\n/**\n * Does not support peek.\n*/\nclass NonPeekableTextBufferTokenizer {\n    constructor(textModel, bracketTokens) {\n        this.textModel = textModel;\n        this.bracketTokens = bracketTokens;\n        this.lineIdx = 0;\n        this.line = null;\n        this.lineCharOffset = 0;\n        this.lineTokens = null;\n        this.lineTokenOffset = 0;\n        /** Must be a zero line token. The end of the document cannot be peeked. */\n        this.peekedToken = null;\n        this.textBufferLineCount = textModel.getLineCount();\n        this.textBufferLastLineLength = textModel.getLineLength(this.textBufferLineCount);\n    }\n    setPosition(lineIdx, column) {\n        // We must not jump into a token!\n        if (lineIdx === this.lineIdx) {\n            this.lineCharOffset = column;\n            if (this.line !== null) {\n                this.lineTokenOffset = this.lineCharOffset === 0 ? 0 : this.lineTokens.findTokenIndexAtOffset(this.lineCharOffset);\n            }\n        }\n        else {\n            this.lineIdx = lineIdx;\n            this.lineCharOffset = column;\n            this.line = null;\n        }\n        this.peekedToken = null;\n    }\n    read() {\n        if (this.peekedToken) {\n            const token = this.peekedToken;\n            this.peekedToken = null;\n            this.lineCharOffset += lengthGetColumnCountIfZeroLineCount(token.length);\n            return token;\n        }\n        if (this.lineIdx > this.textBufferLineCount - 1 || (this.lineIdx === this.textBufferLineCount - 1 && this.lineCharOffset >= this.textBufferLastLineLength)) {\n            // We are after the end\n            return null;\n        }\n        if (this.line === null) {\n            this.lineTokens = this.textModel.tokenization.getLineTokens(this.lineIdx + 1);\n            this.line = this.lineTokens.getLineContent();\n            this.lineTokenOffset = this.lineCharOffset === 0 ? 0 : this.lineTokens.findTokenIndexAtOffset(this.lineCharOffset);\n        }\n        const startLineIdx = this.lineIdx;\n        const startLineCharOffset = this.lineCharOffset;\n        // limits the length of text tokens.\n        // If text tokens get too long, incremental updates will be slow\n        let lengthHeuristic = 0;\n        while (true) {\n            const lineTokens = this.lineTokens;\n            const tokenCount = lineTokens.getCount();\n            let peekedBracketToken = null;\n            if (this.lineTokenOffset < tokenCount) {\n                const tokenMetadata = lineTokens.getMetadata(this.lineTokenOffset);\n                while (this.lineTokenOffset + 1 < tokenCount && tokenMetadata === lineTokens.getMetadata(this.lineTokenOffset + 1)) {\n                    // Skip tokens that are identical.\n                    // Sometimes, (bracket) identifiers are split up into multiple tokens.\n                    this.lineTokenOffset++;\n                }\n                const isOther = TokenMetadata.getTokenType(tokenMetadata) === 0 /* StandardTokenType.Other */;\n                const containsBracketType = TokenMetadata.containsBalancedBrackets(tokenMetadata);\n                const endOffset = lineTokens.getEndOffset(this.lineTokenOffset);\n                // Is there a bracket token next? Only consume text.\n                if (containsBracketType && isOther && this.lineCharOffset < endOffset) {\n                    const languageId = lineTokens.getLanguageId(this.lineTokenOffset);\n                    const text = this.line.substring(this.lineCharOffset, endOffset);\n                    const brackets = this.bracketTokens.getSingleLanguageBracketTokens(languageId);\n                    const regexp = brackets.regExpGlobal;\n                    if (regexp) {\n                        regexp.lastIndex = 0;\n                        const match = regexp.exec(text);\n                        if (match) {\n                            peekedBracketToken = brackets.getToken(match[0]);\n                            if (peekedBracketToken) {\n                                // Consume leading text of the token\n                                this.lineCharOffset += match.index;\n                            }\n                        }\n                    }\n                }\n                lengthHeuristic += endOffset - this.lineCharOffset;\n                if (peekedBracketToken) {\n                    // Don't skip the entire token, as a single token could contain multiple brackets.\n                    if (startLineIdx !== this.lineIdx || startLineCharOffset !== this.lineCharOffset) {\n                        // There is text before the bracket\n                        this.peekedToken = peekedBracketToken;\n                        break;\n                    }\n                    else {\n                        // Consume the peeked token\n                        this.lineCharOffset += lengthGetColumnCountIfZeroLineCount(peekedBracketToken.length);\n                        return peekedBracketToken;\n                    }\n                }\n                else {\n                    // Skip the entire token, as the token contains no brackets at all.\n                    this.lineTokenOffset++;\n                    this.lineCharOffset = endOffset;\n                }\n            }\n            else {\n                if (this.lineIdx === this.textBufferLineCount - 1) {\n                    break;\n                }\n                this.lineIdx++;\n                this.lineTokens = this.textModel.tokenization.getLineTokens(this.lineIdx + 1);\n                this.lineTokenOffset = 0;\n                this.line = this.lineTokens.getLineContent();\n                this.lineCharOffset = 0;\n                lengthHeuristic += 33; // max 1000/33 = 30 lines\n                // This limits the amount of work to recompute min-indentation\n                if (lengthHeuristic > 1000) {\n                    // only break (automatically) at the end of line.\n                    break;\n                }\n            }\n            if (lengthHeuristic > 1500) {\n                // Eventually break regardless of the line length so that\n                // very long lines do not cause bad performance.\n                // This effective limits max indentation to 500, as\n                // indentation is not computed across multiple text nodes.\n                break;\n            }\n        }\n        // If a token contains some proper indentation, it also contains \\n{INDENTATION+}(?!{INDENTATION}),\n        // unless the line is too long.\n        // Thus, the min indentation of the document is the minimum min indentation of every text node.\n        const length = lengthDiff(startLineIdx, startLineCharOffset, this.lineIdx, this.lineCharOffset);\n        return new Token(length, 0 /* TokenKind.Text */, -1, SmallImmutableSet.getEmpty(), new TextAstNode(length));\n    }\n}\nexport class FastTokenizer {\n    constructor(text, brackets) {\n        this.text = text;\n        this._offset = lengthZero;\n        this.idx = 0;\n        const regExpStr = brackets.getRegExpStr();\n        const regexp = regExpStr ? new RegExp(regExpStr + '|\\n', 'gi') : null;\n        const tokens = [];\n        let match;\n        let curLineCount = 0;\n        let lastLineBreakOffset = 0;\n        let lastTokenEndOffset = 0;\n        let lastTokenEndLine = 0;\n        const smallTextTokens0Line = [];\n        for (let i = 0; i < 60; i++) {\n            smallTextTokens0Line.push(new Token(toLength(0, i), 0 /* TokenKind.Text */, -1, SmallImmutableSet.getEmpty(), new TextAstNode(toLength(0, i))));\n        }\n        const smallTextTokens1Line = [];\n        for (let i = 0; i < 60; i++) {\n            smallTextTokens1Line.push(new Token(toLength(1, i), 0 /* TokenKind.Text */, -1, SmallImmutableSet.getEmpty(), new TextAstNode(toLength(1, i))));\n        }\n        if (regexp) {\n            regexp.lastIndex = 0;\n            // If a token contains indentation, it also contains \\n{INDENTATION+}(?!{INDENTATION})\n            while ((match = regexp.exec(text)) !== null) {\n                const curOffset = match.index;\n                const value = match[0];\n                if (value === '\\n') {\n                    curLineCount++;\n                    lastLineBreakOffset = curOffset + 1;\n                }\n                else {\n                    if (lastTokenEndOffset !== curOffset) {\n                        let token;\n                        if (lastTokenEndLine === curLineCount) {\n                            const colCount = curOffset - lastTokenEndOffset;\n                            if (colCount < smallTextTokens0Line.length) {\n                                token = smallTextTokens0Line[colCount];\n                            }\n                            else {\n                                const length = toLength(0, colCount);\n                                token = new Token(length, 0 /* TokenKind.Text */, -1, SmallImmutableSet.getEmpty(), new TextAstNode(length));\n                            }\n                        }\n                        else {\n                            const lineCount = curLineCount - lastTokenEndLine;\n                            const colCount = curOffset - lastLineBreakOffset;\n                            if (lineCount === 1 && colCount < smallTextTokens1Line.length) {\n                                token = smallTextTokens1Line[colCount];\n                            }\n                            else {\n                                const length = toLength(lineCount, colCount);\n                                token = new Token(length, 0 /* TokenKind.Text */, -1, SmallImmutableSet.getEmpty(), new TextAstNode(length));\n                            }\n                        }\n                        tokens.push(token);\n                    }\n                    // value is matched by regexp, so the token must exist\n                    tokens.push(brackets.getToken(value));\n                    lastTokenEndOffset = curOffset + value.length;\n                    lastTokenEndLine = curLineCount;\n                }\n            }\n        }\n        const offset = text.length;\n        if (lastTokenEndOffset !== offset) {\n            const length = (lastTokenEndLine === curLineCount)\n                ? toLength(0, offset - lastTokenEndOffset)\n                : toLength(curLineCount - lastTokenEndLine, offset - lastLineBreakOffset);\n            tokens.push(new Token(length, 0 /* TokenKind.Text */, -1, SmallImmutableSet.getEmpty(), new TextAstNode(length)));\n        }\n        this.length = toLength(curLineCount, offset - lastLineBreakOffset);\n        this.tokens = tokens;\n    }\n    get offset() {\n        return this._offset;\n    }\n    read() {\n        return this.tokens[this.idx++] || null;\n    }\n    peek() {\n        return this.tokens[this.idx] || null;\n    }\n    skip(length) {\n        throw new NotSupportedError();\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { escapeRegExpCharacters } from '../../../../../base/common/strings.js';\nimport { BracketAstNode } from './ast.js';\nimport { toLength } from './length.js';\nimport { identityKeyProvider, SmallImmutableSet } from './smallImmutableSet.js';\nimport { Token } from './tokenizer.js';\nexport class BracketTokens {\n    static createFromLanguage(configuration, denseKeyProvider) {\n        function getId(bracketInfo) {\n            return denseKeyProvider.getKey(`${bracketInfo.languageId}:::${bracketInfo.bracketText}`);\n        }\n        const map = new Map();\n        for (const openingBracket of configuration.bracketsNew.openingBrackets) {\n            const length = toLength(0, openingBracket.bracketText.length);\n            const openingTextId = getId(openingBracket);\n            const bracketIds = SmallImmutableSet.getEmpty().add(openingTextId, identityKeyProvider);\n            map.set(openingBracket.bracketText, new Token(length, 1 /* TokenKind.OpeningBracket */, openingTextId, bracketIds, BracketAstNode.create(length, openingBracket, bracketIds)));\n        }\n        for (const closingBracket of configuration.bracketsNew.closingBrackets) {\n            const length = toLength(0, closingBracket.bracketText.length);\n            let bracketIds = SmallImmutableSet.getEmpty();\n            const closingBrackets = closingBracket.getOpeningBrackets();\n            for (const bracket of closingBrackets) {\n                bracketIds = bracketIds.add(getId(bracket), identityKeyProvider);\n            }\n            map.set(closingBracket.bracketText, new Token(length, 2 /* TokenKind.ClosingBracket */, getId(closingBrackets[0]), bracketIds, BracketAstNode.create(length, closingBracket, bracketIds)));\n        }\n        return new BracketTokens(map);\n    }\n    constructor(map) {\n        this.map = map;\n        this.hasRegExp = false;\n        this._regExpGlobal = null;\n    }\n    getRegExpStr() {\n        if (this.isEmpty) {\n            return null;\n        }\n        else {\n            const keys = [...this.map.keys()];\n            keys.sort();\n            keys.reverse();\n            return keys.map(k => prepareBracketForRegExp(k)).join('|');\n        }\n    }\n    /**\n     * Returns null if there is no such regexp (because there are no brackets).\n    */\n    get regExpGlobal() {\n        if (!this.hasRegExp) {\n            const regExpStr = this.getRegExpStr();\n            this._regExpGlobal = regExpStr ? new RegExp(regExpStr, 'gi') : null;\n            this.hasRegExp = true;\n        }\n        return this._regExpGlobal;\n    }\n    getToken(value) {\n        return this.map.get(value.toLowerCase());\n    }\n    findClosingTokenText(openingBracketIds) {\n        for (const [closingText, info] of this.map) {\n            if (info.kind === 2 /* TokenKind.ClosingBracket */ && info.bracketIds.intersects(openingBracketIds)) {\n                return closingText;\n            }\n        }\n        return undefined;\n    }\n    get isEmpty() {\n        return this.map.size === 0;\n    }\n}\nfunction prepareBracketForRegExp(str) {\n    let escaped = escapeRegExpCharacters(str);\n    // These bracket pair delimiters start or end with letters\n    // see https://github.com/microsoft/vscode/issues/132162 https://github.com/microsoft/vscode/issues/150440\n    if (/^[\\w ]+/.test(str)) {\n        escaped = `\\\\b${escaped}`;\n    }\n    if (/[\\w ]+$/.test(str)) {\n        escaped = `${escaped}\\\\b`;\n    }\n    return escaped;\n}\nexport class LanguageAgnosticBracketTokens {\n    constructor(denseKeyProvider, getLanguageConfiguration) {\n        this.denseKeyProvider = denseKeyProvider;\n        this.getLanguageConfiguration = getLanguageConfiguration;\n        this.languageIdToBracketTokens = new Map();\n    }\n    didLanguageChange(languageId) {\n        // Report a change whenever the language configuration updates.\n        return this.languageIdToBracketTokens.has(languageId);\n    }\n    getSingleLanguageBracketTokens(languageId) {\n        let singleLanguageBracketTokens = this.languageIdToBracketTokens.get(languageId);\n        if (!singleLanguageBracketTokens) {\n            singleLanguageBracketTokens = BracketTokens.createFromLanguage(this.getLanguageConfiguration(languageId), this.denseKeyProvider);\n            this.languageIdToBracketTokens.set(languageId, singleLanguageBracketTokens);\n        }\n        return singleLanguageBracketTokens;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { ListAstNode } from './ast.js';\n/**\n * Concatenates a list of (2,3) AstNode's into a single (2,3) AstNode.\n * This mutates the items of the input array!\n * If all items have the same height, this method has runtime O(items.length).\n * Otherwise, it has runtime O(items.length * max(log(items.length), items.max(i => i.height))).\n*/\nexport function concat23Trees(items) {\n    if (items.length === 0) {\n        return null;\n    }\n    if (items.length === 1) {\n        return items[0];\n    }\n    let i = 0;\n    /**\n     * Reads nodes of same height and concatenates them to a single node.\n    */\n    function readNode() {\n        if (i >= items.length) {\n            return null;\n        }\n        const start = i;\n        const height = items[start].listHeight;\n        i++;\n        while (i < items.length && items[i].listHeight === height) {\n            i++;\n        }\n        if (i - start >= 2) {\n            return concat23TreesOfSameHeight(start === 0 && i === items.length ? items : items.slice(start, i), false);\n        }\n        else {\n            return items[start];\n        }\n    }\n    // The items might not have the same height.\n    // We merge all items by using a binary concat operator.\n    let first = readNode(); // There must be a first item\n    let second = readNode();\n    if (!second) {\n        return first;\n    }\n    for (let item = readNode(); item; item = readNode()) {\n        // Prefer concatenating smaller trees, as the runtime of concat depends on the tree height.\n        if (heightDiff(first, second) <= heightDiff(second, item)) {\n            first = concat(first, second);\n            second = item;\n        }\n        else {\n            second = concat(second, item);\n        }\n    }\n    const result = concat(first, second);\n    return result;\n}\nexport function concat23TreesOfSameHeight(items, createImmutableLists = false) {\n    if (items.length === 0) {\n        return null;\n    }\n    if (items.length === 1) {\n        return items[0];\n    }\n    let length = items.length;\n    // All trees have same height, just create parent nodes.\n    while (length > 3) {\n        const newLength = length >> 1;\n        for (let i = 0; i < newLength; i++) {\n            const j = i << 1;\n            items[i] = ListAstNode.create23(items[j], items[j + 1], j + 3 === length ? items[j + 2] : null, createImmutableLists);\n        }\n        length = newLength;\n    }\n    return ListAstNode.create23(items[0], items[1], length >= 3 ? items[2] : null, createImmutableLists);\n}\nfunction heightDiff(node1, node2) {\n    return Math.abs(node1.listHeight - node2.listHeight);\n}\nfunction concat(node1, node2) {\n    if (node1.listHeight === node2.listHeight) {\n        return ListAstNode.create23(node1, node2, null, false);\n    }\n    else if (node1.listHeight > node2.listHeight) {\n        // node1 is the tree we want to insert into\n        return append(node1, node2);\n    }\n    else {\n        return prepend(node2, node1);\n    }\n}\n/**\n * Appends the given node to the end of this (2,3) tree.\n * Returns the new root.\n*/\nfunction append(list, nodeToAppend) {\n    list = list.toMutable();\n    let curNode = list;\n    const parents = [];\n    let nodeToAppendOfCorrectHeight;\n    while (true) {\n        // assert nodeToInsert.listHeight <= curNode.listHeight\n        if (nodeToAppend.listHeight === curNode.listHeight) {\n            nodeToAppendOfCorrectHeight = nodeToAppend;\n            break;\n        }\n        // assert 0 <= nodeToInsert.listHeight < curNode.listHeight\n        if (curNode.kind !== 4 /* AstNodeKind.List */) {\n            throw new Error('unexpected');\n        }\n        parents.push(curNode);\n        // assert 2 <= curNode.childrenLength <= 3\n        curNode = curNode.makeLastElementMutable();\n    }\n    // assert nodeToAppendOfCorrectHeight!.listHeight === curNode.listHeight\n    for (let i = parents.length - 1; i >= 0; i--) {\n        const parent = parents[i];\n        if (nodeToAppendOfCorrectHeight) {\n            // Can we take the element?\n            if (parent.childrenLength >= 3) {\n                // assert parent.childrenLength === 3 && parent.listHeight === nodeToAppendOfCorrectHeight.listHeight + 1\n                // we need to split to maintain (2,3)-tree property.\n                // Send the third element + the new element to the parent.\n                nodeToAppendOfCorrectHeight = ListAstNode.create23(parent.unappendChild(), nodeToAppendOfCorrectHeight, null, false);\n            }\n            else {\n                parent.appendChildOfSameHeight(nodeToAppendOfCorrectHeight);\n                nodeToAppendOfCorrectHeight = undefined;\n            }\n        }\n        else {\n            parent.handleChildrenChanged();\n        }\n    }\n    if (nodeToAppendOfCorrectHeight) {\n        return ListAstNode.create23(list, nodeToAppendOfCorrectHeight, null, false);\n    }\n    else {\n        return list;\n    }\n}\n/**\n * Prepends the given node to the end of this (2,3) tree.\n * Returns the new root.\n*/\nfunction prepend(list, nodeToAppend) {\n    list = list.toMutable();\n    let curNode = list;\n    const parents = [];\n    // assert nodeToInsert.listHeight <= curNode.listHeight\n    while (nodeToAppend.listHeight !== curNode.listHeight) {\n        // assert 0 <= nodeToInsert.listHeight < curNode.listHeight\n        if (curNode.kind !== 4 /* AstNodeKind.List */) {\n            throw new Error('unexpected');\n        }\n        parents.push(curNode);\n        // assert 2 <= curNode.childrenFast.length <= 3\n        curNode = curNode.makeFirstElementMutable();\n    }\n    let nodeToPrependOfCorrectHeight = nodeToAppend;\n    // assert nodeToAppendOfCorrectHeight!.listHeight === curNode.listHeight\n    for (let i = parents.length - 1; i >= 0; i--) {\n        const parent = parents[i];\n        if (nodeToPrependOfCorrectHeight) {\n            // Can we take the element?\n            if (parent.childrenLength >= 3) {\n                // assert parent.childrenLength === 3 && parent.listHeight === nodeToAppendOfCorrectHeight.listHeight + 1\n                // we need to split to maintain (2,3)-tree property.\n                // Send the third element + the new element to the parent.\n                nodeToPrependOfCorrectHeight = ListAstNode.create23(nodeToPrependOfCorrectHeight, parent.unprependChild(), null, false);\n            }\n            else {\n                parent.prependChildOfSameHeight(nodeToPrependOfCorrectHeight);\n                nodeToPrependOfCorrectHeight = undefined;\n            }\n        }\n        else {\n            parent.handleChildrenChanged();\n        }\n    }\n    if (nodeToPrependOfCorrectHeight) {\n        return ListAstNode.create23(nodeToPrependOfCorrectHeight, list, null, false);\n    }\n    else {\n        return list;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { lengthAdd, lengthZero, lengthLessThan } from './length.js';\n/**\n * Allows to efficiently find a longest child at a given offset in a fixed node.\n * The requested offsets must increase monotonously.\n*/\nexport class NodeReader {\n    constructor(node) {\n        this.lastOffset = lengthZero;\n        this.nextNodes = [node];\n        this.offsets = [lengthZero];\n        this.idxs = [];\n    }\n    /**\n     * Returns the longest node at `offset` that satisfies the predicate.\n     * @param offset must be greater than or equal to the last offset this method has been called with!\n    */\n    readLongestNodeAt(offset, predicate) {\n        if (lengthLessThan(offset, this.lastOffset)) {\n            throw new Error('Invalid offset');\n        }\n        this.lastOffset = offset;\n        // Find the longest node of all those that are closest to the current offset.\n        while (true) {\n            const curNode = lastOrUndefined(this.nextNodes);\n            if (!curNode) {\n                return undefined;\n            }\n            const curNodeOffset = lastOrUndefined(this.offsets);\n            if (lengthLessThan(offset, curNodeOffset)) {\n                // The next best node is not here yet.\n                // The reader must advance before a cached node is hit.\n                return undefined;\n            }\n            if (lengthLessThan(curNodeOffset, offset)) {\n                // The reader is ahead of the current node.\n                if (lengthAdd(curNodeOffset, curNode.length) <= offset) {\n                    // The reader is after the end of the current node.\n                    this.nextNodeAfterCurrent();\n                }\n                else {\n                    // The reader is somewhere in the current node.\n                    const nextChildIdx = getNextChildIdx(curNode);\n                    if (nextChildIdx !== -1) {\n                        // Go to the first child and repeat.\n                        this.nextNodes.push(curNode.getChild(nextChildIdx));\n                        this.offsets.push(curNodeOffset);\n                        this.idxs.push(nextChildIdx);\n                    }\n                    else {\n                        // We don't have children\n                        this.nextNodeAfterCurrent();\n                    }\n                }\n            }\n            else {\n                // readerOffsetBeforeChange === curNodeOffset\n                if (predicate(curNode)) {\n                    this.nextNodeAfterCurrent();\n                    return curNode;\n                }\n                else {\n                    const nextChildIdx = getNextChildIdx(curNode);\n                    // look for shorter node\n                    if (nextChildIdx === -1) {\n                        // There is no shorter node.\n                        this.nextNodeAfterCurrent();\n                        return undefined;\n                    }\n                    else {\n                        // Descend into first child & repeat.\n                        this.nextNodes.push(curNode.getChild(nextChildIdx));\n                        this.offsets.push(curNodeOffset);\n                        this.idxs.push(nextChildIdx);\n                    }\n                }\n            }\n        }\n    }\n    // Navigates to the longest node that continues after the current node.\n    nextNodeAfterCurrent() {\n        while (true) {\n            const currentOffset = lastOrUndefined(this.offsets);\n            const currentNode = lastOrUndefined(this.nextNodes);\n            this.nextNodes.pop();\n            this.offsets.pop();\n            if (this.idxs.length === 0) {\n                // We just popped the root node, there is no next node.\n                break;\n            }\n            // Parent is not undefined, because idxs is not empty\n            const parent = lastOrUndefined(this.nextNodes);\n            const nextChildIdx = getNextChildIdx(parent, this.idxs[this.idxs.length - 1]);\n            if (nextChildIdx !== -1) {\n                this.nextNodes.push(parent.getChild(nextChildIdx));\n                this.offsets.push(lengthAdd(currentOffset, currentNode.length));\n                this.idxs[this.idxs.length - 1] = nextChildIdx;\n                break;\n            }\n            else {\n                this.idxs.pop();\n            }\n            // We fully consumed the parent.\n            // Current node is now parent, so call nextNodeAfterCurrent again\n        }\n    }\n}\nfunction getNextChildIdx(node, curIdx = -1) {\n    while (true) {\n        curIdx++;\n        if (curIdx >= node.childrenLength) {\n            return -1;\n        }\n        if (node.getChild(curIdx)) {\n            return curIdx;\n        }\n    }\n}\nfunction lastOrUndefined(arr) {\n    return arr.length > 0 ? arr[arr.length - 1] : 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 { InvalidBracketAstNode, ListAstNode, PairAstNode, TextAstNode } from './ast.js';\nimport { BeforeEditPositionMapper } from './beforeEditPositionMapper.js';\nimport { SmallImmutableSet } from './smallImmutableSet.js';\nimport { lengthIsZero, lengthLessThan } from './length.js';\nimport { concat23Trees, concat23TreesOfSameHeight } from './concat23Trees.js';\nimport { NodeReader } from './nodeReader.js';\n/**\n * Non incrementally built ASTs are immutable.\n*/\nexport function parseDocument(tokenizer, edits, oldNode, createImmutableLists) {\n    const parser = new Parser(tokenizer, edits, oldNode, createImmutableLists);\n    return parser.parseDocument();\n}\n/**\n * Non incrementally built ASTs are immutable.\n*/\nclass Parser {\n    constructor(tokenizer, edits, oldNode, createImmutableLists) {\n        this.tokenizer = tokenizer;\n        this.createImmutableLists = createImmutableLists;\n        this._itemsConstructed = 0;\n        this._itemsFromCache = 0;\n        if (oldNode && createImmutableLists) {\n            throw new Error('Not supported');\n        }\n        this.oldNodeReader = oldNode ? new NodeReader(oldNode) : undefined;\n        this.positionMapper = new BeforeEditPositionMapper(edits);\n    }\n    parseDocument() {\n        this._itemsConstructed = 0;\n        this._itemsFromCache = 0;\n        let result = this.parseList(SmallImmutableSet.getEmpty(), 0);\n        if (!result) {\n            result = ListAstNode.getEmpty();\n        }\n        return result;\n    }\n    parseList(openedBracketIds, level) {\n        const items = [];\n        while (true) {\n            let child = this.tryReadChildFromCache(openedBracketIds);\n            if (!child) {\n                const token = this.tokenizer.peek();\n                if (!token ||\n                    (token.kind === 2 /* TokenKind.ClosingBracket */ &&\n                        token.bracketIds.intersects(openedBracketIds))) {\n                    break;\n                }\n                child = this.parseChild(openedBracketIds, level + 1);\n            }\n            if (child.kind === 4 /* AstNodeKind.List */ && child.childrenLength === 0) {\n                continue;\n            }\n            items.push(child);\n        }\n        // When there is no oldNodeReader, all items are created from scratch and must have the same height.\n        const result = this.oldNodeReader ? concat23Trees(items) : concat23TreesOfSameHeight(items, this.createImmutableLists);\n        return result;\n    }\n    tryReadChildFromCache(openedBracketIds) {\n        if (this.oldNodeReader) {\n            const maxCacheableLength = this.positionMapper.getDistanceToNextChange(this.tokenizer.offset);\n            if (maxCacheableLength === null || !lengthIsZero(maxCacheableLength)) {\n                const cachedNode = this.oldNodeReader.readLongestNodeAt(this.positionMapper.getOffsetBeforeChange(this.tokenizer.offset), curNode => {\n                    // The edit could extend the ending token, thus we cannot re-use nodes that touch the edit.\n                    // If there is no edit anymore, we can re-use the node in any case.\n                    if (maxCacheableLength !== null && !lengthLessThan(curNode.length, maxCacheableLength)) {\n                        // Either the node contains edited text or touches edited text.\n                        // In the latter case, brackets might have been extended (`end` -> `ending`), so even touching nodes cannot be reused.\n                        return false;\n                    }\n                    const canBeReused = curNode.canBeReused(openedBracketIds);\n                    return canBeReused;\n                });\n                if (cachedNode) {\n                    this._itemsFromCache++;\n                    this.tokenizer.skip(cachedNode.length);\n                    return cachedNode;\n                }\n            }\n        }\n        return undefined;\n    }\n    parseChild(openedBracketIds, level) {\n        this._itemsConstructed++;\n        const token = this.tokenizer.read();\n        switch (token.kind) {\n            case 2 /* TokenKind.ClosingBracket */:\n                return new InvalidBracketAstNode(token.bracketIds, token.length);\n            case 0 /* TokenKind.Text */:\n                return token.astNode;\n            case 1 /* TokenKind.OpeningBracket */: {\n                if (level > 300) {\n                    // To prevent stack overflows\n                    return new TextAstNode(token.length);\n                }\n                const set = openedBracketIds.merge(token.bracketIds);\n                const child = this.parseList(set, level + 1);\n                const nextToken = this.tokenizer.peek();\n                if (nextToken &&\n                    nextToken.kind === 2 /* TokenKind.ClosingBracket */ &&\n                    (nextToken.bracketId === token.bracketId || nextToken.bracketIds.intersects(token.bracketIds))) {\n                    this.tokenizer.read();\n                    return PairAstNode.create(token.astNode, child, nextToken.astNode);\n                }\n                else {\n                    return PairAstNode.create(token.astNode, child, null);\n                }\n            }\n            default:\n                throw new Error('unexpected');\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 { ArrayQueue } from '../../../../../base/common/arrays.js';\nimport { TextEditInfo } from './beforeEditPositionMapper.js';\nimport { lengthAdd, lengthDiffNonNegative, lengthEquals, lengthIsZero, lengthToObj, lengthZero, sumLengths } from './length.js';\nexport function combineTextEditInfos(textEditInfoFirst, textEditInfoSecond) {\n    if (textEditInfoFirst.length === 0) {\n        return textEditInfoSecond;\n    }\n    if (textEditInfoSecond.length === 0) {\n        return textEditInfoFirst;\n    }\n    // s0: State before any edits\n    const s0ToS1Map = new ArrayQueue(toLengthMapping(textEditInfoFirst));\n    // s1: State after first edit, but before second edit\n    const s1ToS2Map = toLengthMapping(textEditInfoSecond);\n    s1ToS2Map.push({ modified: false, lengthBefore: undefined, lengthAfter: undefined }); // Copy everything from old to new\n    // s2: State after both edits\n    let curItem = s0ToS1Map.dequeue();\n    /**\n     * @param s1Length Use undefined for length \"infinity\"\n     */\n    function nextS0ToS1MapWithS1LengthOf(s1Length) {\n        if (s1Length === undefined) {\n            const arr = s0ToS1Map.takeWhile(v => true) || [];\n            if (curItem) {\n                arr.unshift(curItem);\n            }\n            return arr;\n        }\n        const result = [];\n        while (curItem && !lengthIsZero(s1Length)) {\n            const [item, remainingItem] = curItem.splitAt(s1Length);\n            result.push(item);\n            s1Length = lengthDiffNonNegative(item.lengthAfter, s1Length);\n            curItem = remainingItem ?? s0ToS1Map.dequeue();\n        }\n        if (!lengthIsZero(s1Length)) {\n            result.push(new LengthMapping(false, s1Length, s1Length));\n        }\n        return result;\n    }\n    const result = [];\n    function pushEdit(startOffset, endOffset, newLength) {\n        if (result.length > 0 && lengthEquals(result[result.length - 1].endOffset, startOffset)) {\n            const lastResult = result[result.length - 1];\n            result[result.length - 1] = new TextEditInfo(lastResult.startOffset, endOffset, lengthAdd(lastResult.newLength, newLength));\n        }\n        else {\n            result.push({ startOffset, endOffset, newLength });\n        }\n    }\n    let s0offset = lengthZero;\n    for (const s1ToS2 of s1ToS2Map) {\n        const s0ToS1Map = nextS0ToS1MapWithS1LengthOf(s1ToS2.lengthBefore);\n        if (s1ToS2.modified) {\n            const s0Length = sumLengths(s0ToS1Map, s => s.lengthBefore);\n            const s0EndOffset = lengthAdd(s0offset, s0Length);\n            pushEdit(s0offset, s0EndOffset, s1ToS2.lengthAfter);\n            s0offset = s0EndOffset;\n        }\n        else {\n            for (const s1 of s0ToS1Map) {\n                const s0startOffset = s0offset;\n                s0offset = lengthAdd(s0offset, s1.lengthBefore);\n                if (s1.modified) {\n                    pushEdit(s0startOffset, s0offset, s1.lengthAfter);\n                }\n            }\n        }\n    }\n    return result;\n}\nclass LengthMapping {\n    constructor(\n    /**\n     * If false, length before and length after equal.\n     */\n    modified, lengthBefore, lengthAfter) {\n        this.modified = modified;\n        this.lengthBefore = lengthBefore;\n        this.lengthAfter = lengthAfter;\n    }\n    splitAt(lengthAfter) {\n        const remainingLengthAfter = lengthDiffNonNegative(lengthAfter, this.lengthAfter);\n        if (lengthEquals(remainingLengthAfter, lengthZero)) {\n            return [this, undefined];\n        }\n        else if (this.modified) {\n            return [\n                new LengthMapping(this.modified, this.lengthBefore, lengthAfter),\n                new LengthMapping(this.modified, lengthZero, remainingLengthAfter)\n            ];\n        }\n        else {\n            return [\n                new LengthMapping(this.modified, lengthAfter, lengthAfter),\n                new LengthMapping(this.modified, remainingLengthAfter, remainingLengthAfter)\n            ];\n        }\n    }\n    toString() {\n        return `${this.modified ? 'M' : 'U'}:${lengthToObj(this.lengthBefore)} -> ${lengthToObj(this.lengthAfter)}`;\n    }\n}\nfunction toLengthMapping(textEditInfos) {\n    const result = [];\n    let lastOffset = lengthZero;\n    for (const textEditInfo of textEditInfos) {\n        const spaceLength = lengthDiffNonNegative(lastOffset, textEditInfo.startOffset);\n        if (!lengthIsZero(spaceLength)) {\n            result.push(new LengthMapping(false, spaceLength, spaceLength));\n        }\n        const lengthBefore = lengthDiffNonNegative(textEditInfo.startOffset, textEditInfo.endOffset);\n        result.push(new LengthMapping(true, lengthBefore, textEditInfo.newLength));\n        lastOffset = textEditInfo.endOffset;\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 { Emitter } from '../../../../../base/common/event.js';\nimport { Disposable } from '../../../../../base/common/lifecycle.js';\nimport { BracketInfo, BracketPairWithMinIndentationInfo } from '../../../textModelBracketPairs.js';\nimport { TextEditInfo } from './beforeEditPositionMapper.js';\nimport { LanguageAgnosticBracketTokens } from './brackets.js';\nimport { lengthAdd, lengthGreaterThanEqual, lengthLessThan, lengthLessThanEqual, lengthsToRange, lengthZero, positionToLength, toLength } from './length.js';\nimport { parseDocument } from './parser.js';\nimport { DenseKeyProvider } from './smallImmutableSet.js';\nimport { FastTokenizer, TextBufferTokenizer } from './tokenizer.js';\nimport { CallbackIterable } from '../../../../../base/common/arrays.js';\nimport { combineTextEditInfos } from './combineTextEditInfos.js';\nexport class BracketPairsTree extends Disposable {\n    didLanguageChange(languageId) {\n        return this.brackets.didLanguageChange(languageId);\n    }\n    constructor(textModel, getLanguageConfiguration) {\n        super();\n        this.textModel = textModel;\n        this.getLanguageConfiguration = getLanguageConfiguration;\n        this.didChangeEmitter = new Emitter();\n        this.denseKeyProvider = new DenseKeyProvider();\n        this.brackets = new LanguageAgnosticBracketTokens(this.denseKeyProvider, this.getLanguageConfiguration);\n        this.onDidChange = this.didChangeEmitter.event;\n        this.queuedTextEditsForInitialAstWithoutTokens = [];\n        this.queuedTextEdits = [];\n        if (!textModel.tokenization.hasTokens) {\n            const brackets = this.brackets.getSingleLanguageBracketTokens(this.textModel.getLanguageId());\n            const tokenizer = new FastTokenizer(this.textModel.getValue(), brackets);\n            this.initialAstWithoutTokens = parseDocument(tokenizer, [], undefined, true);\n            this.astWithTokens = this.initialAstWithoutTokens;\n        }\n        else if (textModel.tokenization.backgroundTokenizationState === 2 /* BackgroundTokenizationState.Completed */) {\n            // Skip the initial ast, as there is no flickering.\n            // Directly create the tree with token information.\n            this.initialAstWithoutTokens = undefined;\n            this.astWithTokens = this.parseDocumentFromTextBuffer([], undefined, false);\n        }\n        else {\n            // We missed some token changes already, so we cannot use the fast tokenizer + delta increments\n            this.initialAstWithoutTokens = this.parseDocumentFromTextBuffer([], undefined, true);\n            this.astWithTokens = this.initialAstWithoutTokens;\n        }\n    }\n    //#region TextModel events\n    handleDidChangeBackgroundTokenizationState() {\n        if (this.textModel.tokenization.backgroundTokenizationState === 2 /* BackgroundTokenizationState.Completed */) {\n            const wasUndefined = this.initialAstWithoutTokens === undefined;\n            // Clear the initial tree as we can use the tree with token information now.\n            this.initialAstWithoutTokens = undefined;\n            if (!wasUndefined) {\n                this.didChangeEmitter.fire();\n            }\n        }\n    }\n    handleDidChangeTokens({ ranges }) {\n        const edits = ranges.map(r => new TextEditInfo(toLength(r.fromLineNumber - 1, 0), toLength(r.toLineNumber, 0), toLength(r.toLineNumber - r.fromLineNumber + 1, 0)));\n        this.handleEdits(edits, true);\n        if (!this.initialAstWithoutTokens) {\n            this.didChangeEmitter.fire();\n        }\n    }\n    handleContentChanged(change) {\n        const edits = TextEditInfo.fromModelContentChanges(change.changes);\n        this.handleEdits(edits, false);\n    }\n    handleEdits(edits, tokenChange) {\n        // Lazily queue the edits and only apply them when the tree is accessed.\n        const result = combineTextEditInfos(this.queuedTextEdits, edits);\n        this.queuedTextEdits = result;\n        if (this.initialAstWithoutTokens && !tokenChange) {\n            this.queuedTextEditsForInitialAstWithoutTokens = combineTextEditInfos(this.queuedTextEditsForInitialAstWithoutTokens, edits);\n        }\n    }\n    //#endregion\n    flushQueue() {\n        if (this.queuedTextEdits.length > 0) {\n            this.astWithTokens = this.parseDocumentFromTextBuffer(this.queuedTextEdits, this.astWithTokens, false);\n            this.queuedTextEdits = [];\n        }\n        if (this.queuedTextEditsForInitialAstWithoutTokens.length > 0) {\n            if (this.initialAstWithoutTokens) {\n                this.initialAstWithoutTokens = this.parseDocumentFromTextBuffer(this.queuedTextEditsForInitialAstWithoutTokens, this.initialAstWithoutTokens, false);\n            }\n            this.queuedTextEditsForInitialAstWithoutTokens = [];\n        }\n    }\n    /**\n     * @pure (only if isPure = true)\n    */\n    parseDocumentFromTextBuffer(edits, previousAst, immutable) {\n        // Is much faster if `isPure = false`.\n        const isPure = false;\n        const previousAstClone = isPure ? previousAst?.deepClone() : previousAst;\n        const tokenizer = new TextBufferTokenizer(this.textModel, this.brackets);\n        const result = parseDocument(tokenizer, edits, previousAstClone, immutable);\n        return result;\n    }\n    getBracketsInRange(range, onlyColorizedBrackets) {\n        this.flushQueue();\n        const startOffset = toLength(range.startLineNumber - 1, range.startColumn - 1);\n        const endOffset = toLength(range.endLineNumber - 1, range.endColumn - 1);\n        return new CallbackIterable(cb => {\n            const node = this.initialAstWithoutTokens || this.astWithTokens;\n            collectBrackets(node, lengthZero, node.length, startOffset, endOffset, cb, 0, 0, new Map(), onlyColorizedBrackets);\n        });\n    }\n    getBracketPairsInRange(range, includeMinIndentation) {\n        this.flushQueue();\n        const startLength = positionToLength(range.getStartPosition());\n        const endLength = positionToLength(range.getEndPosition());\n        return new CallbackIterable(cb => {\n            const node = this.initialAstWithoutTokens || this.astWithTokens;\n            const context = new CollectBracketPairsContext(cb, includeMinIndentation, this.textModel);\n            collectBracketPairs(node, lengthZero, node.length, startLength, endLength, context, 0, new Map());\n        });\n    }\n    getFirstBracketAfter(position) {\n        this.flushQueue();\n        const node = this.initialAstWithoutTokens || this.astWithTokens;\n        return getFirstBracketAfter(node, lengthZero, node.length, positionToLength(position));\n    }\n    getFirstBracketBefore(position) {\n        this.flushQueue();\n        const node = this.initialAstWithoutTokens || this.astWithTokens;\n        return getFirstBracketBefore(node, lengthZero, node.length, positionToLength(position));\n    }\n}\nfunction getFirstBracketBefore(node, nodeOffsetStart, nodeOffsetEnd, position) {\n    if (node.kind === 4 /* AstNodeKind.List */ || node.kind === 2 /* AstNodeKind.Pair */) {\n        const lengths = [];\n        for (const child of node.children) {\n            nodeOffsetEnd = lengthAdd(nodeOffsetStart, child.length);\n            lengths.push({ nodeOffsetStart, nodeOffsetEnd });\n            nodeOffsetStart = nodeOffsetEnd;\n        }\n        for (let i = lengths.length - 1; i >= 0; i--) {\n            const { nodeOffsetStart, nodeOffsetEnd } = lengths[i];\n            if (lengthLessThan(nodeOffsetStart, position)) {\n                const result = getFirstBracketBefore(node.children[i], nodeOffsetStart, nodeOffsetEnd, position);\n                if (result) {\n                    return result;\n                }\n            }\n        }\n        return null;\n    }\n    else if (node.kind === 3 /* AstNodeKind.UnexpectedClosingBracket */) {\n        return null;\n    }\n    else if (node.kind === 1 /* AstNodeKind.Bracket */) {\n        const range = lengthsToRange(nodeOffsetStart, nodeOffsetEnd);\n        return {\n            bracketInfo: node.bracketInfo,\n            range\n        };\n    }\n    return null;\n}\nfunction getFirstBracketAfter(node, nodeOffsetStart, nodeOffsetEnd, position) {\n    if (node.kind === 4 /* AstNodeKind.List */ || node.kind === 2 /* AstNodeKind.Pair */) {\n        for (const child of node.children) {\n            nodeOffsetEnd = lengthAdd(nodeOffsetStart, child.length);\n            if (lengthLessThan(position, nodeOffsetEnd)) {\n                const result = getFirstBracketAfter(child, nodeOffsetStart, nodeOffsetEnd, position);\n                if (result) {\n                    return result;\n                }\n            }\n            nodeOffsetStart = nodeOffsetEnd;\n        }\n        return null;\n    }\n    else if (node.kind === 3 /* AstNodeKind.UnexpectedClosingBracket */) {\n        return null;\n    }\n    else if (node.kind === 1 /* AstNodeKind.Bracket */) {\n        const range = lengthsToRange(nodeOffsetStart, nodeOffsetEnd);\n        return {\n            bracketInfo: node.bracketInfo,\n            range\n        };\n    }\n    return null;\n}\nfunction collectBrackets(node, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, push, level, nestingLevelOfEqualBracketType, levelPerBracketType, onlyColorizedBrackets, parentPairIsIncomplete = false) {\n    if (level > 200) {\n        return true;\n    }\n    whileLoop: while (true) {\n        switch (node.kind) {\n            case 4 /* AstNodeKind.List */: {\n                const childCount = node.childrenLength;\n                for (let i = 0; i < childCount; i++) {\n                    const child = node.getChild(i);\n                    if (!child) {\n                        continue;\n                    }\n                    nodeOffsetEnd = lengthAdd(nodeOffsetStart, child.length);\n                    if (lengthLessThanEqual(nodeOffsetStart, endOffset) &&\n                        lengthGreaterThanEqual(nodeOffsetEnd, startOffset)) {\n                        const childEndsAfterEnd = lengthGreaterThanEqual(nodeOffsetEnd, endOffset);\n                        if (childEndsAfterEnd) {\n                            // No child after this child in the requested window, don't recurse\n                            node = child;\n                            continue whileLoop;\n                        }\n                        const shouldContinue = collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, push, level, 0, levelPerBracketType, onlyColorizedBrackets);\n                        if (!shouldContinue) {\n                            return false;\n                        }\n                    }\n                    nodeOffsetStart = nodeOffsetEnd;\n                }\n                return true;\n            }\n            case 2 /* AstNodeKind.Pair */: {\n                const colorize = !onlyColorizedBrackets || !node.closingBracket || node.closingBracket.bracketInfo.closesColorized(node.openingBracket.bracketInfo);\n                let levelPerBracket = 0;\n                if (levelPerBracketType) {\n                    let existing = levelPerBracketType.get(node.openingBracket.text);\n                    if (existing === undefined) {\n                        existing = 0;\n                    }\n                    levelPerBracket = existing;\n                    if (colorize) {\n                        existing++;\n                        levelPerBracketType.set(node.openingBracket.text, existing);\n                    }\n                }\n                const childCount = node.childrenLength;\n                for (let i = 0; i < childCount; i++) {\n                    const child = node.getChild(i);\n                    if (!child) {\n                        continue;\n                    }\n                    nodeOffsetEnd = lengthAdd(nodeOffsetStart, child.length);\n                    if (lengthLessThanEqual(nodeOffsetStart, endOffset) &&\n                        lengthGreaterThanEqual(nodeOffsetEnd, startOffset)) {\n                        const childEndsAfterEnd = lengthGreaterThanEqual(nodeOffsetEnd, endOffset);\n                        if (childEndsAfterEnd && child.kind !== 1 /* AstNodeKind.Bracket */) {\n                            // No child after this child in the requested window, don't recurse\n                            // Don't do this for brackets because of unclosed/unopened brackets\n                            node = child;\n                            if (colorize) {\n                                level++;\n                                nestingLevelOfEqualBracketType = levelPerBracket + 1;\n                            }\n                            else {\n                                nestingLevelOfEqualBracketType = levelPerBracket;\n                            }\n                            continue whileLoop;\n                        }\n                        if (colorize || child.kind !== 1 /* AstNodeKind.Bracket */ || !node.closingBracket) {\n                            const shouldContinue = collectBrackets(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, push, colorize ? level + 1 : level, colorize ? levelPerBracket + 1 : levelPerBracket, levelPerBracketType, onlyColorizedBrackets, !node.closingBracket);\n                            if (!shouldContinue) {\n                                return false;\n                            }\n                        }\n                    }\n                    nodeOffsetStart = nodeOffsetEnd;\n                }\n                levelPerBracketType?.set(node.openingBracket.text, levelPerBracket);\n                return true;\n            }\n            case 3 /* AstNodeKind.UnexpectedClosingBracket */: {\n                const range = lengthsToRange(nodeOffsetStart, nodeOffsetEnd);\n                return push(new BracketInfo(range, level - 1, 0, true));\n            }\n            case 1 /* AstNodeKind.Bracket */: {\n                const range = lengthsToRange(nodeOffsetStart, nodeOffsetEnd);\n                return push(new BracketInfo(range, level - 1, nestingLevelOfEqualBracketType - 1, parentPairIsIncomplete));\n            }\n            case 0 /* AstNodeKind.Text */:\n                return true;\n        }\n    }\n}\nclass CollectBracketPairsContext {\n    constructor(push, includeMinIndentation, textModel) {\n        this.push = push;\n        this.includeMinIndentation = includeMinIndentation;\n        this.textModel = textModel;\n    }\n}\nfunction collectBracketPairs(node, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, context, level, levelPerBracketType) {\n    if (level > 200) {\n        return true;\n    }\n    let shouldContinue = true;\n    if (node.kind === 2 /* AstNodeKind.Pair */) {\n        let levelPerBracket = 0;\n        if (levelPerBracketType) {\n            let existing = levelPerBracketType.get(node.openingBracket.text);\n            if (existing === undefined) {\n                existing = 0;\n            }\n            levelPerBracket = existing;\n            existing++;\n            levelPerBracketType.set(node.openingBracket.text, existing);\n        }\n        const openingBracketEnd = lengthAdd(nodeOffsetStart, node.openingBracket.length);\n        let minIndentation = -1;\n        if (context.includeMinIndentation) {\n            minIndentation = node.computeMinIndentation(nodeOffsetStart, context.textModel);\n        }\n        shouldContinue = context.push(new BracketPairWithMinIndentationInfo(lengthsToRange(nodeOffsetStart, nodeOffsetEnd), lengthsToRange(nodeOffsetStart, openingBracketEnd), node.closingBracket\n            ? lengthsToRange(lengthAdd(openingBracketEnd, node.child?.length || lengthZero), nodeOffsetEnd)\n            : undefined, level, levelPerBracket, node, minIndentation));\n        nodeOffsetStart = openingBracketEnd;\n        if (shouldContinue && node.child) {\n            const child = node.child;\n            nodeOffsetEnd = lengthAdd(nodeOffsetStart, child.length);\n            if (lengthLessThanEqual(nodeOffsetStart, endOffset) &&\n                lengthGreaterThanEqual(nodeOffsetEnd, startOffset)) {\n                shouldContinue = collectBracketPairs(child, nodeOffsetStart, nodeOffsetEnd, startOffset, endOffset, context, level + 1, levelPerBracketType);\n                if (!shouldContinue) {\n                    return false;\n                }\n            }\n        }\n        levelPerBracketType?.set(node.openingBracket.text, levelPerBracket);\n    }\n    else {\n        let curOffset = nodeOffsetStart;\n        for (const child of node.children) {\n            const childOffset = curOffset;\n            curOffset = lengthAdd(curOffset, child.length);\n            if (lengthLessThanEqual(childOffset, endOffset) &&\n                lengthLessThanEqual(startOffset, curOffset)) {\n                shouldContinue = collectBracketPairs(child, childOffset, curOffset, startOffset, endOffset, context, level, levelPerBracketType);\n                if (!shouldContinue) {\n                    return false;\n                }\n            }\n        }\n    }\n    return shouldContinue;\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { CallbackIterable, compareBy } from '../../../../base/common/arrays.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { Disposable, DisposableStore, MutableDisposable } from '../../../../base/common/lifecycle.js';\nimport { Range } from '../../core/range.js';\nimport { ignoreBracketsInToken } from '../../languages/supports.js';\nimport { BracketsUtils } from '../../languages/supports/richEditBrackets.js';\nimport { BracketPairsTree } from './bracketPairsTree/bracketPairsTree.js';\nexport class BracketPairsTextModelPart extends Disposable {\n    get canBuildAST() {\n        const maxSupportedDocumentLength = /* max lines */ 50_000 * /* average column count */ 100;\n        return this.textModel.getValueLength() <= maxSupportedDocumentLength;\n    }\n    constructor(textModel, languageConfigurationService) {\n        super();\n        this.textModel = textModel;\n        this.languageConfigurationService = languageConfigurationService;\n        this.bracketPairsTree = this._register(new MutableDisposable());\n        this.onDidChangeEmitter = new Emitter();\n        this.onDidChange = this.onDidChangeEmitter.event;\n        this.bracketsRequested = false;\n    }\n    //#region TextModel events\n    handleLanguageConfigurationServiceChange(e) {\n        if (!e.languageId || this.bracketPairsTree.value?.object.didLanguageChange(e.languageId)) {\n            this.bracketPairsTree.clear();\n            this.updateBracketPairsTree();\n        }\n    }\n    handleDidChangeOptions(e) {\n        this.bracketPairsTree.clear();\n        this.updateBracketPairsTree();\n    }\n    handleDidChangeLanguage(e) {\n        this.bracketPairsTree.clear();\n        this.updateBracketPairsTree();\n    }\n    handleDidChangeContent(change) {\n        this.bracketPairsTree.value?.object.handleContentChanged(change);\n    }\n    handleDidChangeBackgroundTokenizationState() {\n        this.bracketPairsTree.value?.object.handleDidChangeBackgroundTokenizationState();\n    }\n    handleDidChangeTokens(e) {\n        this.bracketPairsTree.value?.object.handleDidChangeTokens(e);\n    }\n    //#endregion\n    updateBracketPairsTree() {\n        if (this.bracketsRequested && this.canBuildAST) {\n            if (!this.bracketPairsTree.value) {\n                const store = new DisposableStore();\n                this.bracketPairsTree.value = createDisposableRef(store.add(new BracketPairsTree(this.textModel, (languageId) => {\n                    return this.languageConfigurationService.getLanguageConfiguration(languageId);\n                })), store);\n                store.add(this.bracketPairsTree.value.object.onDidChange(e => this.onDidChangeEmitter.fire(e)));\n                this.onDidChangeEmitter.fire();\n            }\n        }\n        else {\n            if (this.bracketPairsTree.value) {\n                this.bracketPairsTree.clear();\n                // Important: Don't call fire if there was no change!\n                this.onDidChangeEmitter.fire();\n            }\n        }\n    }\n    /**\n     * Returns all bracket pairs that intersect the given range.\n     * The result is sorted by the start position.\n    */\n    getBracketPairsInRange(range) {\n        this.bracketsRequested = true;\n        this.updateBracketPairsTree();\n        return this.bracketPairsTree.value?.object.getBracketPairsInRange(range, false) || CallbackIterable.empty;\n    }\n    getBracketPairsInRangeWithMinIndentation(range) {\n        this.bracketsRequested = true;\n        this.updateBracketPairsTree();\n        return this.bracketPairsTree.value?.object.getBracketPairsInRange(range, true) || CallbackIterable.empty;\n    }\n    getBracketsInRange(range, onlyColorizedBrackets = false) {\n        this.bracketsRequested = true;\n        this.updateBracketPairsTree();\n        return this.bracketPairsTree.value?.object.getBracketsInRange(range, onlyColorizedBrackets) || CallbackIterable.empty;\n    }\n    findMatchingBracketUp(_bracket, _position, maxDuration) {\n        const position = this.textModel.validatePosition(_position);\n        const languageId = this.textModel.getLanguageIdAtPosition(position.lineNumber, position.column);\n        if (this.canBuildAST) {\n            const closingBracketInfo = this.languageConfigurationService\n                .getLanguageConfiguration(languageId)\n                .bracketsNew.getClosingBracketInfo(_bracket);\n            if (!closingBracketInfo) {\n                return null;\n            }\n            const bracketPair = this.getBracketPairsInRange(Range.fromPositions(_position, _position)).findLast((b) => closingBracketInfo.closes(b.openingBracketInfo));\n            if (bracketPair) {\n                return bracketPair.openingBracketRange;\n            }\n            return null;\n        }\n        else {\n            // Fallback to old bracket matching code:\n            const bracket = _bracket.toLowerCase();\n            const bracketsSupport = this.languageConfigurationService.getLanguageConfiguration(languageId).brackets;\n            if (!bracketsSupport) {\n                return null;\n            }\n            const data = bracketsSupport.textIsBracket[bracket];\n            if (!data) {\n                return null;\n            }\n            return stripBracketSearchCanceled(this._findMatchingBracketUp(data, position, createTimeBasedContinueBracketSearchPredicate(maxDuration)));\n        }\n    }\n    matchBracket(position, maxDuration) {\n        if (this.canBuildAST) {\n            const bracketPair = this.getBracketPairsInRange(Range.fromPositions(position, position)).filter((item) => item.closingBracketRange !== undefined &&\n                (item.openingBracketRange.containsPosition(position) ||\n                    item.closingBracketRange.containsPosition(position))).findLastMaxBy(compareBy((item) => item.openingBracketRange.containsPosition(position)\n                ? item.openingBracketRange\n                : item.closingBracketRange, Range.compareRangesUsingStarts));\n            if (bracketPair) {\n                return [bracketPair.openingBracketRange, bracketPair.closingBracketRange];\n            }\n            return null;\n        }\n        else {\n            // Fallback to old bracket matching code:\n            const continueSearchPredicate = createTimeBasedContinueBracketSearchPredicate(maxDuration);\n            return this._matchBracket(this.textModel.validatePosition(position), continueSearchPredicate);\n        }\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, continueSearchPredicate) {\n        const lineNumber = position.lineNumber;\n        const lineTokens = this.textModel.tokenization.getLineTokens(lineNumber);\n        const lineText = this.textModel.getLineContent(lineNumber);\n        const tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n        if (tokenIndex < 0) {\n            return null;\n        }\n        const currentModeBrackets = this.languageConfigurationService.getLanguageConfiguration(lineTokens.getLanguageId(tokenIndex)).brackets;\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], continueSearchPredicate);\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 = this.languageConfigurationService.getLanguageConfiguration(lineTokens.getLanguageId(prevTokenIndex)).brackets;\n            // check that previous token is not to be ignored\n            if (prevModeBrackets && !ignoreBracketsInToken(lineTokens.getStandardTokenType(prevTokenIndex))) {\n                const { 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], continueSearchPredicate);\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.languageId;\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.textModel.tokenization.getLineTokens(lineNumber);\n            const tokenCount = lineTokens.getCount();\n            const lineText = this.textModel.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.languageId;\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.textModel.getLineCount();\n        for (let lineNumber = position.lineNumber; lineNumber <= lineCount; lineNumber++) {\n            const lineTokens = this.textModel.tokenization.getLineTokens(lineNumber);\n            const tokenCount = lineTokens.getCount();\n            const lineText = this.textModel.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.textModel.validatePosition(_position);\n        if (this.canBuildAST) {\n            this.bracketsRequested = true;\n            this.updateBracketPairsTree();\n            return this.bracketPairsTree.value?.object.getFirstBracketBefore(position) || null;\n        }\n        let languageId = null;\n        let modeBrackets = null;\n        let bracketConfig = null;\n        for (let lineNumber = position.lineNumber; lineNumber >= 1; lineNumber--) {\n            const lineTokens = this.textModel.tokenization.getLineTokens(lineNumber);\n            const tokenCount = lineTokens.getCount();\n            const lineText = this.textModel.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 = this.languageConfigurationService.getLanguageConfiguration(languageId).brackets;\n                    bracketConfig = this.languageConfigurationService.getLanguageConfiguration(languageId).bracketsNew;\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 && bracketConfig && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n                        const r = BracketsUtils.findPrevBracketInRange(modeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n                        if (r) {\n                            return this._toFoundBracket(bracketConfig, r);\n                        }\n                        prevSearchInToken = false;\n                    }\n                    languageId = tokenLanguageId;\n                    modeBrackets = this.languageConfigurationService.getLanguageConfiguration(languageId).brackets;\n                    bracketConfig = this.languageConfigurationService.getLanguageConfiguration(languageId).bracketsNew;\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 (bracketConfig && modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n                        const r = BracketsUtils.findPrevBracketInRange(modeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n                        if (r) {\n                            return this._toFoundBracket(bracketConfig, r);\n                        }\n                    }\n                }\n                prevSearchInToken = searchInToken;\n            }\n            if (bracketConfig && modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n                const r = BracketsUtils.findPrevBracketInRange(modeBrackets.reversedRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n                if (r) {\n                    return this._toFoundBracket(bracketConfig, r);\n                }\n            }\n        }\n        return null;\n    }\n    findNextBracket(_position) {\n        const position = this.textModel.validatePosition(_position);\n        if (this.canBuildAST) {\n            this.bracketsRequested = true;\n            this.updateBracketPairsTree();\n            return this.bracketPairsTree.value?.object.getFirstBracketAfter(position) || null;\n        }\n        const lineCount = this.textModel.getLineCount();\n        let languageId = null;\n        let modeBrackets = null;\n        let bracketConfig = null;\n        for (let lineNumber = position.lineNumber; lineNumber <= lineCount; lineNumber++) {\n            const lineTokens = this.textModel.tokenization.getLineTokens(lineNumber);\n            const tokenCount = lineTokens.getCount();\n            const lineText = this.textModel.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 = this.languageConfigurationService.getLanguageConfiguration(languageId).brackets;\n                    bracketConfig = this.languageConfigurationService.getLanguageConfiguration(languageId).bracketsNew;\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 (bracketConfig && modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n                        const r = BracketsUtils.findNextBracketInRange(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n                        if (r) {\n                            return this._toFoundBracket(bracketConfig, r);\n                        }\n                        prevSearchInToken = false;\n                    }\n                    languageId = tokenLanguageId;\n                    modeBrackets = this.languageConfigurationService.getLanguageConfiguration(languageId).brackets;\n                    bracketConfig = this.languageConfigurationService.getLanguageConfiguration(languageId).bracketsNew;\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 (bracketConfig && modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n                        const r = BracketsUtils.findNextBracketInRange(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n                        if (r) {\n                            return this._toFoundBracket(bracketConfig, r);\n                        }\n                    }\n                }\n                prevSearchInToken = searchInToken;\n            }\n            if (bracketConfig && modeBrackets && prevSearchInToken && searchStartOffset !== searchEndOffset) {\n                const r = BracketsUtils.findNextBracketInRange(modeBrackets.forwardRegex, lineNumber, lineText, searchStartOffset, searchEndOffset);\n                if (r) {\n                    return this._toFoundBracket(bracketConfig, r);\n                }\n            }\n        }\n        return null;\n    }\n    findEnclosingBrackets(_position, maxDuration) {\n        const position = this.textModel.validatePosition(_position);\n        if (this.canBuildAST) {\n            const range = Range.fromPositions(position);\n            const bracketPair = this.getBracketPairsInRange(Range.fromPositions(position, position)).findLast((item) => item.closingBracketRange !== undefined && item.range.strictContainsRange(range));\n            if (bracketPair) {\n                return [bracketPair.openingBracketRange, bracketPair.closingBracketRange];\n            }\n            return null;\n        }\n        const continueSearchPredicate = createTimeBasedContinueBracketSearchPredicate(maxDuration);\n        const lineCount = this.textModel.getLineCount();\n        const savedCounts = new Map();\n        let counts = [];\n        const resetCounts = (languageId, modeBrackets) => {\n            if (!savedCounts.has(languageId)) {\n                const 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 = null;\n        let modeBrackets = null;\n        for (let lineNumber = position.lineNumber; lineNumber <= lineCount; lineNumber++) {\n            const lineTokens = this.textModel.tokenization.getLineTokens(lineNumber);\n            const tokenCount = lineTokens.getCount();\n            const lineText = this.textModel.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 = this.languageConfigurationService.getLanguageConfiguration(languageId).brackets;\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 = this.languageConfigurationService.getLanguageConfiguration(languageId).brackets;\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(bracketConfig, r) {\n        if (!r) {\n            return null;\n        }\n        let text = this.textModel.getValueInRange(r);\n        text = text.toLowerCase();\n        const bracketInfo = bracketConfig.getBracketInfo(text);\n        if (!bracketInfo) {\n            return null;\n        }\n        return {\n            range: r,\n            bracketInfo\n        };\n    }\n}\nfunction createDisposableRef(object, disposable) {\n    return {\n        object,\n        dispose: () => disposable?.dispose(),\n    };\n}\nfunction createTimeBasedContinueBracketSearchPredicate(maxDuration) {\n    if (typeof maxDuration === 'undefined') {\n        return () => true;\n    }\n    else {\n        const startTime = Date.now();\n        return () => {\n            return (Date.now() - startTime <= maxDuration);\n        };\n    }\n}\nclass BracketSearchCanceled {\n    static { this.INSTANCE = new BracketSearchCanceled(); }\n    constructor() {\n        this._searchCanceledBrand = undefined;\n    }\n}\nfunction stripBracketSearchCanceled(result) {\n    if (result instanceof BracketSearchCanceled) {\n        return null;\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 { Emitter } from '../../../../base/common/event.js';\nimport { Disposable } from '../../../../base/common/lifecycle.js';\nimport { Range } from '../../core/range.js';\nimport { editorBracketHighlightingForeground1, editorBracketHighlightingForeground2, editorBracketHighlightingForeground3, editorBracketHighlightingForeground4, editorBracketHighlightingForeground5, editorBracketHighlightingForeground6, editorBracketHighlightingUnexpectedBracketForeground } from '../../core/editorColorRegistry.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nexport class ColorizedBracketPairsDecorationProvider extends Disposable {\n    constructor(textModel) {\n        super();\n        this.textModel = textModel;\n        this.colorProvider = new ColorProvider();\n        this.onDidChangeEmitter = new Emitter();\n        this.onDidChange = this.onDidChangeEmitter.event;\n        this.colorizationOptions = textModel.getOptions().bracketPairColorizationOptions;\n        this._register(textModel.bracketPairs.onDidChange(e => {\n            this.onDidChangeEmitter.fire();\n        }));\n    }\n    //#region TextModel events\n    handleDidChangeOptions(e) {\n        this.colorizationOptions = this.textModel.getOptions().bracketPairColorizationOptions;\n    }\n    //#endregion\n    getDecorationsInRange(range, ownerId, filterOutValidation, onlyMinimapDecorations) {\n        if (onlyMinimapDecorations) {\n            // Bracket pair colorization decorations are not rendered in the minimap\n            return [];\n        }\n        if (ownerId === undefined) {\n            return [];\n        }\n        if (!this.colorizationOptions.enabled) {\n            return [];\n        }\n        const result = this.textModel.bracketPairs.getBracketsInRange(range, true).map(bracket => ({\n            id: `bracket${bracket.range.toString()}-${bracket.nestingLevel}`,\n            options: {\n                description: 'BracketPairColorization',\n                inlineClassName: this.colorProvider.getInlineClassName(bracket, this.colorizationOptions.independentColorPoolPerBracketType),\n            },\n            ownerId: 0,\n            range: bracket.range,\n        })).toArray();\n        return result;\n    }\n    getAllDecorations(ownerId, filterOutValidation) {\n        if (ownerId === undefined) {\n            return [];\n        }\n        if (!this.colorizationOptions.enabled) {\n            return [];\n        }\n        return this.getDecorationsInRange(new Range(1, 1, this.textModel.getLineCount(), 1), ownerId, filterOutValidation);\n    }\n}\nclass ColorProvider {\n    constructor() {\n        this.unexpectedClosingBracketClassName = 'unexpected-closing-bracket';\n    }\n    getInlineClassName(bracket, independentColorPoolPerBracketType) {\n        if (bracket.isInvalid) {\n            return this.unexpectedClosingBracketClassName;\n        }\n        return this.getInlineClassNameOfLevel(independentColorPoolPerBracketType ? bracket.nestingLevelOfEqualBracketType : bracket.nestingLevel);\n    }\n    getInlineClassNameOfLevel(level) {\n        // To support a dynamic amount of colors up to 6 colors,\n        // we use a number that is a lcm of all numbers from 1 to 6.\n        return `bracket-highlighting-${level % 30}`;\n    }\n}\nregisterThemingParticipant((theme, collector) => {\n    const colors = [\n        editorBracketHighlightingForeground1,\n        editorBracketHighlightingForeground2,\n        editorBracketHighlightingForeground3,\n        editorBracketHighlightingForeground4,\n        editorBracketHighlightingForeground5,\n        editorBracketHighlightingForeground6\n    ];\n    const colorProvider = new ColorProvider();\n    collector.addRule(`.monaco-editor .${colorProvider.unexpectedClosingBracketClassName} { color: ${theme.getColor(editorBracketHighlightingUnexpectedBracketForeground)}; }`);\n    const colorValues = colors\n        .map(c => theme.getColor(c))\n        .filter((c) => !!c)\n        .filter(c => !c.isTransparent());\n    for (let level = 0; level < 30; level++) {\n        const color = colorValues[level % colorValues.length];\n        collector.addRule(`.monaco-editor .${colorProvider.getInlineClassNameOfLevel(level)} { color: ${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 * as buffer from '../../../base/common/buffer.js';\nimport { decodeUTF16LE } from './stringBuilder.js';\nfunction escapeNewLine(str) {\n    return (str\n        .replace(/\\n/g, '\\\\n')\n        .replace(/\\r/g, '\\\\r'));\n}\nexport class TextChange {\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    constructor(oldPosition, oldText, newPosition, newText) {\n        this.oldPosition = oldPosition;\n        this.oldText = oldText;\n        this.newPosition = newPosition;\n        this.newText = newText;\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        const result = [];\n        let 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        const result = [];\n        let 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 *--------------------------------------------------------------------------------------------*/\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 '../core/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    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    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    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    get type() {\n        return 0 /* UndoRedoElementType.Resource */;\n    }\n    get resource() {\n        if (URI.isUri(this.model)) {\n            return this.model;\n        }\n        return this.model.uri;\n    }\n    constructor(label, code, model, beforeCursorState) {\n        this.label = label;\n        this.code = code;\n        this.model = model;\n        this._data = SingleModelEditStackData.create(model, beforeCursorState);\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    get resources() {\n        return this._editStackElementsArr.map(editStackElement => editStackElement.resource);\n    }\n    constructor(label, code, editStackElements) {\n        this.label = label;\n        this.code = code;\n        this.type = 1 /* UndoRedoElementType.Workspace */;\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    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        const 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 /* EndOfLineSequence.LF */;\n    }\n    else {\n        return 1 /* EndOfLineSequence.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, group) {\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(nls.localize('edit', \"Typing\"), 'undoredo.textBufferEdit', this._model, beforeCursorState);\n        this._undoRedoService.pushElement(newElement, group);\n        return newElement;\n    }\n    pushEOL(eol) {\n        const editStackElement = this._getOrCreateEditStackElement(null, undefined);\n        this._model.setEOL(eol);\n        editStackElement.append(this._model, [], getModelEOL(this._model), this._model.getAlternativeVersionId(), null);\n    }\n    pushEditOperation(beforeCursorState, editOperations, cursorStateComputer, group) {\n        const editStackElement = this._getOrCreateEditStackElement(beforeCursorState, group);\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 { Disposable } from '../../../base/common/lifecycle.js';\nexport class TextModelPart extends Disposable {\n    constructor() {\n        super(...arguments);\n        this._isDisposed = false;\n    }\n    dispose() {\n        super.dispose();\n        this._isDisposed = true;\n    }\n    assertNotDisposed() {\n        if (this._isDisposed) {\n            throw new Error('TextModelPart is disposed!');\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 * Returns:\n *  - -1 => the line consists of whitespace\n *  - otherwise => the indent level is returned value\n */\nexport function computeIndentLevel(line, tabSize) {\n    let indent = 0;\n    let i = 0;\n    const len = line.length;\n    while (i < len) {\n        const chCode = line.charCodeAt(i);\n        if (chCode === 32 /* CharCode.Space */) {\n            indent++;\n        }\n        else if (chCode === 9 /* CharCode.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","/*---------------------------------------------------------------------------------------------\n *  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 HorizontalGuidesState;\n(function (HorizontalGuidesState) {\n    HorizontalGuidesState[HorizontalGuidesState[\"Disabled\"] = 0] = \"Disabled\";\n    HorizontalGuidesState[HorizontalGuidesState[\"EnabledForActive\"] = 1] = \"EnabledForActive\";\n    HorizontalGuidesState[HorizontalGuidesState[\"Enabled\"] = 2] = \"Enabled\";\n})(HorizontalGuidesState || (HorizontalGuidesState = {}));\nexport class IndentGuide {\n    constructor(visibleColumn, column, className, \n    /**\n     * If set, this indent guide is a horizontal guide (no vertical part).\n     * It starts at visibleColumn and continues until endColumn.\n    */\n    horizontalLine, \n    /**\n     * If set (!= -1), only show this guide for wrapped lines that don't contain this model column, but are after it.\n    */\n    forWrappedLinesAfterColumn, forWrappedLinesBeforeOrAtColumn) {\n        this.visibleColumn = visibleColumn;\n        this.column = column;\n        this.className = className;\n        this.horizontalLine = horizontalLine;\n        this.forWrappedLinesAfterColumn = forWrappedLinesAfterColumn;\n        this.forWrappedLinesBeforeOrAtColumn = forWrappedLinesBeforeOrAtColumn;\n        if ((visibleColumn !== -1) === (column !== -1)) {\n            throw new Error();\n        }\n    }\n}\nexport class IndentGuideHorizontalLine {\n    constructor(top, endColumn) {\n        this.top = top;\n        this.endColumn = 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 { findLast } from '../../../base/common/arraysFind.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { CursorColumns } from '../core/cursorColumns.js';\nimport { Range } from '../core/range.js';\nimport { TextModelPart } from './textModelPart.js';\nimport { computeIndentLevel } from './utils.js';\nimport { HorizontalGuidesState, IndentGuide, IndentGuideHorizontalLine } from '../textModelGuides.js';\nimport { BugIndicatingError } from '../../../base/common/errors.js';\nexport class GuidesTextModelPart extends TextModelPart {\n    constructor(textModel, languageConfigurationService) {\n        super();\n        this.textModel = textModel;\n        this.languageConfigurationService = languageConfigurationService;\n    }\n    getLanguageConfiguration(languageId) {\n        return this.languageConfigurationService.getLanguageConfiguration(languageId);\n    }\n    _computeIndentLevel(lineIndex) {\n        return computeIndentLevel(this.textModel.getLineContent(lineIndex + 1), this.textModel.getOptions().tabSize);\n    }\n    getActiveIndentGuide(lineNumber, minLineNumber, maxLineNumber) {\n        this.assertNotDisposed();\n        const lineCount = this.textModel.getLineCount();\n        if (lineNumber < 1 || lineNumber > lineCount) {\n            throw new BugIndicatingError('Illegal value for lineNumber');\n        }\n        const foldingRules = this.getLanguageConfiguration(this.textModel.getLanguageId()).foldingRules;\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 &&\n                (up_aboveContentLineIndex === -2 ||\n                    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                    const 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                    const 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                    const 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 &&\n                (down_belowContentLineIndex === -2 ||\n                    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                    const 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 &&\n                (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 && upLineNumber >= 1) {\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.textModel.getOptions().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 && downLineNumber <= lineCount) {\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.textModel.getOptions().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 &&\n                    downLineIndentLevel >= 0 &&\n                    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 &&\n                    upLineIndentLevel >= 0 &&\n                    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    getLinesBracketGuides(startLineNumber, endLineNumber, activePosition, options) {\n        const result = [];\n        for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n            result.push([]);\n        }\n        // If requested, this could be made configurable.\n        const includeSingleLinePairs = true;\n        const bracketPairs = this.textModel.bracketPairs.getBracketPairsInRangeWithMinIndentation(new Range(startLineNumber, 1, endLineNumber, this.textModel.getLineMaxColumn(endLineNumber))).toArray();\n        let activeBracketPairRange = undefined;\n        if (activePosition && bracketPairs.length > 0) {\n            const bracketsContainingActivePosition = (startLineNumber <= activePosition.lineNumber &&\n                activePosition.lineNumber <= endLineNumber\n                // We don't need to query the brackets again if the cursor is in the viewport\n                ? bracketPairs\n                : this.textModel.bracketPairs.getBracketPairsInRange(Range.fromPositions(activePosition)).toArray()).filter((bp) => Range.strictContainsPosition(bp.range, activePosition));\n            activeBracketPairRange = findLast(bracketsContainingActivePosition, (i) => includeSingleLinePairs || i.range.startLineNumber !== i.range.endLineNumber)?.range;\n        }\n        const independentColorPoolPerBracketType = this.textModel.getOptions().bracketPairColorizationOptions.independentColorPoolPerBracketType;\n        const colorProvider = new BracketPairGuidesClassNames();\n        for (const pair of bracketPairs) {\n            /*\n\n\n                    {\n                    |\n                    }\n\n                    {\n                    |\n                    ----}\n\n                ____{\n                |test\n                ----}\n\n                renderHorizontalEndLineAtTheBottom:\n                    {\n                    |\n                    |x}\n                    --\n                renderHorizontalEndLineAtTheBottom:\n                ____{\n                |test\n                | x }\n                ----\n            */\n            if (!pair.closingBracketRange) {\n                continue;\n            }\n            const isActive = activeBracketPairRange && pair.range.equalsRange(activeBracketPairRange);\n            if (!isActive && !options.includeInactive) {\n                continue;\n            }\n            const className = colorProvider.getInlineClassName(pair.nestingLevel, pair.nestingLevelOfEqualBracketType, independentColorPoolPerBracketType) +\n                (options.highlightActive && isActive\n                    ? ' ' + colorProvider.activeClassName\n                    : '');\n            const start = pair.openingBracketRange.getStartPosition();\n            const end = pair.closingBracketRange.getStartPosition();\n            const horizontalGuides = options.horizontalGuides === HorizontalGuidesState.Enabled || (options.horizontalGuides === HorizontalGuidesState.EnabledForActive && isActive);\n            if (pair.range.startLineNumber === pair.range.endLineNumber) {\n                if (includeSingleLinePairs && horizontalGuides) {\n                    result[pair.range.startLineNumber - startLineNumber].push(new IndentGuide(-1, pair.openingBracketRange.getEndPosition().column, className, new IndentGuideHorizontalLine(false, end.column), -1, -1));\n                }\n                continue;\n            }\n            const endVisibleColumn = this.getVisibleColumnFromPosition(end);\n            const startVisibleColumn = this.getVisibleColumnFromPosition(pair.openingBracketRange.getStartPosition());\n            const guideVisibleColumn = Math.min(startVisibleColumn, endVisibleColumn, pair.minVisibleColumnIndentation + 1);\n            let renderHorizontalEndLineAtTheBottom = false;\n            const firstNonWsIndex = strings.firstNonWhitespaceIndex(this.textModel.getLineContent(pair.closingBracketRange.startLineNumber));\n            const hasTextBeforeClosingBracket = firstNonWsIndex < pair.closingBracketRange.startColumn - 1;\n            if (hasTextBeforeClosingBracket) {\n                renderHorizontalEndLineAtTheBottom = true;\n            }\n            const visibleGuideStartLineNumber = Math.max(start.lineNumber, startLineNumber);\n            const visibleGuideEndLineNumber = Math.min(end.lineNumber, endLineNumber);\n            const offset = renderHorizontalEndLineAtTheBottom ? 1 : 0;\n            for (let l = visibleGuideStartLineNumber; l < visibleGuideEndLineNumber + offset; l++) {\n                result[l - startLineNumber].push(new IndentGuide(guideVisibleColumn, -1, className, null, l === start.lineNumber ? start.column : -1, l === end.lineNumber ? end.column : -1));\n            }\n            if (horizontalGuides) {\n                if (start.lineNumber >= startLineNumber && startVisibleColumn > guideVisibleColumn) {\n                    result[start.lineNumber - startLineNumber].push(new IndentGuide(guideVisibleColumn, -1, className, new IndentGuideHorizontalLine(false, start.column), -1, -1));\n                }\n                if (end.lineNumber <= endLineNumber && endVisibleColumn > guideVisibleColumn) {\n                    result[end.lineNumber - startLineNumber].push(new IndentGuide(guideVisibleColumn, -1, className, new IndentGuideHorizontalLine(!renderHorizontalEndLineAtTheBottom, end.column), -1, -1));\n                }\n            }\n        }\n        for (const guides of result) {\n            guides.sort((a, b) => a.visibleColumn - b.visibleColumn);\n        }\n        return result;\n    }\n    getVisibleColumnFromPosition(position) {\n        return (CursorColumns.visibleColumnFromColumn(this.textModel.getLineContent(position.lineNumber), position.column, this.textModel.getOptions().tabSize) + 1);\n    }\n    getLinesIndentGuides(startLineNumber, endLineNumber) {\n        this.assertNotDisposed();\n        const lineCount = this.textModel.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 options = this.textModel.getOptions();\n        const foldingRules = this.getLanguageConfiguration(this.textModel.getLanguageId()).foldingRules;\n        const offSide = Boolean(foldingRules && foldingRules.offSide);\n        const 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            const 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 / 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                    const indent = this._computeIndentLevel(lineIndex);\n                    if (indent >= 0) {\n                        aboveContentLineIndex = lineIndex;\n                        aboveContentLineIndent = indent;\n                        break;\n                    }\n                }\n            }\n            if (belowContentLineIndex !== -1 &&\n                (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                    const 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        const options = this.textModel.getOptions();\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 / options.indentSize);\n        }\n        else if (aboveContentLineIndent === belowContentLineIndent) {\n            // we are in between two regions\n            return Math.ceil(belowContentLineIndent / options.indentSize);\n        }\n        else {\n            if (offSide) {\n                // same level as region below\n                return Math.ceil(belowContentLineIndent / options.indentSize);\n            }\n            else {\n                // we are inside the region that ends below\n                return 1 + Math.floor(belowContentLineIndent / options.indentSize);\n            }\n        }\n    }\n}\nexport class BracketPairGuidesClassNames {\n    constructor() {\n        this.activeClassName = 'indent-active';\n    }\n    getInlineClassName(nestingLevel, nestingLevelOfEqualBracketType, independentColorPoolPerBracketType) {\n        return this.getInlineClassNameOfLevel(independentColorPoolPerBracketType ? nestingLevelOfEqualBracketType : nestingLevel);\n    }\n    getInlineClassNameOfLevel(level) {\n        // To support a dynamic amount of colors up to 6 colors,\n        // we use a number that is a lcm of all numbers from 1 to 6.\n        return `bracket-indent-guide lvl-${level % 30}`;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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        const aCharCode = a.charCodeAt(i);\n        const 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        const aCharCode = a.charCodeAt(j);\n        if (aCharCode === 32 /* CharCode.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        const bCharCode = b.charCodeAt(j);\n        if (bCharCode === 32 /* CharCode.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    const tabsDiff = Math.abs(aTabsCount - bTabsCount);\n    const 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 /* CharCode.Space */ && a.charCodeAt(bSpacesCnt - 1) === 32 /* CharCode.Space */) {\n                if (a.charCodeAt(a.length - 1) === 44 /* CharCode.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    const spacesDiffCount = [0, 0, 0, 0, 0, 0, 0, 0, 0]; // `tabSize` scores\n    const tmp = new SpacesDiffResult();\n    for (let lineNumber = 1; lineNumber <= linesCount; lineNumber++) {\n        const currentLineLength = source.getLineLength(lineNumber);\n        const 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            const charCode = (useCurrentLineText ? currentLineText.charCodeAt(j) : source.getLineCharCode(lineNumber, j));\n            if (charCode === 9 /* CharCode.Tab */) {\n                currentLineTabsCount++;\n            }\n            else if (charCode === 32 /* CharCode.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        const 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            const 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 /* Constants.ColorMask */) >>> 0 /* Constants.ColorOffset */);\n}\nfunction setNodeColor(node, color) {\n    node.metadata = ((node.metadata & 254 /* Constants.ColorMaskInverse */) | (color << 0 /* Constants.ColorOffset */));\n}\nfunction getNodeIsVisited(node) {\n    return ((node.metadata & 2 /* Constants.IsVisitedMask */) >>> 1 /* Constants.IsVisitedOffset */) === 1;\n}\nfunction setNodeIsVisited(node, value) {\n    node.metadata = ((node.metadata & 253 /* Constants.IsVisitedMaskInverse */) | ((value ? 1 : 0) << 1 /* Constants.IsVisitedOffset */));\n}\nfunction getNodeIsForValidation(node) {\n    return ((node.metadata & 4 /* Constants.IsForValidationMask */) >>> 2 /* Constants.IsForValidationOffset */) === 1;\n}\nfunction setNodeIsForValidation(node, value) {\n    node.metadata = ((node.metadata & 251 /* Constants.IsForValidationMaskInverse */) | ((value ? 1 : 0) << 2 /* Constants.IsForValidationOffset */));\n}\nfunction getNodeIsInGlyphMargin(node) {\n    return ((node.metadata & 64 /* Constants.IsMarginMask */) >>> 6 /* Constants.IsMarginOffset */) === 1;\n}\nfunction setNodeIsInGlyphMargin(node, value) {\n    node.metadata = ((node.metadata & 191 /* Constants.IsMarginMaskInverse */) | ((value ? 1 : 0) << 6 /* Constants.IsMarginOffset */));\n}\nfunction getNodeStickiness(node) {\n    return ((node.metadata & 24 /* Constants.StickinessMask */) >>> 3 /* Constants.StickinessOffset */);\n}\nfunction _setNodeStickiness(node, stickiness) {\n    node.metadata = ((node.metadata & 231 /* Constants.StickinessMaskInverse */) | (stickiness << 3 /* Constants.StickinessOffset */));\n}\nfunction getCollapseOnReplaceEdit(node) {\n    return ((node.metadata & 32 /* Constants.CollapseOnReplaceEditMask */) >>> 5 /* Constants.CollapseOnReplaceEditOffset */) === 1;\n}\nfunction setCollapseOnReplaceEdit(node, value) {\n    node.metadata = ((node.metadata & 223 /* Constants.CollapseOnReplaceEditMaskInverse */) | ((value ? 1 : 0) << 5 /* Constants.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 /* NodeColor.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        setNodeIsInGlyphMargin(this, false);\n        _setNodeStickiness(this, 1 /* TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges */);\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        const className = this.options.className;\n        setNodeIsForValidation(this, (className === \"squiggly-error\" /* ClassName.EditorErrorDecoration */\n            || className === \"squiggly-warning\" /* ClassName.EditorWarningDecoration */\n            || className === \"squiggly-info\" /* ClassName.EditorInfoDecoration */));\n        setNodeIsInGlyphMargin(this, this.options.glyphMarginClassName !== null);\n        _setNodeStickiness(this, this.options.stickiness);\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 /* NodeColor.Black */);\nexport class IntervalTree {\n    constructor() {\n        this.root = SENTINEL;\n        this.requestNormalizeDelta = false;\n    }\n    intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations) {\n        if (this.root === SENTINEL) {\n            return [];\n        }\n        return intervalSearch(this, start, end, filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations);\n    }\n    search(filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations) {\n        if (this.root === SENTINEL) {\n            return [];\n        }\n        return search(this, filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations);\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 /* MarkerMoveSemantics.ForceMove */) {\n        return false;\n    }\n    if (moveSemantics === 2 /* MarkerMoveSemantics.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 /* TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges */\n        || nodeStickiness === 2 /* TrackedRangeStickiness.GrowsOnlyWhenTypingBefore */);\n    const endStickToPreviousCharacter = (nodeStickiness === 1 /* TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges */\n        || nodeStickiness === 2 /* TrackedRangeStickiness.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 /* MarkerMoveSemantics.ForceMove */ : (deletingCnt > 0 ? 2 /* MarkerMoveSemantics.ForceStay */ : 0 /* MarkerMoveSemantics.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 /* MarkerMoveSemantics.ForceStay */ : 0 /* MarkerMoveSemantics.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 /* MarkerMoveSemantics.ForceMove */ : 0 /* MarkerMoveSemantics.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    const 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 /* Constants.MIN_SAFE_DELTA */ || node.delta > 1073741824 /* Constants.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    const 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    const 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, onlyMarginDecorations) {\n    let node = T.root;\n    let delta = 0;\n    let nodeStart = 0;\n    let nodeEnd = 0;\n    const 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 (onlyMarginDecorations && !getNodeIsInGlyphMargin(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, onlyMarginDecorations) {\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    const 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 (onlyMarginDecorations && !getNodeIsInGlyphMargin(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 /* NodeColor.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 /* NodeColor.Red */) {\n        if (x.parent === x.parent.parent.left) {\n            const y = x.parent.parent.right;\n            if (getNodeColor(y) === 1 /* NodeColor.Red */) {\n                setNodeColor(x.parent, 0 /* NodeColor.Black */);\n                setNodeColor(y, 0 /* NodeColor.Black */);\n                setNodeColor(x.parent.parent, 1 /* NodeColor.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 /* NodeColor.Black */);\n                setNodeColor(x.parent.parent, 1 /* NodeColor.Red */);\n                rightRotate(T, x.parent.parent);\n            }\n        }\n        else {\n            const y = x.parent.parent.left;\n            if (getNodeColor(y) === 1 /* NodeColor.Red */) {\n                setNodeColor(x.parent, 0 /* NodeColor.Black */);\n                setNodeColor(y, 0 /* NodeColor.Black */);\n                setNodeColor(x.parent.parent, 1 /* NodeColor.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 /* NodeColor.Black */);\n                setNodeColor(x.parent.parent, 1 /* NodeColor.Red */);\n                leftRotate(T, x.parent.parent);\n            }\n        }\n    }\n    setNodeColor(T.root, 0 /* NodeColor.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 /* NodeColor.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 /* Constants.MIN_SAFE_DELTA */ || x.delta > 1073741824 /* Constants.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 /* Constants.MIN_SAFE_DELTA */ || x.delta > 1073741824 /* Constants.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 /* Constants.MIN_SAFE_DELTA */ || y.delta > 1073741824 /* Constants.MAX_SAFE_DELTA */) {\n            T.requestNormalizeDelta = true;\n        }\n    }\n    if (y === T.root) {\n        T.root = x;\n        setNodeColor(x, 0 /* NodeColor.Black */);\n        z.detach();\n        resetSentinel();\n        recomputeMaxEnd(x);\n        T.root.parent = SENTINEL;\n        return;\n    }\n    const yWasRed = (getNodeColor(y) === 1 /* NodeColor.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 /* NodeColor.Black */) {\n        if (x === x.parent.left) {\n            w = x.parent.right;\n            if (getNodeColor(w) === 1 /* NodeColor.Red */) {\n                setNodeColor(w, 0 /* NodeColor.Black */);\n                setNodeColor(x.parent, 1 /* NodeColor.Red */);\n                leftRotate(T, x.parent);\n                w = x.parent.right;\n            }\n            if (getNodeColor(w.left) === 0 /* NodeColor.Black */ && getNodeColor(w.right) === 0 /* NodeColor.Black */) {\n                setNodeColor(w, 1 /* NodeColor.Red */);\n                x = x.parent;\n            }\n            else {\n                if (getNodeColor(w.right) === 0 /* NodeColor.Black */) {\n                    setNodeColor(w.left, 0 /* NodeColor.Black */);\n                    setNodeColor(w, 1 /* NodeColor.Red */);\n                    rightRotate(T, w);\n                    w = x.parent.right;\n                }\n                setNodeColor(w, getNodeColor(x.parent));\n                setNodeColor(x.parent, 0 /* NodeColor.Black */);\n                setNodeColor(w.right, 0 /* NodeColor.Black */);\n                leftRotate(T, x.parent);\n                x = T.root;\n            }\n        }\n        else {\n            w = x.parent.left;\n            if (getNodeColor(w) === 1 /* NodeColor.Red */) {\n                setNodeColor(w, 0 /* NodeColor.Black */);\n                setNodeColor(x.parent, 1 /* NodeColor.Red */);\n                rightRotate(T, x.parent);\n                w = x.parent.left;\n            }\n            if (getNodeColor(w.left) === 0 /* NodeColor.Black */ && getNodeColor(w.right) === 0 /* NodeColor.Black */) {\n                setNodeColor(w, 1 /* NodeColor.Red */);\n                x = x.parent;\n            }\n            else {\n                if (getNodeColor(w.left) === 0 /* NodeColor.Black */) {\n                    setNodeColor(w.right, 0 /* NodeColor.Black */);\n                    setNodeColor(w, 1 /* NodeColor.Red */);\n                    leftRotate(T, w);\n                    w = x.parent.left;\n                }\n                setNodeColor(w, getNodeColor(x.parent));\n                setNodeColor(x.parent, 0 /* NodeColor.Black */);\n                setNodeColor(w.left, 0 /* NodeColor.Black */);\n                rightRotate(T, x.parent);\n                x = T.root;\n            }\n        }\n    }\n    setNodeColor(x, 0 /* NodeColor.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 /* Constants.MIN_SAFE_DELTA */ || y.delta > 1073741824 /* Constants.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 /* Constants.MIN_SAFE_DELTA */ || y.delta > 1073741824 /* Constants.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 /* NodeColor.Black */);\nSENTINEL.parent = SENTINEL;\nSENTINEL.left = SENTINEL;\nSENTINEL.right = SENTINEL;\nSENTINEL.color = 0 /* NodeColor.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}\nfunction calculateSize(node) {\n    if (node === SENTINEL) {\n        return 0;\n    }\n    return node.size_left + node.piece.length + calculateSize(node.right);\n}\nfunction calculateLF(node) {\n    if (node === SENTINEL) {\n        return 0;\n    }\n    return node.lf_left + node.piece.lineFeedCnt + calculateLF(node.right);\n}\nfunction resetSentinel() {\n    SENTINEL.parent = SENTINEL;\n}\nexport function leftRotate(tree, x) {\n    const 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    const 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 /* NodeColor.Black */;\n        z.detach();\n        resetSentinel();\n        tree.root.parent = SENTINEL;\n        return;\n    }\n    const yWasRed = (y.color === 1 /* NodeColor.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        const newSizeLeft = calculateSize(x);\n        const newLFLeft = calculateLF(x);\n        if (newSizeLeft !== x.parent.size_left || newLFLeft !== x.parent.lf_left) {\n            const delta = newSizeLeft - x.parent.size_left;\n            const 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 /* NodeColor.Black */) {\n        if (x === x.parent.left) {\n            w = x.parent.right;\n            if (w.color === 1 /* NodeColor.Red */) {\n                w.color = 0 /* NodeColor.Black */;\n                x.parent.color = 1 /* NodeColor.Red */;\n                leftRotate(tree, x.parent);\n                w = x.parent.right;\n            }\n            if (w.left.color === 0 /* NodeColor.Black */ && w.right.color === 0 /* NodeColor.Black */) {\n                w.color = 1 /* NodeColor.Red */;\n                x = x.parent;\n            }\n            else {\n                if (w.right.color === 0 /* NodeColor.Black */) {\n                    w.left.color = 0 /* NodeColor.Black */;\n                    w.color = 1 /* NodeColor.Red */;\n                    rightRotate(tree, w);\n                    w = x.parent.right;\n                }\n                w.color = x.parent.color;\n                x.parent.color = 0 /* NodeColor.Black */;\n                w.right.color = 0 /* NodeColor.Black */;\n                leftRotate(tree, x.parent);\n                x = tree.root;\n            }\n        }\n        else {\n            w = x.parent.left;\n            if (w.color === 1 /* NodeColor.Red */) {\n                w.color = 0 /* NodeColor.Black */;\n                x.parent.color = 1 /* NodeColor.Red */;\n                rightRotate(tree, x.parent);\n                w = x.parent.left;\n            }\n            if (w.left.color === 0 /* NodeColor.Black */ && w.right.color === 0 /* NodeColor.Black */) {\n                w.color = 1 /* NodeColor.Red */;\n                x = x.parent;\n            }\n            else {\n                if (w.left.color === 0 /* NodeColor.Black */) {\n                    w.right.color = 0 /* NodeColor.Black */;\n                    w.color = 1 /* NodeColor.Red */;\n                    leftRotate(tree, w);\n                    w = x.parent.left;\n                }\n                w.color = x.parent.color;\n                x.parent.color = 0 /* NodeColor.Black */;\n                w.left.color = 0 /* NodeColor.Black */;\n                rightRotate(tree, x.parent);\n                x = tree.root;\n            }\n        }\n    }\n    x.color = 0 /* NodeColor.Black */;\n    resetSentinel();\n}\nexport function fixInsert(tree, x) {\n    recomputeTreeMetadata(tree, x);\n    while (x !== tree.root && x.parent.color === 1 /* NodeColor.Red */) {\n        if (x.parent === x.parent.parent.left) {\n            const y = x.parent.parent.right;\n            if (y.color === 1 /* NodeColor.Red */) {\n                x.parent.color = 0 /* NodeColor.Black */;\n                y.color = 0 /* NodeColor.Black */;\n                x.parent.parent.color = 1 /* NodeColor.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 /* NodeColor.Black */;\n                x.parent.parent.color = 1 /* NodeColor.Red */;\n                rightRotate(tree, x.parent.parent);\n            }\n        }\n        else {\n            const y = x.parent.parent.left;\n            if (y.color === 1 /* NodeColor.Red */) {\n                x.parent.color = 0 /* NodeColor.Black */;\n                y.color = 0 /* NodeColor.Black */;\n                x.parent.parent.color = 1 /* NodeColor.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 /* NodeColor.Black */;\n                x.parent.parent.color = 1 /* NodeColor.Red */;\n                leftRotate(tree, x.parent.parent);\n            }\n        }\n    }\n    tree.root.color = 0 /* NodeColor.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    // 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    // 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);\nconst AverageBufferSize = 65535;\nfunction 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}\nclass 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    const r = [0];\n    let rLength = 1;\n    for (let i = 0, len = str.length; i < len; i++) {\n        const chr = str.charCodeAt(i);\n        if (chr === 13 /* CharCode.CarriageReturn */) {\n            if (i + 1 < len && str.charCodeAt(i + 1) === 10 /* CharCode.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 /* CharCode.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 /* CharCode.CarriageReturn */) {\n            if (i + 1 < len && str.charCodeAt(i + 1) === 10 /* CharCode.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 /* CharCode.LineFeed */) {\n            lf++;\n            r[rLength++] = i + 1;\n        }\n        else {\n            if (isBasicASCII) {\n                if (chr !== 9 /* CharCode.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            const 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            const 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        const tmp = this._cache;\n        for (let i = 0; i < tmp.length; i++) {\n            const 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            const 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                const 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        const averageBufferSize = AverageBufferSize;\n        const min = averageBufferSize - Math.floor(averageBufferSize / 3);\n        const max = min * 2;\n        let tempChunk = '';\n        let tempChunkLen = 0;\n        const chunks = [];\n        this.iterate(this.root, node => {\n            const str = this.getNodeContent(node);\n            const len = str.length;\n            if (tempChunkLen <= min || tempChunkLen + len < max) {\n                tempChunk += str;\n                tempChunkLen += len;\n                return true;\n            }\n            // flush anyways\n            const 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            const 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                const 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        const 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                const out = this.getIndexOf(x, offset - x.size_left);\n                lfCnt += x.lf_left + out.index;\n                if (out.index === 0) {\n                    const lineStartOffset = this.getOffsetAt(lfCnt + 1, 1);\n                    const 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                    const lineStartOffset = this.getOffsetAt(lfCnt + 1, 1);\n                    const 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        const startPosition = this.nodeAt2(range.startLineNumber, range.startColumn);\n        const endPosition = this.nodeAt2(range.endLineNumber, range.endColumn);\n        const 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            const node = startPosition.node;\n            const buffer = this._buffers[node.piece.bufferIndex].buffer;\n            const 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        const buffer = this._buffers[x.piece.bufferIndex].buffer;\n        const 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            const buffer = this._buffers[x.piece.bufferIndex].buffer;\n            const 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        const 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 /* CharCode.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 /* CharCode.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 /* CharCode.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            const matchingNode = nodePos.node.next();\n            if (!matchingNode) {\n                return 0;\n            }\n            const buffer = this._buffers[matchingNode.piece.bufferIndex];\n            const startOffset = this.offsetInBuffer(matchingNode.piece.bufferIndex, matchingNode.piece.start);\n            return buffer.buffer.charCodeAt(startOffset);\n        }\n        else {\n            const buffer = this._buffers[nodePos.node.piece.bufferIndex];\n            const startOffset = this.offsetInBuffer(nodePos.node.piece.bufferIndex, nodePos.node.piece.start);\n            const targetOffset = startOffset + nodePos.remainder;\n            return buffer.buffer.charCodeAt(targetOffset);\n        }\n    }\n    getLineCharCode(lineNumber, index) {\n        const nodePos = this.nodeAt2(lineNumber, index + 1);\n        return this._getCharCode(nodePos);\n    }\n    getLineLength(lineNumber) {\n        if (lineNumber === this.getLineCount()) {\n            const 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        const buffer = this._buffers[node.piece.bufferIndex];\n        const startOffsetInBuffer = this.offsetInBuffer(node.piece.bufferIndex, node.piece.start);\n        const start = this.offsetInBuffer(node.piece.bufferIndex, startCursor);\n        const end = this.offsetInBuffer(node.piece.bufferIndex, endCursor);\n        let m;\n        // Reset regex to search from the beginning\n        const 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                const lineFeedCnt = this.getLineFeedCnt(node.piece.bufferIndex, startCursor, ret);\n                const retStartColumn = ret.line === startCursor.line ? ret.column - startCursor.column + startColumn : ret.column + 1;\n                const 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        const endPosition = this.nodeAt2(searchRange.endLineNumber, searchRange.endColumn);\n        if (endPosition === null) {\n            return [];\n        }\n        let start = this.positionInBuffer(startPosition.node, startPosition.remainder);\n        const 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            const lineBreakCnt = this.getLineFeedCnt(currentNode.piece.bufferIndex, start, currentNode.piece.end);\n            if (lineBreakCnt >= 1) {\n                // last line break position\n                const lineStarts = this._buffers[currentNode.piece.bufferIndex].lineStarts;\n                const startOffsetInBuffer = this.offsetInBuffer(currentNode.piece.bufferIndex, currentNode.piece.start);\n                const nextLineStartOffset = lineStarts[start.line + lineBreakCnt];\n                const 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            const 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            const 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        const 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            const { node, remainder, nodeStartOffset } = this.nodeAt(offset);\n            const piece = node.piece;\n            const bufferIndex = piece.bufferIndex;\n            const 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                const 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                    const headOfRight = this.nodeCharCodeAt(node, remainder);\n                    if (headOfRight === 10 /** \\n */) {\n                        const 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                    const tailOfLeft = this.nodeCharCodeAt(node, remainder - 1);\n                    if (tailOfLeft === 13 /** \\r */) {\n                        const 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                const 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            const 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        const startPosition = this.nodeAt(offset);\n        const endPosition = this.nodeAt(offset + cnt);\n        const startNode = startPosition.node;\n        const endNode = endPosition.node;\n        if (startNode === endNode) {\n            const startSplitPosInBuffer = this.positionInBuffer(startNode, startPosition.remainder);\n            const endSplitPosInBuffer = this.positionInBuffer(startNode, endPosition.remainder);\n            if (startPosition.nodeStartOffset === offset) {\n                if (cnt === startNode.piece.length) { // delete node\n                    const 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        const nodesToDel = [];\n        const 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        const 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        const secondNode = startNode.next();\n        for (let node = secondNode; node !== SENTINEL && node !== endNode; node = node.next()) {\n            nodesToDel.push(node);\n        }\n        const 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        const nodesToDel = [];\n        if (this.shouldCheckCRLF() && this.endWithCR(value) && this.startWithLF(node)) {\n            // move `\\n` to new node.\n            const piece = node.piece;\n            const newStart = { line: piece.start.line + 1, column: 0 };\n            const 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        const 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        const newPieces = this.createNewPieces(value);\n        const 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        const piece = node.piece;\n        const bufferIndex = node.piece.bufferIndex;\n        const lineStarts = this._buffers[bufferIndex].lineStarts;\n        const startOffset = lineStarts[piece.start.line] + piece.start.column;\n        const 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        const 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        const nextLineStartOffset = lineStarts[end.line + 1];\n        const 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        const previousCharOffset = endOffset - 1; // end.column > 0 so it's okay.\n        const 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        const 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            const newPieces = [];\n            while (text.length > AverageBufferSize) {\n                const lastChar = text.charCodeAt(AverageBufferSize - 1);\n                let splitText;\n                if (lastChar === 13 /* CharCode.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                const 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            const 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        const endIndex = this._buffers[0].lineStarts.length - 1;\n        const endColumn = endOffset - this._buffers[0].lineStarts[endIndex];\n        const endPos = { line: endIndex, column: endColumn };\n        const 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        const cache = this._searchCache.get2(lineNumber);\n        if (cache) {\n            x = cache.node;\n            const prevAccumulatedValue = this.getAccumulatedValue(x, lineNumber - cache.nodeStartLineNumber - 1);\n            const buffer = this._buffers[x.piece.bufferIndex].buffer;\n            const 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                const 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                    const prevAccumulatedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\n                    const accumulatedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 1);\n                    const buffer = this._buffers[x.piece.bufferIndex].buffer;\n                    const 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                    const prevAccumulatedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\n                    const buffer = this._buffers[x.piece.bufferIndex].buffer;\n                    const 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            const buffer = this._buffers[x.piece.bufferIndex].buffer;\n            if (x.piece.lineFeedCnt > 0) {\n                const accumulatedValue = this.getAccumulatedValue(x, 0);\n                const startOffset = this.offsetInBuffer(x.piece.bufferIndex, x.piece.start);\n                ret += buffer.substring(startOffset, startOffset + accumulatedValue - endOffset);\n                return ret;\n            }\n            else {\n                const 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        const piece = node.piece;\n        const pos = this.positionInBuffer(node, accumulatedValue);\n        const 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            const 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        const piece = node.piece;\n        const lineStarts = this._buffers[piece.bufferIndex].lineStarts;\n        const 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        const newPiece = new Piece(piece.bufferIndex, end, originalEndPos, this.getLineFeedCnt(piece.bufferIndex, end, originalEndPos), this.offsetInBuffer(piece.bufferIndex, originalEndPos) - this.offsetInBuffer(piece.bufferIndex, end));\n        const 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            const 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        const 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                const 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                const prevAccumualtedValue = this.getAccumulatedValue(x, lineNumber - x.lf_left - 2);\n                const 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                const 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                const accumulatedValue = this.getAccumulatedValue(x, 0);\n                const 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                    const 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        const buffer = this._buffers[node.piece.bufferIndex];\n        const 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        const piece = val.piece;\n        const lineStarts = this._buffers[piece.bufferIndex].lineStarts;\n        const line = piece.start.line;\n        const 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        const 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            const 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            const nextNode = node.next();\n            if (this.startWithLF(nextNode)) {\n                this.fixCRLF(node, nextNode);\n            }\n        }\n    }\n    fixCRLF(prev, next) {\n        const nodesToDel = [];\n        // update node\n        const 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        const 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        const 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            const 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        const 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        const buffer = this._buffers[node.piece.bufferIndex];\n        const piece = node.piece;\n        const startOffset = this.offsetInBuffer(piece.bufferIndex, piece.start);\n        const endOffset = this.offsetInBuffer(piece.bufferIndex, piece.end);\n        const currentContent = buffer.buffer.substring(startOffset, endOffset);\n        return currentContent;\n    }\n    getPieceContent(piece) {\n        const buffer = this._buffers[piece.bufferIndex];\n        const startOffset = this.offsetInBuffer(piece.bufferIndex, piece.start);\n        const endOffset = this.offsetInBuffer(piece.bufferIndex, piece.end);\n        const 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        const z = new TreeNode(p, 1 /* NodeColor.Red */);\n        z.left = SENTINEL;\n        z.right = SENTINEL;\n        z.parent = SENTINEL;\n        z.size_left = 0;\n        z.lf_left = 0;\n        const x = this.root;\n        if (x === SENTINEL) {\n            this.root = z;\n            z.color = 0 /* NodeColor.Black */;\n        }\n        else if (node.right === SENTINEL) {\n            node.right = z;\n            z.parent = node;\n        }\n        else {\n            const 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        const z = new TreeNode(p, 1 /* NodeColor.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 /* NodeColor.Black */;\n        }\n        else if (node.left === SENTINEL) {\n            node.left = z;\n            z.parent = node;\n        }\n        else {\n            const 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 '../../core/eolCounter.js';\nimport { TextChange } from '../../core/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        const 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 /* EndOfLinePreference.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 /* EndOfLinePreference.TextDefined */) {\n        if (range.isEmpty()) {\n            return 0;\n        }\n        if (range.startLineNumber === range.endLineNumber) {\n            return (range.endColumn - range.startColumn);\n        }\n        const startOffset = this.getOffsetAt(range.startLineNumber, range.startColumn);\n        const endOffset = this.getOffsetAt(range.endLineNumber, range.endColumn);\n        // offsets use the text EOL, so we need to compensate for length differences\n        // if the requested EOL doesn't match the text EOL\n        let eolOffsetCompensation = 0;\n        const desiredEOL = this._getEndOfLine(eol);\n        const actualEOL = this.getEOL();\n        if (desiredEOL.length !== actualEOL.length) {\n            const delta = desiredEOL.length - actualEOL.length;\n            const eolCount = range.endLineNumber - range.startLineNumber;\n            eolOffsetCompensation = delta * eolCount;\n        }\n        return endOffset - startOffset + eolOffsetCompensation;\n    }\n    getCharacterCountInRange(range, eol = 0 /* EndOfLinePreference.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 /* EndOfLinePreference.LF */:\n                return '\\n';\n            case 2 /* EndOfLinePreference.CRLF */:\n                return '\\r\\n';\n            case 0 /* EndOfLinePreference.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            const op = rawOperations[i];\n            if (canReduceOperations && op._isTracked) {\n                canReduceOperations = false;\n            }\n            const 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 /* StringEOL.CRLF */ : 1 /* StringEOL.LF */);\n                if (strEOL === 0 /* StringEOL.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            const rangeEnd = operations[i].range.getEndPosition();\n            const 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        const reverseRanges = (computeUndoEdits || recordTrimAutoWhitespace ? PieceTreeTextBuffer._getInverseEditRanges(operations) : []);\n        const newTrimAutoWhitespaceCandidates = [];\n        if (recordTrimAutoWhitespace) {\n            for (let i = 0; i < operations.length; i++) {\n                const op = operations[i];\n                const 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                const 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                const prevContent = newTrimAutoWhitespaceCandidates[i].oldContent;\n                const 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 /* EndOfLinePreference.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        const contentChanges = [];\n        // operations are from bottom to top\n        for (let i = 0; i < operations.length; i++) {\n            const 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        const 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            const 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        const 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        const 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';\nclass 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 /* DefaultEndOfLine.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        const 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                const str = chunks[i].buffer.replace(/\\r\\n|\\r|\\n/g, eol);\n                const 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 /* CharCode.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 (!lineStarts.isBasicASCII) {\n            // this chunk contains non basic ASCII characters\n            this.isBasicASCII = false;\n            if (!this.containsRTL) {\n                this.containsRTL = strings.containsRTL(chunk);\n            }\n            if (!this.containsUnusualLineTerminators) {\n                this.containsUnusualLineTerminators = strings.containsUnusualLineTerminators(chunk);\n            }\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            const lastChunk = this.chunks[this.chunks.length - 1];\n            lastChunk.buffer += String.fromCharCode(this._previousChar);\n            const newLineStarts = createLineStartsFast(lastChunk.buffer);\n            lastChunk.lineStarts = newLineStarts;\n            if (this._previousChar === 13 /* CharCode.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 *--------------------------------------------------------------------------------------------*/\nimport { arrayInsert } from '../../../base/common/arrays.js';\n/**\n * An array that avoids being sparse by always\n * filling up unused indices with a default value.\n */\nexport class FixedArray {\n    constructor(_default) {\n        this._default = _default;\n        this._store = [];\n    }\n    get(index) {\n        if (index < this._store.length) {\n            return this._store[index];\n        }\n        return this._default;\n    }\n    set(index, value) {\n        while (index >= this._store.length) {\n            this._store[this._store.length] = this._default;\n        }\n        this._store[index] = value;\n    }\n    replace(index, oldLength, newLength) {\n        if (index >= this._store.length) {\n            return;\n        }\n        if (oldLength === 0) {\n            this.insert(index, newLength);\n            return;\n        }\n        else if (newLength === 0) {\n            this.delete(index, oldLength);\n            return;\n        }\n        const before = this._store.slice(0, index);\n        const after = this._store.slice(index + oldLength);\n        const insertArr = arrayFill(newLength, this._default);\n        this._store = before.concat(insertArr, after);\n    }\n    delete(deleteIndex, deleteCount) {\n        if (deleteCount === 0 || deleteIndex >= this._store.length) {\n            return;\n        }\n        this._store.splice(deleteIndex, deleteCount);\n    }\n    insert(insertIndex, insertCount) {\n        if (insertCount === 0 || insertIndex >= this._store.length) {\n            return;\n        }\n        const arr = [];\n        for (let i = 0; i < insertCount; i++) {\n            arr[i] = this._default;\n        }\n        this._store = arrayInsert(this._store, insertIndex, arr);\n    }\n}\nfunction arrayFill(length, value) {\n    const arr = [];\n    for (let i = 0; i < length; i++) {\n        arr[i] = value;\n    }\n    return arr;\n}\n","/**\n * Represents contiguous tokens over a contiguous range of lines.\n */\nexport class ContiguousMultilineTokens {\n    /**\n     * (Inclusive) start line number for these tokens.\n     */\n    get startLineNumber() {\n        return this._startLineNumber;\n    }\n    /**\n     * (Inclusive) end line number for these tokens.\n     */\n    get endLineNumber() {\n        return this._startLineNumber + this._tokens.length - 1;\n    }\n    constructor(startLineNumber, tokens) {\n        this._startLineNumber = startLineNumber;\n        this._tokens = tokens;\n    }\n    /**\n     * @see {@link _tokens}\n     */\n    getLineTokens(lineNumber) {\n        return this._tokens[lineNumber - this._startLineNumber];\n    }\n    appendLineTokens(lineTokens) {\n        this._tokens.push(lineTokens);\n    }\n}\n","import { ContiguousMultilineTokens } from './contiguousMultilineTokens.js';\nexport class ContiguousMultilineTokensBuilder {\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            if (last.endLineNumber + 1 === lineNumber) {\n                // append\n                last.appendLineTokens(lineTokens);\n                return;\n            }\n        }\n        this._tokens.push(new ContiguousMultilineTokens(lineNumber, [lineTokens]));\n    }\n    finalize() {\n        return this._tokens;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { runWhenGlobalIdle } from '../../../base/common/async.js';\nimport { BugIndicatingError, onUnexpectedError } from '../../../base/common/errors.js';\nimport { setTimeout0 } from '../../../base/common/platform.js';\nimport { StopWatch } from '../../../base/common/stopwatch.js';\nimport { countEOL } from '../core/eolCounter.js';\nimport { LineRange } from '../core/lineRange.js';\nimport { OffsetRange } from '../core/offsetRange.js';\nimport { nullTokenizeEncoded } from '../languages/nullTokenize.js';\nimport { FixedArray } from './fixedArray.js';\nimport { ContiguousMultilineTokensBuilder } from '../tokens/contiguousMultilineTokensBuilder.js';\nimport { LineTokens } from '../tokens/lineTokens.js';\nexport class TokenizerWithStateStore {\n    constructor(lineCount, tokenizationSupport) {\n        this.tokenizationSupport = tokenizationSupport;\n        this.initialState = this.tokenizationSupport.getInitialState();\n        this.store = new TrackingTokenizationStateStore(lineCount);\n    }\n    getStartState(lineNumber) {\n        return this.store.getStartState(lineNumber, this.initialState);\n    }\n    getFirstInvalidLine() {\n        return this.store.getFirstInvalidLine(this.initialState);\n    }\n}\nexport class TokenizerWithStateStoreAndTextModel extends TokenizerWithStateStore {\n    constructor(lineCount, tokenizationSupport, _textModel, _languageIdCodec) {\n        super(lineCount, tokenizationSupport);\n        this._textModel = _textModel;\n        this._languageIdCodec = _languageIdCodec;\n    }\n    updateTokensUntilLine(builder, lineNumber) {\n        const languageId = this._textModel.getLanguageId();\n        while (true) {\n            const lineToTokenize = this.getFirstInvalidLine();\n            if (!lineToTokenize || lineToTokenize.lineNumber > lineNumber) {\n                break;\n            }\n            const text = this._textModel.getLineContent(lineToTokenize.lineNumber);\n            const r = safeTokenize(this._languageIdCodec, languageId, this.tokenizationSupport, text, true, lineToTokenize.startState);\n            builder.add(lineToTokenize.lineNumber, r.tokens);\n            this.store.setEndState(lineToTokenize.lineNumber, r.endState);\n        }\n    }\n    /** assumes state is up to date */\n    getTokenTypeIfInsertingCharacter(position, character) {\n        // TODO@hediet: use tokenizeLineWithEdit\n        const lineStartState = this.getStartState(position.lineNumber);\n        if (!lineStartState) {\n            return 0 /* StandardTokenType.Other */;\n        }\n        const languageId = this._textModel.getLanguageId();\n        const lineContent = this._textModel.getLineContent(position.lineNumber);\n        // Create the text as if `character` was inserted\n        const text = (lineContent.substring(0, position.column - 1)\n            + character\n            + lineContent.substring(position.column - 1));\n        const r = safeTokenize(this._languageIdCodec, languageId, this.tokenizationSupport, text, true, lineStartState);\n        const lineTokens = new LineTokens(r.tokens, text, this._languageIdCodec);\n        if (lineTokens.getCount() === 0) {\n            return 0 /* StandardTokenType.Other */;\n        }\n        const tokenIndex = lineTokens.findTokenIndexAtOffset(position.column - 1);\n        return lineTokens.getStandardTokenType(tokenIndex);\n    }\n    /** assumes state is up to date */\n    tokenizeLineWithEdit(position, length, newText) {\n        const lineNumber = position.lineNumber;\n        const column = position.column;\n        const lineStartState = this.getStartState(lineNumber);\n        if (!lineStartState) {\n            return null;\n        }\n        const curLineContent = this._textModel.getLineContent(lineNumber);\n        const newLineContent = curLineContent.substring(0, column - 1)\n            + newText + curLineContent.substring(column - 1 + length);\n        const languageId = this._textModel.getLanguageIdAtPosition(lineNumber, 0);\n        const result = safeTokenize(this._languageIdCodec, languageId, this.tokenizationSupport, newLineContent, true, lineStartState);\n        const lineTokens = new LineTokens(result.tokens, newLineContent, this._languageIdCodec);\n        return lineTokens;\n    }\n    hasAccurateTokensForLine(lineNumber) {\n        const firstInvalidLineNumber = this.store.getFirstInvalidEndStateLineNumberOrMax();\n        return (lineNumber < firstInvalidLineNumber);\n    }\n    isCheapToTokenize(lineNumber) {\n        const firstInvalidLineNumber = this.store.getFirstInvalidEndStateLineNumberOrMax();\n        if (lineNumber < firstInvalidLineNumber) {\n            return true;\n        }\n        if (lineNumber === firstInvalidLineNumber\n            && this._textModel.getLineLength(lineNumber) < 2048 /* Constants.CHEAP_TOKENIZATION_LENGTH_LIMIT */) {\n            return true;\n        }\n        return false;\n    }\n    /**\n     * The result is not cached.\n     */\n    tokenizeHeuristically(builder, startLineNumber, endLineNumber) {\n        if (endLineNumber <= this.store.getFirstInvalidEndStateLineNumberOrMax()) {\n            // nothing to do\n            return { heuristicTokens: false };\n        }\n        if (startLineNumber <= this.store.getFirstInvalidEndStateLineNumberOrMax()) {\n            // tokenization has reached the viewport start...\n            this.updateTokensUntilLine(builder, endLineNumber);\n            return { heuristicTokens: false };\n        }\n        let state = this.guessStartState(startLineNumber);\n        const languageId = this._textModel.getLanguageId();\n        for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n            const text = this._textModel.getLineContent(lineNumber);\n            const r = safeTokenize(this._languageIdCodec, languageId, this.tokenizationSupport, text, true, state);\n            builder.add(lineNumber, r.tokens);\n            state = r.endState;\n        }\n        return { heuristicTokens: true };\n    }\n    guessStartState(lineNumber) {\n        let nonWhitespaceColumn = this._textModel.getLineFirstNonWhitespaceColumn(lineNumber);\n        const likelyRelevantLines = [];\n        let initialState = null;\n        for (let i = lineNumber - 1; nonWhitespaceColumn > 1 && i >= 1; i--) {\n            const newNonWhitespaceIndex = this._textModel.getLineFirstNonWhitespaceColumn(i);\n            // Ignore lines full of whitespace\n            if (newNonWhitespaceIndex === 0) {\n                continue;\n            }\n            if (newNonWhitespaceIndex < nonWhitespaceColumn) {\n                likelyRelevantLines.push(this._textModel.getLineContent(i));\n                nonWhitespaceColumn = newNonWhitespaceIndex;\n                initialState = this.getStartState(i);\n                if (initialState) {\n                    break;\n                }\n            }\n        }\n        if (!initialState) {\n            initialState = this.tokenizationSupport.getInitialState();\n        }\n        likelyRelevantLines.reverse();\n        const languageId = this._textModel.getLanguageId();\n        let state = initialState;\n        for (const line of likelyRelevantLines) {\n            const r = safeTokenize(this._languageIdCodec, languageId, this.tokenizationSupport, line, false, state);\n            state = r.endState;\n        }\n        return state;\n    }\n}\n/**\n * **Invariant:**\n * If the text model is retokenized from line 1 to {@link getFirstInvalidEndStateLineNumber}() - 1,\n * then the recomputed end state for line l will be equal to {@link getEndState}(l).\n */\nexport class TrackingTokenizationStateStore {\n    constructor(lineCount) {\n        this.lineCount = lineCount;\n        this._tokenizationStateStore = new TokenizationStateStore();\n        this._invalidEndStatesLineNumbers = new RangePriorityQueueImpl();\n        this._invalidEndStatesLineNumbers.addRange(new OffsetRange(1, lineCount + 1));\n    }\n    getEndState(lineNumber) {\n        return this._tokenizationStateStore.getEndState(lineNumber);\n    }\n    /**\n     * @returns if the end state has changed.\n     */\n    setEndState(lineNumber, state) {\n        if (!state) {\n            throw new BugIndicatingError('Cannot set null/undefined state');\n        }\n        this._invalidEndStatesLineNumbers.delete(lineNumber);\n        const r = this._tokenizationStateStore.setEndState(lineNumber, state);\n        if (r && lineNumber < this.lineCount) {\n            // because the state changed, we cannot trust the next state anymore and have to invalidate it.\n            this._invalidEndStatesLineNumbers.addRange(new OffsetRange(lineNumber + 1, lineNumber + 2));\n        }\n        return r;\n    }\n    acceptChange(range, newLineCount) {\n        this.lineCount += newLineCount - range.length;\n        this._tokenizationStateStore.acceptChange(range, newLineCount);\n        this._invalidEndStatesLineNumbers.addRangeAndResize(new OffsetRange(range.startLineNumber, range.endLineNumberExclusive), newLineCount);\n    }\n    acceptChanges(changes) {\n        for (const c of changes) {\n            const [eolCount] = countEOL(c.text);\n            this.acceptChange(new LineRange(c.range.startLineNumber, c.range.endLineNumber + 1), eolCount + 1);\n        }\n    }\n    invalidateEndStateRange(range) {\n        this._invalidEndStatesLineNumbers.addRange(new OffsetRange(range.startLineNumber, range.endLineNumberExclusive));\n    }\n    getFirstInvalidEndStateLineNumber() { return this._invalidEndStatesLineNumbers.min; }\n    getFirstInvalidEndStateLineNumberOrMax() {\n        return this.getFirstInvalidEndStateLineNumber() || Number.MAX_SAFE_INTEGER;\n    }\n    allStatesValid() { return this._invalidEndStatesLineNumbers.min === null; }\n    getStartState(lineNumber, initialState) {\n        if (lineNumber === 1) {\n            return initialState;\n        }\n        return this.getEndState(lineNumber - 1);\n    }\n    getFirstInvalidLine(initialState) {\n        const lineNumber = this.getFirstInvalidEndStateLineNumber();\n        if (lineNumber === null) {\n            return null;\n        }\n        const startState = this.getStartState(lineNumber, initialState);\n        if (!startState) {\n            throw new BugIndicatingError('Start state must be defined');\n        }\n        return { lineNumber, startState };\n    }\n}\nexport class TokenizationStateStore {\n    constructor() {\n        this._lineEndStates = new FixedArray(null);\n    }\n    getEndState(lineNumber) {\n        return this._lineEndStates.get(lineNumber);\n    }\n    setEndState(lineNumber, state) {\n        const oldState = this._lineEndStates.get(lineNumber);\n        if (oldState && oldState.equals(state)) {\n            return false;\n        }\n        this._lineEndStates.set(lineNumber, state);\n        return true;\n    }\n    acceptChange(range, newLineCount) {\n        let length = range.length;\n        if (newLineCount > 0 && length > 0) {\n            // Keep the last state, even though it is unrelated.\n            // But if the new state happens to agree with this last state, then we know we can stop tokenizing.\n            length--;\n            newLineCount--;\n        }\n        this._lineEndStates.replace(range.startLineNumber, length, newLineCount);\n    }\n}\nexport class RangePriorityQueueImpl {\n    constructor() {\n        this._ranges = [];\n    }\n    get min() {\n        if (this._ranges.length === 0) {\n            return null;\n        }\n        return this._ranges[0].start;\n    }\n    delete(value) {\n        const idx = this._ranges.findIndex(r => r.contains(value));\n        if (idx !== -1) {\n            const range = this._ranges[idx];\n            if (range.start === value) {\n                if (range.endExclusive === value + 1) {\n                    this._ranges.splice(idx, 1);\n                }\n                else {\n                    this._ranges[idx] = new OffsetRange(value + 1, range.endExclusive);\n                }\n            }\n            else {\n                if (range.endExclusive === value + 1) {\n                    this._ranges[idx] = new OffsetRange(range.start, value);\n                }\n                else {\n                    this._ranges.splice(idx, 1, new OffsetRange(range.start, value), new OffsetRange(value + 1, range.endExclusive));\n                }\n            }\n        }\n    }\n    addRange(range) {\n        OffsetRange.addRange(range, this._ranges);\n    }\n    addRangeAndResize(range, newLength) {\n        let idxFirstMightBeIntersecting = 0;\n        while (!(idxFirstMightBeIntersecting >= this._ranges.length || range.start <= this._ranges[idxFirstMightBeIntersecting].endExclusive)) {\n            idxFirstMightBeIntersecting++;\n        }\n        let idxFirstIsAfter = idxFirstMightBeIntersecting;\n        while (!(idxFirstIsAfter >= this._ranges.length || range.endExclusive < this._ranges[idxFirstIsAfter].start)) {\n            idxFirstIsAfter++;\n        }\n        const delta = newLength - range.length;\n        for (let i = idxFirstIsAfter; i < this._ranges.length; i++) {\n            this._ranges[i] = this._ranges[i].delta(delta);\n        }\n        if (idxFirstMightBeIntersecting === idxFirstIsAfter) {\n            const newRange = new OffsetRange(range.start, range.start + newLength);\n            if (!newRange.isEmpty) {\n                this._ranges.splice(idxFirstMightBeIntersecting, 0, newRange);\n            }\n        }\n        else {\n            const start = Math.min(range.start, this._ranges[idxFirstMightBeIntersecting].start);\n            const endEx = Math.max(range.endExclusive, this._ranges[idxFirstIsAfter - 1].endExclusive);\n            const newRange = new OffsetRange(start, endEx + delta);\n            if (!newRange.isEmpty) {\n                this._ranges.splice(idxFirstMightBeIntersecting, idxFirstIsAfter - idxFirstMightBeIntersecting, newRange);\n            }\n            else {\n                this._ranges.splice(idxFirstMightBeIntersecting, idxFirstIsAfter - idxFirstMightBeIntersecting);\n            }\n        }\n    }\n    toString() {\n        return this._ranges.map(r => r.toString()).join(' + ');\n    }\n}\nfunction safeTokenize(languageIdCodec, languageId, tokenizationSupport, text, hasEOL, state) {\n    let r = null;\n    if (tokenizationSupport) {\n        try {\n            r = tokenizationSupport.tokenizeEncoded(text, hasEOL, state.clone());\n        }\n        catch (e) {\n            onUnexpectedError(e);\n        }\n    }\n    if (!r) {\n        r = nullTokenizeEncoded(languageIdCodec.encodeLanguageId(languageId), state);\n    }\n    LineTokens.convertToEndOffset(r.tokens, text.length);\n    return r;\n}\nexport class DefaultBackgroundTokenizer {\n    constructor(_tokenizerWithStateStore, _backgroundTokenStore) {\n        this._tokenizerWithStateStore = _tokenizerWithStateStore;\n        this._backgroundTokenStore = _backgroundTokenStore;\n        this._isDisposed = false;\n        this._isScheduled = false;\n    }\n    dispose() {\n        this._isDisposed = true;\n    }\n    handleChanges() {\n        this._beginBackgroundTokenization();\n    }\n    _beginBackgroundTokenization() {\n        if (this._isScheduled || !this._tokenizerWithStateStore._textModel.isAttachedToEditor() || !this._hasLinesToTokenize()) {\n            return;\n        }\n        this._isScheduled = true;\n        runWhenGlobalIdle((deadline) => {\n            this._isScheduled = false;\n            this._backgroundTokenizeWithDeadline(deadline);\n        });\n    }\n    /**\n     * Tokenize until the deadline occurs, but try to yield every 1-2ms.\n     */\n    _backgroundTokenizeWithDeadline(deadline) {\n        // Read the time remaining from the `deadline` immediately because it is unclear\n        // if the `deadline` object will be valid after execution leaves this function.\n        const endTime = Date.now() + deadline.timeRemaining();\n        const execute = () => {\n            if (this._isDisposed || !this._tokenizerWithStateStore._textModel.isAttachedToEditor() || !this._hasLinesToTokenize()) {\n                // disposed in the meantime or detached or finished\n                return;\n            }\n            this._backgroundTokenizeForAtLeast1ms();\n            if (Date.now() < endTime) {\n                // There is still time before reaching the deadline, so yield to the browser and then\n                // continue execution\n                setTimeout0(execute);\n            }\n            else {\n                // The deadline has been reached, so schedule a new idle callback if necessary\n                this._beginBackgroundTokenization();\n            }\n        };\n        execute();\n    }\n    /**\n     * Tokenize for at least 1ms.\n     */\n    _backgroundTokenizeForAtLeast1ms() {\n        const lineCount = this._tokenizerWithStateStore._textModel.getLineCount();\n        const builder = new ContiguousMultilineTokensBuilder();\n        const sw = StopWatch.create(false);\n        do {\n            if (sw.elapsed() > 1) {\n                // the comparison is intentionally > 1 and not >= 1 to ensure that\n                // a full millisecond has elapsed, given how microseconds are rounded\n                // to milliseconds\n                break;\n            }\n            const tokenizedLineNumber = this._tokenizeOneInvalidLine(builder);\n            if (tokenizedLineNumber >= lineCount) {\n                break;\n            }\n        } while (this._hasLinesToTokenize());\n        this._backgroundTokenStore.setTokens(builder.finalize());\n        this.checkFinished();\n    }\n    _hasLinesToTokenize() {\n        if (!this._tokenizerWithStateStore) {\n            return false;\n        }\n        return !this._tokenizerWithStateStore.store.allStatesValid();\n    }\n    _tokenizeOneInvalidLine(builder) {\n        const firstInvalidLine = this._tokenizerWithStateStore?.getFirstInvalidLine();\n        if (!firstInvalidLine) {\n            return this._tokenizerWithStateStore._textModel.getLineCount() + 1;\n        }\n        this._tokenizerWithStateStore.updateTokensUntilLine(builder, firstInvalidLine.lineNumber);\n        return firstInvalidLine.lineNumber;\n    }\n    checkFinished() {\n        if (this._isDisposed) {\n            return;\n        }\n        if (this._tokenizerWithStateStore.store.allStatesValid()) {\n            this._backgroundTokenStore.backgroundTokenizationFinished();\n        }\n    }\n    requestTokens(startLineNumber, endLineNumberExclusive) {\n        this._tokenizerWithStateStore.store.invalidateEndStateRange(new LineRange(startLineNumber, endLineNumberExclusive));\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { RunOnceScheduler } from '../../../base/common/async.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { LineRange } from '../core/lineRange.js';\n/**\n * @internal\n */\nexport class AttachedViews {\n    constructor() {\n        this._onDidChangeVisibleRanges = new Emitter();\n        this.onDidChangeVisibleRanges = this._onDidChangeVisibleRanges.event;\n        this._views = new Set();\n    }\n    attachView() {\n        const view = new AttachedViewImpl((state) => {\n            this._onDidChangeVisibleRanges.fire({ view, state });\n        });\n        this._views.add(view);\n        return view;\n    }\n    detachView(view) {\n        this._views.delete(view);\n        this._onDidChangeVisibleRanges.fire({ view, state: undefined });\n    }\n}\nclass AttachedViewImpl {\n    constructor(handleStateChange) {\n        this.handleStateChange = handleStateChange;\n    }\n    setVisibleLines(visibleLines, stabilized) {\n        const visibleLineRanges = visibleLines.map((line) => new LineRange(line.startLineNumber, line.endLineNumber + 1));\n        this.handleStateChange({ visibleLineRanges, stabilized });\n    }\n}\nexport class AttachedViewHandler extends Disposable {\n    get lineRanges() { return this._lineRanges; }\n    constructor(_refreshTokens) {\n        super();\n        this._refreshTokens = _refreshTokens;\n        this.runner = this._register(new RunOnceScheduler(() => this.update(), 50));\n        this._computedLineRanges = [];\n        this._lineRanges = [];\n    }\n    update() {\n        if (equals(this._computedLineRanges, this._lineRanges, (a, b) => a.equals(b))) {\n            return;\n        }\n        this._computedLineRanges = this._lineRanges;\n        this._refreshTokens();\n    }\n    handleStateChange(state) {\n        this._lineRanges = state.visibleLineRanges;\n        if (state.stabilized) {\n            this.runner.cancel();\n            this.update();\n        }\n        else {\n            this.runner.schedule();\n        }\n    }\n}\nexport class AbstractTokens extends Disposable {\n    get backgroundTokenizationState() {\n        return this._backgroundTokenizationState;\n    }\n    constructor(_languageIdCodec, _textModel, getLanguageId) {\n        super();\n        this._languageIdCodec = _languageIdCodec;\n        this._textModel = _textModel;\n        this.getLanguageId = getLanguageId;\n        this._backgroundTokenizationState = 1 /* BackgroundTokenizationState.InProgress */;\n        this._onDidChangeBackgroundTokenizationState = this._register(new Emitter());\n        /** @internal, should not be exposed by the text model! */\n        this.onDidChangeBackgroundTokenizationState = this._onDidChangeBackgroundTokenizationState.event;\n        this._onDidChangeTokens = this._register(new Emitter());\n        /** @internal, should not be exposed by the text model! */\n        this.onDidChangeTokens = this._onDidChangeTokens.event;\n    }\n    tokenizeIfCheap(lineNumber) {\n        if (this.isCheapToTokenize(lineNumber)) {\n            this.forceTokenization(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 *--------------------------------------------------------------------------------------------*/\nimport { TreeSitterTokenizationRegistry } from '../languages.js';\nimport { LineTokens } from '../tokens/lineTokens.js';\nimport { AbstractTokens } from './tokens.js';\nexport class TreeSitterTokens extends AbstractTokens {\n    constructor(_treeSitterService, languageIdCodec, textModel, languageId) {\n        super(languageIdCodec, textModel, languageId);\n        this._treeSitterService = _treeSitterService;\n        this._tokenizationSupport = null;\n        this._initialize();\n    }\n    _initialize() {\n        const newLanguage = this.getLanguageId();\n        if (!this._tokenizationSupport || this._lastLanguageId !== newLanguage) {\n            this._lastLanguageId = newLanguage;\n            this._tokenizationSupport = TreeSitterTokenizationRegistry.get(newLanguage);\n        }\n    }\n    getLineTokens(lineNumber) {\n        const content = this._textModel.getLineContent(lineNumber);\n        if (this._tokenizationSupport) {\n            const rawTokens = this._tokenizationSupport.tokenizeEncoded(lineNumber, this._textModel);\n            if (rawTokens) {\n                return new LineTokens(rawTokens, content, this._languageIdCodec);\n            }\n        }\n        return LineTokens.createEmpty(content, this._languageIdCodec);\n    }\n    resetTokenization(fireTokenChangeEvent = true) {\n        if (fireTokenChangeEvent) {\n            this._onDidChangeTokens.fire({\n                semanticTokensApplied: false,\n                ranges: [\n                    {\n                        fromLineNumber: 1,\n                        toLineNumber: this._textModel.getLineCount(),\n                    },\n                ],\n            });\n        }\n        this._initialize();\n    }\n    handleDidChangeAttached() {\n        // TODO @alexr00 implement for background tokenization\n    }\n    handleDidChangeContent(e) {\n        if (e.isFlush) {\n            // Don't fire the event, as the view might not have got the text change event yet\n            this.resetTokenization(false);\n        }\n    }\n    forceTokenization(lineNumber) {\n        // TODO @alexr00 implement\n    }\n    hasAccurateTokensForLine(lineNumber) {\n        // TODO @alexr00 update for background tokenization\n        return true;\n    }\n    isCheapToTokenize(lineNumber) {\n        // TODO @alexr00 update for background tokenization\n        return true;\n    }\n    getTokenTypeIfInsertingCharacter(lineNumber, column, character) {\n        // TODO @alexr00 implement once we have custom parsing and don't just feed in the whole text model value\n        return 0 /* StandardTokenType.Other */;\n    }\n    tokenizeLineWithEdit(position, length, newText) {\n        // TODO @alexr00 understand what this is for and implement\n        return null;\n    }\n    get hasTokens() {\n        // TODO @alexr00 once we have a token store, implement properly\n        const hasTree = this._treeSitterService.getParseResult(this._textModel) !== undefined;\n        return hasTree;\n    }\n}\n","import { createDecorator } from '../../../platform/instantiation/common/instantiation.js';\nexport const ITreeSitterParserService = createDecorator('treeSitterParserService');\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { LineTokens } from './lineTokens.js';\nexport const EMPTY_LINE_TOKENS = (new Uint32Array(0)).buffer;\nexport class ContiguousTokensEditing {\n    static deleteBeginning(lineTokens, toChIndex) {\n        if (lineTokens === null || lineTokens === EMPTY_LINE_TOKENS) {\n            return lineTokens;\n        }\n        return ContiguousTokensEditing.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 ContiguousTokensEditing.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        const 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        const 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}\nexport function toUint32Array(arr) {\n    if (arr instanceof Uint32Array) {\n        return arr;\n    }\n    else {\n        return new Uint32Array(arr);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { ContiguousTokensEditing, EMPTY_LINE_TOKENS, toUint32Array } from './contiguousTokensEditing.js';\nimport { LineTokens } from './lineTokens.js';\nimport { TokenMetadata } from '../encodedTokenAttributes.js';\n/**\n * Represents contiguous tokens in a text model.\n */\nexport class ContiguousTokensStore {\n    constructor(languageIdCodec) {\n        this._lineTokens = [];\n        this._len = 0;\n        this._languageIdCodec = languageIdCodec;\n    }\n    flush() {\n        this._lineTokens = [];\n        this._len = 0;\n    }\n    get hasTokens() {\n        return this._lineTokens.length > 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, this._languageIdCodec);\n        }\n        const lineTokens = new Uint32Array(2);\n        lineTokens[0] = lineText.length;\n        lineTokens[1] = getDefaultMetadata(this._languageIdCodec.encodeLanguageId(topLevelLanguageId));\n        return new LineTokens(lineTokens, lineText, this._languageIdCodec);\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        const 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 = ContiguousTokensStore._massageTokens(this._languageIdCodec.encodeLanguageId(topLevelLanguageId), lineTextLength, _tokens);\n        this._ensureLine(lineIndex);\n        const oldTokens = this._lineTokens[lineIndex];\n        this._lineTokens[lineIndex] = tokens;\n        if (checkEquality) {\n            return !ContiguousTokensStore._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] = ContiguousTokensEditing.delete(this._lineTokens[firstLineIndex], range.startColumn - 1, range.endColumn - 1);\n            return;\n        }\n        this._lineTokens[firstLineIndex] = ContiguousTokensEditing.deleteEnding(this._lineTokens[firstLineIndex], range.startColumn - 1);\n        const lastLineIndex = range.endLineNumber - 1;\n        let lastLineTokens = null;\n        if (lastLineIndex < this._len) {\n            lastLineTokens = ContiguousTokensEditing.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] = ContiguousTokensEditing.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] = ContiguousTokensEditing.insert(this._lineTokens[lineIndex], position.column - 1, firstLineLength);\n            return;\n        }\n        this._lineTokens[lineIndex] = ContiguousTokensEditing.deleteEnding(this._lineTokens[lineIndex], position.column - 1);\n        this._lineTokens[lineIndex] = ContiguousTokensEditing.insert(this._lineTokens[lineIndex], position.column - 1, firstLineLength);\n        this._insertLines(position.lineNumber, eolCount);\n    }\n    //#endregion\n    setMultilineTokens(tokens, textModel) {\n        if (tokens.length === 0) {\n            return { changes: [] };\n        }\n        const 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 lineNumber = element.startLineNumber; lineNumber <= element.endLineNumber; lineNumber++) {\n                if (hasChange) {\n                    this.setTokens(textModel.getLanguageId(), lineNumber - 1, textModel.getLineLength(lineNumber), element.getLineTokens(lineNumber), false);\n                    maxChangedLineNumber = lineNumber;\n                }\n                else {\n                    const lineHasChange = this.setTokens(textModel.getLanguageId(), lineNumber - 1, textModel.getLineLength(lineNumber), element.getLineTokens(lineNumber), 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        return { changes: ranges };\n    }\n}\nfunction getDefaultMetadata(topLevelLanguageId) {\n    return ((topLevelLanguageId << 0 /* MetadataConsts.LANGUAGEID_OFFSET */)\n        | (0 /* StandardTokenType.Other */ << 8 /* MetadataConsts.TOKEN_TYPE_OFFSET */)\n        | (0 /* FontStyle.None */ << 11 /* MetadataConsts.FONT_STYLE_OFFSET */)\n        | (1 /* ColorId.DefaultForeground */ << 15 /* MetadataConsts.FOREGROUND_OFFSET */)\n        | (2 /* ColorId.DefaultBackground */ << 24 /* MetadataConsts.BACKGROUND_OFFSET */)\n        // If there is no grammar, we just take a guess and try to match brackets.\n        | (1024 /* MetadataConsts.BALANCED_BRACKETS_MASK */)) >>> 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 arrays from '../../../base/common/arrays.js';\nimport { LineTokens } from './lineTokens.js';\n/**\n * Represents sparse tokens in a text model.\n */\nexport class SparseTokensStore {\n    constructor(languageIdCodec) {\n        this._pieces = [];\n        this._isComplete = false;\n        this._languageIdCodec = languageIdCodec;\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    addSparseTokens(lineNumber, aTokens) {\n        if (aTokens.getLineContent().length === 0) {\n            // Don't do anything for empty lines\n            return aTokens;\n        }\n        const pieces = this._pieces;\n        if (pieces.length === 0) {\n            return aTokens;\n        }\n        const pieceIndex = SparseTokensStore._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        const result = [];\n        let 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 /* MetadataConsts.SEMANTIC_USE_ITALIC */) ? 2048 /* MetadataConsts.ITALIC_MASK */ : 0)\n                | ((bMetadata & 2 /* MetadataConsts.SEMANTIC_USE_BOLD */) ? 4096 /* MetadataConsts.BOLD_MASK */ : 0)\n                | ((bMetadata & 4 /* MetadataConsts.SEMANTIC_USE_UNDERLINE */) ? 8192 /* MetadataConsts.UNDERLINE_MASK */ : 0)\n                | ((bMetadata & 8 /* MetadataConsts.SEMANTIC_USE_STRIKETHROUGH */) ? 16384 /* MetadataConsts.STRIKETHROUGH_MASK */ : 0)\n                | ((bMetadata & 16 /* MetadataConsts.SEMANTIC_USE_FOREGROUND */) ? 16744448 /* MetadataConsts.FOREGROUND_MASK */ : 0)\n                | ((bMetadata & 32 /* MetadataConsts.SEMANTIC_USE_BACKGROUND */) ? 4278190080 /* MetadataConsts.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(), this._languageIdCodec);\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    acceptEdit(range, eolCount, firstLineLength, lastLineLength, firstCharCode) {\n        for (const piece of this._pieces) {\n            piece.acceptEdit(range, eolCount, firstLineLength, lastLineLength, firstCharCode);\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 TokenizationTextModelPart_1;\nimport { BugIndicatingError, onUnexpectedError } from '../../../base/common/errors.js';\nimport { Emitter, Event } from '../../../base/common/event.js';\nimport { DisposableMap, DisposableStore, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { countEOL } from '../core/eolCounter.js';\nimport { LineRange } from '../core/lineRange.js';\nimport { Position } from '../core/position.js';\nimport { getWordAtText } from '../core/wordHelper.js';\nimport { TokenizationRegistry, TreeSitterTokenizationRegistry } from '../languages.js';\nimport { ILanguageService } from '../languages/language.js';\nimport { ILanguageConfigurationService } from '../languages/languageConfigurationRegistry.js';\nimport { TextModelPart } from './textModelPart.js';\nimport { DefaultBackgroundTokenizer, TokenizerWithStateStoreAndTextModel, TrackingTokenizationStateStore } from './textModelTokens.js';\nimport { AbstractTokens, AttachedViewHandler } from './tokens.js';\nimport { TreeSitterTokens } from './treeSitterTokens.js';\nimport { ITreeSitterParserService } from '../services/treeSitterParserService.js';\nimport { ContiguousMultilineTokensBuilder } from '../tokens/contiguousMultilineTokensBuilder.js';\nimport { ContiguousTokensStore } from '../tokens/contiguousTokensStore.js';\nimport { SparseTokensStore } from '../tokens/sparseTokensStore.js';\nlet TokenizationTextModelPart = TokenizationTextModelPart_1 = class TokenizationTextModelPart extends TextModelPart {\n    constructor(_textModel, _bracketPairsTextModelPart, _languageId, _attachedViews, _languageService, _languageConfigurationService, _treeSitterService) {\n        super();\n        this._textModel = _textModel;\n        this._bracketPairsTextModelPart = _bracketPairsTextModelPart;\n        this._languageId = _languageId;\n        this._attachedViews = _attachedViews;\n        this._languageService = _languageService;\n        this._languageConfigurationService = _languageConfigurationService;\n        this._treeSitterService = _treeSitterService;\n        this._semanticTokens = new SparseTokensStore(this._languageService.languageIdCodec);\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._tokensDisposables = this._register(new DisposableStore());\n        this._register(this._languageConfigurationService.onDidChange(e => {\n            if (e.affects(this._languageId)) {\n                this._onDidChangeLanguageConfiguration.fire({});\n            }\n        }));\n        // We just look at registry changes to determine whether to use tree sitter.\n        // This means that removing a language from the setting will not cause a switch to textmate and will require a reload.\n        // Adding a language to the setting will not need a reload, however.\n        this._register(Event.filter(TreeSitterTokenizationRegistry.onDidChange, (e) => e.changedLanguages.includes(this._languageId))(() => {\n            this.createPreferredTokenProvider();\n        }));\n        this.createPreferredTokenProvider();\n    }\n    createGrammarTokens() {\n        return this._register(new GrammarTokens(this._languageService.languageIdCodec, this._textModel, () => this._languageId, this._attachedViews));\n    }\n    createTreeSitterTokens() {\n        return this._register(new TreeSitterTokens(this._treeSitterService, this._languageService.languageIdCodec, this._textModel, () => this._languageId));\n    }\n    createTokens(useTreeSitter) {\n        const needsReset = this._tokens !== undefined;\n        this._tokens?.dispose();\n        this._tokens = useTreeSitter ? this.createTreeSitterTokens() : this.createGrammarTokens();\n        this._tokensDisposables.clear();\n        this._tokensDisposables.add(this._tokens.onDidChangeTokens(e => {\n            this._emitModelTokensChangedEvent(e);\n        }));\n        this._tokensDisposables.add(this._tokens.onDidChangeBackgroundTokenizationState(e => {\n            this._bracketPairsTextModelPart.handleDidChangeBackgroundTokenizationState();\n        }));\n        if (needsReset) {\n            // We need to reset the tokenization, as the new token provider otherwise won't have a chance to provide tokens until some action happens in the editor.\n            this._tokens.resetTokenization();\n        }\n    }\n    createPreferredTokenProvider() {\n        if (TreeSitterTokenizationRegistry.get(this._languageId)) {\n            if (!(this._tokens instanceof TreeSitterTokens)) {\n                this.createTokens(true);\n            }\n        }\n        else {\n            if (!(this._tokens instanceof GrammarTokens)) {\n                this.createTokens(false);\n            }\n        }\n    }\n    handleLanguageConfigurationServiceChange(e) {\n        if (e.affects(this._languageId)) {\n            this._onDidChangeLanguageConfiguration.fire({});\n        }\n    }\n    handleDidChangeContent(e) {\n        if (e.isFlush) {\n            this._semanticTokens.flush();\n        }\n        else if (!e.isEolChange) { // We don't have to do anything on an EOL change\n            for (const c of e.changes) {\n                const [eolCount, firstLineLength, lastLineLength] = countEOL(c.text);\n                this._semanticTokens.acceptEdit(c.range, eolCount, firstLineLength, lastLineLength, c.text.length > 0 ? c.text.charCodeAt(0) : 0 /* CharCode.Null */);\n            }\n        }\n        this._tokens.handleDidChangeContent(e);\n    }\n    handleDidChangeAttached() {\n        this._tokens.handleDidChangeAttached();\n    }\n    /**\n     * Includes grammar and semantic tokens.\n     */\n    getLineTokens(lineNumber) {\n        this.validateLineNumber(lineNumber);\n        const syntacticTokens = this._tokens.getLineTokens(lineNumber);\n        return this._semanticTokens.addSparseTokens(lineNumber, syntacticTokens);\n    }\n    _emitModelTokensChangedEvent(e) {\n        if (!this._textModel._isDisposing()) {\n            this._bracketPairsTextModelPart.handleDidChangeTokens(e);\n            this._onDidChangeTokens.fire(e);\n        }\n    }\n    // #region Grammar Tokens\n    validateLineNumber(lineNumber) {\n        if (lineNumber < 1 || lineNumber > this._textModel.getLineCount()) {\n            throw new BugIndicatingError('Illegal value for lineNumber');\n        }\n    }\n    get hasTokens() {\n        return this._tokens.hasTokens;\n    }\n    resetTokenization() {\n        this._tokens.resetTokenization();\n    }\n    get backgroundTokenizationState() {\n        return this._tokens.backgroundTokenizationState;\n    }\n    forceTokenization(lineNumber) {\n        this.validateLineNumber(lineNumber);\n        this._tokens.forceTokenization(lineNumber);\n    }\n    hasAccurateTokensForLine(lineNumber) {\n        this.validateLineNumber(lineNumber);\n        return this._tokens.hasAccurateTokensForLine(lineNumber);\n    }\n    isCheapToTokenize(lineNumber) {\n        this.validateLineNumber(lineNumber);\n        return this._tokens.isCheapToTokenize(lineNumber);\n    }\n    tokenizeIfCheap(lineNumber) {\n        this.validateLineNumber(lineNumber);\n        this._tokens.tokenizeIfCheap(lineNumber);\n    }\n    getTokenTypeIfInsertingCharacter(lineNumber, column, character) {\n        return this._tokens.getTokenTypeIfInsertingCharacter(lineNumber, column, character);\n    }\n    tokenizeLineWithEdit(position, length, newText) {\n        return this._tokens.tokenizeLineWithEdit(position, length, newText);\n    }\n    // #endregion\n    // #region Semantic Tokens\n    setSemanticTokens(tokens, isComplete) {\n        this._semanticTokens.set(tokens, isComplete);\n        this._emitModelTokensChangedEvent({\n            semanticTokensApplied: tokens !== null,\n            ranges: [{ fromLineNumber: 1, toLineNumber: this._textModel.getLineCount() }],\n        });\n    }\n    hasCompleteSemanticTokens() {\n        return this._semanticTokens.isComplete();\n    }\n    hasSomeSemanticTokens() {\n        return !this._semanticTokens.isEmpty();\n    }\n    setPartialSemanticTokens(range, tokens) {\n        if (this.hasCompleteSemanticTokens()) {\n            return;\n        }\n        const changedRange = this._textModel.validateRange(this._semanticTokens.setPartial(range, tokens));\n        this._emitModelTokensChangedEvent({\n            semanticTokensApplied: true,\n            ranges: [\n                {\n                    fromLineNumber: changedRange.startLineNumber,\n                    toLineNumber: changedRange.endLineNumber,\n                },\n            ],\n        });\n    }\n    // #endregion\n    // #region Utility Methods\n    getWordAtPosition(_position) {\n        this.assertNotDisposed();\n        const position = this._textModel.validatePosition(_position);\n        const lineContent = this._textModel.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] = TokenizationTextModelPart_1._findLanguageBoundaries(lineTokens, tokenIndex);\n        const rightBiasedWord = getWordAtText(position.column, this.getLanguageConfiguration(lineTokens.getLanguageId(tokenIndex)).getWordDefinition(), lineContent.substring(rbStartOffset, rbEndOffset), rbStartOffset);\n        // Make sure the result touches the original passed in position\n        if (rightBiasedWord &&\n            rightBiasedWord.startColumn <= _position.column &&\n            _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] = TokenizationTextModelPart_1._findLanguageBoundaries(lineTokens, tokenIndex - 1);\n            const leftBiasedWord = getWordAtText(position.column, this.getLanguageConfiguration(lineTokens.getLanguageId(tokenIndex - 1)).getWordDefinition(), lineContent.substring(lbStartOffset, lbEndOffset), lbStartOffset);\n            // Make sure the result touches the original passed in position\n            if (leftBiasedWord &&\n                leftBiasedWord.startColumn <= _position.column &&\n                _position.column <= leftBiasedWord.endColumn) {\n                return leftBiasedWord;\n            }\n        }\n        return null;\n    }\n    getLanguageConfiguration(languageId) {\n        return this._languageConfigurationService.getLanguageConfiguration(languageId);\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 { word: '', startColumn: position.column, endColumn: position.column, };\n        }\n        return {\n            word: wordAtPosition.word.substr(0, position.column - wordAtPosition.startColumn),\n            startColumn: wordAtPosition.startColumn,\n            endColumn: position.column,\n        };\n    }\n    // #endregion\n    // #region Language Id handling\n    getLanguageId() {\n        return this._languageId;\n    }\n    getLanguageIdAtPosition(lineNumber, column) {\n        const position = this._textModel.validatePosition(new Position(lineNumber, column));\n        const lineTokens = this.getLineTokens(position.lineNumber);\n        return lineTokens.getLanguageId(lineTokens.findTokenIndexAtOffset(position.column - 1));\n    }\n    setLanguageId(languageId, source = 'api') {\n        if (this._languageId === languageId) {\n            // There's nothing to do\n            return;\n        }\n        const e = {\n            oldLanguage: this._languageId,\n            newLanguage: languageId,\n            source\n        };\n        this._languageId = languageId;\n        this._bracketPairsTextModelPart.handleDidChangeLanguage(e);\n        this._tokens.resetTokenization();\n        this.createPreferredTokenProvider();\n        this._onDidChangeLanguage.fire(e);\n        this._onDidChangeLanguageConfiguration.fire({});\n    }\n};\nTokenizationTextModelPart = TokenizationTextModelPart_1 = __decorate([\n    __param(4, ILanguageService),\n    __param(5, ILanguageConfigurationService),\n    __param(6, ITreeSitterParserService)\n], TokenizationTextModelPart);\nexport { TokenizationTextModelPart };\nclass GrammarTokens extends AbstractTokens {\n    constructor(languageIdCodec, textModel, getLanguageId, attachedViews) {\n        super(languageIdCodec, textModel, getLanguageId);\n        this._tokenizer = null;\n        this._defaultBackgroundTokenizer = null;\n        this._backgroundTokenizer = this._register(new MutableDisposable());\n        this._tokens = new ContiguousTokensStore(this._languageIdCodec);\n        this._debugBackgroundTokenizer = this._register(new MutableDisposable());\n        this._attachedViewStates = this._register(new DisposableMap());\n        this._register(TokenizationRegistry.onDidChange((e) => {\n            const languageId = this.getLanguageId();\n            if (e.changedLanguages.indexOf(languageId) === -1) {\n                return;\n            }\n            this.resetTokenization();\n        }));\n        this.resetTokenization();\n        this._register(attachedViews.onDidChangeVisibleRanges(({ view, state }) => {\n            if (state) {\n                let existing = this._attachedViewStates.get(view);\n                if (!existing) {\n                    existing = new AttachedViewHandler(() => this.refreshRanges(existing.lineRanges));\n                    this._attachedViewStates.set(view, existing);\n                }\n                existing.handleStateChange(state);\n            }\n            else {\n                this._attachedViewStates.deleteAndDispose(view);\n            }\n        }));\n    }\n    resetTokenization(fireTokenChangeEvent = true) {\n        this._tokens.flush();\n        this._debugBackgroundTokens?.flush();\n        if (this._debugBackgroundStates) {\n            this._debugBackgroundStates = new TrackingTokenizationStateStore(this._textModel.getLineCount());\n        }\n        if (fireTokenChangeEvent) {\n            this._onDidChangeTokens.fire({\n                semanticTokensApplied: false,\n                ranges: [\n                    {\n                        fromLineNumber: 1,\n                        toLineNumber: this._textModel.getLineCount(),\n                    },\n                ],\n            });\n        }\n        const initializeTokenization = () => {\n            if (this._textModel.isTooLargeForTokenization()) {\n                return [null, null];\n            }\n            const tokenizationSupport = TokenizationRegistry.get(this.getLanguageId());\n            if (!tokenizationSupport) {\n                return [null, null];\n            }\n            let initialState;\n            try {\n                initialState = tokenizationSupport.getInitialState();\n            }\n            catch (e) {\n                onUnexpectedError(e);\n                return [null, null];\n            }\n            return [tokenizationSupport, initialState];\n        };\n        const [tokenizationSupport, initialState] = initializeTokenization();\n        if (tokenizationSupport && initialState) {\n            this._tokenizer = new TokenizerWithStateStoreAndTextModel(this._textModel.getLineCount(), tokenizationSupport, this._textModel, this._languageIdCodec);\n        }\n        else {\n            this._tokenizer = null;\n        }\n        this._backgroundTokenizer.clear();\n        this._defaultBackgroundTokenizer = null;\n        if (this._tokenizer) {\n            const b = {\n                setTokens: (tokens) => {\n                    this.setTokens(tokens);\n                },\n                backgroundTokenizationFinished: () => {\n                    if (this._backgroundTokenizationState === 2 /* BackgroundTokenizationState.Completed */) {\n                        // We already did a full tokenization and don't go back to progressing.\n                        return;\n                    }\n                    const newState = 2 /* BackgroundTokenizationState.Completed */;\n                    this._backgroundTokenizationState = newState;\n                    this._onDidChangeBackgroundTokenizationState.fire();\n                },\n                setEndState: (lineNumber, state) => {\n                    if (!this._tokenizer) {\n                        return;\n                    }\n                    const firstInvalidEndStateLineNumber = this._tokenizer.store.getFirstInvalidEndStateLineNumber();\n                    // Don't accept states for definitely valid states, the renderer is ahead of the worker!\n                    if (firstInvalidEndStateLineNumber !== null && lineNumber >= firstInvalidEndStateLineNumber) {\n                        this._tokenizer?.store.setEndState(lineNumber, state);\n                    }\n                },\n            };\n            if (tokenizationSupport && tokenizationSupport.createBackgroundTokenizer && !tokenizationSupport.backgroundTokenizerShouldOnlyVerifyTokens) {\n                this._backgroundTokenizer.value = tokenizationSupport.createBackgroundTokenizer(this._textModel, b);\n            }\n            if (!this._backgroundTokenizer.value && !this._textModel.isTooLargeForTokenization()) {\n                this._backgroundTokenizer.value = this._defaultBackgroundTokenizer =\n                    new DefaultBackgroundTokenizer(this._tokenizer, b);\n                this._defaultBackgroundTokenizer.handleChanges();\n            }\n            if (tokenizationSupport?.backgroundTokenizerShouldOnlyVerifyTokens && tokenizationSupport.createBackgroundTokenizer) {\n                this._debugBackgroundTokens = new ContiguousTokensStore(this._languageIdCodec);\n                this._debugBackgroundStates = new TrackingTokenizationStateStore(this._textModel.getLineCount());\n                this._debugBackgroundTokenizer.clear();\n                this._debugBackgroundTokenizer.value = tokenizationSupport.createBackgroundTokenizer(this._textModel, {\n                    setTokens: (tokens) => {\n                        this._debugBackgroundTokens?.setMultilineTokens(tokens, this._textModel);\n                    },\n                    backgroundTokenizationFinished() {\n                        // NO OP\n                    },\n                    setEndState: (lineNumber, state) => {\n                        this._debugBackgroundStates?.setEndState(lineNumber, state);\n                    },\n                });\n            }\n            else {\n                this._debugBackgroundTokens = undefined;\n                this._debugBackgroundStates = undefined;\n                this._debugBackgroundTokenizer.value = undefined;\n            }\n        }\n        this.refreshAllVisibleLineTokens();\n    }\n    handleDidChangeAttached() {\n        this._defaultBackgroundTokenizer?.handleChanges();\n    }\n    handleDidChangeContent(e) {\n        if (e.isFlush) {\n            // Don't fire the event, as the view might not have got the text change event yet\n            this.resetTokenization(false);\n        }\n        else if (!e.isEolChange) { // We don't have to do anything on an EOL change\n            for (const c of e.changes) {\n                const [eolCount, firstLineLength] = countEOL(c.text);\n                this._tokens.acceptEdit(c.range, eolCount, firstLineLength);\n                this._debugBackgroundTokens?.acceptEdit(c.range, eolCount, firstLineLength);\n            }\n            this._debugBackgroundStates?.acceptChanges(e.changes);\n            if (this._tokenizer) {\n                this._tokenizer.store.acceptChanges(e.changes);\n            }\n            this._defaultBackgroundTokenizer?.handleChanges();\n        }\n    }\n    setTokens(tokens) {\n        const { changes } = this._tokens.setMultilineTokens(tokens, this._textModel);\n        if (changes.length > 0) {\n            this._onDidChangeTokens.fire({ semanticTokensApplied: false, ranges: changes, });\n        }\n        return { changes: changes };\n    }\n    refreshAllVisibleLineTokens() {\n        const ranges = LineRange.joinMany([...this._attachedViewStates].map(([_, s]) => s.lineRanges));\n        this.refreshRanges(ranges);\n    }\n    refreshRanges(ranges) {\n        for (const range of ranges) {\n            this.refreshRange(range.startLineNumber, range.endLineNumberExclusive - 1);\n        }\n    }\n    refreshRange(startLineNumber, endLineNumber) {\n        if (!this._tokenizer) {\n            return;\n        }\n        startLineNumber = Math.max(1, Math.min(this._textModel.getLineCount(), startLineNumber));\n        endLineNumber = Math.min(this._textModel.getLineCount(), endLineNumber);\n        const builder = new ContiguousMultilineTokensBuilder();\n        const { heuristicTokens } = this._tokenizer.tokenizeHeuristically(builder, startLineNumber, endLineNumber);\n        const changedTokens = this.setTokens(builder.finalize());\n        if (heuristicTokens) {\n            // We overrode tokens with heuristically computed ones.\n            // Because old states might get reused (thus stopping invalidation),\n            // we have to explicitly request the tokens for the changed ranges again.\n            for (const c of changedTokens.changes) {\n                this._backgroundTokenizer.value?.requestTokens(c.fromLineNumber, c.toLineNumber + 1);\n            }\n        }\n        this._defaultBackgroundTokenizer?.checkFinished();\n    }\n    forceTokenization(lineNumber) {\n        const builder = new ContiguousMultilineTokensBuilder();\n        this._tokenizer?.updateTokensUntilLine(builder, lineNumber);\n        this.setTokens(builder.finalize());\n        this._defaultBackgroundTokenizer?.checkFinished();\n    }\n    hasAccurateTokensForLine(lineNumber) {\n        if (!this._tokenizer) {\n            return true;\n        }\n        return this._tokenizer.hasAccurateTokensForLine(lineNumber);\n    }\n    isCheapToTokenize(lineNumber) {\n        if (!this._tokenizer) {\n            return true;\n        }\n        return this._tokenizer.isCheapToTokenize(lineNumber);\n    }\n    getLineTokens(lineNumber) {\n        const lineText = this._textModel.getLineContent(lineNumber);\n        const result = this._tokens.getTokens(this._textModel.getLanguageId(), lineNumber - 1, lineText);\n        if (this._debugBackgroundTokens && this._debugBackgroundStates && this._tokenizer) {\n            if (this._debugBackgroundStates.getFirstInvalidEndStateLineNumberOrMax() > lineNumber && this._tokenizer.store.getFirstInvalidEndStateLineNumberOrMax() > lineNumber) {\n                const backgroundResult = this._debugBackgroundTokens.getTokens(this._textModel.getLanguageId(), lineNumber - 1, lineText);\n                if (!result.equals(backgroundResult) && this._debugBackgroundTokenizer.value?.reportMismatchingTokens) {\n                    this._debugBackgroundTokenizer.value.reportMismatchingTokens(lineNumber);\n                }\n            }\n        }\n        return result;\n    }\n    getTokenTypeIfInsertingCharacter(lineNumber, column, character) {\n        if (!this._tokenizer) {\n            return 0 /* StandardTokenType.Other */;\n        }\n        const position = this._textModel.validatePosition(new Position(lineNumber, column));\n        this.forceTokenization(position.lineNumber);\n        return this._tokenizer.getTokenTypeIfInsertingCharacter(position, character);\n    }\n    tokenizeLineWithEdit(position, length, newText) {\n        if (!this._tokenizer) {\n            return null;\n        }\n        const validatedPosition = this._textModel.validatePosition(position);\n        this.forceTokenization(validatedPosition.lineNumber);\n        return this._tokenizer.tokenizeLineWithEdit(validatedPosition, length, newText);\n    }\n    get hasTokens() {\n        return this._tokens.hasTokens;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 /* RawContentChangedType.Flush */;\n    }\n}\n/**\n * Represents text injected on a line\n * @internal\n */\nexport class LineInjectedText {\n    static applyInjectedText(lineText, injectedTexts) {\n        if (!injectedTexts || injectedTexts.length === 0) {\n            return lineText;\n        }\n        let result = '';\n        let lastOriginalOffset = 0;\n        for (const injectedText of injectedTexts) {\n            result += lineText.substring(lastOriginalOffset, injectedText.column - 1);\n            lastOriginalOffset = injectedText.column - 1;\n            result += injectedText.options.content;\n        }\n        result += lineText.substring(lastOriginalOffset);\n        return result;\n    }\n    static fromDecorations(decorations) {\n        const result = [];\n        for (const decoration of decorations) {\n            if (decoration.options.before && decoration.options.before.content.length > 0) {\n                result.push(new LineInjectedText(decoration.ownerId, decoration.range.startLineNumber, decoration.range.startColumn, decoration.options.before, 0));\n            }\n            if (decoration.options.after && decoration.options.after.content.length > 0) {\n                result.push(new LineInjectedText(decoration.ownerId, decoration.range.endLineNumber, decoration.range.endColumn, decoration.options.after, 1));\n            }\n        }\n        result.sort((a, b) => {\n            if (a.lineNumber === b.lineNumber) {\n                if (a.column === b.column) {\n                    return a.order - b.order;\n                }\n                return a.column - b.column;\n            }\n            return a.lineNumber - b.lineNumber;\n        });\n        return result;\n    }\n    constructor(ownerId, lineNumber, column, options, order) {\n        this.ownerId = ownerId;\n        this.lineNumber = lineNumber;\n        this.column = column;\n        this.options = options;\n        this.order = order;\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, injectedText) {\n        this.changeType = 2 /* RawContentChangedType.LineChanged */;\n        this.lineNumber = lineNumber;\n        this.detail = detail;\n        this.injectedText = injectedText;\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 /* RawContentChangedType.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, injectedTexts) {\n        this.changeType = 4 /* RawContentChangedType.LinesInserted */;\n        this.injectedTexts = injectedTexts;\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 /* RawContentChangedType.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 * An event describing a change in injected text.\n * @internal\n */\nexport class ModelInjectedTextChangedEvent {\n    constructor(changes) {\n        this.changes = changes;\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        const isEolChange = a.isEolChange && b.isEolChange; // both must be true to not confuse listeners who skip such edits\n        return {\n            changes: changes,\n            eol: eol,\n            isEolChange: isEolChange,\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 *--------------------------------------------------------------------------------------------*/\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 TextModel_1;\nimport { ArrayQueue, pushMany } from '../../../base/common/arrays.js';\nimport { Color } from '../../../base/common/color.js';\nimport { BugIndicatingError, illegalArgument, onUnexpectedError } from '../../../base/common/errors.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable, MutableDisposable, combinedDisposable } from '../../../base/common/lifecycle.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { countEOL } from '../core/eolCounter.js';\nimport { normalizeIndentation } from '../core/indentation.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nimport { EDITOR_MODEL_DEFAULTS } from '../core/textModelDefaults.js';\nimport { ILanguageService } from '../languages/language.js';\nimport { ILanguageConfigurationService } from '../languages/languageConfigurationRegistry.js';\nimport * as model from '../model.js';\nimport { BracketPairsTextModelPart } from './bracketPairsTextModelPart/bracketPairsImpl.js';\nimport { ColorizedBracketPairsDecorationProvider } from './bracketPairsTextModelPart/colorizedBracketPairsDecorationProvider.js';\nimport { EditStack } from './editStack.js';\nimport { GuidesTextModelPart } from './guidesTextModelPart.js';\nimport { guessIndentation } from './indentationGuesser.js';\nimport { IntervalNode, IntervalTree, recomputeMaxEnd } from './intervalTree.js';\nimport { PieceTreeTextBuffer } from './pieceTreeTextBuffer/pieceTreeTextBuffer.js';\nimport { PieceTreeTextBufferBuilder } from './pieceTreeTextBuffer/pieceTreeTextBufferBuilder.js';\nimport { SearchParams, TextModelSearch } from './textModelSearch.js';\nimport { TokenizationTextModelPart } from './tokenizationTextModelPart.js';\nimport { AttachedViews } from './tokens.js';\nimport { InternalModelContentChangeEvent, LineInjectedText, ModelInjectedTextChangedEvent, ModelRawContentChangedEvent, ModelRawEOLChanged, ModelRawFlush, ModelRawLineChanged, ModelRawLinesDeleted, ModelRawLinesInserted } from '../textModelEvents.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { IUndoRedoService } from '../../../platform/undoRedo/common/undoRedo.js';\nexport function createTextBufferFactory(text) {\n    const builder = new PieceTreeTextBufferBuilder();\n    builder.acceptChunk(text);\n    return builder.finish();\n}\nexport function createTextBufferFactoryFromSnapshot(snapshot) {\n    const builder = new PieceTreeTextBufferBuilder();\n    let chunk;\n    while (typeof (chunk = snapshot.read()) === 'string') {\n        builder.acceptChunk(chunk);\n    }\n    return builder.finish();\n}\nexport function createTextBuffer(value, defaultEOL) {\n    let factory;\n    if (typeof value === 'string') {\n        factory = createTextBufferFactory(value);\n    }\n    else if (model.isITextSnapshot(value)) {\n        factory = createTextBufferFactoryFromSnapshot(value);\n    }\n    else {\n        factory = value;\n    }\n    return factory.create(defaultEOL);\n}\nlet MODEL_ID = 0;\nconst LIMIT_FIND_COUNT = 999;\nconst 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        const result = [];\n        let resultCnt = 0;\n        let resultLength = 0;\n        do {\n            const 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`); };\nlet TextModel = class TextModel extends Disposable {\n    static { TextModel_1 = this; }\n    static { this._MODEL_SYNC_LIMIT = 50 * 1024 * 1024; } // 50 MB,  // used in tests\n    static { this.LARGE_FILE_SIZE_THRESHOLD = 20 * 1024 * 1024; } // 20 MB;\n    static { this.LARGE_FILE_LINE_COUNT_THRESHOLD = 300 * 1000; } // 300K lines\n    static { this.LARGE_FILE_HEAP_OPERATION_THRESHOLD = 256 * 1024 * 1024; } // 256M characters, usually ~> 512MB memory usage\n    static { this.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 /* model.DefaultEndOfLine.LF */,\n        trimAutoWhitespace: EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,\n        largeFileOptimizations: EDITOR_MODEL_DEFAULTS.largeFileOptimizations,\n        bracketPairColorizationOptions: EDITOR_MODEL_DEFAULTS.bracketPairColorizationOptions,\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: 'tabSize', // TODO@Alex: guess indentSize independent of tabSize\n                insertSpaces: guessedIndentation.insertSpaces,\n                trimAutoWhitespace: options.trimAutoWhitespace,\n                defaultEOL: options.defaultEOL,\n                bracketPairColorizationOptions: options.bracketPairColorizationOptions,\n            });\n        }\n        return new model.TextModelResolvedOptions(options);\n    }\n    get onDidChangeLanguage() { return this._tokenizationTextModelPart.onDidChangeLanguage; }\n    get onDidChangeLanguageConfiguration() { return this._tokenizationTextModelPart.onDidChangeLanguageConfiguration; }\n    get onDidChangeTokens() { return this._tokenizationTextModelPart.onDidChangeTokens; }\n    onDidChangeContent(listener) {\n        return this._eventEmitter.slowEvent((e) => listener(e.contentChangedEvent));\n    }\n    onDidChangeContentOrInjectedText(listener) {\n        return combinedDisposable(this._eventEmitter.fastEvent(e => listener(e)), this._onDidChangeInjectedText.event(e => listener(e)));\n    }\n    _isDisposing() { return this.__isDisposing; }\n    get tokenization() { return this._tokenizationTextModelPart; }\n    get bracketPairs() { return this._bracketPairs; }\n    get guides() { return this._guidesTextModelPart; }\n    constructor(source, languageIdOrSelection, creationOptions, associatedResource = null, _undoRedoService, _languageService, _languageConfigurationService, instantiationService) {\n        super();\n        this._undoRedoService = _undoRedoService;\n        this._languageService = _languageService;\n        this._languageConfigurationService = _languageConfigurationService;\n        this.instantiationService = instantiationService;\n        //#region Events\n        this._onWillDispose = this._register(new Emitter());\n        this.onWillDispose = this._onWillDispose.event;\n        this._onDidChangeDecorations = this._register(new DidChangeDecorationsEmitter(affectedInjectedTextLines => this.handleBeforeFireDecorationsChangedEvent(affectedInjectedTextLines)));\n        this.onDidChangeDecorations = this._onDidChangeDecorations.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._onDidChangeInjectedText = this._register(new Emitter());\n        this._eventEmitter = this._register(new DidChangeContentEmitter());\n        this._languageSelectionListener = this._register(new MutableDisposable());\n        this._deltaDecorationCallCnt = 0;\n        this._attachedViews = new AttachedViews();\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._attachedEditorCount = 0;\n        const { textBuffer, disposable } = createTextBuffer(source, creationOptions.defaultEOL);\n        this._buffer = textBuffer;\n        this._bufferDisposable = disposable;\n        this._options = TextModel_1.resolveOptions(this._buffer, creationOptions);\n        const languageId = (typeof languageIdOrSelection === 'string' ? languageIdOrSelection : languageIdOrSelection.languageId);\n        if (typeof languageIdOrSelection !== 'string') {\n            this._languageSelectionListener.value = languageIdOrSelection.onDidChange(() => this._setLanguage(languageIdOrSelection.languageId));\n        }\n        this._bracketPairs = this._register(new BracketPairsTextModelPart(this, this._languageConfigurationService));\n        this._guidesTextModelPart = this._register(new GuidesTextModelPart(this, this._languageConfigurationService));\n        this._decorationProvider = this._register(new ColorizedBracketPairsDecorationProvider(this));\n        this._tokenizationTextModelPart = this.instantiationService.createInstance(TokenizationTextModelPart, this, this._bracketPairs, languageId, this._attachedViews);\n        const bufferLineCount = this._buffer.getLineCount();\n        const bufferTextLength = this._buffer.getValueLengthInRange(new Range(1, 1, bufferLineCount, this._buffer.getLineLength(bufferLineCount) + 1), 0 /* model.EndOfLinePreference.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_1.LARGE_FILE_SIZE_THRESHOLD)\n                || (bufferLineCount > TextModel_1.LARGE_FILE_LINE_COUNT_THRESHOLD));\n            this._isTooLargeForHeapOperation = bufferTextLength > TextModel_1.LARGE_FILE_HEAP_OPERATION_THRESHOLD;\n        }\n        else {\n            this._isTooLargeForTokenization = false;\n            this._isTooLargeForHeapOperation = false;\n        }\n        this._isTooLargeForSyncing = (bufferTextLength > TextModel_1._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._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, this._undoRedoService);\n        this._isUndoing = false;\n        this._isRedoing = false;\n        this._trimAutoWhitespaceLines = null;\n        this._register(this._decorationProvider.onDidChange(() => {\n            this._onDidChangeDecorations.beginDeferredEmit();\n            this._onDidChangeDecorations.fire();\n            this._onDidChangeDecorations.endDeferredEmit();\n        }));\n        this._languageService.requestRichLanguageFeatures(languageId);\n        this._register(this._languageConfigurationService.onDidChange(e => {\n            this._bracketPairs.handleLanguageConfigurationServiceChange(e);\n            this._tokenizationTextModelPart.handleLanguageConfigurationServiceChange(e);\n        }));\n    }\n    dispose() {\n        this.__isDisposing = true;\n        this._onWillDispose.fire();\n        this._tokenizationTextModelPart.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        this._bufferDisposable = Disposable.None;\n    }\n    _assertNotDisposed() {\n        if (this._isDisposed) {\n            throw new BugIndicatingError('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._tokenizationTextModelPart.handleDidChangeContent(change);\n        this._bracketPairs.handleDidChangeContent(change);\n        this._eventEmitter.fire(new InternalModelContentChangeEvent(rawChange, change));\n    }\n    setValue(value) {\n        this._assertNotDisposed();\n        if (value === null || value === undefined) {\n            throw illegalArgument();\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, isEolChange) {\n        return {\n            changes: [{\n                    range: range,\n                    rangeOffset: rangeOffset,\n                    rangeLength: rangeLength,\n                    text: text,\n                }],\n            eol: this._buffer.getEOL(),\n            isEolChange: isEolChange,\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        // 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, false));\n    }\n    setEOL(eol) {\n        this._assertNotDisposed();\n        const newEOL = (eol === 1 /* model.EndOfLineSequence.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, true));\n    }\n    _onBeforeEOLChange() {\n        // Ensure all decorations get their `range` set.\n        this._decorationsTree.ensureAllNodesHaveRanges(this);\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 range = node.range; // the range is defined due to `_onBeforeEOLChange`\n            const delta = node.cachedAbsoluteStart - node.start;\n            const startOffset = this._buffer.getOffsetAt(range.startLineNumber, range.startColumn);\n            const endOffset = this._buffer.getOffsetAt(range.endLineNumber, 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._tokenizationTextModelPart.handleDidChangeAttached();\n            this._onDidChangeAttached.fire(undefined);\n        }\n        return this._attachedViews.attachView();\n    }\n    onBeforeDetached(view) {\n        this._attachedEditorCount--;\n        if (this._attachedEditorCount === 0) {\n            this._tokenizationTextModelPart.handleDidChangeAttached();\n            this._onDidChangeAttached.fire(undefined);\n        }\n        this._attachedViews.detachView(view);\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    isTooLargeForHeapOperation() {\n        return this._isTooLargeForHeapOperation;\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        const tabSize = (typeof _newOpts.tabSize !== 'undefined') ? _newOpts.tabSize : this._options.tabSize;\n        const indentSize = (typeof _newOpts.indentSize !== 'undefined') ? _newOpts.indentSize : this._options.originalIndentSize;\n        const insertSpaces = (typeof _newOpts.insertSpaces !== 'undefined') ? _newOpts.insertSpaces : this._options.insertSpaces;\n        const trimAutoWhitespace = (typeof _newOpts.trimAutoWhitespace !== 'undefined') ? _newOpts.trimAutoWhitespace : this._options.trimAutoWhitespace;\n        const bracketPairColorizationOptions = (typeof _newOpts.bracketColorizationOptions !== 'undefined') ? _newOpts.bracketColorizationOptions : this._options.bracketPairColorizationOptions;\n        const newOpts = new model.TextModelResolvedOptions({\n            tabSize: tabSize,\n            indentSize: indentSize,\n            insertSpaces: insertSpaces,\n            defaultEOL: this._options.defaultEOL,\n            trimAutoWhitespace: trimAutoWhitespace,\n            bracketPairColorizationOptions,\n        });\n        if (this._options.equals(newOpts)) {\n            return;\n        }\n        const e = this._options.createChangeEvent(newOpts);\n        this._options = newOpts;\n        this._bracketPairs.handleDidChangeOptions(e);\n        this._decorationProvider.handleDidChangeOptions(e);\n        this._onDidChangeOptions.fire(e);\n    }\n    detectIndentation(defaultInsertSpaces, defaultTabSize) {\n        this._assertNotDisposed();\n        const 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    normalizeIndentation(str) {\n        this._assertNotDisposed();\n        return 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 /* Constants.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        const position = this._validatePosition(rawPosition.lineNumber, rawPosition.column, 0 /* StringOffsetValidationType.Relaxed */);\n        return this._buffer.getOffsetAt(position.lineNumber, position.column);\n    }\n    getPositionAt(rawOffset) {\n        this._assertNotDisposed();\n        const 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        if (this.isTooLargeForHeapOperation()) {\n            throw new BugIndicatingError('Operation would exceed heap memory limits');\n        }\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 /* model.EndOfLinePreference.TextDefined */) {\n        this._assertNotDisposed();\n        return this._buffer.getValueInRange(this.validateRange(rawRange), eol);\n    }\n    getValueLengthInRange(rawRange, eol = 0 /* model.EndOfLinePreference.TextDefined */) {\n        this._assertNotDisposed();\n        return this._buffer.getValueLengthInRange(this.validateRange(rawRange), eol);\n    }\n    getCharacterCountInRange(rawRange, eol = 0 /* model.EndOfLinePreference.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 BugIndicatingError('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 BugIndicatingError('Illegal value for lineNumber');\n        }\n        return this._buffer.getLineLength(lineNumber);\n    }\n    getLinesContent() {\n        this._assertNotDisposed();\n        if (this.isTooLargeForHeapOperation()) {\n            throw new BugIndicatingError('Operation would exceed heap memory limits');\n        }\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 /* model.EndOfLineSequence.LF */\n            : 1 /* model.EndOfLineSequence.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 BugIndicatingError('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 BugIndicatingError('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 BugIndicatingError('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 /* StringOffsetValidationType.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 /* StringOffsetValidationType.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 /* StringOffsetValidationType.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 /* StringOffsetValidationType.Relaxed */)) {\n            return false;\n        }\n        if (!this._isValidPosition(endLineNumber, endColumn, 0 /* StringOffsetValidationType.Relaxed */)) {\n            return false;\n        }\n        if (validationType === 1 /* StringOffsetValidationType.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 /* StringOffsetValidationType.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 /* StringOffsetValidationType.Relaxed */);\n        const end = this._validatePosition(_range.endLineNumber, _range.endColumn, 0 /* StringOffsetValidationType.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 /* StringOffsetValidationType.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        const 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 /* model.EndOfLineSequence.LF */ : 1 /* model.EndOfLineSequence.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, group) {\n        try {\n            this._onDidChangeDecorations.beginDeferredEmit();\n            this._eventEmitter.beginDeferredEmit();\n            return this._pushEditOperations(beforeCursorState, this._validateEditOperations(editOperations), cursorStateComputer, group);\n        }\n        finally {\n            this._eventEmitter.endDeferredEmit();\n            this._onDidChangeDecorations.endDeferredEmit();\n        }\n    }\n    _pushEditOperations(beforeCursorState, editOperations, cursorStateComputer, group) {\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            const 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                    const sel = beforeCursorState[i];\n                    let foundEditNearSel = false;\n                    for (let j = 0, lenJ = incomingEdits.length; j < lenJ; j++) {\n                        const editRange = incomingEdits[j].range;\n                        const selIsAbove = editRange.startLineNumber > sel.endLineNumber;\n                        const 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                    const trimLineNumber = this._trimAutoWhitespaceLines[i];\n                    const maxLineColumn = this.getLineMaxColumn(trimLineNumber);\n                    let allowTrimLine = true;\n                    for (let j = 0, lenJ = incomingEdits.length; j < lenJ; j++) {\n                        const editRange = incomingEdits[j].range;\n                        const 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, group);\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            // We do a first pass to update decorations\n            // because we want to read decorations in the second pass\n            // where we will emit content change events\n            // and we want to read the final decorations\n            for (let i = 0, len = contentChanges.length; i < len; i++) {\n                const change = contentChanges[i];\n                this._decorationsTree.acceptReplace(change.rangeOffset, change.rangeLength, change.text.length, change.forceMoveMarkers);\n            }\n            const rawContentChanges = [];\n            this._increaseVersionId();\n            let lineCount = oldLineCount;\n            for (let i = 0, len = contentChanges.length; i < len; i++) {\n                const change = contentChanges[i];\n                const [eolCount] = countEOL(change.text);\n                this._onDidChangeDecorations.fire();\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                const currentEditStartLineNumber = newLineCount - lineCount - changeLineCountDelta + startLineNumber;\n                const firstEditLineNumber = currentEditStartLineNumber;\n                const lastInsertedLineNumber = currentEditStartLineNumber + insertingLinesCnt;\n                const decorationsWithInjectedTextInEditedRange = this._decorationsTree.getInjectedTextInInterval(this, this.getOffsetAt(new Position(firstEditLineNumber, 1)), this.getOffsetAt(new Position(lastInsertedLineNumber, this.getLineMaxColumn(lastInsertedLineNumber))), 0);\n                const injectedTextInEditedRange = LineInjectedText.fromDecorations(decorationsWithInjectedTextInEditedRange);\n                const injectedTextInEditedRangeQueue = new ArrayQueue(injectedTextInEditedRange);\n                for (let j = editingLinesCnt; j >= 0; j--) {\n                    const editLineNumber = startLineNumber + j;\n                    const currentEditLineNumber = currentEditStartLineNumber + j;\n                    injectedTextInEditedRangeQueue.takeFromEndWhile(r => r.lineNumber > currentEditLineNumber);\n                    const decorationsInCurrentLine = injectedTextInEditedRangeQueue.takeFromEndWhile(r => r.lineNumber === currentEditLineNumber);\n                    rawContentChanges.push(new ModelRawLineChanged(editLineNumber, this.getLineContent(currentEditLineNumber), decorationsInCurrentLine));\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                    const injectedTextInEditedRangeQueue = new ArrayQueue(injectedTextInEditedRange);\n                    // Must insert some lines\n                    const spliceLineNumber = startLineNumber + editingLinesCnt;\n                    const cnt = insertingLinesCnt - editingLinesCnt;\n                    const fromLineNumber = newLineCount - lineCount - cnt + spliceLineNumber + 1;\n                    const injectedTexts = [];\n                    const newLines = [];\n                    for (let i = 0; i < cnt; i++) {\n                        const lineNumber = fromLineNumber + i;\n                        newLines[i] = this.getLineContent(lineNumber);\n                        injectedTextInEditedRangeQueue.takeWhile(r => r.lineNumber < lineNumber);\n                        injectedTexts[i] = injectedTextInEditedRangeQueue.takeWhile(r => r.lineNumber === lineNumber);\n                    }\n                    rawContentChanges.push(new ModelRawLinesInserted(spliceLineNumber + 1, startLineNumber + insertingLinesCnt, newLines, injectedTexts));\n                }\n                lineCount += changeLineCountDelta;\n            }\n            this._emitContentChangedEvent(new ModelRawContentChangedEvent(rawContentChanges, this.getVersionId(), this._isUndoing, this._isRedoing), {\n                changes: contentChanges,\n                eol: this._buffer.getEOL(),\n                isEolChange: false,\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    handleBeforeFireDecorationsChangedEvent(affectedInjectedTextLines) {\n        // This is called before the decoration changed event is fired.\n        if (affectedInjectedTextLines === null || affectedInjectedTextLines.size === 0) {\n            return;\n        }\n        const affectedLines = Array.from(affectedInjectedTextLines);\n        const lineChangeEvents = affectedLines.map(lineNumber => new ModelRawLineChanged(lineNumber, this.getLineContent(lineNumber), this._getInjectedTextInLine(lineNumber)));\n        this._onDidChangeInjectedText.fire(new ModelInjectedTextChangedEvent(lineChangeEvents));\n    }\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        const 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._deltaDecorationCallCnt++;\n            if (this._deltaDecorationCallCnt > 1) {\n                console.warn(`Invoking deltaDecorations recursively could lead to leaking decorations.`);\n                onUnexpectedError(new Error(`Invoking deltaDecorations recursively could lead to leaking decorations.`));\n            }\n            this._onDidChangeDecorations.beginDeferredEmit();\n            return this._deltaDecorationsImpl(ownerId, oldDecorations, newDecorations);\n        }\n        finally {\n            this._onDidChangeDecorations.endDeferredEmit();\n            this._deltaDecorationCallCnt--;\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] }], true)[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        return this._decorationsTree.getNodeRange(this, node);\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, onlyMarginDecorations = false) {\n        const lineCount = this.getLineCount();\n        const startLineNumber = Math.min(lineCount, Math.max(1, _startLineNumber));\n        const endLineNumber = Math.min(lineCount, Math.max(1, _endLineNumber));\n        const endColumn = this.getLineMaxColumn(endLineNumber);\n        const range = new Range(startLineNumber, 1, endLineNumber, endColumn);\n        const decorations = this._getDecorationsInRange(range, ownerId, filterOutValidation, onlyMarginDecorations);\n        pushMany(decorations, this._decorationProvider.getDecorationsInRange(range, ownerId, filterOutValidation));\n        return decorations;\n    }\n    getDecorationsInRange(range, ownerId = 0, filterOutValidation = false, onlyMinimapDecorations = false, onlyMarginDecorations = false) {\n        const validatedRange = this.validateRange(range);\n        const decorations = this._getDecorationsInRange(validatedRange, ownerId, filterOutValidation, onlyMarginDecorations);\n        pushMany(decorations, this._decorationProvider.getDecorationsInRange(validatedRange, ownerId, filterOutValidation, onlyMinimapDecorations));\n        return decorations;\n    }\n    getOverviewRulerDecorations(ownerId = 0, filterOutValidation = false) {\n        return this._decorationsTree.getAll(this, ownerId, filterOutValidation, true, false);\n    }\n    getInjectedTextDecorations(ownerId = 0) {\n        return this._decorationsTree.getAllInjectedText(this, ownerId);\n    }\n    _getInjectedTextInLine(lineNumber) {\n        const startOffset = this._buffer.getOffsetAt(lineNumber, 1);\n        const endOffset = startOffset + this._buffer.getLineLength(lineNumber);\n        const result = this._decorationsTree.getInjectedTextInInterval(this, startOffset, endOffset, 0);\n        return LineInjectedText.fromDecorations(result).filter(t => t.lineNumber === lineNumber);\n    }\n    getAllDecorations(ownerId = 0, filterOutValidation = false) {\n        let result = this._decorationsTree.getAll(this, ownerId, filterOutValidation, false, false);\n        result = result.concat(this._decorationProvider.getAllDecorations(ownerId, filterOutValidation));\n        return result;\n    }\n    getAllMarginDecorations(ownerId = 0) {\n        return this._decorationsTree.getAll(this, ownerId, false, false, true);\n    }\n    _getDecorationsInRange(filterRange, filterOwnerId, filterOutValidation, onlyMarginDecorations) {\n        const startOffset = this._buffer.getOffsetAt(filterRange.startLineNumber, filterRange.startColumn);\n        const endOffset = this._buffer.getOffsetAt(filterRange.endLineNumber, filterRange.endColumn);\n        return this._decorationsTree.getAllInInterval(this, startOffset, endOffset, filterOwnerId, filterOutValidation, onlyMarginDecorations);\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        if (node.options.after) {\n            const oldRange = this.getDecorationRange(decorationId);\n            this._onDidChangeDecorations.recordLineAffectedByInjectedText(oldRange.endLineNumber);\n        }\n        if (node.options.before) {\n            const oldRange = this.getDecorationRange(decorationId);\n            this._onDidChangeDecorations.recordLineAffectedByInjectedText(oldRange.startLineNumber);\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        if (node.options.after) {\n            this._onDidChangeDecorations.recordLineAffectedByInjectedText(range.endLineNumber);\n        }\n        if (node.options.before) {\n            this._onDidChangeDecorations.recordLineAffectedByInjectedText(range.startLineNumber);\n        }\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 (node.options.after || options.after) {\n            const nodeRange = this._decorationsTree.getNodeRange(this, node);\n            this._onDidChangeDecorations.recordLineAffectedByInjectedText(nodeRange.endLineNumber);\n        }\n        if (node.options.before || options.before) {\n            const nodeRange = this._decorationsTree.getNodeRange(this, node);\n            this._onDidChangeDecorations.recordLineAffectedByInjectedText(nodeRange.startLineNumber);\n        }\n        const movedInOverviewRuler = nodeWasInOverviewRuler !== nodeIsInOverviewRuler;\n        const changedWhetherInjectedText = isOptionsInjectedText(options) !== isNodeInjectedText(node);\n        if (movedInOverviewRuler || changedWhetherInjectedText) {\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, suppressEvents = false) {\n        const versionId = this.getVersionId();\n        const oldDecorationsLen = oldDecorationsIds.length;\n        let oldDecorationIndex = 0;\n        const newDecorationsLen = newDecorations.length;\n        let newDecorationIndex = 0;\n        this._onDidChangeDecorations.beginDeferredEmit();\n        try {\n            const 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                        if (node.options.after) {\n                            const nodeRange = this._decorationsTree.getNodeRange(this, node);\n                            this._onDidChangeDecorations.recordLineAffectedByInjectedText(nodeRange.endLineNumber);\n                        }\n                        if (node.options.before) {\n                            const nodeRange = this._decorationsTree.getNodeRange(this, node);\n                            this._onDidChangeDecorations.recordLineAffectedByInjectedText(nodeRange.startLineNumber);\n                        }\n                        this._decorationsTree.delete(node);\n                        if (!suppressEvents) {\n                            this._onDidChangeDecorations.checkAffectedAndFire(node.options);\n                        }\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                    if (node.options.after) {\n                        this._onDidChangeDecorations.recordLineAffectedByInjectedText(range.endLineNumber);\n                    }\n                    if (node.options.before) {\n                        this._onDidChangeDecorations.recordLineAffectedByInjectedText(range.startLineNumber);\n                    }\n                    if (!suppressEvents) {\n                        this._onDidChangeDecorations.checkAffectedAndFire(options);\n                    }\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        finally {\n            this._onDidChangeDecorations.endDeferredEmit();\n        }\n    }\n    //#endregion\n    //#region Tokenization\n    // TODO move them to the tokenization part.\n    getLanguageId() {\n        return this.tokenization.getLanguageId();\n    }\n    setLanguage(languageIdOrSelection, source) {\n        if (typeof languageIdOrSelection === 'string') {\n            this._languageSelectionListener.clear();\n            this._setLanguage(languageIdOrSelection, source);\n        }\n        else {\n            this._languageSelectionListener.value = languageIdOrSelection.onDidChange(() => this._setLanguage(languageIdOrSelection.languageId, source));\n            this._setLanguage(languageIdOrSelection.languageId, source);\n        }\n    }\n    _setLanguage(languageId, source) {\n        this.tokenization.setLanguageId(languageId, source);\n        this._languageService.requestRichLanguageFeatures(languageId);\n    }\n    getLanguageIdAtPosition(lineNumber, column) {\n        return this.tokenization.getLanguageIdAtPosition(lineNumber, column);\n    }\n    getWordAtPosition(position) {\n        return this._tokenizationTextModelPart.getWordAtPosition(position);\n    }\n    getWordUntilPosition(position) {\n        return this._tokenizationTextModelPart.getWordUntilPosition(position);\n    }\n    //#endregion\n    normalizePosition(position, affinity) {\n        return position;\n    }\n    /**\n     * Gets the column at which indentation stops at a given line.\n     * @internal\n    */\n    getLineIndentColumn(lineNumber) {\n        // Columns start with 1.\n        return indentOfLine(this.getLineContent(lineNumber)) + 1;\n    }\n};\nTextModel = TextModel_1 = __decorate([\n    __param(4, IUndoRedoService),\n    __param(5, ILanguageService),\n    __param(6, ILanguageConfigurationService),\n    __param(7, IInstantiationService)\n], TextModel);\nexport { TextModel };\nexport function indentOfLine(line) {\n    let indent = 0;\n    for (const c of line) {\n        if (c === ' ' || c === '\\t') {\n            indent++;\n        }\n        else {\n            break;\n        }\n    }\n    return indent;\n}\n//#region Decorations\nfunction isNodeInOverviewRuler(node) {\n    return (node.options.overviewRuler && node.options.overviewRuler.color ? true : false);\n}\nfunction isOptionsInjectedText(options) {\n    return !!options.after || !!options.before;\n}\nfunction isNodeInjectedText(node) {\n    return !!node.options.after || !!node.options.before;\n}\nclass DecorationsTrees {\n    constructor() {\n        this._decorationsTree0 = new IntervalTree();\n        this._decorationsTree1 = new IntervalTree();\n        this._injectedTextDecorationsTree = new IntervalTree();\n    }\n    ensureAllNodesHaveRanges(host) {\n        this.getAll(host, 0, false, false, false);\n    }\n    _ensureNodesHaveRanges(host, nodes) {\n        for (const node of nodes) {\n            if (node.range === null) {\n                node.range = host.getRangeAt(node.cachedAbsoluteStart, node.cachedAbsoluteEnd);\n            }\n        }\n        return nodes;\n    }\n    getAllInInterval(host, start, end, filterOwnerId, filterOutValidation, onlyMarginDecorations) {\n        const versionId = host.getVersionId();\n        const result = this._intervalSearch(start, end, filterOwnerId, filterOutValidation, versionId, onlyMarginDecorations);\n        return this._ensureNodesHaveRanges(host, result);\n    }\n    _intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations) {\n        const r0 = this._decorationsTree0.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations);\n        const r1 = this._decorationsTree1.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations);\n        const r2 = this._injectedTextDecorationsTree.intervalSearch(start, end, filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations);\n        return r0.concat(r1).concat(r2);\n    }\n    getInjectedTextInInterval(host, start, end, filterOwnerId) {\n        const versionId = host.getVersionId();\n        const result = this._injectedTextDecorationsTree.intervalSearch(start, end, filterOwnerId, false, versionId, false);\n        return this._ensureNodesHaveRanges(host, result).filter((i) => i.options.showIfCollapsed || !i.range.isEmpty());\n    }\n    getAllInjectedText(host, filterOwnerId) {\n        const versionId = host.getVersionId();\n        const result = this._injectedTextDecorationsTree.search(filterOwnerId, false, versionId, false);\n        return this._ensureNodesHaveRanges(host, result).filter((i) => i.options.showIfCollapsed || !i.range.isEmpty());\n    }\n    getAll(host, filterOwnerId, filterOutValidation, overviewRulerOnly, onlyMarginDecorations) {\n        const versionId = host.getVersionId();\n        const result = this._search(filterOwnerId, filterOutValidation, overviewRulerOnly, versionId, onlyMarginDecorations);\n        return this._ensureNodesHaveRanges(host, result);\n    }\n    _search(filterOwnerId, filterOutValidation, overviewRulerOnly, cachedVersionId, onlyMarginDecorations) {\n        if (overviewRulerOnly) {\n            return this._decorationsTree1.search(filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations);\n        }\n        else {\n            const r0 = this._decorationsTree0.search(filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations);\n            const r1 = this._decorationsTree1.search(filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations);\n            const r2 = this._injectedTextDecorationsTree.search(filterOwnerId, filterOutValidation, cachedVersionId, onlyMarginDecorations);\n            return r0.concat(r1).concat(r2);\n        }\n    }\n    collectNodesFromOwner(ownerId) {\n        const r0 = this._decorationsTree0.collectNodesFromOwner(ownerId);\n        const r1 = this._decorationsTree1.collectNodesFromOwner(ownerId);\n        const r2 = this._injectedTextDecorationsTree.collectNodesFromOwner(ownerId);\n        return r0.concat(r1).concat(r2);\n    }\n    collectNodesPostOrder() {\n        const r0 = this._decorationsTree0.collectNodesPostOrder();\n        const r1 = this._decorationsTree1.collectNodesPostOrder();\n        const r2 = this._injectedTextDecorationsTree.collectNodesPostOrder();\n        return r0.concat(r1).concat(r2);\n    }\n    insert(node) {\n        if (isNodeInjectedText(node)) {\n            this._injectedTextDecorationsTree.insert(node);\n        }\n        else if (isNodeInOverviewRuler(node)) {\n            this._decorationsTree1.insert(node);\n        }\n        else {\n            this._decorationsTree0.insert(node);\n        }\n    }\n    delete(node) {\n        if (isNodeInjectedText(node)) {\n            this._injectedTextDecorationsTree.delete(node);\n        }\n        else if (isNodeInOverviewRuler(node)) {\n            this._decorationsTree1.delete(node);\n        }\n        else {\n            this._decorationsTree0.delete(node);\n        }\n    }\n    getNodeRange(host, node) {\n        const versionId = host.getVersionId();\n        if (node.cachedVersionId !== versionId) {\n            this._resolveNode(node, versionId);\n        }\n        if (node.range === null) {\n            node.range = host.getRangeAt(node.cachedAbsoluteStart, node.cachedAbsoluteEnd);\n        }\n        return node.range;\n    }\n    _resolveNode(node, cachedVersionId) {\n        if (isNodeInjectedText(node)) {\n            this._injectedTextDecorationsTree.resolveNode(node, cachedVersionId);\n        }\n        else if (isNodeInOverviewRuler(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        this._injectedTextDecorationsTree.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        const c = color ? theme.getColor(color.id) : null;\n        if (!c) {\n            return '';\n        }\n        return c.toString();\n    }\n}\nexport class ModelDecorationGlyphMarginOptions {\n    constructor(options) {\n        this.position = options?.position ?? model.GlyphMarginLane.Center;\n        this.persistLane = options?.persistLane;\n    }\n}\nexport class ModelDecorationMinimapOptions extends DecorationOptions {\n    constructor(options) {\n        super(options);\n        this.position = options.position;\n        this.sectionHeaderStyle = options.sectionHeaderStyle ?? null;\n        this.sectionHeaderText = options.sectionHeaderText ?? null;\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 ModelDecorationInjectedTextOptions {\n    static from(options) {\n        if (options instanceof ModelDecorationInjectedTextOptions) {\n            return options;\n        }\n        return new ModelDecorationInjectedTextOptions(options);\n    }\n    constructor(options) {\n        this.content = options.content || '';\n        this.inlineClassName = options.inlineClassName || null;\n        this.inlineClassNameAffectsLetterSpacing = options.inlineClassNameAffectsLetterSpacing || false;\n        this.attachedData = options.attachedData || null;\n        this.cursorStops = options.cursorStops || null;\n    }\n}\nexport class ModelDecorationOptions {\n    static register(options) {\n        return new ModelDecorationOptions(options);\n    }\n    static createDynamic(options) {\n        return new ModelDecorationOptions(options);\n    }\n    constructor(options) {\n        this.description = options.description;\n        this.blockClassName = options.blockClassName ? cleanClassName(options.blockClassName) : null;\n        this.blockDoesNotCollapse = options.blockDoesNotCollapse ?? null;\n        this.blockIsAfterEnd = options.blockIsAfterEnd ?? null;\n        this.blockPadding = options.blockPadding ?? null;\n        this.stickiness = options.stickiness || 0 /* model.TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges */;\n        this.zIndex = options.zIndex || 0;\n        this.className = options.className ? cleanClassName(options.className) : null;\n        this.shouldFillLineOnLineBreak = options.shouldFillLineOnLineBreak ?? null;\n        this.hoverMessage = options.hoverMessage || null;\n        this.glyphMarginHoverMessage = options.glyphMarginHoverMessage || null;\n        this.lineNumberHoverMessage = options.lineNumberHoverMessage || 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.glyphMargin = options.glyphMarginClassName ? new ModelDecorationGlyphMarginOptions(options.glyphMargin) : null;\n        this.glyphMarginClassName = options.glyphMarginClassName ? cleanClassName(options.glyphMarginClassName) : null;\n        this.linesDecorationsClassName = options.linesDecorationsClassName ? cleanClassName(options.linesDecorationsClassName) : null;\n        this.lineNumberClassName = options.lineNumberClassName ? cleanClassName(options.lineNumberClassName) : null;\n        this.linesDecorationsTooltip = options.linesDecorationsTooltip ? strings.htmlAttributeEncodeValue(options.linesDecorationsTooltip) : 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        this.after = options.after ? ModelDecorationInjectedTextOptions.from(options.after) : null;\n        this.before = options.before ? ModelDecorationInjectedTextOptions.from(options.before) : null;\n        this.hideInCommentTokens = options.hideInCommentTokens ?? false;\n        this.hideInStringTokens = options.hideInStringTokens ?? false;\n    }\n}\nModelDecorationOptions.EMPTY = ModelDecorationOptions.register({ description: 'empty' });\n/**\n * The order carefully matches the values of the enum.\n */\nconst TRACKED_RANGE_OPTIONS = [\n    ModelDecorationOptions.register({ description: 'tracked-range-always-grows-when-typing-at-edges', stickiness: 0 /* model.TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges */ }),\n    ModelDecorationOptions.register({ description: 'tracked-range-never-grows-when-typing-at-edges', stickiness: 1 /* model.TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges */ }),\n    ModelDecorationOptions.register({ description: 'tracked-range-grows-only-when-typing-before', stickiness: 2 /* model.TrackedRangeStickiness.GrowsOnlyWhenTypingBefore */ }),\n    ModelDecorationOptions.register({ description: 'tracked-range-grows-only-when-typing-after', stickiness: 3 /* model.TrackedRangeStickiness.GrowsOnlyWhenTypingAfter */ }),\n];\nfunction _normalizeOptions(options) {\n    if (options instanceof ModelDecorationOptions) {\n        return options;\n    }\n    return ModelDecorationOptions.createDynamic(options);\n}\nclass DidChangeDecorationsEmitter extends Disposable {\n    constructor(handleBeforeFire) {\n        super();\n        this.handleBeforeFire = handleBeforeFire;\n        this._actual = this._register(new Emitter());\n        this.event = this._actual.event;\n        this._affectedInjectedTextLines = null;\n        this._deferredCnt = 0;\n        this._shouldFireDeferred = false;\n        this._affectsMinimap = false;\n        this._affectsOverviewRuler = false;\n        this._affectsGlyphMargin = false;\n        this._affectsLineNumber = false;\n    }\n    beginDeferredEmit() {\n        this._deferredCnt++;\n    }\n    endDeferredEmit() {\n        this._deferredCnt--;\n        if (this._deferredCnt === 0) {\n            if (this._shouldFireDeferred) {\n                this.doFire();\n            }\n            this._affectedInjectedTextLines?.clear();\n            this._affectedInjectedTextLines = null;\n        }\n    }\n    recordLineAffectedByInjectedText(lineNumber) {\n        if (!this._affectedInjectedTextLines) {\n            this._affectedInjectedTextLines = new Set();\n        }\n        this._affectedInjectedTextLines.add(lineNumber);\n    }\n    checkAffectedAndFire(options) {\n        this._affectsMinimap ||= !!options.minimap?.position;\n        this._affectsOverviewRuler ||= !!options.overviewRuler?.color;\n        this._affectsGlyphMargin ||= !!options.glyphMarginClassName;\n        this._affectsLineNumber ||= !!options.lineNumberClassName;\n        this.tryFire();\n    }\n    fire() {\n        this._affectsMinimap = true;\n        this._affectsOverviewRuler = true;\n        this._affectsGlyphMargin = true;\n        this.tryFire();\n    }\n    tryFire() {\n        if (this._deferredCnt === 0) {\n            this.doFire();\n        }\n        else {\n            this._shouldFireDeferred = true;\n        }\n    }\n    doFire() {\n        this.handleBeforeFire(this._affectedInjectedTextLines);\n        const event = {\n            affectsMinimap: this._affectsMinimap,\n            affectsOverviewRuler: this._affectsOverviewRuler,\n            affectsGlyphMargin: this._affectsGlyphMargin,\n            affectsLineNumber: this._affectsLineNumber,\n        };\n        this._shouldFireDeferred = false;\n        this._affectsMinimap = false;\n        this._affectsOverviewRuler = false;\n        this._affectsGlyphMargin = false;\n        this._actual.fire(event);\n    }\n}\n//#endregion\nclass 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 *--------------------------------------------------------------------------------------------*/\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 ModelService_1;\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { TextModel } from '../model/textModel.js';\nimport { EDITOR_MODEL_DEFAULTS } from '../core/textModelDefaults.js';\nimport { PLAINTEXT_LANGUAGE_ID } from '../languages/modesRegistry.js';\nimport { ITextResourcePropertiesService } from './textResourceConfiguration.js';\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.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 { equals } from '../../../base/common/objects.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nfunction MODEL_ID(resource) {\n    return resource.toString();\n}\nclass ModelData {\n    constructor(model, onWillDispose, onDidChangeLanguage) {\n        this.model = model;\n        this._modelEventListeners = new DisposableStore();\n        this.model = model;\n        this._modelEventListeners.add(model.onWillDispose(() => onWillDispose(model)));\n        this._modelEventListeners.add(model.onDidChangeLanguage((e) => onDidChangeLanguage(model, e)));\n    }\n    dispose() {\n        this._modelEventListeners.dispose();\n    }\n}\nconst DEFAULT_EOL = (platform.isLinux || platform.isMacintosh) ? 1 /* DefaultEndOfLine.LF */ : 2 /* DefaultEndOfLine.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}\nlet ModelService = class ModelService extends Disposable {\n    static { ModelService_1 = this; }\n    static { this.MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK = 20 * 1024 * 1024; }\n    constructor(_configurationService, _resourcePropertiesService, _undoRedoService, _instantiationService) {\n        super();\n        this._configurationService = _configurationService;\n        this._resourcePropertiesService = _resourcePropertiesService;\n        this._undoRedoService = _undoRedoService;\n        this._instantiationService = _instantiationService;\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.onModelLanguageChanged = this._onModelModeChanged.event;\n        this._modelCreationOptionsByLanguageAndResource = Object.create(null);\n        this._models = {};\n        this._disposedModels = new Map();\n        this._disposedModelsHeapSize = 0;\n        this._register(this._configurationService.onDidChangeConfiguration(e => this._updateModelOptions(e)));\n        this._updateModelOptions(undefined);\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 = Math.max(parsedIndentSize, 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 /* DefaultEndOfLine.CRLF */;\n        }\n        else if (eol === '\\n') {\n            newDefaultEOL = 1 /* DefaultEndOfLine.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        let bracketPairColorizationOptions = EDITOR_MODEL_DEFAULTS.bracketPairColorizationOptions;\n        if (config.editor?.bracketPairColorization && typeof config.editor.bracketPairColorization === 'object') {\n            bracketPairColorizationOptions = {\n                enabled: !!config.editor.bracketPairColorization.enabled,\n                independentColorPoolPerBracketType: !!config.editor.bracketPairColorization.independentColorPoolPerBracketType\n            };\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            bracketPairColorizationOptions\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 && typeof eol === 'string' && eol !== 'auto') {\n            return eol;\n        }\n        return platform.OS === 3 /* platform.OperatingSystem.Linux */ || platform.OS === 2 /* platform.OperatingSystem.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(languageIdOrSelection, resource, isForSimpleWidget) {\n        const language = (typeof languageIdOrSelection === 'string' ? languageIdOrSelection : languageIdOrSelection.languageId);\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 = ModelService_1._readModelOptions({ editor, eol }, isForSimpleWidget);\n            this._modelCreationOptionsByLanguageAndResource[language + resource] = creationOptions;\n        }\n        return creationOptions;\n    }\n    _updateModelOptions(e) {\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.getLanguageId();\n            const uri = modelData.model.uri;\n            if (e && !e.affectsConfiguration('editor', { overrideIdentifier: language, resource: uri }) && !e.affectsConfiguration('files.eol', { overrideIdentifier: language, resource: uri })) {\n                continue; // perf: skip if this model is not affected by configuration change\n            }\n            const oldOptions = oldOptionsByLanguageAndResource[language + uri];\n            const newOptions = this.getCreationOptions(language, uri, modelData.model.isForSimpleWidget);\n            ModelService_1._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 /* DefaultEndOfLine.LF */ ? 0 /* EndOfLineSequence.LF */ : 1 /* EndOfLineSequence.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            && equals(currentOptions.bracketPairColorizationOptions, newOptions.bracketPairColorizationOptions)) {\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                bracketColorizationOptions: newOptions.bracketPairColorizationOptions\n            });\n        }\n        else {\n            model.updateOptions({\n                insertSpaces: newOptions.insertSpaces,\n                tabSize: newOptions.tabSize,\n                indentSize: newOptions.indentSize,\n                trimAutoWhitespace: newOptions.trimAutoWhitespace,\n                bracketColorizationOptions: newOptions.bracketPairColorizationOptions\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, languageIdOrSelection, resource, isForSimpleWidget) {\n        // create & save the model\n        const options = this.getCreationOptions(languageIdOrSelection, resource, isForSimpleWidget);\n        const model = this._instantiationService.createInstance(TextModel, value, languageIdOrSelection, options, resource);\n        if (resource && this._disposedModels.has(MODEL_ID(resource))) {\n            const disposedModelData = this._removeDisposedModel(resource);\n            const elements = this._undoRedoService.getElements(resource);\n            const sha1Computer = this._getSHA1Computer();\n            const sha1IsEqual = (sha1Computer.canComputeSHA1(model)\n                ? sha1Computer.computeSHA1(model) === disposedModelData.sha1\n                : false);\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, resource, isForSimpleWidget);\n        }\n        else {\n            modelData = this._createModelData(value, PLAINTEXT_LANGUAGE_ID, resource, isForSimpleWidget);\n        }\n        this._onModelAdded.fire(modelData.model);\n        return modelData.model;\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    // --- end IModelService\n    _schemaShouldMaintainUndoRedoElements(resource) {\n        return (resource.scheme === Schemas.file\n            || resource.scheme === Schemas.vscodeRemote\n            || resource.scheme === Schemas.vscodeUserData\n            || resource.scheme === Schemas.vscodeNotebookCell\n            || resource.scheme === 'fake-fs' // for tests\n        );\n    }\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() && this._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 = ModelService_1.MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK;\n        const sha1Computer = this._getSHA1Computer();\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 || !sha1Computer.canComputeSHA1(model))) {\n            // the undo stack for this file would never fit in the configured memory or the file is very large, 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, sha1Computer.computeSHA1(model), model.getVersionId(), model.getAlternativeVersionId()));\n        }\n        delete this._models[modelId];\n        modelData.dispose();\n        // clean up cache\n        delete this._modelCreationOptionsByLanguageAndResource[model.getLanguageId() + model.uri];\n        this._onModelRemoved.fire(model);\n    }\n    _onDidChangeLanguage(model, e) {\n        const oldLanguageId = e.oldLanguage;\n        const newLanguageId = model.getLanguageId();\n        const oldOptions = this.getCreationOptions(oldLanguageId, model.uri, model.isForSimpleWidget);\n        const newOptions = this.getCreationOptions(newLanguageId, model.uri, model.isForSimpleWidget);\n        ModelService_1._setModelOptionsForModel(model, newOptions, oldOptions);\n        this._onModelModeChanged.fire({ model, oldLanguageId: oldLanguageId });\n    }\n    _getSHA1Computer() {\n        return new DefaultModelSHA1Computer();\n    }\n};\nModelService = ModelService_1 = __decorate([\n    __param(0, IConfigurationService),\n    __param(1, ITextResourcePropertiesService),\n    __param(2, IUndoRedoService),\n    __param(3, IInstantiationService)\n], ModelService);\nexport { ModelService };\nexport class DefaultModelSHA1Computer {\n    static { this.MAX_MODEL_SIZE = 10 * 1024 * 1024; } // takes 200ms to compute a sha1 on a 10MB model on a new machine\n    canComputeSHA1(model) {\n        return (model.getValueLength() <= DefaultModelSHA1Computer.MAX_MODEL_SIZE);\n    }\n    computeSHA1(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    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { toDisposable } from '../../../base/common/lifecycle.js';\nimport { Registry } from '../../registry/common/platform.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","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 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 = {}));\n/**\n * Represents the activation behavior for items in a quick input. This means which item will be\n * \"active\" (aka focused).\n */\nexport var ItemActivation;\n(function (ItemActivation) {\n    /**\n     * No item will be active.\n     */\n    ItemActivation[ItemActivation[\"NONE\"] = 0] = \"NONE\";\n    /**\n     * First item will be active.\n     */\n    ItemActivation[ItemActivation[\"FIRST\"] = 1] = \"FIRST\";\n    /**\n     * Second item will be active.\n     */\n    ItemActivation[ItemActivation[\"SECOND\"] = 2] = \"SECOND\";\n    /**\n     * Last item will be active.\n     */\n    ItemActivation[ItemActivation[\"LAST\"] = 3] = \"LAST\";\n})(ItemActivation || (ItemActivation = {}));\n/**\n * Represents the focus options for a quick pick.\n */\nexport var QuickPickFocus;\n(function (QuickPickFocus) {\n    /**\n     * Focus the first item in the list.\n     */\n    QuickPickFocus[QuickPickFocus[\"First\"] = 1] = \"First\";\n    /**\n     * Focus the second item in the list.\n     */\n    QuickPickFocus[QuickPickFocus[\"Second\"] = 2] = \"Second\";\n    /**\n     * Focus the last item in the list.\n     */\n    QuickPickFocus[QuickPickFocus[\"Last\"] = 3] = \"Last\";\n    /**\n     * Focus the next item in the list.\n     */\n    QuickPickFocus[QuickPickFocus[\"Next\"] = 4] = \"Next\";\n    /**\n     * Focus the previous item in the list.\n     */\n    QuickPickFocus[QuickPickFocus[\"Previous\"] = 5] = \"Previous\";\n    /**\n     * Focus the next page in the list.\n     */\n    QuickPickFocus[QuickPickFocus[\"NextPage\"] = 6] = \"NextPage\";\n    /**\n     * Focus the previous page in the list.\n     */\n    QuickPickFocus[QuickPickFocus[\"PreviousPage\"] = 7] = \"PreviousPage\";\n    /**\n     * Focus the first item under the next separator.\n     */\n    QuickPickFocus[QuickPickFocus[\"NextSeparator\"] = 8] = \"NextSeparator\";\n    /**\n     * Focus the first item under the current separator.\n     */\n    QuickPickFocus[QuickPickFocus[\"PreviousSeparator\"] = 9] = \"PreviousSeparator\";\n})(QuickPickFocus || (QuickPickFocus = {}));\nexport var QuickInputButtonLocation;\n(function (QuickInputButtonLocation) {\n    /**\n     * In the title bar.\n     */\n    QuickInputButtonLocation[QuickInputButtonLocation[\"Title\"] = 1] = \"Title\";\n    /**\n     * To the right of the input box.\n     */\n    QuickInputButtonLocation[QuickInputButtonLocation[\"Inline\"] = 2] = \"Inline\";\n})(QuickInputButtonLocation || (QuickInputButtonLocation = {}));\nexport class QuickPickItemScorerAccessor {\n    constructor(options) {\n        this.options = options;\n    }\n}\nexport const quickPickItemScorerAccessor = new QuickPickItemScorerAccessor();\n//#endregion\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 *--------------------------------------------------------------------------------------------*/\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 { DeferredPromise } from '../../../base/common/async.js';\nimport { CancellationTokenSource } from '../../../base/common/cancellation.js';\nimport { Event } from '../../../base/common/event.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../../base/common/lifecycle.js';\nimport { IInstantiationService } from '../../instantiation/common/instantiation.js';\nimport { DefaultQuickAccessFilterValue, Extensions } from '../common/quickAccess.js';\nimport { IQuickInputService, ItemActivation } from '../common/quickInput.js';\nimport { Registry } from '../../registry/common/platform.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        this.doShowOrPick(value, false, options);\n    }\n    doShowOrPick(value, pick, options) {\n        // Find provider for the value to show\n        const [provider, descriptor] = this.getOrInstantiateProvider(value, options?.enabledProviderPrefixes);\n        // Return early if quick access is already showing on that same prefix\n        const visibleQuickAccess = this.visibleQuickAccess;\n        const visibleDescriptor = 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?.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?.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?.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        // Store the existing selection if there was one.\n        const visibleSelection = visibleQuickAccess?.picker?.valueSelection;\n        const visibleValue = visibleQuickAccess?.picker?.value;\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({ useSeparators: true }));\n        picker.value = value;\n        this.adjustValueSelection(picker, descriptor, options);\n        picker.placeholder = options?.placeholder ?? descriptor?.placeholder;\n        picker.quickNavigate = options?.quickNavigateConfiguration;\n        picker.hideInput = !!picker.quickNavigate && !visibleQuickAccess; // only hide input if there was no picker opened already\n        if (typeof options?.itemActivation === 'number' || options?.quickNavigateConfiguration) {\n            picker.itemActivation = options?.itemActivation ?? ItemActivation.SECOND /* quick nav is always second */;\n        }\n        picker.contextKey = descriptor?.contextKey;\n        picker.filterValue = (value) => value.substring(descriptor ? descriptor.prefix.length : 0);\n        // Pick mode: setup a promise that can be resolved\n        // with the selected items and prevent execution\n        let pickPromise = undefined;\n        if (pick) {\n            pickPromise = new DeferredPromise();\n            disposables.add(Event.once(picker.onWillAccept)(e => {\n                e.veto();\n                picker.hide();\n            }));\n        }\n        // Register listeners\n        disposables.add(this.registerPickerListeners(picker, provider, descriptor, value, options));\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, options?.providerOptions));\n        }\n        // Finally, trigger disposal and cancellation when the picker\n        // hides depending on items selected or not.\n        Event.once(picker.onDidHide)(() => {\n            if (picker.selectedItems.length === 0) {\n                cts.cancel();\n            }\n            // Start to dispose once picker hides\n            disposables.dispose();\n            // Resolve pick promise with selected items\n            pickPromise?.complete(picker.selectedItems.slice(0));\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        // If the previous picker had a selection and the value is unchanged, we should set that in the new picker.\n        if (visibleSelection && visibleValue === value) {\n            picker.valueSelection = visibleSelection;\n        }\n        // Pick mode: return with promise\n        if (pick) {\n            return pickPromise?.p;\n        }\n    }\n    adjustValueSelection(picker, descriptor, options) {\n        let valueSelection;\n        // Preserve: just always put the cursor at the end\n        if (options?.preserveValue) {\n            valueSelection = [picker.value.length, picker.value.length];\n        }\n        // Otherwise: select the value up until the prefix\n        else {\n            valueSelection = [descriptor?.prefix.length ?? 0, picker.value.length];\n        }\n        picker.valueSelection = valueSelection;\n    }\n    registerPickerListeners(picker, provider, descriptor, value, options) {\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, options?.enabledProviderPrefixes);\n            if (providerForValue !== provider) {\n                this.show(value, {\n                    enabledProviderPrefixes: options?.enabledProviderPrefixes,\n                    // do not rewrite value from user typing!\n                    preserveValue: true,\n                    // persist the value of the providerOptions from the original showing\n                    providerOptions: options?.providerOptions\n                });\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, enabledProviderPrefixes) {\n        const providerDescriptor = this.registry.getQuickAccessProvider(value);\n        if (!providerDescriptor || enabledProviderPrefixes && !enabledProviderPrefixes?.includes(providerDescriptor.prefix)) {\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 *--------------------------------------------------------------------------------------------*/\nimport { Widget } from '../widget.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { Emitter } from '../../../common/event.js';\nimport './toggle.css';\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nexport const unthemedToggleStyles = {\n    inputActiveOptionBorder: '#007ACC00',\n    inputActiveOptionForeground: '#FFFFFF',\n    inputActiveOptionBackground: '#0E639C50'\n};\nexport class Toggle 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 = opts;\n        this._checked = this._opts.isChecked;\n        const classes = ['monaco-custom-toggle'];\n        if (this._opts.icon) {\n            this._icon = this._opts.icon;\n            classes.push(...ThemeIcon.asClassNameArray(this._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._hover = this._register(getBaseLayerHoverDelegate().setupManagedHover(opts.hoverDelegate ?? getDefaultHoverDelegate('mouse'), this.domNode, 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            if (this.enabled) {\n                this.checked = !this._checked;\n                this._onChange.fire(false);\n                ev.preventDefault();\n            }\n        });\n        this._register(this.ignoreGesture(this.domNode));\n        this.onkeydown(this.domNode, (keyboardEvent) => {\n            if (keyboardEvent.keyCode === 10 /* KeyCode.Space */ || keyboardEvent.keyCode === 3 /* KeyCode.Enter */) {\n                this.checked = !this._checked;\n                this._onChange.fire(true);\n                keyboardEvent.preventDefault();\n                keyboardEvent.stopPropagation();\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 /*margin left*/ + 2 /*border*/ + 2 /*padding*/ + 16 /* icon width */;\n    }\n    applyStyles() {\n        if (this.domNode) {\n            this.domNode.style.borderColor = (this._checked && this._opts.inputActiveOptionBorder) || '';\n            this.domNode.style.color = (this._checked && this._opts.inputActiveOptionForeground) || 'inherit';\n            this.domNode.style.backgroundColor = (this._checked && this._opts.inputActiveOptionBackground) || '';\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 *--------------------------------------------------------------------------------------------*/\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 { memoize } from './decorators.js';\nexport class LinkedText {\n    constructor(nodes) {\n        this.nodes = nodes;\n    }\n    toString() {\n        return this.nodes.map(node => typeof node === 'string' ? node : node.label).join('');\n    }\n}\n__decorate([\n    memoize\n], LinkedText.prototype, \"toString\", null);\nconst LINK_REGEX = /\\[([^\\]]+)\\]\\(((?:https?:\\/\\/|command:|file:)[^\\)\\s]+)(?: ([\"'])(.+?)(\\3))?\\)/gi;\nexport function parseLinkedText(text) {\n    const result = [];\n    let index = 0;\n    let match;\n    while (match = LINK_REGEX.exec(text)) {\n        if (match.index - index > 0) {\n            result.push(text.substring(index, match.index));\n        }\n        const [, label, href, , title] = match;\n        if (title) {\n            result.push({ label, href, title });\n        }\n        else {\n            result.push({ label, href });\n        }\n        index = match.index + match[0].length;\n    }\n    if (index < text.length) {\n        result.push(text.substring(index));\n    }\n    return new LinkedText(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 dom from '../../../base/browser/dom.js';\nimport { DomEmitter } from '../../../base/browser/event.js';\nimport { Event } from '../../../base/common/event.js';\nimport { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js';\nimport { Gesture, EventType as GestureEventType } from '../../../base/browser/touch.js';\nimport { renderLabelWithIcons } from '../../../base/browser/ui/iconLabel/iconLabels.js';\nimport { IdGenerator } from '../../../base/common/idGenerator.js';\nimport { parseLinkedText } from '../../../base/common/linkedText.js';\nimport './media/quickInput.css';\nimport { localize } from '../../../nls.js';\nconst iconPathToClass = {};\nconst iconClassGenerator = new IdGenerator('quick-input-button-icon-');\nfunction 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}, .hc-light .${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}\nexport function quickInputButtonToAction(button, id, run) {\n    let cssClasses = button.iconClass || getIconClass(button.iconPath);\n    if (button.alwaysVisible) {\n        cssClasses = cssClasses ? `${cssClasses} always-visible` : 'always-visible';\n    }\n    return {\n        id,\n        label: '',\n        tooltip: button.tooltip || '',\n        class: cssClasses,\n        enabled: true,\n        run\n    };\n}\nexport function renderQuickInputDescription(description, container, actionHandler) {\n    dom.reset(container);\n    const parsed = parseLinkedText(description);\n    let tabIndex = 0;\n    for (const node of parsed.nodes) {\n        if (typeof node === 'string') {\n            container.append(...renderLabelWithIcons(node));\n        }\n        else {\n            let title = node.title;\n            if (!title && node.href.startsWith('command:')) {\n                title = localize('executeCommand', \"Click to execute command '{0}'\", node.href.substring('command:'.length));\n            }\n            else if (!title) {\n                title = node.href;\n            }\n            const anchor = dom.$('a', { href: node.href, title, tabIndex: tabIndex++ }, node.label);\n            anchor.style.textDecoration = 'underline';\n            const handleOpen = (e) => {\n                if (dom.isEventLike(e)) {\n                    dom.EventHelper.stop(e, true);\n                }\n                actionHandler.callback(node.href);\n            };\n            const onClick = actionHandler.disposables.add(new DomEmitter(anchor, dom.EventType.CLICK)).event;\n            const onKeydown = actionHandler.disposables.add(new DomEmitter(anchor, dom.EventType.KEY_DOWN)).event;\n            const onSpaceOrEnter = Event.chain(onKeydown, $ => $.filter(e => {\n                const event = new StandardKeyboardEvent(e);\n                return event.equals(10 /* KeyCode.Space */) || event.equals(3 /* KeyCode.Enter */);\n            }));\n            actionHandler.disposables.add(Gesture.addTarget(anchor));\n            const onTap = actionHandler.disposables.add(new DomEmitter(anchor, GestureEventType.Tap)).event;\n            Event.any(onClick, onTap, onSpaceOrEnter)(handleOpen, null, actionHandler.disposables);\n            container.appendChild(anchor);\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 * as dom from '../../../base/browser/dom.js';\nimport { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js';\nimport { Toggle } from '../../../base/browser/ui/toggle/toggle.js';\nimport { equals } from '../../../base/common/arrays.js';\nimport { TimeoutTimer } from '../../../base/common/async.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { Emitter, EventBufferer } from '../../../base/common/event.js';\nimport { Disposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { isIOS } from '../../../base/common/platform.js';\nimport Severity from '../../../base/common/severity.js';\nimport { ThemeIcon } from '../../../base/common/themables.js';\nimport './media/quickInput.css';\nimport { localize } from '../../../nls.js';\nimport { ItemActivation, NO_KEY_MODS, QuickInputButtonLocation, QuickInputHideReason, QuickPickFocus } from '../common/quickInput.js';\nimport { quickInputButtonToAction, renderQuickInputDescription } from './quickInputUtils.js';\nimport { IConfigurationService } from '../../configuration/common/configuration.js';\nimport { IHoverService, WorkbenchHoverDelegate } from '../../hover/browser/hover.js';\nimport { ContextKeyExpr, RawContextKey } from '../../contextkey/common/contextkey.js';\nexport const inQuickInputContextKeyValue = 'inQuickInput';\nexport const InQuickInputContextKey = new RawContextKey(inQuickInputContextKeyValue, false, localize('inQuickInput', \"Whether keyboard focus is inside the quick input control\"));\nexport const inQuickInputContext = ContextKeyExpr.has(inQuickInputContextKeyValue);\nexport const quickInputTypeContextKeyValue = 'quickInputType';\nexport const QuickInputTypeContextKey = new RawContextKey(quickInputTypeContextKeyValue, undefined, localize('quickInputType', \"The type of the currently visible quick input\"));\nexport const endOfQuickInputBoxContextKeyValue = 'cursorAtEndOfQuickInputBox';\nexport const EndOfQuickInputBoxContextKey = new RawContextKey(endOfQuickInputBoxContextKeyValue, false, localize('cursorAtEndOfQuickInputBox', \"Whether the cursor in the quick input is at the end of the input box\"));\nexport const endOfQuickInputBoxContext = ContextKeyExpr.has(endOfQuickInputBoxContextKeyValue);\nexport const backButton = {\n    iconClass: ThemeIcon.asClassName(Codicon.quickInputBack),\n    tooltip: localize('quickInput.back', \"Back\"),\n    handle: -1 // TODO\n};\nclass QuickInput extends Disposable {\n    static { this.noPromptMessage = localize('inputModeEntry', \"Press 'Enter' to confirm your input or 'Escape' to cancel\"); }\n    constructor(ui) {\n        super();\n        this.ui = ui;\n        this._widgetUpdated = false;\n        this.visible = false;\n        this._enabled = true;\n        this._busy = false;\n        this._ignoreFocusOut = false;\n        this._leftButtons = [];\n        this._rightButtons = [];\n        this._inlineButtons = [];\n        this.buttonsUpdated = false;\n        this._toggles = [];\n        this.togglesUpdated = false;\n        this.noValidationMessage = QuickInput.noPromptMessage;\n        this._severity = Severity.Ignore;\n        this.onDidTriggerButtonEmitter = this._register(new Emitter());\n        this.onDidHideEmitter = this._register(new Emitter());\n        this.onWillHideEmitter = 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        const shouldUpdate = this._ignoreFocusOut !== ignoreFocusOut && !isIOS;\n        this._ignoreFocusOut = ignoreFocusOut && !isIOS;\n        if (shouldUpdate) {\n            this.update();\n        }\n    }\n    get titleButtons() {\n        return this._leftButtons.length\n            ? [...this._leftButtons, this._rightButtons]\n            : this._rightButtons;\n    }\n    get buttons() {\n        return [\n            ...this._leftButtons,\n            ...this._rightButtons,\n            ...this._inlineButtons\n        ];\n    }\n    set buttons(buttons) {\n        this._leftButtons = buttons.filter(b => b === backButton);\n        this._rightButtons = buttons.filter(b => b !== backButton && b.location !== QuickInputButtonLocation.Inline);\n        this._inlineButtons = buttons.filter(b => b.location === QuickInputButtonLocation.Inline);\n        this.buttonsUpdated = true;\n        this.update();\n    }\n    get toggles() {\n        return this._toggles;\n    }\n    set toggles(toggles) {\n        this._toggles = toggles ?? [];\n        this.togglesUpdated = 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        // update properties in the controller that get reset in the ui.show() call\n        this.visible = true;\n        // This ensures the message/prompt gets rendered\n        this._lastValidationMessage = undefined;\n        // This ensures the input box has the right severity applied\n        this._lastSeverity = undefined;\n        if (this.buttons.length) {\n            // if there are buttons, the ui.show() clears them out of the UI so we should\n            // rerender them.\n            this.buttonsUpdated = true;\n        }\n        if (this.toggles.length) {\n            // if there are toggles, the ui.show() clears them out of the UI so we should\n            // rerender them.\n            this.togglesUpdated = true;\n        }\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    willHide(reason = QuickInputHideReason.Other) {\n        this.onWillHideEmitter.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._widgetUpdated) {\n            this._widgetUpdated = false;\n            if (this._widget) {\n                dom.reset(this.ui.widget, this._widget);\n            }\n            else {\n                dom.reset(this.ui.widget);\n            }\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._leftButtons\n                .map((button, index) => quickInputButtonToAction(button, `id-${index}`, async () => this.onDidTriggerButtonEmitter.fire(button)));\n            this.ui.leftActionBar.push(leftButtons, { icon: true, label: false });\n            this.ui.rightActionBar.clear();\n            const rightButtons = this._rightButtons\n                .map((button, index) => quickInputButtonToAction(button, `id-${index}`, async () => this.onDidTriggerButtonEmitter.fire(button)));\n            this.ui.rightActionBar.push(rightButtons, { icon: true, label: false });\n            this.ui.inlineActionBar.clear();\n            const inlineButtons = this._inlineButtons\n                .map((button, index) => quickInputButtonToAction(button, `id-${index}`, async () => this.onDidTriggerButtonEmitter.fire(button)));\n            this.ui.inlineActionBar.push(inlineButtons, { icon: true, label: false });\n        }\n        if (this.togglesUpdated) {\n            this.togglesUpdated = false;\n            // HACK: Filter out toggles here that are not concrete Toggle objects. This is to workaround\n            // a layering issue as quick input's interface is in common but Toggle is in browser and\n            // it requires a HTMLElement on its interface\n            const concreteToggles = this.toggles?.filter(opts => opts instanceof Toggle) ?? [];\n            this.ui.inputBox.toggles = concreteToggles;\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);\n            renderQuickInputDescription(validationMessage, this.ui.message, {\n                callback: (content) => {\n                    this.ui.linkOpenerDelegate(content);\n                },\n                disposables: this.visibleDisposables,\n            });\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.marginBottom = '-2px';\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.marginBottom = '';\n        }\n    }\n    dispose() {\n        this.hide();\n        this.onDisposeEmitter.fire();\n        super.dispose();\n    }\n}\nexport class QuickPick extends QuickInput {\n    constructor() {\n        super(...arguments);\n        this._value = '';\n        this.onDidChangeValueEmitter = this._register(new Emitter());\n        this.onWillAcceptEmitter = 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._matchOnLabelMode = 'fuzzy';\n        this._sortByLabel = true;\n        this._keepScrollPosition = false;\n        this._itemActivation = 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.onDidTriggerSeparatorButtonEmitter = this._register(new Emitter());\n        this.valueSelectionUpdated = true;\n        this._ok = 'default';\n        this._customButton = false;\n        this._focusEventBufferer = new EventBufferer();\n        this.type = \"quickPick\" /* QuickInputType.QuickPick */;\n        this.filterValue = (value) => value;\n        this.onDidChangeValue = this.onDidChangeValueEmitter.event;\n        this.onWillAccept = this.onWillAcceptEmitter.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        this.onDidTriggerSeparatorButton = this.onDidTriggerSeparatorButtonEmitter.event;\n    }\n    static { this.DEFAULT_ARIA_LABEL = localize('quickInputBox.ariaLabel', \"Type to narrow down results.\"); }\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.doSetValue(value);\n    }\n    doSetValue(value, skipUpdate) {\n        if (this._value !== value) {\n            this._value = value;\n            if (!skipUpdate) {\n                this.update();\n            }\n            if (this.visible) {\n                const didFilter = this.ui.list.filter(this.filterValue(this._value));\n                if (didFilter) {\n                    this.trySelectFirst();\n                }\n            }\n            this.onDidChangeValueEmitter.fire(this._value);\n        }\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    get scrollTop() {\n        return this.ui.list.scrollTop;\n    }\n    set scrollTop(scrollTop) {\n        this.ui.list.scrollTop = scrollTop;\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 matchOnLabelMode() {\n        return this._matchOnLabelMode;\n    }\n    set matchOnLabelMode(matchOnLabelMode) {\n        this._matchOnLabelMode = matchOnLabelMode;\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 keepScrollPosition() {\n        return this._keepScrollPosition;\n    }\n    set keepScrollPosition(keepScrollPosition) {\n        this._keepScrollPosition = keepScrollPosition;\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    get valueSelection() {\n        const selection = this.ui.inputBox.getSelection();\n        if (!selection) {\n            return undefined;\n        }\n        return [selection.start, selection.end];\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.canSelectMany) {\n            this.ui.list.focus(QuickPickFocus.First);\n        }\n    }\n    show() {\n        if (!this.visible) {\n            this.visibleDisposables.add(this.ui.inputBox.onDidChange(value => {\n                this.doSetValue(value, true /* skip update since this originates from the UI */);\n            }));\n            this.visibleDisposables.add(this.ui.onDidAccept(() => {\n                if (this.canSelectMany) {\n                    // if there are no checked elements, it means that an onDidChangeSelection never fired to overwrite\n                    // `_selectedItems`. In that case, we should emit one with an empty array to ensure that\n                    // `.selectedItems` is up to date.\n                    if (!this.ui.list.getCheckedElements().length) {\n                        this._selectedItems = [];\n                        this.onDidChangeSelectionEmitter.fire(this.selectedItems);\n                    }\n                }\n                else if (this.activeItems[0]) {\n                    // For single-select, we set `selectedItems` to the item that was accepted.\n                    this._selectedItems = [this.activeItems[0]];\n                    this.onDidChangeSelectionEmitter.fire(this.selectedItems);\n                }\n                this.handleAccept(false);\n            }));\n            this.visibleDisposables.add(this.ui.onDidCustom(() => {\n                this.onDidCustomEmitter.fire();\n            }));\n            this.visibleDisposables.add(this._focusEventBufferer.wrapEvent(this.ui.list.onDidChangeFocus, \n            // Only fire the last event\n            (_, e) => e)(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.handleAccept(dom.isMouseEvent(event) && event.button === 1 /* mouse middle click */);\n                }\n            }));\n            this.visibleDisposables.add(this.ui.list.onChangedCheckedElements(checkedItems => {\n                if (!this.canSelectMany || !this.visible) {\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.ui.list.onSeparatorButtonTriggered(event => this.onDidTriggerSeparatorButtonEmitter.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?\n    }\n    handleAccept(inBackground) {\n        // Figure out veto via `onWillAccept` event\n        let veto = false;\n        this.onWillAcceptEmitter.fire({ veto: () => veto = true });\n        // Continue with `onDidAccept` if no veto\n        if (!veto) {\n            this.onDidAcceptEmitter.fire({ inBackground });\n        }\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 chords = k.getChords();\n                if (chords.length > 1) {\n                    return false;\n                }\n                if (chords[0].shiftKey && keyCode === 4 /* KeyCode.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 (chords[0].altKey && keyCode === 6 /* KeyCode.Alt */) {\n                    return true;\n                }\n                if (chords[0].ctrlKey && keyCode === 5 /* KeyCode.Ctrl */) {\n                    return true;\n                }\n                if (chords[0].metaKey && keyCode === 57 /* KeyCode.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.handleAccept(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        // store the scrollTop before it is reset\n        const scrollTopBefore = this.keepScrollPosition ? this.scrollTop : 0;\n        const hasDescription = !!this.description;\n        const visibilities = {\n            title: !!this.title || !!this.step || !!this.titleButtons.length,\n            description: hasDescription,\n            checkAll: this.canSelectMany && !this._hideCheckAll,\n            checkBox: this.canSelectMany,\n            inputBox: !this._hideInput,\n            progressBar: !this._hideInput || hasDescription,\n            visibleCount: true,\n            count: this.canSelectMany && !this._hideCountBadge,\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        let ariaLabel = this.ariaLabel;\n        // Only set aria label to the input box placeholder if we actually have an input box.\n        if (!ariaLabel && visibilities.inputBox) {\n            ariaLabel = this.placeholder || QuickPick.DEFAULT_ARIA_LABEL;\n            // If we have a title, include it in the aria label.\n            if (this.title) {\n                ariaLabel += ` - ${this.title}`;\n            }\n        }\n        if (this.ui.list.ariaLabel !== ariaLabel) {\n            this.ui.list.ariaLabel = ariaLabel ?? null;\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.matchOnLabelMode = this.matchOnLabelMode;\n        this.ui.list.sortByLabel = this.sortByLabel;\n        if (this.itemsUpdated) {\n            this.itemsUpdated = false;\n            this._focusEventBufferer.bufferEvents(() => {\n                this.ui.list.setElements(this.items);\n                // We want focus to exist in the list if there are items so that space can be used to toggle\n                this.ui.list.shouldLoop = !this.canSelectMany;\n                this.ui.list.filter(this.filterValue(this.ui.inputBox.value));\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(QuickPickFocus.Second);\n                        this._itemActivation = ItemActivation.FIRST; // only valid once, then unset\n                        break;\n                    case ItemActivation.LAST:\n                        this.ui.list.focus(QuickPickFocus.Last);\n                        this._itemActivation = ItemActivation.FIRST; // only valid once, then unset\n                        break;\n                    default:\n                        this.trySelectFirst();\n                        break;\n                }\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        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(QuickPickFocus.First);\n            }\n        }\n        // Set the scroll position to what it was before updating the items\n        if (this.keepScrollPosition) {\n            this.scrollTop = scrollTopBefore;\n        }\n    }\n    focus(focus) {\n        this.ui.list.focus(focus);\n        // To allow things like space to check/uncheck items\n        if (this.canSelectMany) {\n            this.ui.list.domFocus();\n        }\n    }\n    accept(inBackground) {\n        if (inBackground && !this._canAcceptInBackground) {\n            return; // needs to be enabled\n        }\n        if (this.activeItems[0]) {\n            this._selectedItems = [this.activeItems[0]];\n            this.onDidChangeSelectionEmitter.fire(this.selectedItems);\n            this.handleAccept(inBackground ?? false);\n        }\n    }\n}\nexport class InputBox extends QuickInput {\n    constructor() {\n        super(...arguments);\n        this._value = '';\n        this.valueSelectionUpdated = true;\n        this._password = false;\n        this.onDidValueChangeEmitter = this._register(new Emitter());\n        this.onDidAcceptEmitter = this._register(new Emitter());\n        this.type = \"inputBox\" /* QuickInputType.InputBox */;\n        this.onDidChangeValue = this.onDidValueChangeEmitter.event;\n        this.onDidAccept = this.onDidAcceptEmitter.event;\n    }\n    get value() {\n        return this._value;\n    }\n    set value(value) {\n        this._value = value || '';\n        this.update();\n    }\n    get placeholder() {\n        return this._placeholder;\n    }\n    set placeholder(placeholder) {\n        this._placeholder = placeholder;\n        this.update();\n    }\n    get password() {\n        return this._password;\n    }\n    set password(password) {\n        this._password = password;\n        this.update();\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                this.onDidValueChangeEmitter.fire(value);\n            }));\n            this.visibleDisposables.add(this.ui.onDidAccept(() => this.onDidAcceptEmitter.fire()));\n            this.valueSelectionUpdated = true;\n        }\n        super.show();\n    }\n    update() {\n        if (!this.visible) {\n            return;\n        }\n        this.ui.container.classList.remove('hidden-input');\n        const visibilities = {\n            title: !!this.title || !!this.step || !!this.titleButtons.length,\n            description: !!this.description || !!this.step,\n            inputBox: true,\n            message: true,\n            progressBar: true\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        if (this.ui.inputBox.password !== this.password) {\n            this.ui.inputBox.password = this.password;\n        }\n    }\n}\nlet QuickInputHoverDelegate = class QuickInputHoverDelegate extends WorkbenchHoverDelegate {\n    constructor(configurationService, hoverService) {\n        super('element', false, (options) => this.getOverrideOptions(options), configurationService, hoverService);\n    }\n    getOverrideOptions(options) {\n        // Only show the hover hint if the content is of a decent size\n        const showHoverHint = (dom.isHTMLElement(options.content)\n            ? options.content.textContent ?? ''\n            : typeof options.content === 'string'\n                ? options.content\n                : options.content.value).includes('\\n');\n        return {\n            persistence: {\n                hideOnKeyDown: false,\n            },\n            appearance: {\n                showHoverHint,\n                skipFadeInAnimation: true,\n            },\n        };\n    }\n};\nQuickInputHoverDelegate = __decorate([\n    __param(0, IConfigurationService),\n    __param(1, IHoverService)\n], QuickInputHoverDelegate);\nexport { QuickInputHoverDelegate };\n","import { addDisposableListener, EventHelper, EventType, reset, trackFocus } from '../../dom.js';\nimport { sanitize } from '../../dompurify/dompurify.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { renderMarkdown, renderStringAsPlaintext } from '../../markdownRenderer.js';\nimport { Gesture, EventType as TouchEventType } from '../../touch.js';\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { renderLabelWithIcons } from '../iconLabel/iconLabels.js';\nimport { Color } from '../../../common/color.js';\nimport { Emitter } from '../../../common/event.js';\nimport { isMarkdownString, markdownStringEqual } from '../../../common/htmlContent.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport './button.css';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nexport const unthemedButtonStyles = {\n    buttonBackground: '#0E639C',\n    buttonHoverBackground: '#006BB3',\n    buttonSeparator: Color.white.toString(),\n    buttonForeground: Color.white.toString(),\n    buttonBorder: undefined,\n    buttonSecondaryBackground: undefined,\n    buttonSecondaryForeground: undefined,\n    buttonSecondaryHoverBackground: undefined\n};\nexport class Button extends Disposable {\n    get onDidClick() { return this._onDidClick.event; }\n    constructor(container, options) {\n        super();\n        this._label = '';\n        this._onDidClick = this._register(new Emitter());\n        this._onDidEscape = this._register(new Emitter());\n        this.options = options;\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        this._element.classList.toggle('secondary', !!options.secondary);\n        const background = options.secondary ? options.buttonSecondaryBackground : options.buttonBackground;\n        const foreground = options.secondary ? options.buttonSecondaryForeground : options.buttonForeground;\n        this._element.style.color = foreground || '';\n        this._element.style.backgroundColor = background || '';\n        if (options.supportShortLabel) {\n            this._labelShortElement = document.createElement('div');\n            this._labelShortElement.classList.add('monaco-button-label-short');\n            this._element.appendChild(this._labelShortElement);\n            this._labelElement = document.createElement('div');\n            this._labelElement.classList.add('monaco-button-label');\n            this._element.appendChild(this._labelElement);\n            this._element.classList.add('monaco-text-button-with-short-label');\n        }\n        if (typeof options.title === 'string') {\n            this.setTitle(options.title);\n        }\n        if (typeof options.ariaLabel === 'string') {\n            this._element.setAttribute('aria-label', options.ariaLabel);\n        }\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 /* KeyCode.Enter */) || event.equals(10 /* KeyCode.Space */))) {\n                this._onDidClick.fire(e);\n                eventHandled = true;\n            }\n            else if (event.equals(9 /* KeyCode.Escape */)) {\n                this._onDidEscape.fire(e);\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.updateBackground(true);\n            }\n        }));\n        this._register(addDisposableListener(this._element, EventType.MOUSE_OUT, e => {\n            this.updateBackground(false); // 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(() => { if (this.enabled) {\n            this.updateBackground(true);\n        } }));\n        this._register(this.focusTracker.onDidBlur(() => { if (this.enabled) {\n            this.updateBackground(false);\n        } }));\n    }\n    dispose() {\n        super.dispose();\n        this._element.remove();\n    }\n    getContentElements(content) {\n        const elements = [];\n        for (let segment of renderLabelWithIcons(content)) {\n            if (typeof (segment) === 'string') {\n                segment = segment.trim();\n                // Ignore empty segment\n                if (segment === '') {\n                    continue;\n                }\n                // Convert string segments to <span> nodes\n                const node = document.createElement('span');\n                node.textContent = segment;\n                elements.push(node);\n            }\n            else {\n                elements.push(segment);\n            }\n        }\n        return elements;\n    }\n    updateBackground(hover) {\n        let background;\n        if (this.options.secondary) {\n            background = hover ? this.options.buttonSecondaryHoverBackground : this.options.buttonSecondaryBackground;\n        }\n        else {\n            background = hover ? this.options.buttonHoverBackground : this.options.buttonBackground;\n        }\n        if (background) {\n            this._element.style.backgroundColor = background;\n        }\n    }\n    get element() {\n        return this._element;\n    }\n    set label(value) {\n        if (this._label === value) {\n            return;\n        }\n        if (isMarkdownString(this._label) && isMarkdownString(value) && markdownStringEqual(this._label, value)) {\n            return;\n        }\n        this._element.classList.add('monaco-text-button');\n        const labelElement = this.options.supportShortLabel ? this._labelElement : this._element;\n        if (isMarkdownString(value)) {\n            const rendered = renderMarkdown(value, { inline: true });\n            rendered.dispose();\n            // Don't include outer `<p>`\n            const root = rendered.element.querySelector('p')?.innerHTML;\n            if (root) {\n                // Only allow a very limited set of inline html tags\n                const sanitized = sanitize(root, { ADD_TAGS: ['b', 'i', 'u', 'code', 'span'], ALLOWED_ATTR: ['class'], RETURN_TRUSTED_TYPE: true });\n                labelElement.innerHTML = sanitized;\n            }\n            else {\n                reset(labelElement);\n            }\n        }\n        else {\n            if (this.options.supportIcons) {\n                reset(labelElement, ...this.getContentElements(value));\n            }\n            else {\n                labelElement.textContent = value;\n            }\n        }\n        let title = '';\n        if (typeof this.options.title === 'string') {\n            title = this.options.title;\n        }\n        else if (this.options.title) {\n            title = renderStringAsPlaintext(value);\n        }\n        this.setTitle(title);\n        if (typeof this.options.ariaLabel === 'string') {\n            this._element.setAttribute('aria-label', this.options.ariaLabel);\n        }\n        else if (this.options.ariaLabel) {\n            this._element.setAttribute('aria-label', title);\n        }\n        this._label = value;\n    }\n    get label() {\n        return this._label;\n    }\n    set icon(icon) {\n        this._element.classList.add(...ThemeIcon.asClassNameArray(icon));\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    setTitle(title) {\n        if (!this._hover && title !== '') {\n            this._hover = this._register(getBaseLayerHoverDelegate().setupManagedHover(this.options.hoverDelegate ?? getDefaultHoverDelegate('mouse'), this._element, title));\n        }\n        else if (this._hover) {\n            this._hover.update(title);\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 { $, append } from '../../dom.js';\nimport { format } from '../../../common/strings.js';\nimport './countBadge.css';\nexport class CountBadge {\n    constructor(container, options, styles) {\n        this.options = options;\n        this.styles = styles;\n        this.count = 0;\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.element.style.backgroundColor = this.styles.badgeBackground ?? '';\n        this.element.style.color = this.styles.badgeForeground ?? '';\n        if (this.styles.badgeBorder) {\n            this.element.style.border = `1px solid ${this.styles.badgeBorder}`;\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 { show } from '../../dom.js';\nimport { RunOnceScheduler } from '../../../common/async.js';\nimport { Disposable, MutableDisposable } from '../../../common/lifecycle.js';\nimport './progressbar.css';\nconst CSS_DONE = 'done';\nconst CSS_ACTIVE = 'active';\nconst CSS_INFINITE = 'infinite';\nconst CSS_INFINITE_LONG_RUNNING = 'infinite-long-running';\nconst CSS_DISCRETE = 'discrete';\n/**\n * A progress bar with support for infinite or discrete progress.\n */\nexport class ProgressBar extends Disposable {\n    /**\n     * After a certain time of showing the progress bar, switch\n     * to long-running mode and throttle animations to reduce\n     * the pressure on the GPU process.\n     *\n     * https://github.com/microsoft/vscode/issues/97900\n     * https://github.com/microsoft/vscode/issues/138396\n     */\n    static { this.LONG_RUNNING_INFINITE_THRESHOLD = 10000; }\n    constructor(container, options) {\n        super();\n        this.progressSignal = this._register(new MutableDisposable());\n        this.workedVal = 0;\n        this.showDelayedScheduler = this._register(new RunOnceScheduler(() => show(this.element), 0));\n        this.longRunningScheduler = this._register(new RunOnceScheduler(() => this.infiniteLongRunning(), ProgressBar.LONG_RUNNING_INFINITE_THRESHOLD));\n        this.create(container, options);\n    }\n    create(container, options) {\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.bit.style.backgroundColor = options?.progressBarBackground || '#0E70C0';\n        this.element.appendChild(this.bit);\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_INFINITE_LONG_RUNNING, CSS_DISCRETE);\n        this.workedVal = 0;\n        this.totalWork = undefined;\n        this.longRunningScheduler.cancel();\n        this.progressSignal.clear();\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        // discrete: 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        // infinite: 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, CSS_INFINITE_LONG_RUNNING);\n        this.element.classList.add(CSS_ACTIVE, CSS_INFINITE);\n        this.longRunningScheduler.schedule();\n        return this;\n    }\n    infiniteLongRunning() {\n        this.element.classList.add(CSS_INFINITE_LONG_RUNNING);\n    }\n    getContainer() {\n        return this.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 *--------------------------------------------------------------------------------------------*/\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { Toggle } from '../toggle/toggle.js';\nimport { Codicon } from '../../../common/codicons.js';\nimport * as nls from '../../../../nls.js';\nconst NLS_CASE_SENSITIVE_TOGGLE_LABEL = nls.localize('caseDescription', \"Match Case\");\nconst NLS_WHOLE_WORD_TOGGLE_LABEL = nls.localize('wordsDescription', \"Match Whole Word\");\nconst NLS_REGEX_TOGGLE_LABEL = nls.localize('regexDescription', \"Use Regular Expression\");\nexport class CaseSensitiveToggle extends Toggle {\n    constructor(opts) {\n        super({\n            icon: Codicon.caseSensitive,\n            title: NLS_CASE_SENSITIVE_TOGGLE_LABEL + opts.appendTitle,\n            isChecked: opts.isChecked,\n            hoverDelegate: opts.hoverDelegate ?? getDefaultHoverDelegate('element'),\n            inputActiveOptionBorder: opts.inputActiveOptionBorder,\n            inputActiveOptionForeground: opts.inputActiveOptionForeground,\n            inputActiveOptionBackground: opts.inputActiveOptionBackground\n        });\n    }\n}\nexport class WholeWordsToggle extends Toggle {\n    constructor(opts) {\n        super({\n            icon: Codicon.wholeWord,\n            title: NLS_WHOLE_WORD_TOGGLE_LABEL + opts.appendTitle,\n            isChecked: opts.isChecked,\n            hoverDelegate: opts.hoverDelegate ?? getDefaultHoverDelegate('element'),\n            inputActiveOptionBorder: opts.inputActiveOptionBorder,\n            inputActiveOptionForeground: opts.inputActiveOptionForeground,\n            inputActiveOptionBackground: opts.inputActiveOptionBackground\n        });\n    }\n}\nexport class RegexToggle extends Toggle {\n    constructor(opts) {\n        super({\n            icon: Codicon.regex,\n            title: NLS_REGEX_TOGGLE_LABEL + opts.appendTitle,\n            isChecked: opts.isChecked,\n            hoverDelegate: opts.hoverDelegate ?? getDefaultHoverDelegate('element'),\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 *--------------------------------------------------------------------------------------------*/\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","import { 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    getHistory() {\n        return this._elements;\n    }\n    add(t) {\n        this._history.delete(t);\n        this._history.add(t);\n        this._onChange();\n    }\n    next() {\n        // This will navigate past the end of the last element, and in that case the input should be cleared\n        return this._navigator.next();\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    isLast() {\n        return this._currentPosition() >= this._elements.length - 1;\n    }\n    isNowhere() {\n        return this._navigator.current() === null;\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 * as dom from '../../dom.js';\nimport { DomEmitter } from '../../event.js';\nimport { renderFormattedText, renderText } from '../../formattedTextRenderer.js';\nimport { ActionBar } from '../actionbar/actionbar.js';\nimport * as aria from '../aria/aria.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { ScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { Widget } from '../widget.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { HistoryNavigator } from '../../../common/history.js';\nimport { equals } from '../../../common/objects.js';\nimport './inputBox.css';\nimport * as nls from '../../../../nls.js';\nconst $ = dom.$;\nexport const unthemedInboxStyles = {\n    inputBackground: '#3C3C3C',\n    inputForeground: '#CCCCCC',\n    inputValidationInfoBorder: '#55AAFF',\n    inputValidationInfoBackground: '#063B49',\n    inputValidationWarningBorder: '#B89500',\n    inputValidationWarningBackground: '#352A05',\n    inputValidationErrorBorder: '#BE1100',\n    inputValidationErrorBackground: '#5A1D1D',\n    inputBorder: undefined,\n    inputValidationErrorForeground: undefined,\n    inputValidationInfoForeground: undefined,\n    inputValidationWarningForeground: undefined\n};\nexport class InputBox extends Widget {\n    constructor(container, contextViewProvider, options) {\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;\n        this.message = null;\n        this.placeholder = this.options.placeholder || '';\n        this.tooltip = this.options.tooltip ?? (this.placeholder || '');\n        this.ariaLabel = this.options.ariaLabel || '';\n        if (this.options.validationOptions) {\n            this.validation = this.options.validationOptions.validation;\n        }\n        this.element = dom.append(container, $('.monaco-inputbox.idle'));\n        const tagName = this.options.flexibleHeight ? 'textarea' : 'input';\n        const 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 /* ScrollbarVisibility.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 = this._register(new DomEmitter(container.ownerDocument, 'selectionchange'));\n            const onAnchoredSelectionChange = Event.filter(onSelectionChange.event, () => {\n                const selection = container.ownerDocument.getSelection();\n                return selection?.anchorNode === wrapper;\n            });\n            // from DOM to ScrollableElement\n            this._register(onAnchoredSelectionChange(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 && !this.options.showPlaceholderOnFocus) {\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._register(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        if (this.options.showPlaceholderOnFocus) {\n            this.input.setAttribute('placeholder', '');\n        }\n    }\n    onFocus() {\n        this._showMessage();\n        if (this.options.showPlaceholderOnFocus) {\n            this.input.setAttribute('placeholder', this.placeholder || '');\n        }\n    }\n    setPlaceHolder(placeHolder) {\n        this.placeholder = placeHolder;\n        this.input.setAttribute('placeholder', placeHolder);\n    }\n    setTooltip(tooltip) {\n        this.tooltip = tooltip;\n        if (!this.hover) {\n            this.hover = this._register(getBaseLayerHoverDelegate().setupManagedHover(getDefaultHoverDelegate('mouse'), this.input, tooltip));\n        }\n        else {\n            this.hover.update(tooltip);\n        }\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 dom.isActiveElement(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    getSelection() {\n        const selectionStart = this.input.selectionStart;\n        if (selectionStart === null) {\n            return null;\n        }\n        const selectionEnd = this.input.selectionEnd ?? selectionStart;\n        return {\n            start: selectionStart,\n            end: selectionEnd,\n        };\n    }\n    enable() {\n        this.input.removeAttribute('disabled');\n    }\n    disable() {\n        this.blur();\n        this.input.disabled = true;\n        this._hideMessage();\n    }\n    set paddingRight(paddingRight) {\n        // Set width to avoid hint text overlapping buttons\n        this.input.style.width = `calc(100% - ${paddingRight}px)`;\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        if (this.state === 'open' && equals(this.message, message)) {\n            // Already showing\n            return;\n        }\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 = `1px solid ${dom.asCssValueWithDefault(styles.border, 'transparent')}`;\n        if (this.message.content && (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?.type;\n    }\n    stylesForType(type) {\n        const styles = this.options.inputBoxStyles;\n        switch (type) {\n            case 1 /* MessageType.INFO */: return { border: styles.inputValidationInfoBorder, background: styles.inputValidationInfoBackground, foreground: styles.inputValidationInfoForeground };\n            case 2 /* MessageType.WARNING */: return { border: styles.inputValidationWarningBorder, background: styles.inputValidationWarningBackground, foreground: styles.inputValidationWarningForeground };\n            default: return { border: styles.inputValidationErrorBorder, background: styles.inputValidationErrorBackground, foreground: styles.inputValidationErrorForeground };\n        }\n    }\n    classForType(type) {\n        switch (type) {\n            case 1 /* MessageType.INFO */: return 'info';\n            case 2 /* MessageType.WARNING */: return 'warning';\n            default: return 'error';\n        }\n    }\n    _showMessage() {\n        if (!this.contextViewProvider || !this.message) {\n            return;\n        }\n        let div;\n        const layout = () => div.style.width = dom.getTotalWidth(this.element) + 'px';\n        this.contextViewProvider.showContextView({\n            getAnchor: () => this.element,\n            anchorAlignment: 1 /* AnchorAlignment.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 ?? '';\n                spanElement.style.color = styles.foreground ?? '';\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 /* MessageType.ERROR */) {\n            alertText = nls.localize('alertErrorMessage', \"Error: {0}\", this.message.content);\n        }\n        else if (this.message.type === 2 /* MessageType.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            .replace(/\\u000c/g, ''); // Don't measure with the form feed character, which messes up sizing\n        if (mirrorTextContent) {\n            this.mirror.textContent = value + suffix;\n        }\n        else {\n            this.mirror.innerText = '\\u00a0';\n        }\n        this.layout();\n    }\n    applyStyles() {\n        const styles = this.options.inputBoxStyles;\n        const background = styles.inputBackground ?? '';\n        const foreground = styles.inputForeground ?? '';\n        const border = styles.inputBorder ?? '';\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        // there's always a border, even if the color is not set.\n        this.element.style.border = `1px solid ${dom.asCssValueWithDefault(border, 'transparent')}`;\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        this.actionbar?.dispose();\n        super.dispose();\n    }\n}\nexport class HistoryInputBox extends InputBox {\n    constructor(container, contextViewProvider, options) {\n        const NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX_NO_PARENS = nls.localize({\n            key: 'history.inputbox.hint.suffix.noparens',\n            comment: ['Text is the suffix of an input field placeholder coming after the action the input field performs, this will be used when the input field ends in a closing parenthesis \")\", for example \"Filter (e.g. text, !exclude)\". The character inserted into the final string is \\u21C5 to represent the up and down arrow keys.']\n        }, ' or {0} for history', `\\u21C5`);\n        const NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX_IN_PARENS = nls.localize({\n            key: 'history.inputbox.hint.suffix.inparens',\n            comment: ['Text is the suffix of an input field placeholder coming after the action the input field performs, this will be used when the input field does NOT end in a closing parenthesis (eg. \"Find\"). The character inserted into the final string is \\u21C5 to represent the up and down arrow keys.']\n        }, ' ({0} for history)', `\\u21C5`);\n        super(container, contextViewProvider, options);\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        this.history = new HistoryNavigator(options.history, 100);\n        // Function to append the history suffix to the placeholder if necessary\n        const addSuffix = () => {\n            if (options.showHistoryHint && options.showHistoryHint() && !this.placeholder.endsWith(NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX_NO_PARENS) && !this.placeholder.endsWith(NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX_IN_PARENS) && this.history.getHistory().length) {\n                const suffix = this.placeholder.endsWith(')') ? NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX_NO_PARENS : NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX_IN_PARENS;\n                const suffixedPlaceholder = this.placeholder + suffix;\n                if (options.showPlaceholderOnFocus && !dom.isActiveElement(this.input)) {\n                    this.placeholder = suffixedPlaceholder;\n                }\n                else {\n                    this.setPlaceHolder(suffixedPlaceholder);\n                }\n            }\n        };\n        // Spot the change to the textarea class attribute which occurs when it changes between non-empty and empty,\n        // and add the history suffix to the placeholder if not yet present\n        this.observer = new MutationObserver((mutationList, observer) => {\n            mutationList.forEach((mutation) => {\n                if (!mutation.target.textContent) {\n                    addSuffix();\n                }\n            });\n        });\n        this.observer.observe(this.input, { attributeFilter: ['class'] });\n        this.onfocus(this.input, () => addSuffix());\n        this.onblur(this.input, () => {\n            const resetPlaceholder = (historyHint) => {\n                if (!this.placeholder.endsWith(historyHint)) {\n                    return false;\n                }\n                else {\n                    const revertedPlaceholder = this.placeholder.slice(0, this.placeholder.length - historyHint.length);\n                    if (options.showPlaceholderOnFocus) {\n                        this.placeholder = revertedPlaceholder;\n                    }\n                    else {\n                        this.setPlaceHolder(revertedPlaceholder);\n                    }\n                    return true;\n                }\n            };\n            if (!resetPlaceholder(NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX_IN_PARENS)) {\n                resetPlaceholder(NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX_NO_PARENS);\n            }\n        });\n    }\n    dispose() {\n        super.dispose();\n        if (this.observer) {\n            this.observer.disconnect();\n            this.observer = undefined;\n        }\n    }\n    addToHistory(always) {\n        if (this.value && (always || this.value !== this.getCurrentValue())) {\n            this.history.add(this.value);\n        }\n    }\n    isAtLastInHistory() {\n        return this.history.isLast();\n    }\n    isNowhereInHistory() {\n        return this.history.isNowhere();\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        this.value = next ?? '';\n        aria.status(this.value ? this.value : nls.localize('clearedInput', \"Cleared Input\"));\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    setPlaceHolder(placeHolder) {\n        super.setPlaceHolder(placeHolder);\n        this.setTooltip(placeHolder);\n    }\n    onBlur() {\n        super.onBlur();\n        this._onDidBlur.fire();\n    }\n    onFocus() {\n        super.onFocus();\n        this._onDidFocus.fire();\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();\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { CaseSensitiveToggle, RegexToggle, WholeWordsToggle } from './findInputToggles.js';\nimport { HistoryInputBox } from '../inputbox/inputBox.js';\nimport { Widget } from '../widget.js';\nimport { Emitter } from '../../../common/event.js';\nimport './findInput.css';\nimport * as nls from '../../../../nls.js';\nimport { DisposableStore, MutableDisposable } from '../../../common/lifecycle.js';\nimport { createInstantHoverDelegate } from '../hover/hoverDelegateFactory.js';\nconst NLS_DEFAULT_LABEL = nls.localize('defaultLabel', \"input\");\nexport class FindInput extends Widget {\n    constructor(parent, contextViewProvider, options) {\n        super();\n        this.fixFocusOnOptionClickEnabled = true;\n        this.imeSessionInProgress = false;\n        this.additionalTogglesDisposables = this._register(new MutableDisposable());\n        this.additionalToggles = [];\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.placeholder = options.placeholder || '';\n        this.validation = options.validation;\n        this.label = options.label || NLS_DEFAULT_LABEL;\n        this.showCommonFindToggles = !!options.showCommonFindToggles;\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, contextViewProvider, {\n            placeholder: this.placeholder || '',\n            ariaLabel: this.label || '',\n            validationOptions: {\n                validation: this.validation\n            },\n            history,\n            showHistoryHint: options.showHistoryHint,\n            flexibleHeight,\n            flexibleWidth,\n            flexibleMaxHeight,\n            inputBoxStyles: options.inputBoxStyles,\n        }));\n        const hoverDelegate = this._register(createInstantHoverDelegate());\n        if (this.showCommonFindToggles) {\n            this.regex = this._register(new RegexToggle({\n                appendTitle: appendRegexLabel,\n                isChecked: false,\n                hoverDelegate,\n                ...options.toggleStyles\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 WholeWordsToggle({\n                appendTitle: appendWholeWordsLabel,\n                isChecked: false,\n                hoverDelegate,\n                ...options.toggleStyles\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 CaseSensitiveToggle({\n                appendTitle: appendCaseSensitiveLabel,\n                isChecked: false,\n                hoverDelegate,\n                ...options.toggleStyles\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            // Arrow-Key support to navigate between options\n            const indexes = [this.caseSensitive.domNode, this.wholeWords.domNode, this.regex.domNode];\n            this.onkeydown(this.domNode, (event) => {\n                if (event.equals(15 /* KeyCode.LeftArrow */) || event.equals(17 /* KeyCode.RightArrow */) || event.equals(9 /* KeyCode.Escape */)) {\n                    const index = indexes.indexOf(this.domNode.ownerDocument.activeElement);\n                    if (index >= 0) {\n                        let newIndex = -1;\n                        if (event.equals(17 /* KeyCode.RightArrow */)) {\n                            newIndex = (index + 1) % indexes.length;\n                        }\n                        else if (event.equals(15 /* KeyCode.LeftArrow */)) {\n                            if (index === 0) {\n                                newIndex = indexes.length - 1;\n                            }\n                            else {\n                                newIndex = index - 1;\n                            }\n                        }\n                        if (event.equals(9 /* KeyCode.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        }\n        this.controls = document.createElement('div');\n        this.controls.className = 'controls';\n        this.controls.style.display = this.showCommonFindToggles ? '' : 'none';\n        if (this.caseSensitive) {\n            this.controls.append(this.caseSensitive.domNode);\n        }\n        if (this.wholeWords) {\n            this.controls.appendChild(this.wholeWords.domNode);\n        }\n        if (this.regex) {\n            this.controls.appendChild(this.regex.domNode);\n        }\n        this.setAdditionalToggles(options?.additionalToggles);\n        if (this.controls) {\n            this.domNode.appendChild(this.controls);\n        }\n        parent?.appendChild(this.domNode);\n        this._register(dom.addDisposableListener(this.inputBox.inputElement, 'compositionstart', (e) => {\n            this.imeSessionInProgress = true;\n        }));\n        this._register(dom.addDisposableListener(this.inputBox.inputElement, 'compositionend', (e) => {\n            this.imeSessionInProgress = false;\n            this._onInput.fire();\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    get onDidChange() {\n        return this.inputBox.onDidChange;\n    }\n    layout(style) {\n        this.inputBox.layout();\n        this.updateInputBoxPadding(style.collapsedFindWidget);\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        for (const toggle of this.additionalToggles) {\n            toggle.enable();\n        }\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        for (const toggle of this.additionalToggles) {\n            toggle.disable();\n        }\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    setAdditionalToggles(toggles) {\n        for (const currentToggle of this.additionalToggles) {\n            currentToggle.domNode.remove();\n        }\n        this.additionalToggles = [];\n        this.additionalTogglesDisposables.value = new DisposableStore();\n        for (const toggle of toggles ?? []) {\n            this.additionalTogglesDisposables.value.add(toggle);\n            this.controls.appendChild(toggle.domNode);\n            this.additionalTogglesDisposables.value.add(toggle.onChange(viaKeyboard => {\n                this._onDidOptionChange.fire(viaKeyboard);\n                if (!viaKeyboard && this.fixFocusOnOptionClickEnabled) {\n                    this.inputBox.focus();\n                }\n            }));\n            this.additionalToggles.push(toggle);\n        }\n        if (this.additionalToggles.length > 0) {\n            this.controls.style.display = '';\n        }\n        this.updateInputBoxPadding();\n    }\n    updateInputBoxPadding(controlsHidden = false) {\n        if (controlsHidden) {\n            this.inputBox.paddingRight = 0;\n        }\n        else {\n            this.inputBox.paddingRight =\n                ((this.caseSensitive?.width() ?? 0) + (this.wholeWords?.width() ?? 0) + (this.regex?.width() ?? 0))\n                    + this.additionalToggles.reduce((r, t) => r + t.width(), 0);\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    select() {\n        this.inputBox.select();\n    }\n    focus() {\n        this.inputBox.focus();\n    }\n    getCaseSensitive() {\n        return this.caseSensitive?.checked ?? false;\n    }\n    setCaseSensitive(value) {\n        if (this.caseSensitive) {\n            this.caseSensitive.checked = value;\n        }\n    }\n    getWholeWords() {\n        return this.wholeWords?.checked ?? false;\n    }\n    setWholeWords(value) {\n        if (this.wholeWords) {\n            this.wholeWords.checked = value;\n        }\n    }\n    getRegex() {\n        return this.regex?.checked ?? false;\n    }\n    setRegex(value) {\n        if (this.regex) {\n            this.regex.checked = value;\n            this.validate();\n        }\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    showMessage(message) {\n        this.inputBox.showMessage(message);\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 * as dom from '../../../base/browser/dom.js';\nimport { FindInput } from '../../../base/browser/ui/findinput/findInput.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport Severity from '../../../base/common/severity.js';\nimport './media/quickInput.css';\nconst $ = dom.$;\nexport class QuickInputBox extends Disposable {\n    constructor(parent, inputBoxStyles, toggleStyles) {\n        super();\n        this.parent = parent;\n        this.onKeyDown = (handler) => {\n            return dom.addStandardDisposableListener(this.findInput.inputBox.inputElement, dom.EventType.KEY_DOWN, handler);\n        };\n        this.onDidChange = (handler) => {\n            return this.findInput.onDidChange(handler);\n        };\n        this.container = dom.append(this.parent, $('.quick-input-box'));\n        this.findInput = this._register(new FindInput(this.container, undefined, { label: '', inputBoxStyles, toggleStyles }));\n        const input = this.findInput.inputBox.inputElement;\n        input.role = 'combobox';\n        input.ariaHasPopup = 'menu';\n        input.ariaAutoComplete = 'list';\n        input.ariaExpanded = 'true';\n    }\n    get value() {\n        return this.findInput.getValue();\n    }\n    set value(value) {\n        this.findInput.setValue(value);\n    }\n    select(range = null) {\n        this.findInput.inputBox.select(range);\n    }\n    getSelection() {\n        return this.findInput.inputBox.getSelection();\n    }\n    isSelectionAtEnd() {\n        return this.findInput.inputBox.isSelectionAtEnd();\n    }\n    get placeholder() {\n        return this.findInput.inputBox.inputElement.getAttribute('placeholder') || '';\n    }\n    set placeholder(placeholder) {\n        this.findInput.inputBox.setPlaceHolder(placeholder);\n    }\n    get password() {\n        return this.findInput.inputBox.inputElement.type === 'password';\n    }\n    set password(password) {\n        this.findInput.inputBox.inputElement.type = password ? 'password' : 'text';\n    }\n    set enabled(enabled) {\n        // We can't disable the input box because it is still used for\n        // navigating the list. Instead, we disable the list and the OK\n        // so that nothing can be selected.\n        // TODO: should this be what we do for all find inputs? Or maybe some _other_ API\n        // on findInput to change it to readonly?\n        this.findInput.inputBox.inputElement.toggleAttribute('readonly', !enabled);\n        // TODO: styles of the quick pick need to be moved to the CSS instead of being in line\n        // so things like this can be done in CSS\n        // this.findInput.inputBox.inputElement.classList.toggle('disabled', !enabled);\n    }\n    set toggles(toggles) {\n        this.findInput.setAdditionalToggles(toggles);\n    }\n    setAttribute(name, value) {\n        this.findInput.inputBox.inputElement.setAttribute(name, value);\n    }\n    showDecoration(decoration) {\n        if (decoration === Severity.Ignore) {\n            this.findInput.clearMessage();\n        }\n        else {\n            this.findInput.showMessage({ type: decoration === Severity.Info ? 1 /* MessageType.INFO */ : decoration === Severity.Warning ? 2 /* MessageType.WARNING */ : 3 /* MessageType.ERROR */, content: '' });\n        }\n    }\n    stylesForType(decoration) {\n        return this.findInput.inputBox.stylesForType(decoration === Severity.Info ? 1 /* MessageType.INFO */ : decoration === Severity.Warning ? 2 /* MessageType.WARNING */ : 3 /* MessageType.ERROR */);\n    }\n    setFocus() {\n        this.findInput.focus();\n    }\n    layout() {\n        this.findInput.inputBox.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 { range } from '../../../common/arrays.js';\nimport { CancellationTokenSource } from '../../../common/cancellation.js';\nimport { Event } from '../../../common/event.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport './list.css';\nimport { List } from './listWidget.js';\nclass PagedRenderer {\n    get templateId() { return this.renderer.templateId; }\n    constructor(renderer, modelProvider) {\n        this.renderer = renderer;\n        this.modelProvider = modelProvider;\n    }\n    renderTemplate(container) {\n        const data = this.renderer.renderTemplate(container);\n        return { data, disposable: Disposable.None };\n    }\n    renderElement(index, _, data, height) {\n        data.disposable?.dispose();\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 {\n        ...options,\n        accessibilityProvider: options.accessibilityProvider && new PagedAccessibilityProvider(modelProvider, options.accessibilityProvider)\n    };\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 widget() {\n        return this.list;\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 *--------------------------------------------------------------------------------------------*/\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 { $, append, createStyleSheet, EventHelper, getWindow, isHTMLElement } from '../../dom.js';\nimport { DomEmitter } from '../../event.js';\nimport { EventType, Gesture } from '../../touch.js';\nimport { Delayer } from '../../../common/async.js';\nimport { memoize } from '../../../common/decorators.js';\nimport { Emitter } from '../../../common/event.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../../common/lifecycle.js';\nimport { isMacintosh } from '../../../common/platform.js';\nimport './sash.css';\n/**\n * Allow the sashes to be visible at runtime.\n * @remark Use for development purposes only.\n */\nconst 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();\nclass MouseEventFactory {\n    constructor(el) {\n        this.el = el;\n        this.disposables = new DisposableStore();\n    }\n    get onPointerMove() {\n        return this.disposables.add(new DomEmitter(getWindow(this.el), 'mousemove')).event;\n    }\n    get onPointerUp() {\n        return this.disposables.add(new DomEmitter(getWindow(this.el), 'mouseup')).event;\n    }\n    dispose() {\n        this.disposables.dispose();\n    }\n}\n__decorate([\n    memoize\n], MouseEventFactory.prototype, \"onPointerMove\", null);\n__decorate([\n    memoize\n], MouseEventFactory.prototype, \"onPointerUp\", null);\nclass GestureEventFactory {\n    get onPointerMove() {\n        return this.disposables.add(new DomEmitter(this.el, EventType.Change)).event;\n    }\n    get onPointerUp() {\n        return this.disposables.add(new DomEmitter(this.el, EventType.End)).event;\n    }\n    constructor(el) {\n        this.el = el;\n        this.disposables = new DisposableStore();\n    }\n    dispose() {\n        this.disposables.dispose();\n    }\n}\n__decorate([\n    memoize\n], GestureEventFactory.prototype, \"onPointerMove\", null);\n__decorate([\n    memoize\n], GestureEventFactory.prototype, \"onPointerUp\", null);\nclass OrthogonalPointerEventFactory {\n    get onPointerMove() {\n        return this.factory.onPointerMove;\n    }\n    get onPointerUp() {\n        return this.factory.onPointerUp;\n    }\n    constructor(factory) {\n        this.factory = factory;\n    }\n    dispose() {\n        // noop\n    }\n}\n__decorate([\n    memoize\n], OrthogonalPointerEventFactory.prototype, \"onPointerMove\", null);\n__decorate([\n    memoize\n], OrthogonalPointerEventFactory.prototype, \"onPointerUp\", null);\nconst PointerEventsDisabledCssClass = 'pointer-events-disabled';\n/**\n * The {@link Sash} is the UI component which allows the user to resize other\n * components. It's usually an invisible horizontal or vertical line which, when\n * hovered, becomes highlighted and can be dragged along the perpendicular dimension\n * to its direction.\n *\n * Features:\n * - Touch event handling\n * - Corner sash support\n * - Hover with different mouse cursor support\n * - Configurable hover size\n * - Linked sash support, for 2x2 corner sashes\n */\nexport class Sash extends Disposable {\n    get state() { return this._state; }\n    get orthogonalStartSash() { return this._orthogonalStartSash; }\n    get orthogonalEndSash() { return this._orthogonalEndSash; }\n    /**\n     * The state of a sash defines whether it can be interacted with by the user\n     * as well as what mouse cursor to use, when hovered.\n     */\n    set state(state) {\n        if (this._state === state) {\n            return;\n        }\n        this.el.classList.toggle('disabled', state === 0 /* SashState.Disabled */);\n        this.el.classList.toggle('minimum', state === 1 /* SashState.AtMinimum */);\n        this.el.classList.toggle('maximum', state === 2 /* SashState.AtMaximum */);\n        this._state = state;\n        this.onDidEnablementChange.fire(state);\n    }\n    /**\n     * A reference to another sash, perpendicular to this one, which\n     * aligns at the start of this one. A corner sash will be created\n     * automatically at that location.\n     *\n     * The start of a horizontal sash is its left-most position.\n     * The start of a vertical sash is its top-most position.\n     */\n    set orthogonalStartSash(sash) {\n        if (this._orthogonalStartSash === sash) {\n            return;\n        }\n        this.orthogonalStartDragHandleDisposables.clear();\n        this.orthogonalStartSashDisposables.clear();\n        if (sash) {\n            const onChange = (state) => {\n                this.orthogonalStartDragHandleDisposables.clear();\n                if (state !== 0 /* SashState.Disabled */) {\n                    this._orthogonalStartDragHandle = append(this.el, $('.orthogonal-drag-handle.start'));\n                    this.orthogonalStartDragHandleDisposables.add(toDisposable(() => this._orthogonalStartDragHandle.remove()));\n                    this.orthogonalStartDragHandleDisposables.add(new DomEmitter(this._orthogonalStartDragHandle, 'mouseenter')).event(() => Sash.onMouseEnter(sash), undefined, this.orthogonalStartDragHandleDisposables);\n                    this.orthogonalStartDragHandleDisposables.add(new DomEmitter(this._orthogonalStartDragHandle, 'mouseleave')).event(() => Sash.onMouseLeave(sash), undefined, this.orthogonalStartDragHandleDisposables);\n                }\n            };\n            this.orthogonalStartSashDisposables.add(sash.onDidEnablementChange.event(onChange, this));\n            onChange(sash.state);\n        }\n        this._orthogonalStartSash = sash;\n    }\n    /**\n     * A reference to another sash, perpendicular to this one, which\n     * aligns at the end of this one. A corner sash will be created\n     * automatically at that location.\n     *\n     * The end of a horizontal sash is its right-most position.\n     * The end of a vertical sash is its bottom-most position.\n     */\n    set orthogonalEndSash(sash) {\n        if (this._orthogonalEndSash === sash) {\n            return;\n        }\n        this.orthogonalEndDragHandleDisposables.clear();\n        this.orthogonalEndSashDisposables.clear();\n        if (sash) {\n            const onChange = (state) => {\n                this.orthogonalEndDragHandleDisposables.clear();\n                if (state !== 0 /* SashState.Disabled */) {\n                    this._orthogonalEndDragHandle = append(this.el, $('.orthogonal-drag-handle.end'));\n                    this.orthogonalEndDragHandleDisposables.add(toDisposable(() => this._orthogonalEndDragHandle.remove()));\n                    this.orthogonalEndDragHandleDisposables.add(new DomEmitter(this._orthogonalEndDragHandle, 'mouseenter')).event(() => Sash.onMouseEnter(sash), undefined, this.orthogonalEndDragHandleDisposables);\n                    this.orthogonalEndDragHandleDisposables.add(new DomEmitter(this._orthogonalEndDragHandle, 'mouseleave')).event(() => Sash.onMouseLeave(sash), undefined, this.orthogonalEndDragHandleDisposables);\n                }\n            };\n            this.orthogonalEndSashDisposables.add(sash.onDidEnablementChange.event(onChange, this));\n            onChange(sash.state);\n        }\n        this._orthogonalEndSash = sash;\n    }\n    constructor(container, layoutProvider, options) {\n        super();\n        this.hoverDelay = globalHoverDelay;\n        this.hoverDelayer = this._register(new Delayer(this.hoverDelay));\n        this._state = 3 /* SashState.Enabled */;\n        this.onDidEnablementChange = this._register(new Emitter());\n        this._onDidStart = this._register(new Emitter());\n        this._onDidChange = this._register(new Emitter());\n        this._onDidReset = this._register(new Emitter());\n        this._onDidEnd = this._register(new Emitter());\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        /**\n         * An event which fires whenever the user starts dragging this sash.\n         */\n        this.onDidStart = this._onDidStart.event;\n        /**\n         * An event which fires whenever the user moves the mouse while\n         * dragging this sash.\n         */\n        this.onDidChange = this._onDidChange.event;\n        /**\n         * An event which fires whenever the user double clicks this sash.\n         */\n        this.onDidReset = this._onDidReset.event;\n        /**\n         * An event which fires whenever the user stops dragging this sash.\n         */\n        this.onDidEnd = this._onDidEnd.event;\n        /**\n         * A linked sash will be forwarded the same user interactions and events\n         * so it moves exactly the same way as this sash.\n         *\n         * Useful in 2x2 grids. Not meant for widespread usage.\n         */\n        this.linkedSash = undefined;\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        const onMouseDown = this._register(new DomEmitter(this.el, 'mousedown')).event;\n        this._register(onMouseDown(e => this.onPointerStart(e, new MouseEventFactory(container)), this));\n        const onMouseDoubleClick = this._register(new DomEmitter(this.el, 'dblclick')).event;\n        this._register(onMouseDoubleClick(this.onPointerDoublePress, this));\n        const onMouseEnter = this._register(new DomEmitter(this.el, 'mouseenter')).event;\n        this._register(onMouseEnter(() => Sash.onMouseEnter(this)));\n        const onMouseLeave = this._register(new DomEmitter(this.el, 'mouseleave')).event;\n        this._register(onMouseLeave(() => Sash.onMouseLeave(this)));\n        this._register(Gesture.addTarget(this.el));\n        const onTouchStart = this._register(new DomEmitter(this.el, EventType.Start)).event;\n        this._register(onTouchStart(e => this.onPointerStart(e, new GestureEventFactory(this.el)), this));\n        const onTap = this._register(new DomEmitter(this.el, EventType.Tap)).event;\n        let doubleTapTimeout = undefined;\n        this._register(onTap(event => {\n            if (doubleTapTimeout) {\n                clearTimeout(doubleTapTimeout);\n                doubleTapTimeout = undefined;\n                this.onPointerDoublePress(event);\n                return;\n            }\n            clearTimeout(doubleTapTimeout);\n            doubleTapTimeout = setTimeout(() => doubleTapTimeout = undefined, 250);\n        }, this));\n        if (typeof options.size === 'number') {\n            this.size = options.size;\n            if (options.orientation === 0 /* Orientation.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.layoutProvider = layoutProvider;\n        this.orthogonalStartSash = options.orthogonalStartSash;\n        this.orthogonalEndSash = options.orthogonalEndSash;\n        this.orientation = options.orientation || 0 /* Orientation.VERTICAL */;\n        if (this.orientation === 1 /* Orientation.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    onPointerStart(event, pointerEventFactory) {\n        EventHelper.stop(event);\n        let isMultisashResize = false;\n        if (!event.__orthogonalSashEvent) {\n            const orthogonalSash = this.getOrthogonalSash(event);\n            if (orthogonalSash) {\n                isMultisashResize = true;\n                event.__orthogonalSashEvent = true;\n                orthogonalSash.onPointerStart(event, new OrthogonalPointerEventFactory(pointerEventFactory));\n            }\n        }\n        if (this.linkedSash && !event.__linkedSashEvent) {\n            event.__linkedSashEvent = true;\n            this.linkedSash.onPointerStart(event, new OrthogonalPointerEventFactory(pointerEventFactory));\n        }\n        if (!this.state) {\n            return;\n        }\n        const iframes = this.el.ownerDocument.getElementsByTagName('iframe');\n        for (const iframe of iframes) {\n            iframe.classList.add(PointerEventsDisabledCssClass); // disable mouse events on iframes as long as we drag the sash\n        }\n        const startX = event.pageX;\n        const startY = event.pageY;\n        const altKey = event.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 /* Orientation.HORIZONTAL */) {\n                if (this.state === 1 /* SashState.AtMinimum */) {\n                    cursor = 's-resize';\n                }\n                else if (this.state === 2 /* SashState.AtMaximum */) {\n                    cursor = 'n-resize';\n                }\n                else {\n                    cursor = isMacintosh ? 'row-resize' : 'ns-resize';\n                }\n            }\n            else {\n                if (this.state === 1 /* SashState.AtMinimum */) {\n                    cursor = 'e-resize';\n                }\n                else if (this.state === 2 /* SashState.AtMaximum */) {\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.event(updateStyle, null, disposables);\n        }\n        const onPointerMove = (e) => {\n            EventHelper.stop(e, false);\n            const event = { startX, currentX: e.pageX, startY, currentY: e.pageY, altKey };\n            this._onDidChange.fire(event);\n        };\n        const onPointerUp = (e) => {\n            EventHelper.stop(e, false);\n            style.remove();\n            this.el.classList.remove('active');\n            this._onDidEnd.fire();\n            disposables.dispose();\n            for (const iframe of iframes) {\n                iframe.classList.remove(PointerEventsDisabledCssClass);\n            }\n        };\n        pointerEventFactory.onPointerMove(onPointerMove, null, disposables);\n        pointerEventFactory.onPointerUp(onPointerUp, null, disposables);\n        disposables.add(pointerEventFactory);\n    }\n    onPointerDoublePress(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    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    /**\n     * Forcefully stop any user interactions with this sash.\n     * Useful when hiding a parent component, while the user is still\n     * interacting with the sash.\n     */\n    clearSashHoverState() {\n        Sash.onMouseLeave(this);\n    }\n    /**\n     * Layout the sash. The sash will size and position itself\n     * based on its provided {@link ISashLayoutProvider layout provider}.\n     */\n    layout() {\n        if (this.orientation === 0 /* Orientation.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    getOrthogonalSash(e) {\n        const target = e.initialTarget ?? e.target;\n        if (!target || !(isHTMLElement(target))) {\n            return undefined;\n        }\n        if (target.classList.contains('orthogonal-drag-handle')) {\n            return 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 { $, addDisposableListener, append, getWindow, scheduleAtNextAnimationFrame } from '../../dom.js';\nimport { DomEmitter } from '../../event.js';\nimport { Sash } from '../sash/sash.js';\nimport { SmoothScrollableElement } from '../scrollbar/scrollableElement.js';\nimport { pushToEnd, pushToStart, range } from '../../../common/arrays.js';\nimport { Color } from '../../../common/color.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { combinedDisposable, Disposable, dispose, toDisposable } from '../../../common/lifecycle.js';\nimport { clamp } from '../../../common/numbers.js';\nimport { Scrollable } from '../../../common/scrollable.js';\nimport * as types from '../../../common/types.js';\nimport './splitview.css';\nconst defaultStyles = {\n    separatorBorder: Color.transparent\n};\nclass ViewItem {\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        try {\n            this.view.setVisible?.(visible);\n        }\n        catch (e) {\n            console.error('Splitview: Failed to set visible view');\n            console.error(e);\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 proportionalLayout() { return this.view.proportionalLayout ?? true; }\n    get snap() { return !!this.view.snap; }\n    set enabled(enabled) {\n        this.container.style.pointerEvents = enabled ? '' : 'none';\n    }\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    layout(offset, layoutContext) {\n        this.layoutContainer(offset);\n        try {\n            this.view.layout(this.size, offset, layoutContext);\n        }\n        catch (e) {\n            console.error('Splitview: Failed to layout view');\n            console.error(e);\n        }\n    }\n    dispose() {\n        this.disposable.dispose();\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    /**\n     * When adding or removing views, distribute the delta space among\n     * all other views.\n     */\n    Sizing.Distribute = { type: 'distribute' };\n    /**\n     * When adding or removing views, split the delta space with another\n     * specific view, indexed by the provided `index`.\n     */\n    function Split(index) { return { type: 'split', index }; }\n    Sizing.Split = Split;\n    /**\n     * When adding a view, use DistributeSizing when all pre-existing views are\n     * distributed evenly, otherwise use SplitSizing.\n     */\n    function Auto(index) { return { type: 'auto', index }; }\n    Sizing.Auto = Auto;\n    /**\n     * When adding or removing views, assume the view is invisible.\n     */\n    function Invisible(cachedVisibleSize) { return { type: 'invisible', cachedVisibleSize }; }\n    Sizing.Invisible = Invisible;\n})(Sizing || (Sizing = {}));\n/**\n * The {@link SplitView} is the UI component which implements a one dimensional\n * flex-like layout algorithm for a collection of {@link IView} instances, which\n * are essentially HTMLElement instances with the following size constraints:\n *\n * - {@link IView.minimumSize}\n * - {@link IView.maximumSize}\n * - {@link IView.priority}\n * - {@link IView.snap}\n *\n * In case the SplitView doesn't have enough size to fit all views, it will overflow\n * its content with a scrollbar.\n *\n * In between each pair of views there will be a {@link Sash} allowing the user\n * to resize the views, making sure the constraints are respected.\n *\n * An optional {@link TLayoutContext layout context type} may be used in order to\n * pass along layout contextual data from the {@link SplitView.layout} method down\n * to each view's {@link IView.layout} calls.\n *\n * Features:\n * - Flex-like layout algorithm\n * - Snap support\n * - Orthogonal sash support, for corner sashes\n * - View hide/show support\n * - View swap/move support\n * - Alt key modifier behavior, macOS style\n */\nexport class SplitView extends Disposable {\n    get orthogonalStartSash() { return this._orthogonalStartSash; }\n    get orthogonalEndSash() { return this._orthogonalEndSash; }\n    get startSnappingEnabled() { return this._startSnappingEnabled; }\n    get endSnappingEnabled() { return this._endSnappingEnabled; }\n    /**\n     * A reference to a sash, perpendicular to all sashes in this {@link SplitView},\n     * located at the left- or top-most side of the SplitView.\n     * Corner sashes will be created automatically at the intersections.\n     */\n    set orthogonalStartSash(sash) {\n        for (const sashItem of this.sashItems) {\n            sashItem.sash.orthogonalStartSash = sash;\n        }\n        this._orthogonalStartSash = sash;\n    }\n    /**\n     * A reference to a sash, perpendicular to all sashes in this {@link SplitView},\n     * located at the right- or bottom-most side of the SplitView.\n     * Corner sashes will be created automatically at the intersections.\n     */\n    set orthogonalEndSash(sash) {\n        for (const sashItem of this.sashItems) {\n            sashItem.sash.orthogonalEndSash = sash;\n        }\n        this._orthogonalEndSash = sash;\n    }\n    /**\n     * Enable/disable snapping at the beginning of this {@link SplitView}.\n     */\n    set startSnappingEnabled(startSnappingEnabled) {\n        if (this._startSnappingEnabled === startSnappingEnabled) {\n            return;\n        }\n        this._startSnappingEnabled = startSnappingEnabled;\n        this.updateSashEnablement();\n    }\n    /**\n     * Enable/disable snapping at the end of this {@link SplitView}.\n     */\n    set endSnappingEnabled(endSnappingEnabled) {\n        if (this._endSnappingEnabled === endSnappingEnabled) {\n            return;\n        }\n        this._endSnappingEnabled = endSnappingEnabled;\n        this.updateSashEnablement();\n    }\n    /**\n     * Create a new {@link SplitView} instance.\n     */\n    constructor(container, options = {}) {\n        super();\n        this.size = 0;\n        this._contentSize = 0;\n        this.proportions = undefined;\n        this.viewItems = [];\n        this.sashItems = []; // used in tests\n        this.state = State.Idle;\n        this._onDidSashChange = this._register(new Emitter());\n        this._onDidSashReset = this._register(new Emitter());\n        this._startSnappingEnabled = true;\n        this._endSnappingEnabled = true;\n        /**\n         * Fires whenever the user resizes a {@link Sash sash}.\n         */\n        this.onDidSashChange = this._onDidSashChange.event;\n        /**\n         * Fires whenever the user double clicks a {@link Sash sash}.\n         */\n        this.onDidSashReset = this._onDidSashReset.event;\n        this.orientation = options.orientation ?? 0 /* Orientation.VERTICAL */;\n        this.inverseAltBehavior = options.inverseAltBehavior ?? false;\n        this.proportionalLayout = options.proportionalLayout ?? true;\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 /* Orientation.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 = this._register(new Scrollable({\n            forceIntegerValues: true,\n            smoothScrollDuration: 125,\n            scheduleAtNextAnimationFrame: callback => scheduleAtNextAnimationFrame(getWindow(this.el), callback),\n        }));\n        this.scrollableElement = this._register(new SmoothScrollableElement(this.viewContainer, {\n            vertical: this.orientation === 0 /* Orientation.VERTICAL */ ? (options.scrollbarVisibility ?? 1 /* ScrollbarVisibility.Auto */) : 2 /* ScrollbarVisibility.Hidden */,\n            horizontal: this.orientation === 1 /* Orientation.HORIZONTAL */ ? (options.scrollbarVisibility ?? 1 /* ScrollbarVisibility.Auto */) : 2 /* ScrollbarVisibility.Hidden */\n        }, this.scrollable));\n        // https://github.com/microsoft/vscode/issues/157737\n        const onDidScrollViewContainer = this._register(new DomEmitter(this.viewContainer, 'scroll')).event;\n        this._register(onDidScrollViewContainer(_ => {\n            const position = this.scrollableElement.getScrollPosition();\n            const scrollLeft = Math.abs(this.viewContainer.scrollLeft - position.scrollLeft) <= 1 ? undefined : this.viewContainer.scrollLeft;\n            const scrollTop = Math.abs(this.viewContainer.scrollTop - position.scrollTop) <= 1 ? undefined : this.viewContainer.scrollTop;\n            if (scrollLeft !== undefined || scrollTop !== undefined) {\n                this.scrollableElement.setScrollPosition({ scrollLeft, scrollTop });\n            }\n        }));\n        this.onDidScroll = this.scrollableElement.onScroll;\n        this._register(this.onDidScroll(e => {\n            if (e.scrollTopChanged) {\n                this.viewContainer.scrollTop = e.scrollTop;\n            }\n            if (e.scrollLeftChanged) {\n                this.viewContainer.scrollLeft = e.scrollLeft;\n            }\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    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    /**\n     * Add a {@link IView view} to this {@link SplitView}.\n     *\n     * @param view The view to add.\n     * @param size Either a fixed size, or a dynamic {@link Sizing} strategy.\n     * @param index The index to insert the view on.\n     * @param skipLayout Whether layout should be skipped.\n     */\n    addView(view, size, index = this.viewItems.length, skipLayout) {\n        this.doAddView(view, size, index, skipLayout);\n    }\n    /**\n     * Layout the {@link SplitView}.\n     *\n     * @param size The entire size of the {@link SplitView}.\n     * @param layoutContext An optional layout context to pass along to {@link IView views}.\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 /* LayoutPriority.Low */);\n            const highPriorityIndexes = indexes.filter(i => this.viewItems[i].priority === 2 /* LayoutPriority.High */);\n            this.resize(this.viewItems.length - 1, size - previousSize, undefined, lowPriorityIndexes, highPriorityIndexes);\n        }\n        else {\n            let total = 0;\n            for (let i = 0; i < this.viewItems.length; i++) {\n                const item = this.viewItems[i];\n                const proportion = this.proportions[i];\n                if (typeof proportion === 'number') {\n                    total += proportion;\n                }\n                else {\n                    size -= item.size;\n                }\n            }\n            for (let i = 0; i < this.viewItems.length; i++) {\n                const item = this.viewItems[i];\n                const proportion = this.proportions[i];\n                if (typeof proportion === 'number' && total > 0) {\n                    item.size = clamp(Math.round(proportion * size / total), item.minimumSize, item.maximumSize);\n                }\n            }\n        }\n        this.distributeEmptySpace();\n        this.layoutViews();\n    }\n    saveProportions() {\n        if (this.proportionalLayout && this._contentSize > 0) {\n            this.proportions = this.viewItems.map(v => v.proportionalLayout && v.visible ? v.size / this._contentSize : undefined);\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(addDisposableListener(this.el.ownerDocument.body, 'keydown', e => resetSashDragState(this.sashDragState.current, e.altKey)), addDisposableListener(this.el.ownerDocument.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    /**\n     * Resize a {@link IView view} within the {@link SplitView}.\n     *\n     * @param index The {@link IView view} index.\n     * @param size The {@link IView view} size.\n     */\n    resizeView(index, size) {\n        if (index < 0 || index >= this.viewItems.length) {\n            return;\n        }\n        if (this.state !== State.Idle) {\n            throw new Error('Cant modify splitview');\n        }\n        this.state = State.Busy;\n        try {\n            const indexes = range(this.viewItems.length).filter(i => i !== index);\n            const lowPriorityIndexes = [...indexes.filter(i => this.viewItems[i].priority === 1 /* LayoutPriority.Low */), index];\n            const highPriorityIndexes = indexes.filter(i => this.viewItems[i].priority === 2 /* LayoutPriority.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        }\n        finally {\n            this.state = State.Idle;\n        }\n    }\n    /**\n     * Distribute the entire {@link SplitView} size among all {@link IView views}.\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 /* LayoutPriority.Low */);\n        const highPriorityIndexes = indexes.filter(i => this.viewItems[i].priority === 2 /* LayoutPriority.High */);\n        this.relayout(lowPriorityIndexes, highPriorityIndexes);\n    }\n    /**\n     * Returns the size of a {@link IView view}.\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        try {\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(() => container.remove());\n            const disposable = combinedDisposable(onChangeDisposable, containerDisposable);\n            let viewSize;\n            if (typeof size === 'number') {\n                viewSize = size;\n            }\n            else {\n                if (size.type === 'auto') {\n                    if (this.areViewsDistributed()) {\n                        size = { type: 'distribute' };\n                    }\n                    else {\n                        size = { type: 'split', index: size.index };\n                    }\n                }\n                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            }\n            const item = this.orientation === 0 /* Orientation.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                const opts = { orthogonalStartSash: this.orthogonalStartSash, orthogonalEndSash: this.orthogonalEndSash };\n                const sash = this.orientation === 0 /* Orientation.VERTICAL */\n                    ? new Sash(this.sashContainer, { getHorizontalSashTop: s => this.getSashPosition(s), getHorizontalSashWidth: this.getSashOrthogonalSize }, { ...opts, orientation: 1 /* Orientation.HORIZONTAL */ })\n                    : new Sash(this.sashContainer, { getVerticalSashLeft: s => this.getSashPosition(s), getVerticalSashHeight: this.getSashOrthogonalSize }, { ...opts, orientation: 0 /* Orientation.VERTICAL */ });\n                const sashEventMapper = this.orientation === 0 /* Orientation.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            if (!skipLayout && typeof size !== 'number' && size.type === 'distribute') {\n                this.distributeViewSizes();\n            }\n        }\n        finally {\n            this.state = State.Idle;\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 /* LayoutPriority.Low */);\n        const highPriorityIndexes = indexes.filter(i => this.viewItems[i].priority === 2 /* LayoutPriority.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 /* Orientation.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 /* SashState.AtMinimum */;\n                }\n                else if (snappedAfter && collapsesDown[index] && (position < this._contentSize || this.endSnappingEnabled)) {\n                    sash.state = 2 /* SashState.AtMaximum */;\n                }\n                else {\n                    sash.state = 0 /* SashState.Disabled */;\n                }\n            }\n            else if (min && !max) {\n                sash.state = 1 /* SashState.AtMinimum */;\n            }\n            else if (!min && max) {\n                sash.state = 2 /* SashState.AtMaximum */;\n            }\n            else {\n                sash.state = 3 /* SashState.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    areViewsDistributed() {\n        let min = undefined, max = undefined;\n        for (const view of this.viewItems) {\n            min = min === undefined ? view.size : Math.min(min, view.size);\n            max = max === undefined ? view.size : Math.max(max, view.size);\n            if (max - min > 2) {\n                return false;\n            }\n        }\n        return true;\n    }\n    dispose() {\n        this.sashDragState?.disposable.dispose();\n        dispose(this.viewItems);\n        this.viewItems = [];\n        this.sashItems.forEach(i => i.disposable.dispose());\n        this.sashItems = [];\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 { $, append, clearNode, createStyleSheet } from '../../dom.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { List, unthemedListStyles } from '../list/listWidget.js';\nimport { SplitView } from '../splitview/splitview.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { Disposable, DisposableStore } from '../../../common/lifecycle.js';\nimport './table.css';\nclass TableListRenderer {\n    static { this.TemplateId = 'row'; }\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}\nfunction asListVirtualDelegate(delegate) {\n    return {\n        getHeight(row) { return delegate.getHeight(row); },\n        getTemplateId() { return TableListRenderer.TemplateId; },\n    };\n}\nclass ColumnHeader extends Disposable {\n    get minimumSize() { return this.column.minimumWidth ?? 120; }\n    get maximumSize() { return this.column.maximumWidth ?? Number.POSITIVE_INFINITY; }\n    get onDidChange() { return this.column.onDidChangeWidthConstraints ?? Event.None; }\n    constructor(column, index) {\n        super();\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 }, column.label);\n        if (column.tooltip) {\n            this._register(getBaseLayerHoverDelegate().setupManagedHover(getDefaultHoverDelegate('mouse'), this.element, column.tooltip));\n        }\n    }\n    layout(size) {\n        this._onDidLayout.fire([this.index, size]);\n    }\n}\nexport class Table {\n    static { this.InstanceCount = 0; }\n    get onDidChangeFocus() { return this.list.onDidChangeFocus; }\n    get onDidChangeSelection() { return this.list.onDidChangeSelection; }\n    get onDidScroll() { return this.list.onDidScroll; }\n    get onMouseDblClick() { return this.list.onMouseDblClick; }\n    get onPointer() { return this.list.onPointer; }\n    get onDidFocus() { return this.list.onDidFocus; }\n    get scrollTop() { return this.list.scrollTop; }\n    set scrollTop(scrollTop) { this.list.scrollTop = scrollTop; }\n    get scrollHeight() { return this.list.scrollHeight; }\n    get renderHeight() { return this.list.renderHeight; }\n    get onDidDispose() { return this.list.onDidDispose; }\n    constructor(user, container, virtualDelegate, columns, renderers, _options) {\n        this.virtualDelegate = virtualDelegate;\n        this.columns = columns;\n        this.domId = `table_id_${++Table.InstanceCount}`;\n        this.disposables = new DisposableStore();\n        this.cachedWidth = 0;\n        this.cachedHeight = 0;\n        this.domNode = append(container, $(`.monaco-table.${this.domId}`));\n        const headers = columns.map((c, i) => this.disposables.add(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 = this.disposables.add(new SplitView(this.domNode, {\n            orientation: 1 /* Orientation.HORIZONTAL */,\n            scrollbarVisibility: 2 /* ScrollbarVisibility.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 = this.disposables.add(new List(user, this.domNode, asListVirtualDelegate(virtualDelegate), [renderer], _options));\n        Event.any(...headers.map(h => h.onDidLayout))(([index, size]) => renderer.layoutColumn(index, size), null, this.disposables);\n        this.splitview.onDidSashReset(index => {\n            const totalWeight = columns.reduce((r, c) => r + c.weight, 0);\n            const size = columns[index].weight / totalWeight * this.cachedWidth;\n            this.splitview.resizeView(index, size);\n        }, null, this.disposables);\n        this.styleElement = createStyleSheet(this.domNode);\n        this.style(unthemedListStyles);\n    }\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.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 *--------------------------------------------------------------------------------------------*/\nexport var ObjectTreeElementCollapseState;\n(function (ObjectTreeElementCollapseState) {\n    ObjectTreeElementCollapseState[ObjectTreeElementCollapseState[\"Expanded\"] = 0] = \"Expanded\";\n    ObjectTreeElementCollapseState[ObjectTreeElementCollapseState[\"Collapsed\"] = 1] = \"Collapsed\";\n    /**\n     * If the element is already in the tree, preserve its current state. Else, expand it.\n     */\n    ObjectTreeElementCollapseState[ObjectTreeElementCollapseState[\"PreserveOrExpanded\"] = 2] = \"PreserveOrExpanded\";\n    /**\n     * If the element is already in the tree, preserve its current state. Else, collapse it.\n     */\n    ObjectTreeElementCollapseState[ObjectTreeElementCollapseState[\"PreserveOrCollapsed\"] = 3] = \"PreserveOrCollapsed\";\n})(ObjectTreeElementCollapseState || (ObjectTreeElementCollapseState = {}));\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[\"Filter\"] = 3] = \"Filter\";\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 { splice, tail2 } from '../../../common/arrays.js';\nimport { Delayer } from '../../../common/async.js';\nimport { MicrotaskDelay } from '../../../common/symbols.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 /* TreeVisibility.Visible */;\n        case false: return 0 /* TreeVisibility.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.refilterDelayer = new Delayer(MicrotaskDelay);\n        this.collapseByDefault = typeof options.collapseByDefault === 'undefined' ? false : options.collapseByDefault;\n        this.allowNonCollapsibleParents = options.allowNonCollapsibleParents ?? false;\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 /* TreeVisibility.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 = Iterable.empty(), options, recurseLevels = options.diffDepth ?? 0) {\n        const { parentNode } = this.getParentNodeWithListIndex(location);\n        if (!parentNode.lastDiffIds) {\n            return this.spliceSimple(location, deleteCount, toInsertIterable, options);\n        }\n        const toInsert = [...toInsertIterable];\n        const index = location[location.length - 1];\n        const diff = new LcsDiff({ getElements: () => parentNode.lastDiffIds }, {\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            parentNode.lastDiffIds = undefined;\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, diffIdentityProvider }) {\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 /* TreeVisibility.Visible */ : 0 /* TreeVisibility.Hidden */, revealed, treeListElementsToInsert, onDidCreateNode));\n        const lastIndex = location[location.length - 1];\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 = splice(parentNode.children, lastIndex, deleteCount, nodesToInsert);\n        if (!diffIdentityProvider) {\n            parentNode.lastDiffIds = undefined;\n        }\n        else if (parentNode.lastDiffIds) {\n            splice(parentNode.lastDiffIds, lastIndex, deleteCount, nodesToInsert.map(n => diffIdentityProvider.getId(n.element).toString()));\n        }\n        else {\n            parentNode.lastDiffIds = parentNode.children.map(n => diffIdentityProvider.getId(n.element).toString());\n        }\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        this._onDidSplice.fire({ insertedNodes: nodesToInsert, deletedNodes });\n        let node = parentNode;\n        while (node) {\n            if (node.visibility === 2 /* TreeVisibility.Recurse */) {\n                // delayed to avoid excessive refiltering, see #135941\n                this.refilterDelayer.trigger(() => 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        this.refilterDelayer.cancel();\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 /* TreeVisibility.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 /* TreeVisibility.Hidden */ && !node.collapsed;\n        let visibleChildrenCount = 0;\n        let renderNodeCount = 1;\n        for (const el of childElements) {\n            const child = this.createTreeNode(el, node, visibility, childRevealed, treeListElements, onDidCreateNode);\n            node.children.push(child);\n            renderNodeCount += child.renderNodeCount;\n            if (child.visible) {\n                child.visibleChildIndex = visibleChildrenCount++;\n            }\n        }\n        if (!this.allowNonCollapsibleParents) {\n            node.collapsible = node.collapsible || node.children.length > 0;\n        }\n        node.visibleChildrenCount = visibleChildrenCount;\n        node.visible = visibility === 2 /* TreeVisibility.Recurse */ ? visibleChildrenCount > 0 : (visibility === 1 /* TreeVisibility.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        onDidCreateNode?.(node);\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 /* TreeVisibility.Visible */ : 0 /* TreeVisibility.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 /* TreeVisibility.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 /* TreeVisibility.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 /* TreeVisibility.Recurse */ ? hasVisibleDescendants : (visibility === 1 /* TreeVisibility.Visible */);\n            node.visibility = visibility;\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 /* TreeVisibility.Visible */;\n        if (typeof result === 'boolean') {\n            node.filterData = undefined;\n            return result ? 1 /* TreeVisibility.Visible */ : 0 /* TreeVisibility.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    getFirstElementChild(location) {\n        const node = this.getTreeNode(location);\n        if (node.children.length === 0) {\n            return undefined;\n        }\n        return node.children[0].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 *--------------------------------------------------------------------------------------------*/\nimport { $, append, clearNode, createStyleSheet, getWindow, h, hasParentWithClass, asCssValueWithDefault, isKeyboardEvent, addDisposableListener } from '../../dom.js';\nimport { DomEmitter } from '../../event.js';\nimport { StandardKeyboardEvent } from '../../keyboardEvent.js';\nimport { ActionBar } from '../actionbar/actionbar.js';\nimport { FindInput } from '../findinput/findInput.js';\nimport { unthemedInboxStyles } from '../inputbox/inputBox.js';\nimport { ElementsDragAndDropData } from '../list/listView.js';\nimport { isActionItem, isButton, isInputElement, isMonacoCustomToggle, isMonacoEditor, isStickyScrollContainer, isStickyScrollElement, List, MouseController } from '../list/listWidget.js';\nimport { Toggle, unthemedToggleStyles } from '../toggle/toggle.js';\nimport { getVisibleState, isFilterResult } from './indexTreeModel.js';\nimport { TreeMouseEventTarget } from './tree.js';\nimport { Action } from '../../../common/actions.js';\nimport { distinct, equals, range } from '../../../common/arrays.js';\nimport { Delayer, disposableTimeout, timeout } from '../../../common/async.js';\nimport { Codicon } from '../../../common/codicons.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { SetMap } from '../../../common/map.js';\nimport { Emitter, Event, EventBufferer, Relay } from '../../../common/event.js';\nimport { fuzzyScore, FuzzyScore } from '../../../common/filters.js';\nimport { Disposable, DisposableStore, dispose, toDisposable } from '../../../common/lifecycle.js';\nimport { clamp } from '../../../common/numbers.js';\nimport { isNumber } from '../../../common/types.js';\nimport './media/tree.css';\nimport { localize } from '../../../../nls.js';\nimport { createInstantHoverDelegate, getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { autorun, constObservable } from '../../../common/observable.js';\nimport { alert } from '../aria/aria.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        this.disposables = new DisposableStore();\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        this.dnd.onDragStart?.(asTreeDragAndDropData(data), originalEvent);\n    }\n    onDragOver(data, targetNode, targetIndex, targetSector, originalEvent, raw = true) {\n        const result = this.dnd.onDragOver(asTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, targetSector, 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, this.disposables);\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 /* TreeDragOverBubble.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, targetSector, 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 { ...result, feedback: range(start, start + length) };\n    }\n    drop(data, targetNode, targetIndex, targetSector, originalEvent) {\n        this.autoExpandDisposable.dispose();\n        this.autoExpandNode = undefined;\n        this.dnd.drop(asTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, targetSector, originalEvent);\n    }\n    onDragEnd(originalEvent) {\n        this.dnd.onDragEnd?.(originalEvent);\n    }\n    dispose() {\n        this.disposables.dispose();\n        this.dnd.dispose();\n    }\n}\nfunction asListOptions(modelProvider, options) {\n    return options && {\n        ...options,\n        identityProvider: options.identityProvider && {\n            getId(el) {\n                return options.identityProvider.getId(el.element);\n            }\n        },\n        dnd: options.dnd && new TreeNodeListDragAndDrop(modelProvider, options.dnd),\n        multipleSelectionController: options.multipleSelectionController && {\n            isSelectionSingleChangeEvent(e) {\n                return options.multipleSelectionController.isSelectionSingleChangeEvent({ ...e, element: e.element });\n            },\n            isSelectionRangeChangeEvent(e) {\n                return options.multipleSelectionController.isSelectionRangeChangeEvent({ ...e, element: e.element });\n            }\n        },\n        accessibilityProvider: options.accessibilityProvider && {\n            ...options.accessibilityProvider,\n            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            },\n            isChecked: options.accessibilityProvider && options.accessibilityProvider.isChecked ? (node) => {\n                return options.accessibilityProvider.isChecked(node.element);\n            } : undefined,\n            getRole: options.accessibilityProvider && options.accessibilityProvider.getRole ? (node) => {\n                return options.accessibilityProvider.getRole(node.element);\n            } : () => 'treeitem',\n            getAriaLabel(e) {\n                return options.accessibilityProvider.getAriaLabel(e.element);\n            },\n            getWidgetAriaLabel() {\n                return options.accessibilityProvider.getWidgetAriaLabel();\n            },\n            getWidgetRole: options.accessibilityProvider && options.accessibilityProvider.getWidgetRole ? () => options.accessibilityProvider.getWidgetRole() : () => 'tree',\n            getAriaLevel: options.accessibilityProvider && options.accessibilityProvider.getAriaLevel ? (node) => options.accessibilityProvider.getAriaLevel(node.element) : (node) => {\n                return node.depth;\n            },\n            getActiveDescendantId: options.accessibilityProvider.getActiveDescendantId && (node => {\n                return options.accessibilityProvider.getActiveDescendantId(node.element);\n            })\n        },\n        keyboardNavigationLabelProvider: options.keyboardNavigationLabelProvider && {\n            ...options.keyboardNavigationLabelProvider,\n            getKeyboardNavigationLabel(node) {\n                return options.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(node.element);\n            }\n        }\n    };\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        this.delegate.setDynamicHeight?.(element.element, height);\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    get elements() {\n        return this._elements;\n    }\n    constructor(onDidChange, _elements = []) {\n        this._elements = _elements;\n        this.disposables = new DisposableStore();\n        this.onDidChange = Event.forEach(onDidChange, elements => this._elements = elements, this.disposables);\n    }\n    dispose() {\n        this.disposables.dispose();\n    }\n}\nexport class TreeRenderer {\n    static { this.DefaultIndent = 8; }\n    constructor(renderer, modelProvider, onDidChangeCollapseState, activeNodes, renderedIndentGuides, options = {}) {\n        this.renderer = renderer;\n        this.modelProvider = modelProvider;\n        this.activeNodes = activeNodes;\n        this.renderedIndentGuides = renderedIndentGuides;\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.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        renderer.onDidChangeTwistieState?.(this.onDidChangeTwistieState, this, this.disposables);\n    }\n    updateOptions(options = {}) {\n        if (typeof options.indent !== 'undefined') {\n            const indent = clamp(options.indent, 0, 40);\n            if (indent !== this.indent) {\n                this.indent = indent;\n                for (const [node, templateData] of this.renderedNodes) {\n                    this.renderTreeElement(node, templateData);\n                }\n            }\n        }\n        if (typeof options.renderIndentGuides !== 'undefined') {\n            const shouldRenderIndentGuides = options.renderIndentGuides !== RenderIndentGuides.None;\n            if (shouldRenderIndentGuides !== this.shouldRenderIndentGuides) {\n                this.shouldRenderIndentGuides = shouldRenderIndentGuides;\n                for (const [node, templateData] of this.renderedNodes) {\n                    this._renderIndentGuides(node, templateData);\n                }\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        this.renderedNodes.set(node, templateData);\n        this.renderedElements.set(node.element, node);\n        this.renderTreeElement(node, templateData);\n        this.renderer.renderElement(node, index, templateData.templateData, height);\n    }\n    disposeElement(node, index, templateData, height) {\n        templateData.indentGuidesDisposable.dispose();\n        this.renderer.disposeElement?.(node, index, templateData.templateData, height);\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 templateData = this.renderedNodes.get(node);\n        if (!templateData) {\n            return;\n        }\n        this._onDidChangeActiveNodes(this.activeNodes.elements);\n        this.renderTreeElement(node, templateData);\n    }\n    renderTreeElement(node, templateData) {\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        if (node.collapsible) {\n            templateData.container.setAttribute('aria-expanded', String(!node.collapsed));\n        }\n        else {\n            templateData.container.removeAttribute('aria-expanded');\n        }\n        templateData.twistie.classList.remove(...ThemeIcon.asClassNameArray(Codicon.treeItemExpanded));\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(...ThemeIcon.asClassNameArray(Codicon.treeItemExpanded));\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        this._renderIndentGuides(node, templateData);\n    }\n    _renderIndentGuides(node, 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        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 {\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}\nclass FindFilter {\n    get totalCount() { return this._totalCount; }\n    get matchCount() { return this._matchCount; }\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    filter(element, parentVisibility) {\n        let visibility = 1 /* TreeVisibility.Visible */;\n        if (this._filter) {\n            const result = this._filter.filter(element, parentVisibility);\n            if (typeof result === 'boolean') {\n                visibility = result ? 1 /* TreeVisibility.Visible */ : 0 /* TreeVisibility.Hidden */;\n            }\n            else if (isFilterResult(result)) {\n                visibility = getVisibleState(result.visibility);\n            }\n            else {\n                visibility = result;\n            }\n            if (visibility === 0 /* TreeVisibility.Hidden */) {\n                return false;\n            }\n        }\n        this._totalCount++;\n        if (!this._pattern) {\n            this._matchCount++;\n            return { data: FuzzyScore.Default, visibility };\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 };\n            }\n            let score;\n            if (this.tree.findMatchType === TreeFindMatchType.Contiguous) {\n                const index = labelStr.toLowerCase().indexOf(this._lowercasePattern);\n                if (index > -1) {\n                    score = [Number.MAX_SAFE_INTEGER, 0];\n                    for (let i = this._lowercasePattern.length; i > 0; i--) {\n                        score.push(index + i - 1);\n                    }\n                }\n            }\n            else {\n                score = fuzzyScore(this._pattern, this._lowercasePattern, 0, labelStr, labelStr.toLowerCase(), 0, { firstMatchCanBeWeak: true, boostFullMatch: true });\n            }\n            if (score) {\n                this._matchCount++;\n                return labels.length === 1 ?\n                    { data: score, visibility } :\n                    { data: { label: labelStr, score: score }, visibility };\n            }\n        }\n        if (this.tree.findMode === TreeFindMode.Filter) {\n            if (typeof this.tree.options.defaultFindVisibility === 'number') {\n                return this.tree.options.defaultFindVisibility;\n            }\n            else if (this.tree.options.defaultFindVisibility) {\n                return this.tree.options.defaultFindVisibility(element);\n            }\n            else {\n                return 2 /* TreeVisibility.Recurse */;\n            }\n        }\n        else {\n            return { data: FuzzyScore.Default, visibility };\n        }\n    }\n    reset() {\n        this._totalCount = 0;\n        this._matchCount = 0;\n    }\n    dispose() {\n        dispose(this.disposables);\n    }\n}\nexport class ModeToggle extends Toggle {\n    constructor(opts) {\n        super({\n            icon: Codicon.listFilter,\n            title: localize('filter', \"Filter\"),\n            isChecked: opts.isChecked ?? false,\n            hoverDelegate: opts.hoverDelegate ?? getDefaultHoverDelegate('element'),\n            inputActiveOptionBorder: opts.inputActiveOptionBorder,\n            inputActiveOptionForeground: opts.inputActiveOptionForeground,\n            inputActiveOptionBackground: opts.inputActiveOptionBackground\n        });\n    }\n}\nexport class FuzzyToggle extends Toggle {\n    constructor(opts) {\n        super({\n            icon: Codicon.searchFuzzy,\n            title: localize('fuzzySearch', \"Fuzzy Match\"),\n            isChecked: opts.isChecked ?? false,\n            hoverDelegate: opts.hoverDelegate ?? getDefaultHoverDelegate('element'),\n            inputActiveOptionBorder: opts.inputActiveOptionBorder,\n            inputActiveOptionForeground: opts.inputActiveOptionForeground,\n            inputActiveOptionBackground: opts.inputActiveOptionBackground\n        });\n    }\n}\nconst unthemedFindWidgetStyles = {\n    inputBoxStyles: unthemedInboxStyles,\n    toggleStyles: unthemedToggleStyles,\n    listFilterWidgetBackground: undefined,\n    listFilterWidgetNoMatchesOutline: undefined,\n    listFilterWidgetOutline: undefined,\n    listFilterWidgetShadow: undefined\n};\nexport var TreeFindMode;\n(function (TreeFindMode) {\n    TreeFindMode[TreeFindMode[\"Highlight\"] = 0] = \"Highlight\";\n    TreeFindMode[TreeFindMode[\"Filter\"] = 1] = \"Filter\";\n})(TreeFindMode || (TreeFindMode = {}));\nexport var TreeFindMatchType;\n(function (TreeFindMatchType) {\n    TreeFindMatchType[TreeFindMatchType[\"Fuzzy\"] = 0] = \"Fuzzy\";\n    TreeFindMatchType[TreeFindMatchType[\"Contiguous\"] = 1] = \"Contiguous\";\n})(TreeFindMatchType || (TreeFindMatchType = {}));\nclass FindWidget extends Disposable {\n    set mode(mode) {\n        this.modeToggle.checked = mode === TreeFindMode.Filter;\n        this.findInput.inputBox.setPlaceHolder(mode === TreeFindMode.Filter ? localize('type to filter', \"Type to filter\") : localize('type to search', \"Type to search\"));\n    }\n    set matchType(matchType) {\n        this.matchTypeToggle.checked = matchType === TreeFindMatchType.Fuzzy;\n    }\n    constructor(container, tree, contextViewProvider, mode, matchType, options) {\n        super();\n        this.tree = tree;\n        this.elements = h('.monaco-tree-type-filter', [\n            h('.monaco-tree-type-filter-grab.codicon.codicon-debug-gripper@grab', { tabIndex: 0 }),\n            h('.monaco-tree-type-filter-input@findInput'),\n            h('.monaco-tree-type-filter-actionbar@actionbar'),\n        ]);\n        this.width = 0;\n        this.right = 0;\n        this.top = 0;\n        this._onDidDisable = new Emitter();\n        container.appendChild(this.elements.root);\n        this._register(toDisposable(() => this.elements.root.remove()));\n        const styles = options?.styles ?? unthemedFindWidgetStyles;\n        if (styles.listFilterWidgetBackground) {\n            this.elements.root.style.backgroundColor = styles.listFilterWidgetBackground;\n        }\n        if (styles.listFilterWidgetShadow) {\n            this.elements.root.style.boxShadow = `0 0 8px 2px ${styles.listFilterWidgetShadow}`;\n        }\n        const toggleHoverDelegate = this._register(createInstantHoverDelegate());\n        this.modeToggle = this._register(new ModeToggle({ ...styles.toggleStyles, isChecked: mode === TreeFindMode.Filter, hoverDelegate: toggleHoverDelegate }));\n        this.matchTypeToggle = this._register(new FuzzyToggle({ ...styles.toggleStyles, isChecked: matchType === TreeFindMatchType.Fuzzy, hoverDelegate: toggleHoverDelegate }));\n        this.onDidChangeMode = Event.map(this.modeToggle.onChange, () => this.modeToggle.checked ? TreeFindMode.Filter : TreeFindMode.Highlight, this._store);\n        this.onDidChangeMatchType = Event.map(this.matchTypeToggle.onChange, () => this.matchTypeToggle.checked ? TreeFindMatchType.Fuzzy : TreeFindMatchType.Contiguous, this._store);\n        this.findInput = this._register(new FindInput(this.elements.findInput, contextViewProvider, {\n            label: localize('type to search', \"Type to search\"),\n            additionalToggles: [this.modeToggle, this.matchTypeToggle],\n            showCommonFindToggles: false,\n            inputBoxStyles: styles.inputBoxStyles,\n            toggleStyles: styles.toggleStyles,\n            history: options?.history\n        }));\n        this.actionbar = this._register(new ActionBar(this.elements.actionbar));\n        this.mode = mode;\n        const emitter = this._register(new DomEmitter(this.findInput.inputBox.inputElement, 'keydown'));\n        const onKeyDown = Event.chain(emitter.event, $ => $.map(e => new StandardKeyboardEvent(e)));\n        this._register(onKeyDown((e) => {\n            // Using equals() so we reserve modified keys for future use\n            if (e.equals(3 /* KeyCode.Enter */)) {\n                // This is the only keyboard way to return to the tree from a history item that isn't the last one\n                e.preventDefault();\n                e.stopPropagation();\n                this.findInput.inputBox.addToHistory();\n                this.tree.domFocus();\n                return;\n            }\n            if (e.equals(18 /* KeyCode.DownArrow */)) {\n                e.preventDefault();\n                e.stopPropagation();\n                if (this.findInput.inputBox.isAtLastInHistory() || this.findInput.inputBox.isNowhereInHistory()) {\n                    // Retain original pre-history DownArrow behavior\n                    this.findInput.inputBox.addToHistory();\n                    this.tree.domFocus();\n                }\n                else {\n                    // Downward through history\n                    this.findInput.inputBox.showNextValue();\n                }\n                return;\n            }\n            if (e.equals(16 /* KeyCode.UpArrow */)) {\n                e.preventDefault();\n                e.stopPropagation();\n                // Upward through history\n                this.findInput.inputBox.showPreviousValue();\n                return;\n            }\n        }));\n        const closeAction = this._register(new Action('close', localize('close', \"Close\"), 'codicon codicon-close', true, () => this.dispose()));\n        this.actionbar.push(closeAction, { icon: true, label: false });\n        const onGrabMouseDown = this._register(new DomEmitter(this.elements.grab, 'mousedown'));\n        this._register(onGrabMouseDown.event(e => {\n            const disposables = new DisposableStore();\n            const onWindowMouseMove = disposables.add(new DomEmitter(getWindow(e), 'mousemove'));\n            const onWindowMouseUp = disposables.add(new DomEmitter(getWindow(e), 'mouseup'));\n            const startRight = this.right;\n            const startX = e.pageX;\n            const startTop = this.top;\n            const startY = e.pageY;\n            this.elements.grab.classList.add('grabbing');\n            const transition = this.elements.root.style.transition;\n            this.elements.root.style.transition = 'unset';\n            const update = (e) => {\n                const deltaX = e.pageX - startX;\n                this.right = startRight - deltaX;\n                const deltaY = e.pageY - startY;\n                this.top = startTop + deltaY;\n                this.layout();\n            };\n            disposables.add(onWindowMouseMove.event(update));\n            disposables.add(onWindowMouseUp.event(e => {\n                update(e);\n                this.elements.grab.classList.remove('grabbing');\n                this.elements.root.style.transition = transition;\n                disposables.dispose();\n            }));\n        }));\n        const onGrabKeyDown = Event.chain(this._register(new DomEmitter(this.elements.grab, 'keydown')).event, $ => $.map(e => new StandardKeyboardEvent(e)));\n        this._register(onGrabKeyDown((e) => {\n            let right;\n            let top;\n            if (e.keyCode === 15 /* KeyCode.LeftArrow */) {\n                right = Number.POSITIVE_INFINITY;\n            }\n            else if (e.keyCode === 17 /* KeyCode.RightArrow */) {\n                right = 0;\n            }\n            else if (e.keyCode === 10 /* KeyCode.Space */) {\n                right = this.right === 0 ? Number.POSITIVE_INFINITY : 0;\n            }\n            if (e.keyCode === 16 /* KeyCode.UpArrow */) {\n                top = 0;\n            }\n            else if (e.keyCode === 18 /* KeyCode.DownArrow */) {\n                top = Number.POSITIVE_INFINITY;\n            }\n            if (right !== undefined) {\n                e.preventDefault();\n                e.stopPropagation();\n                this.right = right;\n                this.layout();\n            }\n            if (top !== undefined) {\n                e.preventDefault();\n                e.stopPropagation();\n                this.top = top;\n                const transition = this.elements.root.style.transition;\n                this.elements.root.style.transition = 'unset';\n                this.layout();\n                setTimeout(() => {\n                    this.elements.root.style.transition = transition;\n                }, 0);\n            }\n        }));\n        this.onDidChangeValue = this.findInput.onDidChange;\n    }\n    layout(width = this.width) {\n        this.width = width;\n        this.right = clamp(this.right, 0, Math.max(0, width - 212));\n        this.elements.root.style.right = `${this.right}px`;\n        this.top = clamp(this.top, 0, 24);\n        this.elements.root.style.top = `${this.top}px`;\n    }\n    showMessage(message) {\n        this.findInput.showMessage(message);\n    }\n    clearMessage() {\n        this.findInput.clearMessage();\n    }\n    async dispose() {\n        this._onDidDisable.fire();\n        this.elements.root.classList.add('disabled');\n        await timeout(300);\n        super.dispose();\n    }\n}\nclass FindController {\n    get pattern() { return this._pattern; }\n    get mode() { return this._mode; }\n    set mode(mode) {\n        if (mode === this._mode) {\n            return;\n        }\n        this._mode = mode;\n        if (this.widget) {\n            this.widget.mode = this._mode;\n        }\n        this.tree.refilter();\n        this.render();\n        this._onDidChangeMode.fire(mode);\n    }\n    get matchType() { return this._matchType; }\n    set matchType(matchType) {\n        if (matchType === this._matchType) {\n            return;\n        }\n        this._matchType = matchType;\n        if (this.widget) {\n            this.widget.matchType = this._matchType;\n        }\n        this.tree.refilter();\n        this.render();\n        this._onDidChangeMatchType.fire(matchType);\n    }\n    constructor(tree, model, view, filter, contextViewProvider, options = {}) {\n        this.tree = tree;\n        this.view = view;\n        this.filter = filter;\n        this.contextViewProvider = contextViewProvider;\n        this.options = options;\n        this._pattern = '';\n        this.width = 0;\n        this._onDidChangeMode = new Emitter();\n        this.onDidChangeMode = this._onDidChangeMode.event;\n        this._onDidChangeMatchType = new Emitter();\n        this.onDidChangeMatchType = this._onDidChangeMatchType.event;\n        this._onDidChangePattern = new Emitter();\n        this._onDidChangeOpenState = new Emitter();\n        this.onDidChangeOpenState = this._onDidChangeOpenState.event;\n        this.enabledDisposables = new DisposableStore();\n        this.disposables = new DisposableStore();\n        this._mode = tree.options.defaultFindMode ?? TreeFindMode.Highlight;\n        this._matchType = tree.options.defaultFindMatchType ?? TreeFindMatchType.Fuzzy;\n        model.onDidSplice(this.onDidSpliceModel, this, this.disposables);\n    }\n    updateOptions(optionsUpdate = {}) {\n        if (optionsUpdate.defaultFindMode !== undefined) {\n            this.mode = optionsUpdate.defaultFindMode;\n        }\n        if (optionsUpdate.defaultFindMatchType !== undefined) {\n            this.matchType = optionsUpdate.defaultFindMatchType;\n        }\n    }\n    onDidSpliceModel() {\n        if (!this.widget || this.pattern.length === 0) {\n            return;\n        }\n        this.tree.refilter();\n        this.render();\n    }\n    render() {\n        const noMatches = this.filter.totalCount > 0 && this.filter.matchCount === 0;\n        if (this.pattern && noMatches) {\n            alert(localize('replFindNoResults', \"No results\"));\n            if (this.tree.options.showNotFoundMessage ?? true) {\n                this.widget?.showMessage({ type: 2 /* MessageType.WARNING */, content: localize('not found', \"No elements found.\") });\n            }\n            else {\n                this.widget?.showMessage({ type: 2 /* MessageType.WARNING */ });\n            }\n        }\n        else {\n            this.widget?.clearMessage();\n            if (this.pattern) {\n                alert(localize('replFindResults', \"{0} results\", this.filter.matchCount));\n            }\n        }\n    }\n    shouldAllowFocus(node) {\n        if (!this.widget || !this.pattern) {\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    layout(width) {\n        this.width = width;\n        this.widget?.layout(width);\n    }\n    dispose() {\n        this._history = undefined;\n        this._onDidChangePattern.dispose();\n        this.enabledDisposables.dispose();\n        this.disposables.dispose();\n    }\n}\nfunction stickyScrollNodeStateEquals(node1, node2) {\n    return node1.position === node2.position && stickyScrollNodeEquals(node1, node2);\n}\nfunction stickyScrollNodeEquals(node1, node2) {\n    return node1.node.element === node2.node.element &&\n        node1.startIndex === node2.startIndex &&\n        node1.height === node2.height &&\n        node1.endIndex === node2.endIndex;\n}\nclass StickyScrollState {\n    constructor(stickyNodes = []) {\n        this.stickyNodes = stickyNodes;\n    }\n    get count() { return this.stickyNodes.length; }\n    equal(state) {\n        return equals(this.stickyNodes, state.stickyNodes, stickyScrollNodeStateEquals);\n    }\n    lastNodePartiallyVisible() {\n        if (this.count === 0) {\n            return false;\n        }\n        const lastStickyNode = this.stickyNodes[this.count - 1];\n        if (this.count === 1) {\n            return lastStickyNode.position !== 0;\n        }\n        const secondLastStickyNode = this.stickyNodes[this.count - 2];\n        return secondLastStickyNode.position + secondLastStickyNode.height !== lastStickyNode.position;\n    }\n    animationStateChanged(previousState) {\n        if (!equals(this.stickyNodes, previousState.stickyNodes, stickyScrollNodeEquals)) {\n            return false;\n        }\n        if (this.count === 0) {\n            return false;\n        }\n        const lastStickyNode = this.stickyNodes[this.count - 1];\n        const previousLastStickyNode = previousState.stickyNodes[previousState.count - 1];\n        return lastStickyNode.position !== previousLastStickyNode.position;\n    }\n}\nclass DefaultStickyScrollDelegate {\n    constrainStickyScrollNodes(stickyNodes, stickyScrollMaxItemCount, maxWidgetHeight) {\n        for (let i = 0; i < stickyNodes.length; i++) {\n            const stickyNode = stickyNodes[i];\n            const stickyNodeBottom = stickyNode.position + stickyNode.height;\n            if (stickyNodeBottom > maxWidgetHeight || i >= stickyScrollMaxItemCount) {\n                return stickyNodes.slice(0, i);\n            }\n        }\n        return stickyNodes;\n    }\n}\nclass StickyScrollController extends Disposable {\n    constructor(tree, model, view, renderers, treeDelegate, options = {}) {\n        super();\n        this.tree = tree;\n        this.model = model;\n        this.view = view;\n        this.treeDelegate = treeDelegate;\n        this.maxWidgetViewRatio = 0.4;\n        const stickyScrollOptions = this.validateStickySettings(options);\n        this.stickyScrollMaxItemCount = stickyScrollOptions.stickyScrollMaxItemCount;\n        this.stickyScrollDelegate = options.stickyScrollDelegate ?? new DefaultStickyScrollDelegate();\n        this._widget = this._register(new StickyScrollWidget(view.getScrollableElement(), view, tree, renderers, treeDelegate, options.accessibilityProvider));\n        this.onDidChangeHasFocus = this._widget.onDidChangeHasFocus;\n        this.onContextMenu = this._widget.onContextMenu;\n        this._register(view.onDidScroll(() => this.update()));\n        this._register(view.onDidChangeContentHeight(() => this.update()));\n        this._register(tree.onDidChangeCollapseState(() => this.update()));\n        this.update();\n    }\n    get height() {\n        return this._widget.height;\n    }\n    getNodeAtHeight(height) {\n        let index;\n        if (height === 0) {\n            index = this.view.firstVisibleIndex;\n        }\n        else {\n            index = this.view.indexAt(height + this.view.scrollTop);\n        }\n        if (index < 0 || index >= this.view.length) {\n            return undefined;\n        }\n        return this.view.element(index);\n    }\n    update() {\n        const firstVisibleNode = this.getNodeAtHeight(0);\n        // Don't render anything if there are no elements\n        if (!firstVisibleNode || this.tree.scrollTop === 0) {\n            this._widget.setState(undefined);\n            return;\n        }\n        const stickyState = this.findStickyState(firstVisibleNode);\n        this._widget.setState(stickyState);\n    }\n    findStickyState(firstVisibleNode) {\n        const stickyNodes = [];\n        let firstVisibleNodeUnderWidget = firstVisibleNode;\n        let stickyNodesHeight = 0;\n        let nextStickyNode = this.getNextStickyNode(firstVisibleNodeUnderWidget, undefined, stickyNodesHeight);\n        while (nextStickyNode) {\n            stickyNodes.push(nextStickyNode);\n            stickyNodesHeight += nextStickyNode.height;\n            if (stickyNodes.length <= this.stickyScrollMaxItemCount) {\n                firstVisibleNodeUnderWidget = this.getNextVisibleNode(nextStickyNode);\n                if (!firstVisibleNodeUnderWidget) {\n                    break;\n                }\n            }\n            nextStickyNode = this.getNextStickyNode(firstVisibleNodeUnderWidget, nextStickyNode.node, stickyNodesHeight);\n        }\n        const contrainedStickyNodes = this.constrainStickyNodes(stickyNodes);\n        return contrainedStickyNodes.length ? new StickyScrollState(contrainedStickyNodes) : undefined;\n    }\n    getNextVisibleNode(previousStickyNode) {\n        return this.getNodeAtHeight(previousStickyNode.position + previousStickyNode.height);\n    }\n    getNextStickyNode(firstVisibleNodeUnderWidget, previousStickyNode, stickyNodesHeight) {\n        const nextStickyNode = this.getAncestorUnderPrevious(firstVisibleNodeUnderWidget, previousStickyNode);\n        if (!nextStickyNode) {\n            return undefined;\n        }\n        if (nextStickyNode === firstVisibleNodeUnderWidget) {\n            if (!this.nodeIsUncollapsedParent(firstVisibleNodeUnderWidget)) {\n                return undefined;\n            }\n            if (this.nodeTopAlignsWithStickyNodesBottom(firstVisibleNodeUnderWidget, stickyNodesHeight)) {\n                return undefined;\n            }\n        }\n        return this.createStickyScrollNode(nextStickyNode, stickyNodesHeight);\n    }\n    nodeTopAlignsWithStickyNodesBottom(node, stickyNodesHeight) {\n        const nodeIndex = this.getNodeIndex(node);\n        const elementTop = this.view.getElementTop(nodeIndex);\n        const stickyPosition = stickyNodesHeight;\n        return this.view.scrollTop === elementTop - stickyPosition;\n    }\n    createStickyScrollNode(node, currentStickyNodesHeight) {\n        const height = this.treeDelegate.getHeight(node);\n        const { startIndex, endIndex } = this.getNodeRange(node);\n        const position = this.calculateStickyNodePosition(endIndex, currentStickyNodesHeight, height);\n        return { node, position, height, startIndex, endIndex };\n    }\n    getAncestorUnderPrevious(node, previousAncestor = undefined) {\n        let currentAncestor = node;\n        let parentOfcurrentAncestor = this.getParentNode(currentAncestor);\n        while (parentOfcurrentAncestor) {\n            if (parentOfcurrentAncestor === previousAncestor) {\n                return currentAncestor;\n            }\n            currentAncestor = parentOfcurrentAncestor;\n            parentOfcurrentAncestor = this.getParentNode(currentAncestor);\n        }\n        if (previousAncestor === undefined) {\n            return currentAncestor;\n        }\n        return undefined;\n    }\n    calculateStickyNodePosition(lastDescendantIndex, stickyRowPositionTop, stickyNodeHeight) {\n        let lastChildRelativeTop = this.view.getRelativeTop(lastDescendantIndex);\n        // If the last descendant is only partially visible at the top of the view, getRelativeTop() returns null\n        // In that case, utilize the next node's relative top to calculate the sticky node's position\n        if (lastChildRelativeTop === null && this.view.firstVisibleIndex === lastDescendantIndex && lastDescendantIndex + 1 < this.view.length) {\n            const nodeHeight = this.treeDelegate.getHeight(this.view.element(lastDescendantIndex));\n            const nextNodeRelativeTop = this.view.getRelativeTop(lastDescendantIndex + 1);\n            lastChildRelativeTop = nextNodeRelativeTop ? nextNodeRelativeTop - nodeHeight / this.view.renderHeight : null;\n        }\n        if (lastChildRelativeTop === null) {\n            return stickyRowPositionTop;\n        }\n        const lastChildNode = this.view.element(lastDescendantIndex);\n        const lastChildHeight = this.treeDelegate.getHeight(lastChildNode);\n        const topOfLastChild = lastChildRelativeTop * this.view.renderHeight;\n        const bottomOfLastChild = topOfLastChild + lastChildHeight;\n        if (stickyRowPositionTop + stickyNodeHeight > bottomOfLastChild && stickyRowPositionTop <= bottomOfLastChild) {\n            return bottomOfLastChild - stickyNodeHeight;\n        }\n        return stickyRowPositionTop;\n    }\n    constrainStickyNodes(stickyNodes) {\n        if (stickyNodes.length === 0) {\n            return [];\n        }\n        // Check if sticky nodes need to be constrained\n        const maximumStickyWidgetHeight = this.view.renderHeight * this.maxWidgetViewRatio;\n        const lastStickyNode = stickyNodes[stickyNodes.length - 1];\n        if (stickyNodes.length <= this.stickyScrollMaxItemCount && lastStickyNode.position + lastStickyNode.height <= maximumStickyWidgetHeight) {\n            return stickyNodes;\n        }\n        // constrain sticky nodes\n        const constrainedStickyNodes = this.stickyScrollDelegate.constrainStickyScrollNodes(stickyNodes, this.stickyScrollMaxItemCount, maximumStickyWidgetHeight);\n        if (!constrainedStickyNodes.length) {\n            return [];\n        }\n        // Validate constraints\n        const lastConstrainedStickyNode = constrainedStickyNodes[constrainedStickyNodes.length - 1];\n        if (constrainedStickyNodes.length > this.stickyScrollMaxItemCount || lastConstrainedStickyNode.position + lastConstrainedStickyNode.height > maximumStickyWidgetHeight) {\n            throw new Error('stickyScrollDelegate violates constraints');\n        }\n        return constrainedStickyNodes;\n    }\n    getParentNode(node) {\n        const nodeLocation = this.model.getNodeLocation(node);\n        const parentLocation = this.model.getParentNodeLocation(nodeLocation);\n        return parentLocation ? this.model.getNode(parentLocation) : undefined;\n    }\n    nodeIsUncollapsedParent(node) {\n        const nodeLocation = this.model.getNodeLocation(node);\n        return this.model.getListRenderCount(nodeLocation) > 1;\n    }\n    getNodeIndex(node) {\n        const nodeLocation = this.model.getNodeLocation(node);\n        const nodeIndex = this.model.getListIndex(nodeLocation);\n        return nodeIndex;\n    }\n    getNodeRange(node) {\n        const nodeLocation = this.model.getNodeLocation(node);\n        const startIndex = this.model.getListIndex(nodeLocation);\n        if (startIndex < 0) {\n            throw new Error('Node not found in tree');\n        }\n        const renderCount = this.model.getListRenderCount(nodeLocation);\n        const endIndex = startIndex + renderCount - 1;\n        return { startIndex, endIndex };\n    }\n    nodePositionTopBelowWidget(node) {\n        const ancestors = [];\n        let currentAncestor = this.getParentNode(node);\n        while (currentAncestor) {\n            ancestors.push(currentAncestor);\n            currentAncestor = this.getParentNode(currentAncestor);\n        }\n        let widgetHeight = 0;\n        for (let i = 0; i < ancestors.length && i < this.stickyScrollMaxItemCount; i++) {\n            widgetHeight += this.treeDelegate.getHeight(ancestors[i]);\n        }\n        return widgetHeight;\n    }\n    domFocus() {\n        this._widget.domFocus();\n    }\n    // Whether sticky scroll was the last focused part in the tree or not\n    focusedLast() {\n        return this._widget.focusedLast();\n    }\n    updateOptions(optionsUpdate = {}) {\n        if (!optionsUpdate.stickyScrollMaxItemCount) {\n            return;\n        }\n        const validatedOptions = this.validateStickySettings(optionsUpdate);\n        if (this.stickyScrollMaxItemCount !== validatedOptions.stickyScrollMaxItemCount) {\n            this.stickyScrollMaxItemCount = validatedOptions.stickyScrollMaxItemCount;\n            this.update();\n        }\n    }\n    validateStickySettings(options) {\n        let stickyScrollMaxItemCount = 7;\n        if (typeof options.stickyScrollMaxItemCount === 'number') {\n            stickyScrollMaxItemCount = Math.max(options.stickyScrollMaxItemCount, 1);\n        }\n        return { stickyScrollMaxItemCount };\n    }\n}\nclass StickyScrollWidget {\n    constructor(container, view, tree, treeRenderers, treeDelegate, accessibilityProvider) {\n        this.view = view;\n        this.tree = tree;\n        this.treeRenderers = treeRenderers;\n        this.treeDelegate = treeDelegate;\n        this.accessibilityProvider = accessibilityProvider;\n        this._previousElements = [];\n        this._previousStateDisposables = new DisposableStore();\n        this._rootDomNode = $('.monaco-tree-sticky-container.empty');\n        container.appendChild(this._rootDomNode);\n        const shadow = $('.monaco-tree-sticky-container-shadow');\n        this._rootDomNode.appendChild(shadow);\n        this.stickyScrollFocus = new StickyScrollFocus(this._rootDomNode, view);\n        this.onDidChangeHasFocus = this.stickyScrollFocus.onDidChangeHasFocus;\n        this.onContextMenu = this.stickyScrollFocus.onContextMenu;\n    }\n    get height() {\n        if (!this._previousState) {\n            return 0;\n        }\n        const lastElement = this._previousState.stickyNodes[this._previousState.count - 1];\n        return lastElement.position + lastElement.height;\n    }\n    setState(state) {\n        const wasVisible = !!this._previousState && this._previousState.count > 0;\n        const isVisible = !!state && state.count > 0;\n        // If state has not changed, do nothing\n        if ((!wasVisible && !isVisible) || (wasVisible && isVisible && this._previousState.equal(state))) {\n            return;\n        }\n        // Update visibility of the widget if changed\n        if (wasVisible !== isVisible) {\n            this.setVisible(isVisible);\n        }\n        if (!isVisible) {\n            this._previousState = undefined;\n            this._previousElements = [];\n            this._previousStateDisposables.clear();\n            return;\n        }\n        const lastStickyNode = state.stickyNodes[state.count - 1];\n        // If the new state is only a change in the last node's position, update the position of the last element\n        if (this._previousState && state.animationStateChanged(this._previousState)) {\n            this._previousElements[this._previousState.count - 1].style.top = `${lastStickyNode.position}px`;\n        }\n        // create new dom elements\n        else {\n            this._previousStateDisposables.clear();\n            const elements = Array(state.count);\n            for (let stickyIndex = state.count - 1; stickyIndex >= 0; stickyIndex--) {\n                const stickyNode = state.stickyNodes[stickyIndex];\n                const { element, disposable } = this.createElement(stickyNode, stickyIndex, state.count);\n                elements[stickyIndex] = element;\n                this._rootDomNode.appendChild(element);\n                this._previousStateDisposables.add(disposable);\n            }\n            this.stickyScrollFocus.updateElements(elements, state);\n            this._previousElements = elements;\n        }\n        this._previousState = state;\n        // Set the height of the widget to the bottom of the last sticky node\n        this._rootDomNode.style.height = `${lastStickyNode.position + lastStickyNode.height}px`;\n    }\n    createElement(stickyNode, stickyIndex, stickyNodesTotal) {\n        const nodeIndex = stickyNode.startIndex;\n        // Sticky element container\n        const stickyElement = document.createElement('div');\n        stickyElement.style.top = `${stickyNode.position}px`;\n        if (this.tree.options.setRowHeight !== false) {\n            stickyElement.style.height = `${stickyNode.height}px`;\n        }\n        if (this.tree.options.setRowLineHeight !== false) {\n            stickyElement.style.lineHeight = `${stickyNode.height}px`;\n        }\n        stickyElement.classList.add('monaco-tree-sticky-row');\n        stickyElement.classList.add('monaco-list-row');\n        stickyElement.setAttribute('data-index', `${nodeIndex}`);\n        stickyElement.setAttribute('data-parity', nodeIndex % 2 === 0 ? 'even' : 'odd');\n        stickyElement.setAttribute('id', this.view.getElementID(nodeIndex));\n        const accessibilityDisposable = this.setAccessibilityAttributes(stickyElement, stickyNode.node.element, stickyIndex, stickyNodesTotal);\n        // Get the renderer for the node\n        const nodeTemplateId = this.treeDelegate.getTemplateId(stickyNode.node);\n        const renderer = this.treeRenderers.find((renderer) => renderer.templateId === nodeTemplateId);\n        if (!renderer) {\n            throw new Error(`No renderer found for template id ${nodeTemplateId}`);\n        }\n        // To make sure we do not influence the original node, we create a copy of the node\n        // We need to check if it is already a unique instance of the node by the delegate\n        let nodeCopy = stickyNode.node;\n        if (nodeCopy === this.tree.getNode(this.tree.getNodeLocation(stickyNode.node))) {\n            nodeCopy = new Proxy(stickyNode.node, {});\n        }\n        // Render the element\n        const templateData = renderer.renderTemplate(stickyElement);\n        renderer.renderElement(nodeCopy, stickyNode.startIndex, templateData, stickyNode.height);\n        // Remove the element from the DOM when state is disposed\n        const disposable = toDisposable(() => {\n            accessibilityDisposable.dispose();\n            renderer.disposeElement(nodeCopy, stickyNode.startIndex, templateData, stickyNode.height);\n            renderer.disposeTemplate(templateData);\n            stickyElement.remove();\n        });\n        return { element: stickyElement, disposable };\n    }\n    setAccessibilityAttributes(container, element, stickyIndex, stickyNodesTotal) {\n        if (!this.accessibilityProvider) {\n            return Disposable.None;\n        }\n        if (this.accessibilityProvider.getSetSize) {\n            container.setAttribute('aria-setsize', String(this.accessibilityProvider.getSetSize(element, stickyIndex, stickyNodesTotal)));\n        }\n        if (this.accessibilityProvider.getPosInSet) {\n            container.setAttribute('aria-posinset', String(this.accessibilityProvider.getPosInSet(element, stickyIndex)));\n        }\n        if (this.accessibilityProvider.getRole) {\n            container.setAttribute('role', this.accessibilityProvider.getRole(element) ?? 'treeitem');\n        }\n        const ariaLabel = this.accessibilityProvider.getAriaLabel(element);\n        const observable = (ariaLabel && typeof ariaLabel !== 'string') ? ariaLabel : constObservable(ariaLabel);\n        const result = autorun(reader => {\n            const value = reader.readObservable(observable);\n            if (value) {\n                container.setAttribute('aria-label', value);\n            }\n            else {\n                container.removeAttribute('aria-label');\n            }\n        });\n        if (typeof ariaLabel === 'string') {\n        }\n        else if (ariaLabel) {\n            container.setAttribute('aria-label', ariaLabel.get());\n        }\n        const ariaLevel = this.accessibilityProvider.getAriaLevel && this.accessibilityProvider.getAriaLevel(element);\n        if (typeof ariaLevel === 'number') {\n            container.setAttribute('aria-level', `${ariaLevel}`);\n        }\n        // Sticky Scroll elements can not be selected\n        container.setAttribute('aria-selected', String(false));\n        return result;\n    }\n    setVisible(visible) {\n        this._rootDomNode.classList.toggle('empty', !visible);\n        if (!visible) {\n            this.stickyScrollFocus.updateElements([], undefined);\n        }\n    }\n    domFocus() {\n        this.stickyScrollFocus.domFocus();\n    }\n    focusedLast() {\n        return this.stickyScrollFocus.focusedLast();\n    }\n    dispose() {\n        this.stickyScrollFocus.dispose();\n        this._previousStateDisposables.dispose();\n        this._rootDomNode.remove();\n    }\n}\nclass StickyScrollFocus extends Disposable {\n    get domHasFocus() { return this._domHasFocus; }\n    set domHasFocus(hasFocus) {\n        if (hasFocus !== this._domHasFocus) {\n            this._onDidChangeHasFocus.fire(hasFocus);\n            this._domHasFocus = hasFocus;\n        }\n    }\n    constructor(container, view) {\n        super();\n        this.container = container;\n        this.view = view;\n        this.focusedIndex = -1;\n        this.elements = [];\n        this._onDidChangeHasFocus = new Emitter();\n        this.onDidChangeHasFocus = this._onDidChangeHasFocus.event;\n        this._onContextMenu = new Emitter();\n        this.onContextMenu = this._onContextMenu.event;\n        this._domHasFocus = false;\n        this._register(addDisposableListener(this.container, 'focus', () => this.onFocus()));\n        this._register(addDisposableListener(this.container, 'blur', () => this.onBlur()));\n        this._register(this.view.onDidFocus(() => this.toggleStickyScrollFocused(false)));\n        this._register(this.view.onKeyDown((e) => this.onKeyDown(e)));\n        this._register(this.view.onMouseDown((e) => this.onMouseDown(e)));\n        this._register(this.view.onContextMenu((e) => this.handleContextMenu(e)));\n    }\n    handleContextMenu(e) {\n        const target = e.browserEvent.target;\n        if (!isStickyScrollContainer(target) && !isStickyScrollElement(target)) {\n            if (this.focusedLast()) {\n                this.view.domFocus();\n            }\n            return;\n        }\n        // The list handles the context menu triggered by a mouse event\n        // In that case only set the focus of the element clicked and leave the rest to the list to handle\n        if (!isKeyboardEvent(e.browserEvent)) {\n            if (!this.state) {\n                throw new Error('Context menu should not be triggered when state is undefined');\n            }\n            const stickyIndex = this.state.stickyNodes.findIndex(stickyNode => stickyNode.node.element === e.element?.element);\n            if (stickyIndex === -1) {\n                throw new Error('Context menu should not be triggered when element is not in sticky scroll widget');\n            }\n            this.container.focus();\n            this.setFocus(stickyIndex);\n            return;\n        }\n        if (!this.state || this.focusedIndex < 0) {\n            throw new Error('Context menu key should not be triggered when focus is not in sticky scroll widget');\n        }\n        const stickyNode = this.state.stickyNodes[this.focusedIndex];\n        const element = stickyNode.node.element;\n        const anchor = this.elements[this.focusedIndex];\n        this._onContextMenu.fire({ element, anchor, browserEvent: e.browserEvent, isStickyScroll: true });\n    }\n    onKeyDown(e) {\n        // Sticky Scroll Navigation\n        if (this.domHasFocus && this.state) {\n            // Move up\n            if (e.key === 'ArrowUp') {\n                this.setFocusedElement(Math.max(0, this.focusedIndex - 1));\n                e.preventDefault();\n                e.stopPropagation();\n            }\n            // Move down, if last sticky node is focused, move focus into first child of last sticky node\n            else if (e.key === 'ArrowDown' || e.key === 'ArrowRight') {\n                if (this.focusedIndex >= this.state.count - 1) {\n                    const nodeIndexToFocus = this.state.stickyNodes[this.state.count - 1].startIndex + 1;\n                    this.view.domFocus();\n                    this.view.setFocus([nodeIndexToFocus]);\n                    this.scrollNodeUnderWidget(nodeIndexToFocus, this.state);\n                }\n                else {\n                    this.setFocusedElement(this.focusedIndex + 1);\n                }\n                e.preventDefault();\n                e.stopPropagation();\n            }\n        }\n    }\n    onMouseDown(e) {\n        const target = e.browserEvent.target;\n        if (!isStickyScrollContainer(target) && !isStickyScrollElement(target)) {\n            return;\n        }\n        e.browserEvent.preventDefault();\n        e.browserEvent.stopPropagation();\n    }\n    updateElements(elements, state) {\n        if (state && state.count === 0) {\n            throw new Error('Sticky scroll state must be undefined when there are no sticky nodes');\n        }\n        if (state && state.count !== elements.length) {\n            throw new Error('Sticky scroll focus received illigel state');\n        }\n        const previousIndex = this.focusedIndex;\n        this.removeFocus();\n        this.elements = elements;\n        this.state = state;\n        if (state) {\n            const newFocusedIndex = clamp(previousIndex, 0, state.count - 1);\n            this.setFocus(newFocusedIndex);\n        }\n        else {\n            if (this.domHasFocus) {\n                this.view.domFocus();\n            }\n        }\n        // must come last as it calls blur()\n        this.container.tabIndex = state ? 0 : -1;\n    }\n    setFocusedElement(stickyIndex) {\n        // doesn't imply that the widget has (or will have) focus\n        const state = this.state;\n        if (!state) {\n            throw new Error('Cannot set focus when state is undefined');\n        }\n        this.setFocus(stickyIndex);\n        if (stickyIndex < state.count - 1) {\n            return;\n        }\n        // If the last sticky node is not fully visible, scroll it into view\n        if (state.lastNodePartiallyVisible()) {\n            const lastStickyNode = state.stickyNodes[stickyIndex];\n            this.scrollNodeUnderWidget(lastStickyNode.endIndex + 1, state);\n        }\n    }\n    scrollNodeUnderWidget(nodeIndex, state) {\n        const lastStickyNode = state.stickyNodes[state.count - 1];\n        const secondLastStickyNode = state.count > 1 ? state.stickyNodes[state.count - 2] : undefined;\n        const elementScrollTop = this.view.getElementTop(nodeIndex);\n        const elementTargetViewTop = secondLastStickyNode ? secondLastStickyNode.position + secondLastStickyNode.height + lastStickyNode.height : lastStickyNode.height;\n        this.view.scrollTop = elementScrollTop - elementTargetViewTop;\n    }\n    domFocus() {\n        if (!this.state) {\n            throw new Error('Cannot focus when state is undefined');\n        }\n        this.container.focus();\n    }\n    focusedLast() {\n        if (!this.state) {\n            return false;\n        }\n        return this.view.getHTMLElement().classList.contains('sticky-scroll-focused');\n    }\n    removeFocus() {\n        if (this.focusedIndex === -1) {\n            return;\n        }\n        this.toggleElementFocus(this.elements[this.focusedIndex], false);\n        this.focusedIndex = -1;\n    }\n    setFocus(newFocusIndex) {\n        if (0 > newFocusIndex) {\n            throw new Error('addFocus() can not remove focus');\n        }\n        if (!this.state && newFocusIndex >= 0) {\n            throw new Error('Cannot set focus index when state is undefined');\n        }\n        if (this.state && newFocusIndex >= this.state.count) {\n            throw new Error('Cannot set focus index to an index that does not exist');\n        }\n        const oldIndex = this.focusedIndex;\n        if (oldIndex >= 0) {\n            this.toggleElementFocus(this.elements[oldIndex], false);\n        }\n        if (newFocusIndex >= 0) {\n            this.toggleElementFocus(this.elements[newFocusIndex], true);\n        }\n        this.focusedIndex = newFocusIndex;\n    }\n    toggleElementFocus(element, focused) {\n        this.toggleElementActiveFocus(element, focused && this.domHasFocus);\n        this.toggleElementPassiveFocus(element, focused);\n    }\n    toggleCurrentElementActiveFocus(focused) {\n        if (this.focusedIndex === -1) {\n            return;\n        }\n        this.toggleElementActiveFocus(this.elements[this.focusedIndex], focused);\n    }\n    toggleElementActiveFocus(element, focused) {\n        // active focus is set when sticky scroll has focus\n        element.classList.toggle('focused', focused);\n    }\n    toggleElementPassiveFocus(element, focused) {\n        // passive focus allows to show focus when sticky scroll does not have focus\n        // for example when the context menu has focus\n        element.classList.toggle('passive-focused', focused);\n    }\n    toggleStickyScrollFocused(focused) {\n        // Weather the last focus in the view was sticky scroll and not the list\n        // Is only removed when the focus is back in the tree an no longer in sticky scroll\n        this.view.getHTMLElement().classList.toggle('sticky-scroll-focused', focused);\n    }\n    onFocus() {\n        if (!this.state || this.elements.length === 0) {\n            throw new Error('Cannot focus when state is undefined or elements are empty');\n        }\n        this.domHasFocus = true;\n        this.toggleStickyScrollFocused(true);\n        this.toggleCurrentElementActiveFocus(true);\n        if (this.focusedIndex === -1) {\n            this.setFocus(0);\n        }\n    }\n    onBlur() {\n        this.domHasFocus = false;\n        this.toggleCurrentElementActiveFocus(false);\n    }\n    dispose() {\n        this.toggleStickyScrollFocused(false);\n        this._onDidChangeHasFocus.fire(false);\n        super.dispose();\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    else if (hasParentWithClass(event.browserEvent.target, 'monaco-tree-type-filter', 'monaco-list')) {\n        target = TreeMouseEventTarget.Filter;\n    }\n    return {\n        browserEvent: event.browserEvent,\n        element: event.element ? event.element.element : null,\n        target\n    };\n}\nfunction asTreeContextMenuEvent(event) {\n    const isStickyScroll = isStickyScrollContainer(event.browserEvent.target);\n    return {\n        element: event.element ? event.element.element : null,\n        browserEvent: event.browserEvent,\n        anchor: event.anchor,\n        isStickyScroll\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    get nodeSet() {\n        if (!this._nodeSet) {\n            this._nodeSet = this.createNodeSet();\n        }\n        return this._nodeSet;\n    }\n    constructor(getFirstViewElementWithTrait, identityProvider) {\n        this.getFirstViewElementWithTrait = getFirstViewElementWithTrait;\n        this.identityProvider = identityProvider;\n        this.nodes = [];\n        this._onDidChange = new Emitter();\n        this.onDidChange = this._onDidChange.event;\n    }\n    set(nodes, browserEvent) {\n        if (!browserEvent?.__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 && insertedNode.visible) {\n                    nodes.push(insertedNode);\n                }\n            }\n        }\n        if (this.nodes.length > 0 && nodes.length === 0) {\n            const node = this.getFirstViewElementWithTrait();\n            if (node) {\n                nodes.push(node);\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, stickyScrollProvider) {\n        super(list);\n        this.tree = tree;\n        this.stickyScrollProvider = stickyScrollProvider;\n    }\n    onViewPointer(e) {\n        if (isButton(e.browserEvent.target) ||\n            isInputElement(e.browserEvent.target) ||\n            isMonacoEditor(e.browserEvent.target)) {\n            return;\n        }\n        if (e.browserEvent.isHandledByList) {\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        const isStickyElement = isStickyScrollElement(e.browserEvent.target);\n        let expandOnlyOnTwistieClick = false;\n        if (isStickyElement) {\n            expandOnlyOnTwistieClick = true;\n        }\n        else if (typeof this.tree.expandOnlyOnTwistieClick === 'function') {\n            expandOnlyOnTwistieClick = this.tree.expandOnlyOnTwistieClick(node.element);\n        }\n        else {\n            expandOnlyOnTwistieClick = !!this.tree.expandOnlyOnTwistieClick;\n        }\n        if (!isStickyElement) {\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        }\n        else {\n            this.handleStickyScrollMouseEvent(e, node);\n        }\n        if (node.collapsible && (!isStickyElement || onTwistie)) {\n            const location = this.tree.getNodeLocation(node);\n            const recursive = e.browserEvent.altKey;\n            this.tree.setFocus([location]);\n            this.tree.toggleCollapsed(location, recursive);\n            if (onTwistie) {\n                // Do not set this before calling a handler on the super class, because it will reject it as handled\n                e.browserEvent.isHandledByList = true;\n                return;\n            }\n        }\n        if (!isStickyElement) {\n            super.onViewPointer(e);\n        }\n    }\n    handleStickyScrollMouseEvent(e, node) {\n        if (isMonacoCustomToggle(e.browserEvent.target) || isActionItem(e.browserEvent.target)) {\n            return;\n        }\n        const stickyScrollController = this.stickyScrollProvider();\n        if (!stickyScrollController) {\n            throw new Error('Sticky scroll controller not found');\n        }\n        const nodeIndex = this.list.indexOf(node);\n        const elementScrollTop = this.list.getElementTop(nodeIndex);\n        const elementTargetViewTop = stickyScrollController.nodePositionTopBelowWidget(node);\n        this.tree.scrollTop = elementScrollTop - elementTargetViewTop;\n        this.list.domFocus();\n        this.list.setFocus([nodeIndex]);\n        this.list.setSelection([nodeIndex]);\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        if (e.browserEvent.isHandledByList) {\n            return;\n        }\n        super.onDoubleClick(e);\n    }\n    // to make sure dom focus is not stolen (for example with context menu)\n    onMouseDown(e) {\n        const target = e.browserEvent.target;\n        if (!isStickyScrollContainer(target) && !isStickyScrollElement(target)) {\n            super.onMouseDown(e);\n            return;\n        }\n    }\n    onContextMenu(e) {\n        const target = e.browserEvent.target;\n        if (!isStickyScrollContainer(target) && !isStickyScrollElement(target)) {\n            super.onContextMenu(e);\n            return;\n        }\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, options.stickyScrollProvider);\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(distinct([...super.getFocus(), ...additionalFocus]));\n        }\n        if (additionalSelection.length > 0) {\n            super.setSelection(distinct([...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    get onDidScroll() { return this.view.onDidScroll; }\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.filter(Event.map(this.view.onMouseDblClick, asTreeMouseEvent), e => e.target !== TreeMouseEventTarget.Filter); }\n    get onMouseOver() { return Event.map(this.view.onMouseOver, asTreeMouseEvent); }\n    get onMouseOut() { return Event.map(this.view.onMouseOut, asTreeMouseEvent); }\n    get onContextMenu() { return Event.any(Event.filter(Event.map(this.view.onContextMenu, asTreeContextMenuEvent), e => !e.isStickyScroll), this.stickyScrollController?.onContextMenu ?? Event.None); }\n    get onPointer() { return Event.map(this.view.onPointer, asTreeMouseEvent); }\n    get onKeyDown() { return this.view.onKeyDown; }\n    get onDidFocus() { return this.view.onDidFocus; }\n    get onDidChangeModel() { return Event.signal(this.model.onDidSplice); }\n    get onDidChangeCollapseState() { return this.model.onDidChangeCollapseState; }\n    get findMode() { return this.findController?.mode ?? TreeFindMode.Highlight; }\n    set findMode(findMode) { if (this.findController) {\n        this.findController.mode = findMode;\n    } }\n    get findMatchType() { return this.findController?.matchType ?? TreeFindMatchType.Fuzzy; }\n    set findMatchType(findFuzzy) { if (this.findController) {\n        this.findController.matchType = findFuzzy;\n    } }\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    constructor(_user, container, delegate, renderers, _options = {}) {\n        this._user = _user;\n        this._options = _options;\n        this.eventBufferer = new EventBufferer();\n        this.onDidChangeFindOpenState = Event.None;\n        this.onDidChangeStickyScrollFocused = Event.None;\n        this.disposables = new DisposableStore();\n        this._onWillRefilter = new Emitter();\n        this.onWillRefilter = this._onWillRefilter.event;\n        this._onDidUpdateOptions = new Emitter();\n        this.treeDelegate = new ComposedTreeDelegate(delegate);\n        const onDidChangeCollapseStateRelay = new Relay();\n        const onDidChangeActiveNodes = new Relay();\n        const activeNodes = this.disposables.add(new EventCollection(onDidChangeActiveNodes.event));\n        const renderedIndentGuides = new SetMap();\n        this.renderers = renderers.map(r => new TreeRenderer(r, () => this.model, onDidChangeCollapseStateRelay.event, activeNodes, renderedIndentGuides, _options));\n        for (const r of this.renderers) {\n            this.disposables.add(r);\n        }\n        let filter;\n        if (_options.keyboardNavigationLabelProvider) {\n            filter = new FindFilter(this, _options.keyboardNavigationLabelProvider, _options.filter);\n            _options = { ..._options, filter: filter }; // TODO need typescript help here\n            this.disposables.add(filter);\n        }\n        this.focus = new Trait(() => this.view.getFocusedElements()[0], _options.identityProvider);\n        this.selection = new Trait(() => this.view.getSelectedElements()[0], _options.identityProvider);\n        this.anchor = new Trait(() => this.view.getAnchorElement(), _options.identityProvider);\n        this.view = new TreeNodeList(_user, container, this.treeDelegate, this.renderers, this.focus, this.selection, this.anchor, { ...asListOptions(() => this.model, _options), tree: this, stickyScrollProvider: () => this.stickyScrollController });\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        }, this.disposables);\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        const activeNodesEmitter = this.disposables.add(new Emitter());\n        const activeNodesDebounce = this.disposables.add(new Delayer(0));\n        this.disposables.add(Event.any(onDidModelSplice, this.focus.onDidChange, this.selection.onDidChange)(() => {\n            activeNodesDebounce.trigger(() => {\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                activeNodesEmitter.fire([...set.values()]);\n            });\n        }));\n        onDidChangeActiveNodes.input = activeNodesEmitter.event;\n        if (_options.keyboardSupport !== false) {\n            const onKeyDown = Event.chain(this.view.onKeyDown, $ => $.filter(e => !isInputElement(e.target))\n                .map(e => new StandardKeyboardEvent(e)));\n            Event.chain(onKeyDown, $ => $.filter(e => e.keyCode === 15 /* KeyCode.LeftArrow */))(this.onLeftArrow, this, this.disposables);\n            Event.chain(onKeyDown, $ => $.filter(e => e.keyCode === 17 /* KeyCode.RightArrow */))(this.onRightArrow, this, this.disposables);\n            Event.chain(onKeyDown, $ => $.filter(e => e.keyCode === 10 /* KeyCode.Space */))(this.onSpace, this, this.disposables);\n        }\n        if ((_options.findWidgetEnabled ?? true) && _options.keyboardNavigationLabelProvider && _options.contextViewProvider) {\n            const opts = this.options.findWidgetStyles ? { styles: this.options.findWidgetStyles } : undefined;\n            this.findController = new FindController(this, this.model, this.view, filter, _options.contextViewProvider, opts);\n            this.focusNavigationFilter = node => this.findController.shouldAllowFocus(node);\n            this.onDidChangeFindOpenState = this.findController.onDidChangeOpenState;\n            this.disposables.add(this.findController);\n            this.onDidChangeFindMode = this.findController.onDidChangeMode;\n            this.onDidChangeFindMatchType = this.findController.onDidChangeMatchType;\n        }\n        else {\n            this.onDidChangeFindMode = Event.None;\n            this.onDidChangeFindMatchType = Event.None;\n        }\n        if (_options.enableStickyScroll) {\n            this.stickyScrollController = new StickyScrollController(this, this.model, this.view, this.renderers, this.treeDelegate, _options);\n            this.onDidChangeStickyScrollFocused = this.stickyScrollController.onDidChangeHasFocus;\n        }\n        this.styleElement = createStyleSheet(this.view.getHTMLElement());\n        this.getHTMLElement().classList.toggle('always', this._options.renderIndentGuides === RenderIndentGuides.Always);\n    }\n    updateOptions(optionsUpdate = {}) {\n        this._options = { ...this._options, ...optionsUpdate };\n        for (const renderer of this.renderers) {\n            renderer.updateOptions(optionsUpdate);\n        }\n        this.view.updateOptions(this._options);\n        this.findController?.updateOptions(optionsUpdate);\n        this.updateStickyScroll(optionsUpdate);\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    updateStickyScroll(optionsUpdate) {\n        if (!this.stickyScrollController && this._options.enableStickyScroll) {\n            this.stickyScrollController = new StickyScrollController(this, this.model, this.view, this.renderers, this.treeDelegate, this._options);\n            this.onDidChangeStickyScrollFocused = this.stickyScrollController.onDidChangeHasFocus;\n        }\n        else if (this.stickyScrollController && !this._options.enableStickyScroll) {\n            this.onDidChangeStickyScrollFocused = Event.None;\n            this.stickyScrollController.dispose();\n            this.stickyScrollController = undefined;\n        }\n        this.stickyScrollController?.updateOptions(optionsUpdate);\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    get scrollHeight() {\n        return this.view.scrollHeight;\n    }\n    get renderHeight() {\n        return this.view.renderHeight;\n    }\n    get ariaLabel() {\n        return this.view.ariaLabel;\n    }\n    set ariaLabel(value) {\n        this.view.ariaLabel = value;\n    }\n    domFocus() {\n        if (this.stickyScrollController?.focusedLast()) {\n            this.stickyScrollController.domFocus();\n        }\n        else {\n            this.view.domFocus();\n        }\n    }\n    layout(height, width) {\n        this.view.layout(height, width);\n        if (isNumber(width)) {\n            this.findController?.layout(width);\n        }\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.treeInactiveIndentGuidesStroke}; }`);\n            content.push(`.monaco-list${suffix} .monaco-tl-indent > .indent-guide.active { border-color: ${styles.treeIndentGuidesStroke}; }`);\n        }\n        // Sticky Scroll Background\n        const stickyScrollBackground = styles.treeStickyScrollBackground ?? styles.listBackground;\n        if (stickyScrollBackground) {\n            content.push(`.monaco-list${suffix} .monaco-scrollable-element .monaco-tree-sticky-container { background-color: ${stickyScrollBackground}; }`);\n            content.push(`.monaco-list${suffix} .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-row { background-color: ${stickyScrollBackground}; }`);\n        }\n        // Sticky Scroll Border\n        if (styles.treeStickyScrollBorder) {\n            content.push(`.monaco-list${suffix} .monaco-scrollable-element .monaco-tree-sticky-container { border-bottom: 1px solid ${styles.treeStickyScrollBorder}; }`);\n        }\n        // Sticky Scroll Shadow\n        if (styles.treeStickyScrollShadow) {\n            content.push(`.monaco-list${suffix} .monaco-scrollable-element .monaco-tree-sticky-container .monaco-tree-sticky-container-shadow { box-shadow: ${styles.treeStickyScrollShadow} 0 6px 6px -6px inset; height: 3px; }`);\n        }\n        // Sticky Scroll Focus\n        if (styles.listFocusForeground) {\n            content.push(`.monaco-list${suffix}.sticky-scroll-focused .monaco-scrollable-element .monaco-tree-sticky-container:focus .monaco-list-row.focused { color: ${styles.listFocusForeground}; }`);\n            content.push(`.monaco-list${suffix}:not(.sticky-scroll-focused) .monaco-scrollable-element .monaco-tree-sticky-container .monaco-list-row.focused { color: inherit; }`);\n        }\n        // Sticky Scroll Focus Outlines\n        const focusAndSelectionOutline = asCssValueWithDefault(styles.listFocusAndSelectionOutline, asCssValueWithDefault(styles.listSelectionOutline, styles.listFocusOutline ?? ''));\n        if (focusAndSelectionOutline) { // default: listFocusOutline\n            content.push(`.monaco-list${suffix}.sticky-scroll-focused .monaco-scrollable-element .monaco-tree-sticky-container:focus .monaco-list-row.focused.selected { outline: 1px solid ${focusAndSelectionOutline}; outline-offset: -1px;}`);\n            content.push(`.monaco-list${suffix}:not(.sticky-scroll-focused) .monaco-scrollable-element .monaco-tree-sticky-container .monaco-list-row.focused.selected { outline: inherit;}`);\n        }\n        if (styles.listFocusOutline) { // default: set\n            content.push(`.monaco-list${suffix}.sticky-scroll-focused .monaco-scrollable-element .monaco-tree-sticky-container:focus .monaco-list-row.focused { outline: 1px solid ${styles.listFocusOutline}; outline-offset: -1px; }`);\n            content.push(`.monaco-list${suffix}:not(.sticky-scroll-focused) .monaco-scrollable-element .monaco-tree-sticky-container .monaco-list-row.focused { outline: inherit; }`);\n            content.push(`.monaco-workbench.context-menu-visible .monaco-list${suffix}.last-focused.sticky-scroll-focused .monaco-scrollable-element .monaco-tree-sticky-container .monaco-list-row.passive-focused { outline: 1px solid ${styles.listFocusOutline}; outline-offset: -1px; }`);\n            content.push(`.monaco-workbench.context-menu-visible .monaco-list${suffix}.last-focused.sticky-scroll-focused .monaco-list-rows .monaco-list-row.focused { outline: inherit; }`);\n            content.push(`.monaco-workbench.context-menu-visible .monaco-list${suffix}.last-focused:not(.sticky-scroll-focused) .monaco-tree-sticky-container .monaco-list-rows .monaco-list-row.focused { outline: inherit; }`);\n        }\n        this.styleElement.textContent = content.join('\\n');\n        this.view.style(styles);\n    }\n    // Tree navigation\n    getParentElement(location) {\n        const parentRef = this.model.getParentNodeLocation(location);\n        const parentNode = this.model.getNode(parentRef);\n        return parentNode.element;\n    }\n    getFirstElementChild(location) {\n        return this.model.getFirstElementChild(location);\n    }\n    // Tree\n    getNode(location) {\n        return this.model.getNode(location);\n    }\n    getNodeLocation(node) {\n        return this.model.getNodeLocation(node);\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    toggleCollapsed(location, recursive = false) {\n        return this.model.setCollapsed(location, undefined, 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        this.eventBufferer.bufferEvents(() => {\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    }\n    getSelection() {\n        return this.selection.get();\n    }\n    setFocus(elements, browserEvent) {\n        this.eventBufferer.bufferEvents(() => {\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    }\n    focusNext(n = 1, loop = false, browserEvent, filter = (isKeyboardEvent(browserEvent) && browserEvent.altKey) ? undefined : this.focusNavigationFilter) {\n        this.view.focusNext(n, loop, browserEvent, filter);\n    }\n    focusPrevious(n = 1, loop = false, browserEvent, filter = (isKeyboardEvent(browserEvent) && browserEvent.altKey) ? undefined : this.focusNavigationFilter) {\n        this.view.focusPrevious(n, loop, browserEvent, filter);\n    }\n    focusNextPage(browserEvent, filter = (isKeyboardEvent(browserEvent) && browserEvent.altKey) ? undefined : this.focusNavigationFilter) {\n        return this.view.focusNextPage(browserEvent, filter);\n    }\n    focusPreviousPage(browserEvent, filter = (isKeyboardEvent(browserEvent) && browserEvent.altKey) ? undefined : this.focusNavigationFilter) {\n        return this.view.focusPreviousPage(browserEvent, filter, () => this.stickyScrollController?.height ?? 0);\n    }\n    focusLast(browserEvent, filter = (isKeyboardEvent(browserEvent) && browserEvent.altKey) ? undefined : this.focusNavigationFilter) {\n        this.view.focusLast(browserEvent, filter);\n    }\n    focusFirst(browserEvent, filter = (isKeyboardEvent(browserEvent) && browserEvent.altKey) ? undefined : this.focusNavigationFilter) {\n        this.view.focusFirst(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        if (!this.stickyScrollController) {\n            this.view.reveal(index, relativeTop);\n        }\n        else {\n            const paddingTop = this.stickyScrollController.nodePositionTopBelowWidget(this.getNode(location));\n            this.view.reveal(index, relativeTop, paddingTop);\n        }\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.stickyScrollController?.dispose();\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 { IndexTreeModel } from './indexTreeModel.js';\nimport { ObjectTreeElementCollapseState, TreeError } from './tree.js';\nimport { Iterable } from '../../../common/iterator.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            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            options.onDidCreateNode?.(tnode);\n        };\n        const onDidDeleteNode = (node) => {\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            options.onDidDeleteNode?.(tnode);\n        };\n        this.model.splice([...location, 0], Number.MAX_VALUE, children, { ...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                let collapsed;\n                if (typeof treeElement.collapsed === 'undefined') {\n                    collapsed = undefined;\n                }\n                else if (treeElement.collapsed === ObjectTreeElementCollapseState.Collapsed || treeElement.collapsed === ObjectTreeElementCollapseState.PreserveOrCollapsed) {\n                    collapsed = true;\n                }\n                else if (treeElement.collapsed === ObjectTreeElementCollapseState.Expanded || treeElement.collapsed === ObjectTreeElementCollapseState.PreserveOrExpanded) {\n                    collapsed = false;\n                }\n                else {\n                    collapsed = Boolean(treeElement.collapsed);\n                }\n                return {\n                    ...treeElement,\n                    children: this.preserveCollapseState(treeElement.children),\n                    collapsed\n                };\n            }\n            const collapsible = typeof treeElement.collapsible === 'boolean' ? treeElement.collapsible : node.collapsible;\n            let collapsed;\n            if (typeof treeElement.collapsed === 'undefined' || treeElement.collapsed === ObjectTreeElementCollapseState.PreserveOrCollapsed || treeElement.collapsed === ObjectTreeElementCollapseState.PreserveOrExpanded) {\n                collapsed = node.collapsed;\n            }\n            else if (treeElement.collapsed === ObjectTreeElementCollapseState.Collapsed) {\n                collapsed = true;\n            }\n            else if (treeElement.collapsed === ObjectTreeElementCollapseState.Expanded) {\n                collapsed = false;\n            }\n            else {\n                collapsed = Boolean(treeElement.collapsed);\n            }\n            return {\n                ...treeElement,\n                collapsible,\n                collapsed,\n                children: this.preserveCollapseState(treeElement.children)\n            };\n        });\n    }\n    rerender(element) {\n        const location = this.getElementLocation(element);\n        this.model.rerender(location);\n    }\n    getFirstElementChild(ref = null) {\n        const location = this.getElementLocation(ref);\n        return this.model.getFirstElementChild(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 { ObjectTreeModel } from './objectTreeModel.js';\nimport { TreeError, WeakMapper } from './tree.js';\nimport { equals } from '../../../common/arrays.js';\nimport { Event } from '../../../common/event.js';\nimport { Iterable } from '../../../common/iterator.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 { ...treeElement, children };\n    }\n    return { ...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    get onDidSplice() { return this.model.onDidSplice; }\n    get onDidChangeCollapseState() { return this.model.onDidChangeCollapseState; }\n    get onDidChangeRenderNodeCount() { return this.model.onDidChangeRenderNodeCount; }\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    setChildren(element, children = Iterable.empty(), options) {\n        // Diffs must be deep, 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 TreeError(this.user, '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        // If the recompressed node is identical to the original, just set its children.\n        // Saves work and churn diffing the parent element.\n        const elementComparator = options.diffIdentityProvider\n            ? ((a, b) => options.diffIdentityProvider.getId(a) === options.diffIdentityProvider.getId(b))\n            : undefined;\n        if (equals(recompressedElement.element.elements, node.element.elements, elementComparator)) {\n            this._setChildren(compressedNode, recompressedElement.children || Iterable.empty(), { diffIdentityProvider, diffDepth: 1 });\n            return;\n        }\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    isCompressionEnabled() {\n        return this.enabled;\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, { ...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    getFirstElementChild(location) {\n        const compressedNode = this.getCompressedNode(location);\n        return this.model.getFirstElementChild(compressedNode);\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    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    constructor(unwrapper, node) {\n        this.unwrapper = unwrapper;\n        this.node = node;\n    }\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 {\n        ...options,\n        identityProvider: options.identityProvider && {\n            getId(node) {\n                return options.identityProvider.getId(compressedNodeUnwrapper(node));\n            }\n        },\n        sorter: options.sorter && {\n            compare(node, otherNode) {\n                return options.sorter.compare(node.elements[0], otherNode.elements[0]);\n            }\n        },\n        filter: options.filter && {\n            filter(node, parentVisibility) {\n                return options.filter.filter(compressedNodeUnwrapper(node), parentVisibility);\n            }\n        }\n    };\n}\nexport class CompressibleObjectTreeModel {\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    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    setChildren(element, children = Iterable.empty(), options = {}) {\n        this.model.setChildren(element, children, options);\n    }\n    isCompressionEnabled() {\n        return this.model.isCompressionEnabled();\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    getFirstElementChild(location) {\n        const result = this.model.getFirstElementChild(location);\n        if (result === null || typeof result === 'undefined') {\n            return result;\n        }\n        return this.elementMapper(result.elements);\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 { AbstractTree } from './abstractTree.js';\nimport { CompressibleObjectTreeModel } from './compressedObjectTreeModel.js';\nimport { ObjectTreeModel } from './objectTreeModel.js';\nimport { memoize } from '../../../common/decorators.js';\nimport { Iterable } from '../../../common/iterator.js';\nexport class ObjectTree extends AbstractTree {\n    get onDidChangeCollapseState() { return this.model.onDidChangeCollapseState; }\n    constructor(user, container, delegate, renderers, options = {}) {\n        super(user, container, delegate, renderers, options);\n        this.user = user;\n    }\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    get compressedTreeNodeProvider() {\n        return this._compressedTreeNodeProvider();\n    }\n    constructor(_compressedTreeNodeProvider, stickyScrollDelegate, renderer) {\n        this._compressedTreeNodeProvider = _compressedTreeNodeProvider;\n        this.stickyScrollDelegate = stickyScrollDelegate;\n        this.renderer = renderer;\n        this.templateId = renderer.templateId;\n        if (renderer.onDidChangeTwistieState) {\n            this.onDidChangeTwistieState = renderer.onDidChangeTwistieState;\n        }\n    }\n    renderTemplate(container) {\n        const data = this.renderer.renderTemplate(container);\n        return { compressedTreeNode: undefined, data };\n    }\n    renderElement(node, index, templateData, height) {\n        let compressedTreeNode = this.stickyScrollDelegate.getCompressedNode(node);\n        if (!compressedTreeNode) {\n            compressedTreeNode = this.compressedTreeNodeProvider.getCompressedTreeNode(node.element);\n        }\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            this.renderer.disposeCompressedElements?.(templateData.compressedTreeNode, index, templateData.data, height);\n        }\n        else {\n            this.renderer.disposeElement?.(node, index, templateData.data, height);\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);\nclass CompressibleStickyScrollDelegate {\n    constructor(modelProvider) {\n        this.modelProvider = modelProvider;\n        this.compressedStickyNodes = new Map();\n    }\n    getCompressedNode(node) {\n        return this.compressedStickyNodes.get(node);\n    }\n    constrainStickyScrollNodes(stickyNodes, stickyScrollMaxItemCount, maxWidgetHeight) {\n        this.compressedStickyNodes.clear();\n        if (stickyNodes.length === 0) {\n            return [];\n        }\n        for (let i = 0; i < stickyNodes.length; i++) {\n            const stickyNode = stickyNodes[i];\n            const stickyNodeBottom = stickyNode.position + stickyNode.height;\n            const followingReachesMaxHeight = i + 1 < stickyNodes.length && stickyNodeBottom + stickyNodes[i + 1].height > maxWidgetHeight;\n            if (followingReachesMaxHeight || i >= stickyScrollMaxItemCount - 1 && stickyScrollMaxItemCount < stickyNodes.length) {\n                const uncompressedStickyNodes = stickyNodes.slice(0, i);\n                const overflowingStickyNodes = stickyNodes.slice(i);\n                const compressedStickyNode = this.compressStickyNodes(overflowingStickyNodes);\n                return [...uncompressedStickyNodes, compressedStickyNode];\n            }\n        }\n        return stickyNodes;\n    }\n    compressStickyNodes(stickyNodes) {\n        if (stickyNodes.length === 0) {\n            throw new Error('Can\\'t compress empty sticky nodes');\n        }\n        const compressionModel = this.modelProvider();\n        if (!compressionModel.isCompressionEnabled()) {\n            return stickyNodes[0];\n        }\n        // Collect all elements to be compressed\n        const elements = [];\n        for (let i = 0; i < stickyNodes.length; i++) {\n            const stickyNode = stickyNodes[i];\n            const compressedNode = compressionModel.getCompressedTreeNode(stickyNode.node.element);\n            if (compressedNode.element) {\n                // if an element is incompressible, it can't be compressed with it's parent element\n                if (i !== 0 && compressedNode.element.incompressible) {\n                    break;\n                }\n                elements.push(...compressedNode.element.elements);\n            }\n        }\n        if (elements.length < 2) {\n            return stickyNodes[0];\n        }\n        // Compress the elements\n        const lastStickyNode = stickyNodes[stickyNodes.length - 1];\n        const compressedElement = { elements, incompressible: false };\n        const compressedNode = { ...lastStickyNode.node, children: [], element: compressedElement };\n        const stickyTreeNode = new Proxy(stickyNodes[0].node, {});\n        const compressedStickyNode = {\n            node: stickyTreeNode,\n            startIndex: stickyNodes[0].startIndex,\n            endIndex: lastStickyNode.endIndex,\n            position: stickyNodes[0].position,\n            height: stickyNodes[0].height,\n        };\n        this.compressedStickyNodes.set(stickyTreeNode, compressedNode);\n        return compressedStickyNode;\n    }\n}\nfunction asObjectTreeOptions(compressedTreeNodeProvider, options) {\n    return options && {\n        ...options,\n        keyboardNavigationLabelProvider: options.keyboardNavigationLabelProvider && {\n            getKeyboardNavigationLabel(e) {\n                let compressedTreeNode;\n                try {\n                    compressedTreeNode = compressedTreeNodeProvider().getCompressedTreeNode(e);\n                }\n                catch {\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    };\n}\nexport class CompressibleObjectTree extends ObjectTree {\n    constructor(user, container, delegate, renderers, options = {}) {\n        const compressedTreeNodeProvider = () => this;\n        const stickyScrollDelegate = new CompressibleStickyScrollDelegate(() => this.model);\n        const compressibleRenderers = renderers.map(r => new CompressibleRenderer(compressedTreeNodeProvider, stickyScrollDelegate, r));\n        super(user, container, delegate, compressibleRenderers, { ...asObjectTreeOptions(compressedTreeNodeProvider, options), stickyScrollDelegate });\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 *--------------------------------------------------------------------------------------------*/\nimport { ElementsDragAndDropData } from '../list/listView.js';\nimport { ComposedTreeDelegate } from './abstractTree.js';\nimport { getVisibleState, isFilterResult } from './indexTreeModel.js';\nimport { CompressibleObjectTree, ObjectTree } from './objectTree.js';\nimport { ObjectTreeElementCollapseState, TreeError, WeakMapper } from './tree.js';\nimport { createCancelablePromise, Promises, timeout } from '../../../common/async.js';\nimport { Codicon } from '../../../common/codicons.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { isCancellationError, onUnexpectedError } from '../../../common/errors.js';\nimport { Emitter, Event } from '../../../common/event.js';\nimport { Iterable } from '../../../common/iterator.js';\nimport { DisposableStore, dispose } from '../../../common/lifecycle.js';\nimport { isIterable } from '../../../common/types.js';\nfunction createAsyncDataTreeNode(props) {\n    return {\n        ...props,\n        children: [],\n        refreshPromise: undefined,\n        stale: true,\n        slow: false,\n        forceExpanded: false\n    };\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    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    constructor(node) {\n        this.node = node;\n    }\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(...ThemeIcon.asClassNameArray(Codicon.treeItemLoading));\n            return true;\n        }\n        else {\n            twistieElement.classList.remove(...ThemeIcon.asClassNameArray(Codicon.treeItemLoading));\n            return false;\n        }\n    }\n    disposeElement(node, index, templateData, height) {\n        this.renderer.disposeElement?.(this.nodeMapper.map(node), index, templateData.templateData, height);\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        this.dnd.onDragStart?.(asAsyncDataTreeDragAndDropData(data), originalEvent);\n    }\n    onDragOver(data, targetNode, targetIndex, targetSector, originalEvent, raw = true) {\n        return this.dnd.onDragOver(asAsyncDataTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, targetSector, originalEvent);\n    }\n    drop(data, targetNode, targetIndex, targetSector, originalEvent) {\n        this.dnd.drop(asAsyncDataTreeDragAndDropData(data), targetNode && targetNode.element, targetIndex, targetSector, originalEvent);\n    }\n    onDragEnd(originalEvent) {\n        this.dnd.onDragEnd?.(originalEvent);\n    }\n    dispose() {\n        this.dnd.dispose();\n    }\n}\nfunction asObjectTreeOptions(options) {\n    return options && {\n        ...options,\n        collapseByDefault: true,\n        identityProvider: options.identityProvider && {\n            getId(el) {\n                return options.identityProvider.getId(el.element);\n            }\n        },\n        dnd: options.dnd && new AsyncDataTreeNodeListDragAndDrop(options.dnd),\n        multipleSelectionController: options.multipleSelectionController && {\n            isSelectionSingleChangeEvent(e) {\n                return options.multipleSelectionController.isSelectionSingleChangeEvent({ ...e, element: e.element });\n            },\n            isSelectionRangeChangeEvent(e) {\n                return options.multipleSelectionController.isSelectionRangeChangeEvent({ ...e, element: e.element });\n            }\n        },\n        accessibilityProvider: options.accessibilityProvider && {\n            ...options.accessibilityProvider,\n            getPosInSet: undefined,\n            getSetSize: undefined,\n            getRole: options.accessibilityProvider.getRole ? (el) => {\n                return options.accessibilityProvider.getRole(el.element);\n            } : () => 'treeitem',\n            isChecked: options.accessibilityProvider.isChecked ? (e) => {\n                return !!(options.accessibilityProvider?.isChecked(e.element));\n            } : undefined,\n            getAriaLabel(e) {\n                return options.accessibilityProvider.getAriaLabel(e.element);\n            },\n            getWidgetAriaLabel() {\n                return options.accessibilityProvider.getWidgetAriaLabel();\n            },\n            getWidgetRole: options.accessibilityProvider.getWidgetRole ? () => options.accessibilityProvider.getWidgetRole() : () => 'tree',\n            getAriaLevel: options.accessibilityProvider.getAriaLevel && (node => {\n                return options.accessibilityProvider.getAriaLevel(node.element);\n            }),\n            getActiveDescendantId: options.accessibilityProvider.getActiveDescendantId && (node => {\n                return options.accessibilityProvider.getActiveDescendantId(node.element);\n            })\n        },\n        filter: options.filter && {\n            filter(e, parentVisibility) {\n                return options.filter.filter(e.element, parentVisibility);\n            }\n        },\n        keyboardNavigationLabelProvider: options.keyboardNavigationLabelProvider && {\n            ...options.keyboardNavigationLabelProvider,\n            getKeyboardNavigationLabel(e) {\n                return options.keyboardNavigationLabelProvider.getKeyboardNavigationLabel(e.element);\n            }\n        },\n        sorter: undefined,\n        expandOnlyOnTwistieClick: typeof options.expandOnlyOnTwistieClick === 'undefined' ? undefined : (typeof options.expandOnlyOnTwistieClick !== 'function' ? options.expandOnlyOnTwistieClick : (e => options.expandOnlyOnTwistieClick(e.element))),\n        defaultFindVisibility: e => {\n            if (e.hasChildren && e.stale) {\n                return 1 /* TreeVisibility.Visible */;\n            }\n            else if (typeof options.defaultFindVisibility === 'number') {\n                return options.defaultFindVisibility;\n            }\n            else if (typeof options.defaultFindVisibility === 'undefined') {\n                return 2 /* TreeVisibility.Recurse */;\n            }\n            else {\n                return options.defaultFindVisibility(e.element);\n            }\n        }\n    };\n}\nfunction dfs(node, fn) {\n    fn(node);\n    node.children.forEach(child => dfs(child, fn));\n}\nexport class AsyncDataTree {\n    get onDidScroll() { return this.tree.onDidScroll; }\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    /**\n     * To be used internally only!\n     * @deprecated\n     */\n    get onDidChangeModel() { return this.tree.onDidChangeModel; }\n    get onDidChangeCollapseState() { return this.tree.onDidChangeCollapseState; }\n    get onDidChangeFindOpenState() { return this.tree.onDidChangeFindOpenState; }\n    get onDidChangeStickyScrollFocused() { return this.tree.onDidChangeStickyScrollFocused; }\n    get onDidDispose() { return this.tree.onDidDispose; }\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.getDefaultCollapseState = e => options.collapseByDefault ? (options.collapseByDefault(e) ? ObjectTreeElementCollapseState.PreserveOrCollapsed : ObjectTreeElementCollapseState.PreserveOrExpanded) : undefined;\n        this.tree = this.createTree(user, container, delegate, renderers, options);\n        this.onDidChangeFindMode = this.tree.onDidChangeFindMode;\n        this.onDidChangeFindMatchType = this.tree.onDidChangeFindMatchType;\n        this.root = createAsyncDataTreeNode({\n            element: undefined,\n            parent: null,\n            hasChildren: true,\n            defaultCollapseState: undefined\n        });\n        if (this.identityProvider) {\n            this.root = {\n                ...this.root,\n                id: null\n            };\n        }\n        this.nodes.set(null, this.root);\n        this.tree.onDidChangeCollapseState(this._onDidChangeCollapseState, this, this.disposables);\n    }\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    get scrollHeight() {\n        return this.tree.scrollHeight;\n    }\n    get renderHeight() {\n        return this.tree.renderHeight;\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    async setInput(input, viewState) {\n        this.refreshPromises.forEach(promise => promise.cancel());\n        this.refreshPromises.clear();\n        this.root.element = input;\n        const viewStateContext = viewState && { viewState, focus: [], selection: [] };\n        await 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    async _updateChildren(element = this.root.element, recursive = true, rerender = false, viewStateContext, options) {\n        if (typeof this.root.element === 'undefined') {\n            throw new TreeError(this.user, 'Tree input not set');\n        }\n        if (this.root.refreshPromise) {\n            await this.root.refreshPromise;\n            await Event.toPromise(this._onDidRender.event);\n        }\n        const node = this.getDataNode(element);\n        await this.refreshAndRenderNode(node, recursive, viewStateContext, options);\n        if (rerender) {\n            try {\n                this.tree.rerender(node);\n            }\n            catch {\n                // missing nodes are fine, this could've resulted from\n                // parallel refresh calls, removing `node` altogether\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    // Tree\n    getNode(element = this.root.element) {\n        const dataNode = this.getDataNode(element);\n        const node = this.tree.getNode(dataNode === this.root ? null : dataNode);\n        return this.nodeMapper.map(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    async expand(element, recursive = false) {\n        if (typeof this.root.element === 'undefined') {\n            throw new TreeError(this.user, 'Tree input not set');\n        }\n        if (this.root.refreshPromise) {\n            await this.root.refreshPromise;\n            await 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            await this.root.refreshPromise;\n            await 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            await this.root.refreshPromise;\n            await Event.toPromise(this._onDidRender.event);\n        }\n        return result;\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    // Tree navigation\n    getParentElement(element) {\n        const node = this.tree.getParentElement(this.getDataNode(element));\n        return (node && node.element);\n    }\n    getFirstElementChild(element = this.root.element) {\n        const dataNode = this.getDataNode(element);\n        const node = this.tree.getFirstElementChild(dataNode === this.root ? null : dataNode);\n        return (node && node.element);\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    async refreshAndRenderNode(node, recursive, viewStateContext, options) {\n        await this.refreshNode(node, recursive, viewStateContext);\n        if (this.disposables.isDisposed) {\n            return; // tree disposed during refresh (#199264)\n        }\n        this.render(node, viewStateContext, options);\n    }\n    async refreshNode(node, recursive, viewStateContext) {\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        if (node !== this.root) {\n            const treeNode = this.tree.getNode(node);\n            if (treeNode.collapsed) {\n                node.hasChildren = !!this.dataSource.hasChildren(node.element);\n                node.stale = true;\n                this.setChildren(node, [], recursive, viewStateContext);\n                return;\n            }\n        }\n        return this.doRefreshSubTree(node, recursive, viewStateContext);\n    }\n    async doRefreshSubTree(node, recursive, viewStateContext) {\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 = await this.doRefreshNode(node, recursive, viewStateContext);\n            node.stale = false;\n            await Promises.settled(childrenToRefresh.map(child => this.doRefreshSubTree(child, recursive, viewStateContext)));\n        }\n        finally {\n            done();\n        }\n    }\n    async doRefreshNode(node, recursive, viewStateContext) {\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 children = this.doGetChildren(node);\n            if (isIterable(children)) {\n                childrenPromise = Promise.resolve(children);\n            }\n            else {\n                const slowTimeout = timeout(800);\n                slowTimeout.then(() => {\n                    node.slow = true;\n                    this._onDidChangeNodeSlowState.fire(node);\n                }, _ => null);\n                childrenPromise = children.finally(() => slowTimeout.cancel());\n            }\n        }\n        try {\n            const children = await 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 (isCancellationError(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    doGetChildren(node) {\n        let result = this.refreshPromises.get(node);\n        if (result) {\n            return result;\n        }\n        const children = this.dataSource.getChildren(node.element);\n        if (isIterable(children)) {\n            return this.processChildren(children);\n        }\n        else {\n            result = createCancelablePromise(async () => this.processChildren(await children));\n            this.refreshPromises.set(node, result);\n            return result.finally(() => { this.refreshPromises.delete(node); });\n        }\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                childrenTreeNodesById.set(child.id, { node: child, collapsed: this.tree.hasElement(child) && this.tree.isCollapsed(child) });\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, defaultCollapseState: this.getDefaultCollapseState(element) });\n                if (hasChildren && asyncDataTreeNode.defaultCollapseState === ObjectTreeElementCollapseState.PreserveOrExpanded) {\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 && !result.collapsed) {\n                    childrenToRefresh.push(asyncDataTreeNode);\n                }\n                return asyncDataTreeNode;\n            }\n            const childAsyncDataTreeNode = createAsyncDataTreeNode({ element, parent: node, id, hasChildren, defaultCollapseState: this.getDefaultCollapseState(element) });\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 && childAsyncDataTreeNode.defaultCollapseState === ObjectTreeElementCollapseState.PreserveOrExpanded) {\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].forceExpanded = true;\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 && {\n            ...options,\n            diffIdentityProvider: options.diffIdentityProvider && {\n                getId(node) {\n                    return options.diffIdentityProvider.getId(node.element);\n                }\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 if (node.forceExpanded) {\n            collapsed = false;\n            node.forceExpanded = false;\n        }\n        else {\n            collapsed = node.defaultCollapseState;\n        }\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        this.tree.dispose();\n    }\n}\nclass CompressibleAsyncDataTreeNodeWrapper {\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    constructor(node) {\n        this.node = node;\n    }\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(...ThemeIcon.asClassNameArray(Codicon.treeItemLoading));\n            return true;\n        }\n        else {\n            twistieElement.classList.remove(...ThemeIcon.asClassNameArray(Codicon.treeItemLoading));\n            return false;\n        }\n    }\n    disposeElement(node, index, templateData, height) {\n        this.renderer.disposeElement?.(this.nodeMapper.map(node), index, templateData.templateData, height);\n    }\n    disposeCompressedElements(node, index, templateData, height) {\n        this.renderer.disposeCompressedElements?.(this.compressibleNodeMapperProvider().map(node), index, templateData.templateData, height);\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 && {\n        ...objectTreeOptions,\n        keyboardNavigationLabelProvider: objectTreeOptions.keyboardNavigationLabelProvider && {\n            ...objectTreeOptions.keyboardNavigationLabelProvider,\n            getCompressedNodeKeyboardNavigationLabel(els) {\n                return options.keyboardNavigationLabelProvider.getCompressedNodeKeyboardNavigationLabel(els.map(e => e.element));\n            }\n        }\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 {\n            incompressible: this.compressionDelegate.isIncompressible(node.element),\n            ...super.asTreeElement(node, viewStateContext)\n        };\n    }\n    updateOptions(options = {}) {\n        this.tree.updateOptions(options);\n    }\n    render(node, viewStateContext, options) {\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, options);\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 /* TreeVisibility.Visible */);\n                const visibility = getVisibility(result);\n                if (visibility === 2 /* TreeVisibility.Recurse */) {\n                    throw new Error('Recursive tree visibility not supported in async data compressed trees');\n                }\n                return visibility === 1 /* TreeVisibility.Visible */;\n            });\n        }\n        return super.processChildren(children);\n    }\n}\nfunction getVisibility(filterResult) {\n    if (typeof filterResult === 'boolean') {\n        return filterResult ? 1 /* TreeVisibility.Visible */ : 0 /* TreeVisibility.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 { isIOS, isLinux, isMacintosh, isMobile, isWeb, isWindows } from '../../../base/common/platform.js';\nimport { localize } from '../../../nls.js';\nimport { RawContextKey } from './contextkey.js';\nexport const IsMacContext = new RawContextKey('isMac', isMacintosh, localize('isMac', \"Whether the operating system is macOS\"));\nexport const IsLinuxContext = new RawContextKey('isLinux', isLinux, localize('isLinux', \"Whether the operating system is Linux\"));\nexport const IsWindowsContext = new RawContextKey('isWindows', isWindows, localize('isWindows', \"Whether the operating system is Windows\"));\nexport const IsWebContext = new RawContextKey('isWeb', isWeb, localize('isWeb', \"Whether the platform is a web browser\"));\nexport const IsMacNativeContext = new RawContextKey('isMacNative', isMacintosh && !isWeb, localize('isMacNative', \"Whether the operating system is macOS on a non-browser platform\"));\nexport const IsIOSContext = new RawContextKey('isIOS', isIOS, localize('isIOS', \"Whether the operating system is iOS\"));\nexport const IsMobileContext = new RawContextKey('isMobile', isMobile, localize('isMobile', \"Whether the platform is a mobile web browser\"));\nexport const IsDevelopmentContext = new RawContextKey('isDevelopment', false, true);\nexport const ProductQualityContext = new RawContextKey('productQualityType', '', localize('productQualityType', \"Quality type of VS Code\"));\nexport const InputFocusedContextKey = 'inputFocus';\nexport const InputFocusedContext = new RawContextKey(InputFocusedContextKey, false, localize('inputFocus', \"Whether keyboard focus is inside an input box\"));\n","/*---------------------------------------------------------------------------------------------\n *  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, isActiveElement, isKeyboardEvent } from '../../../base/browser/dom.js';\nimport { PagedList } from '../../../base/browser/ui/list/listPaging.js';\nimport { DefaultStyleController, isSelectionRangeChangeEvent, isSelectionSingleChangeEvent, List, TypeNavigationMode } from '../../../base/browser/ui/list/listWidget.js';\nimport { Table } from '../../../base/browser/ui/table/tableWidget.js';\nimport { TreeFindMode, TreeFindMatchType } from '../../../base/browser/ui/tree/abstractTree.js';\nimport { AsyncDataTree, CompressibleAsyncDataTree } from '../../../base/browser/ui/tree/asyncDataTree.js';\nimport { DataTree } from '../../../base/browser/ui/tree/dataTree.js';\nimport { CompressibleObjectTree, ObjectTree } from '../../../base/browser/ui/tree/objectTree.js';\nimport { Emitter, Event } from '../../../base/common/event.js';\nimport { combinedDisposable, Disposable, DisposableStore, dispose, toDisposable } 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 { InputFocusedContextKey } from '../../contextkey/common/contextkeys.js';\nimport { IContextViewService } from '../../contextview/browser/contextView.js';\nimport { createDecorator, IInstantiationService } from '../../instantiation/common/instantiation.js';\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\nimport { Registry } from '../../registry/common/platform.js';\nimport { defaultFindWidgetStyles, defaultListStyles, getListStyles } from '../../theme/browser/defaultStyles.js';\nexport const IListService = createDecorator('listService');\nexport class ListService {\n    get lastFocusedList() {\n        return this._lastFocusedWidget;\n    }\n    constructor() {\n        this.disposables = new DisposableStore();\n        this.lists = [];\n        this._lastFocusedWidget = undefined;\n        this._hasCreatedStyleController = false;\n    }\n    setLastFocusedList(widget) {\n        if (widget === this._lastFocusedWidget) {\n            return;\n        }\n        this._lastFocusedWidget?.getHTMLElement().classList.remove('last-focused');\n        this._lastFocusedWidget = widget;\n        this._lastFocusedWidget?.getHTMLElement().classList.add('last-focused');\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            styleController.style(defaultListStyles);\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 (isActiveElement(widget.getHTMLElement())) {\n            this.setLastFocusedList(widget);\n        }\n        return combinedDisposable(widget.onDidFocus(() => this.setLastFocusedList(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.setLastFocusedList(undefined);\n            }\n        }));\n    }\n    dispose() {\n        this.disposables.dispose();\n    }\n}\nexport const RawWorkbenchListScrollAtBoundaryContextKey = new RawContextKey('listScrollAtBoundary', 'none');\nexport const WorkbenchListScrollAtTopContextKey = ContextKeyExpr.or(RawWorkbenchListScrollAtBoundaryContextKey.isEqualTo('top'), RawWorkbenchListScrollAtBoundaryContextKey.isEqualTo('both'));\nexport const WorkbenchListScrollAtBottomContextKey = ContextKeyExpr.or(RawWorkbenchListScrollAtBoundaryContextKey.isEqualTo('bottom'), RawWorkbenchListScrollAtBoundaryContextKey.isEqualTo('both'));\nexport const RawWorkbenchListFocusContextKey = new RawContextKey('listFocus', true);\nexport const WorkbenchTreeStickyScrollFocused = new RawContextKey('treestickyScrollFocused', false);\nexport const WorkbenchListSupportsMultiSelectContextKey = new RawContextKey('listSupportsMultiselect', true);\nexport const WorkbenchListFocusContextKey = ContextKeyExpr.and(RawWorkbenchListFocusContextKey, ContextKeyExpr.not(InputFocusedContextKey), WorkbenchTreeStickyScrollFocused.negate());\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 WorkbenchListSupportsFind = new RawContextKey('listSupportsFind', true);\nexport const WorkbenchTreeElementCanCollapse = new RawContextKey('treeElementCanCollapse', false);\nexport const WorkbenchTreeElementHasParent = new RawContextKey('treeElementHasParent', false);\nexport const WorkbenchTreeElementCanExpand = new RawContextKey('treeElementCanExpand', false);\nexport const WorkbenchTreeElementHasChild = new RawContextKey('treeElementHasChild', false);\nexport const WorkbenchTreeFindOpen = new RawContextKey('treeFindOpen', false);\nconst WorkbenchListTypeNavigationModeKey = 'listTypeNavigationMode';\n/**\n * @deprecated in favor of WorkbenchListTypeNavigationModeKey\n */\nconst WorkbenchListAutomaticKeyboardNavigationLegacyKey = 'listAutomaticKeyboardNavigation';\nfunction createScopedContextKeyService(contextKeyService, widget) {\n    const result = contextKeyService.createScoped(widget.getHTMLElement());\n    RawWorkbenchListFocusContextKey.bindTo(result);\n    return result;\n}\nfunction createScrollObserver(contextKeyService, widget) {\n    const listScrollAt = RawWorkbenchListScrollAtBoundaryContextKey.bindTo(contextKeyService);\n    const update = () => {\n        const atTop = widget.scrollTop === 0;\n        // We need a threshold `1` since scrollHeight is rounded.\n        // https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#determine_if_an_element_has_been_totally_scrolled\n        const atBottom = widget.scrollHeight - widget.renderHeight - widget.scrollTop < 1;\n        if (atTop && atBottom) {\n            listScrollAt.set('both');\n        }\n        else if (atTop) {\n            listScrollAt.set('top');\n        }\n        else if (atBottom) {\n            listScrollAt.set('bottom');\n        }\n        else {\n            listScrollAt.set('none');\n        }\n    };\n    update();\n    return widget.onDidScroll(update);\n}\nconst multiSelectModifierSettingKey = 'workbench.list.multiSelectModifier';\nconst openModeSettingKey = 'workbench.list.openMode';\nconst horizontalScrollingKey = 'workbench.list.horizontalScrolling';\nconst defaultFindModeSettingKey = 'workbench.list.defaultFindMode';\nconst typeNavigationModeSettingKey = 'workbench.list.typeNavigationMode';\n/** @deprecated in favor of `workbench.list.defaultFindMode` and `workbench.list.typeNavigationMode` */\nconst keyboardNavigationSettingKey = 'workbench.list.keyboardNavigation';\nconst scrollByPageKey = 'workbench.list.scrollByPage';\nconst defaultFindMatchTypeSettingKey = 'workbench.list.defaultFindMatchType';\nconst treeIndentKey = 'workbench.tree.indent';\nconst treeRenderIndentGuidesKey = 'workbench.tree.renderIndentGuides';\nconst listSmoothScrolling = 'workbench.list.smoothScrolling';\nconst mouseWheelScrollSensitivityKey = 'workbench.list.mouseWheelScrollSensitivity';\nconst fastScrollSensitivityKey = 'workbench.list.fastScrollSensitivity';\nconst treeExpandMode = 'workbench.tree.expandMode';\nconst treeStickyScroll = 'workbench.tree.enableStickyScroll';\nconst treeStickyScrollMaxElements = 'workbench.tree.stickyScrollMaxItemCount';\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(accessor, options) {\n    const configurationService = accessor.get(IConfigurationService);\n    const keybindingService = accessor.get(IKeybindingService);\n    const disposables = new DisposableStore();\n    const result = {\n        ...options,\n        keyboardNavigationDelegate: { mightProducePrintableCharacter(e) { return keybindingService.mightProducePrintableCharacter(e); } },\n        smoothScrolling: Boolean(configurationService.getValue(listSmoothScrolling)),\n        mouseWheelScrollSensitivity: configurationService.getValue(mouseWheelScrollSensitivityKey),\n        fastScrollSensitivity: configurationService.getValue(fastScrollSensitivityKey),\n        multipleSelectionController: options.multipleSelectionController ?? disposables.add(new MultipleSelectionController(configurationService)),\n        keyboardNavigationEventFilter: createKeyboardNavigationEventFilter(keybindingService),\n        scrollByPage: Boolean(configurationService.getValue(scrollByPageKey))\n    };\n    return [result, disposables];\n}\nlet WorkbenchList = class WorkbenchList extends List {\n    constructor(user, container, delegate, renderers, options, contextKeyService, listService, configurationService, instantiationService) {\n        const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : Boolean(configurationService.getValue(horizontalScrollingKey));\n        const [workbenchListOptions, workbenchListOptionsDisposable] = instantiationService.invokeFunction(toWorkbenchListOptions, options);\n        super(user, container, delegate, renderers, {\n            keyboardSupport: false,\n            ...workbenchListOptions,\n            horizontalScrolling,\n        });\n        this.disposables.add(workbenchListOptionsDisposable);\n        this.contextKeyService = createScopedContextKeyService(contextKeyService, this);\n        this.disposables.add(createScrollObserver(this.contextKeyService, this));\n        this.listSupportsMultiSelect = WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService);\n        this.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        this.updateStyles(options.overrideStyles);\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 = Boolean(configurationService.getValue(horizontalScrollingKey));\n                options = { ...options, horizontalScrolling };\n            }\n            if (e.affectsConfiguration(scrollByPageKey)) {\n                const scrollByPage = Boolean(configurationService.getValue(scrollByPageKey));\n                options = { ...options, scrollByPage };\n            }\n            if (e.affectsConfiguration(listSmoothScrolling)) {\n                const smoothScrolling = Boolean(configurationService.getValue(listSmoothScrolling));\n                options = { ...options, smoothScrolling };\n            }\n            if (e.affectsConfiguration(mouseWheelScrollSensitivityKey)) {\n                const mouseWheelScrollSensitivity = configurationService.getValue(mouseWheelScrollSensitivityKey);\n                options = { ...options, mouseWheelScrollSensitivity };\n            }\n            if (e.affectsConfiguration(fastScrollSensitivityKey)) {\n                const fastScrollSensitivity = configurationService.getValue(fastScrollSensitivityKey);\n                options = { ...options, fastScrollSensitivity };\n            }\n            if (Object.keys(options).length > 0) {\n                this.updateOptions(options);\n            }\n        }));\n        this.navigator = new ListResourceNavigator(this, { configurationService, ...options });\n        this.disposables.add(this.navigator);\n    }\n    updateOptions(options) {\n        super.updateOptions(options);\n        if (options.overrideStyles !== undefined) {\n            this.updateStyles(options.overrideStyles);\n        }\n        if (options.multipleSelectionSupport !== undefined) {\n            this.listSupportsMultiSelect.set(!!options.multipleSelectionSupport);\n        }\n    }\n    updateStyles(styles) {\n        this.style(styles ? getListStyles(styles) : defaultListStyles);\n    }\n};\nWorkbenchList = __decorate([\n    __param(5, IContextKeyService),\n    __param(6, IListService),\n    __param(7, IConfigurationService),\n    __param(8, IInstantiationService)\n], WorkbenchList);\nexport { WorkbenchList };\nlet WorkbenchPagedList = class WorkbenchPagedList extends PagedList {\n    constructor(user, container, delegate, renderers, options, contextKeyService, listService, configurationService, instantiationService) {\n        const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : Boolean(configurationService.getValue(horizontalScrollingKey));\n        const [workbenchListOptions, workbenchListOptionsDisposable] = instantiationService.invokeFunction(toWorkbenchListOptions, options);\n        super(user, container, delegate, renderers, {\n            keyboardSupport: false,\n            ...workbenchListOptions,\n            horizontalScrolling,\n        });\n        this.disposables = new DisposableStore();\n        this.disposables.add(workbenchListOptionsDisposable);\n        this.contextKeyService = createScopedContextKeyService(contextKeyService, this);\n        this.disposables.add(createScrollObserver(this.contextKeyService, this.widget));\n        this.horizontalScrolling = options.horizontalScrolling;\n        this.listSupportsMultiSelect = WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService);\n        this.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        this.updateStyles(options.overrideStyles);\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 = Boolean(configurationService.getValue(horizontalScrollingKey));\n                options = { ...options, horizontalScrolling };\n            }\n            if (e.affectsConfiguration(scrollByPageKey)) {\n                const scrollByPage = Boolean(configurationService.getValue(scrollByPageKey));\n                options = { ...options, scrollByPage };\n            }\n            if (e.affectsConfiguration(listSmoothScrolling)) {\n                const smoothScrolling = Boolean(configurationService.getValue(listSmoothScrolling));\n                options = { ...options, smoothScrolling };\n            }\n            if (e.affectsConfiguration(mouseWheelScrollSensitivityKey)) {\n                const mouseWheelScrollSensitivity = configurationService.getValue(mouseWheelScrollSensitivityKey);\n                options = { ...options, mouseWheelScrollSensitivity };\n            }\n            if (e.affectsConfiguration(fastScrollSensitivityKey)) {\n                const fastScrollSensitivity = configurationService.getValue(fastScrollSensitivityKey);\n                options = { ...options, fastScrollSensitivity };\n            }\n            if (Object.keys(options).length > 0) {\n                this.updateOptions(options);\n            }\n        }));\n        this.navigator = new ListResourceNavigator(this, { configurationService, ...options });\n        this.disposables.add(this.navigator);\n    }\n    updateOptions(options) {\n        super.updateOptions(options);\n        if (options.overrideStyles !== undefined) {\n            this.updateStyles(options.overrideStyles);\n        }\n        if (options.multipleSelectionSupport !== undefined) {\n            this.listSupportsMultiSelect.set(!!options.multipleSelectionSupport);\n        }\n    }\n    updateStyles(styles) {\n        this.style(styles ? getListStyles(styles) : defaultListStyles);\n    }\n    dispose() {\n        this.disposables.dispose();\n        super.dispose();\n    }\n};\nWorkbenchPagedList = __decorate([\n    __param(5, IContextKeyService),\n    __param(6, IListService),\n    __param(7, IConfigurationService),\n    __param(8, IInstantiationService)\n], WorkbenchPagedList);\nexport { WorkbenchPagedList };\nlet WorkbenchTable = class WorkbenchTable extends Table {\n    constructor(user, container, delegate, columns, renderers, options, contextKeyService, listService, configurationService, instantiationService) {\n        const horizontalScrolling = typeof options.horizontalScrolling !== 'undefined' ? options.horizontalScrolling : Boolean(configurationService.getValue(horizontalScrollingKey));\n        const [workbenchListOptions, workbenchListOptionsDisposable] = instantiationService.invokeFunction(toWorkbenchListOptions, options);\n        super(user, container, delegate, columns, renderers, {\n            keyboardSupport: false,\n            ...workbenchListOptions,\n            horizontalScrolling,\n        });\n        this.disposables.add(workbenchListOptionsDisposable);\n        this.contextKeyService = createScopedContextKeyService(contextKeyService, this);\n        this.disposables.add(createScrollObserver(this.contextKeyService, this));\n        this.listSupportsMultiSelect = WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService);\n        this.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        this.updateStyles(options.overrideStyles);\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 = Boolean(configurationService.getValue(horizontalScrollingKey));\n                options = { ...options, horizontalScrolling };\n            }\n            if (e.affectsConfiguration(scrollByPageKey)) {\n                const scrollByPage = Boolean(configurationService.getValue(scrollByPageKey));\n                options = { ...options, scrollByPage };\n            }\n            if (e.affectsConfiguration(listSmoothScrolling)) {\n                const smoothScrolling = Boolean(configurationService.getValue(listSmoothScrolling));\n                options = { ...options, smoothScrolling };\n            }\n            if (e.affectsConfiguration(mouseWheelScrollSensitivityKey)) {\n                const mouseWheelScrollSensitivity = configurationService.getValue(mouseWheelScrollSensitivityKey);\n                options = { ...options, mouseWheelScrollSensitivity };\n            }\n            if (e.affectsConfiguration(fastScrollSensitivityKey)) {\n                const fastScrollSensitivity = configurationService.getValue(fastScrollSensitivityKey);\n                options = { ...options, fastScrollSensitivity };\n            }\n            if (Object.keys(options).length > 0) {\n                this.updateOptions(options);\n            }\n        }));\n        this.navigator = new TableResourceNavigator(this, { configurationService, ...options });\n        this.disposables.add(this.navigator);\n    }\n    updateOptions(options) {\n        super.updateOptions(options);\n        if (options.overrideStyles !== undefined) {\n            this.updateStyles(options.overrideStyles);\n        }\n        if (options.multipleSelectionSupport !== undefined) {\n            this.listSupportsMultiSelect.set(!!options.multipleSelectionSupport);\n        }\n    }\n    updateStyles(styles) {\n        this.style(styles ? getListStyles(styles) : defaultListStyles);\n    }\n    dispose() {\n        this.disposables.dispose();\n        super.dispose();\n    }\n};\nWorkbenchTable = __decorate([\n    __param(6, IContextKeyService),\n    __param(7, IListService),\n    __param(8, IConfigurationService),\n    __param(9, IInstantiationService)\n], WorkbenchTable);\nexport { WorkbenchTable };\nclass ResourceNavigator extends Disposable {\n    constructor(widget, options) {\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 => isKeyboardEvent(e.browserEvent))(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?.openOnSingleClick !== 'boolean' && options?.configurationService) {\n            this.openOnSingleClick = options?.configurationService.getValue(openModeSettingKey) !== 'doubleClick';\n            this._register(options?.configurationService.onDidChangeConfiguration(e => {\n                if (e.affectsConfiguration(openModeSettingKey)) {\n                    this.openOnSingleClick = options?.configurationService.getValue(openModeSettingKey) !== 'doubleClick';\n                }\n            }));\n        }\n        else {\n            this.openOnSingleClick = options?.openOnSingleClick ?? 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        return this.widget.getSelection()[0] ?? undefined;\n    }\n}\nfunction createKeyboardNavigationEventFilter(keybindingService) {\n    let inMultiChord = false;\n    return event => {\n        if (event.toKeyCodeChord().isModifierKey()) {\n            return false;\n        }\n        if (inMultiChord) {\n            inMultiChord = false;\n            return false;\n        }\n        const result = keybindingService.softDispatch(event, event.target);\n        if (result.kind === 1 /* ResultKind.MoreChordsNeeded */) {\n            inMultiChord = true;\n            return false;\n        }\n        inMultiChord = false;\n        return result.kind === 0 /* ResultKind.NoMatchingKb */;\n    };\n}\nlet WorkbenchObjectTree = class WorkbenchObjectTree extends ObjectTree {\n    constructor(user, container, delegate, renderers, options, instantiationService, contextKeyService, listService, configurationService) {\n        const { options: treeOptions, getTypeNavigationMode, disposable } = instantiationService.invokeFunction(workbenchTreeDataPreamble, options);\n        super(user, container, delegate, renderers, treeOptions);\n        this.disposables.add(disposable);\n        this.internals = new WorkbenchTreeInternals(this, options, getTypeNavigationMode, options.overrideStyles, contextKeyService, listService, configurationService);\n        this.disposables.add(this.internals);\n    }\n    updateOptions(options) {\n        super.updateOptions(options);\n        this.internals.updateOptions(options);\n    }\n};\nWorkbenchObjectTree = __decorate([\n    __param(5, IInstantiationService),\n    __param(6, IContextKeyService),\n    __param(7, IListService),\n    __param(8, IConfigurationService)\n], WorkbenchObjectTree);\nexport { WorkbenchObjectTree };\nlet WorkbenchCompressibleObjectTree = class WorkbenchCompressibleObjectTree extends CompressibleObjectTree {\n    constructor(user, container, delegate, renderers, options, instantiationService, contextKeyService, listService, configurationService) {\n        const { options: treeOptions, getTypeNavigationMode, disposable } = instantiationService.invokeFunction(workbenchTreeDataPreamble, options);\n        super(user, container, delegate, renderers, treeOptions);\n        this.disposables.add(disposable);\n        this.internals = new WorkbenchTreeInternals(this, options, getTypeNavigationMode, options.overrideStyles, contextKeyService, listService, configurationService);\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        this.internals.updateOptions(options);\n    }\n};\nWorkbenchCompressibleObjectTree = __decorate([\n    __param(5, IInstantiationService),\n    __param(6, IContextKeyService),\n    __param(7, IListService),\n    __param(8, IConfigurationService)\n], WorkbenchCompressibleObjectTree);\nexport { WorkbenchCompressibleObjectTree };\nlet WorkbenchDataTree = class WorkbenchDataTree extends DataTree {\n    constructor(user, container, delegate, renderers, dataSource, options, instantiationService, contextKeyService, listService, configurationService) {\n        const { options: treeOptions, getTypeNavigationMode, disposable } = instantiationService.invokeFunction(workbenchTreeDataPreamble, options);\n        super(user, container, delegate, renderers, dataSource, treeOptions);\n        this.disposables.add(disposable);\n        this.internals = new WorkbenchTreeInternals(this, options, getTypeNavigationMode, options.overrideStyles, contextKeyService, listService, configurationService);\n        this.disposables.add(this.internals);\n    }\n    updateOptions(options = {}) {\n        super.updateOptions(options);\n        if (options.overrideStyles !== undefined) {\n            this.internals.updateStyleOverrides(options.overrideStyles);\n        }\n        this.internals.updateOptions(options);\n    }\n};\nWorkbenchDataTree = __decorate([\n    __param(6, IInstantiationService),\n    __param(7, IContextKeyService),\n    __param(8, IListService),\n    __param(9, IConfigurationService)\n], WorkbenchDataTree);\nexport { WorkbenchDataTree };\nlet WorkbenchAsyncDataTree = class WorkbenchAsyncDataTree extends AsyncDataTree {\n    get onDidOpen() { return this.internals.onDidOpen; }\n    constructor(user, container, delegate, renderers, dataSource, options, instantiationService, contextKeyService, listService, configurationService) {\n        const { options: treeOptions, getTypeNavigationMode, disposable } = instantiationService.invokeFunction(workbenchTreeDataPreamble, options);\n        super(user, container, delegate, renderers, dataSource, treeOptions);\n        this.disposables.add(disposable);\n        this.internals = new WorkbenchTreeInternals(this, options, getTypeNavigationMode, options.overrideStyles, contextKeyService, listService, configurationService);\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        this.internals.updateOptions(options);\n    }\n};\nWorkbenchAsyncDataTree = __decorate([\n    __param(6, IInstantiationService),\n    __param(7, IContextKeyService),\n    __param(8, IListService),\n    __param(9, IConfigurationService)\n], WorkbenchAsyncDataTree);\nexport { WorkbenchAsyncDataTree };\nlet WorkbenchCompressibleAsyncDataTree = class WorkbenchCompressibleAsyncDataTree extends CompressibleAsyncDataTree {\n    constructor(user, container, virtualDelegate, compressionDelegate, renderers, dataSource, options, instantiationService, contextKeyService, listService, configurationService) {\n        const { options: treeOptions, getTypeNavigationMode, disposable } = instantiationService.invokeFunction(workbenchTreeDataPreamble, options);\n        super(user, container, virtualDelegate, compressionDelegate, renderers, dataSource, treeOptions);\n        this.disposables.add(disposable);\n        this.internals = new WorkbenchTreeInternals(this, options, getTypeNavigationMode, options.overrideStyles, contextKeyService, listService, configurationService);\n        this.disposables.add(this.internals);\n    }\n    updateOptions(options) {\n        super.updateOptions(options);\n        this.internals.updateOptions(options);\n    }\n};\nWorkbenchCompressibleAsyncDataTree = __decorate([\n    __param(7, IInstantiationService),\n    __param(8, IContextKeyService),\n    __param(9, IListService),\n    __param(10, IConfigurationService)\n], WorkbenchCompressibleAsyncDataTree);\nexport { WorkbenchCompressibleAsyncDataTree };\nfunction getDefaultTreeFindMode(configurationService) {\n    const value = configurationService.getValue(defaultFindModeSettingKey);\n    if (value === 'highlight') {\n        return TreeFindMode.Highlight;\n    }\n    else if (value === 'filter') {\n        return TreeFindMode.Filter;\n    }\n    const deprecatedValue = configurationService.getValue(keyboardNavigationSettingKey);\n    if (deprecatedValue === 'simple' || deprecatedValue === 'highlight') {\n        return TreeFindMode.Highlight;\n    }\n    else if (deprecatedValue === 'filter') {\n        return TreeFindMode.Filter;\n    }\n    return undefined;\n}\nfunction getDefaultTreeFindMatchType(configurationService) {\n    const value = configurationService.getValue(defaultFindMatchTypeSettingKey);\n    if (value === 'fuzzy') {\n        return TreeFindMatchType.Fuzzy;\n    }\n    else if (value === 'contiguous') {\n        return TreeFindMatchType.Contiguous;\n    }\n    return undefined;\n}\nfunction workbenchTreeDataPreamble(accessor, options) {\n    const configurationService = accessor.get(IConfigurationService);\n    const contextViewService = accessor.get(IContextViewService);\n    const contextKeyService = accessor.get(IContextKeyService);\n    const instantiationService = accessor.get(IInstantiationService);\n    const getTypeNavigationMode = () => {\n        // give priority to the context key value to specify a value\n        const modeString = contextKeyService.getContextKeyValue(WorkbenchListTypeNavigationModeKey);\n        if (modeString === 'automatic') {\n            return TypeNavigationMode.Automatic;\n        }\n        else if (modeString === 'trigger') {\n            return TypeNavigationMode.Trigger;\n        }\n        // also check the deprecated context key to set the mode to 'trigger'\n        const modeBoolean = contextKeyService.getContextKeyValue(WorkbenchListAutomaticKeyboardNavigationLegacyKey);\n        if (modeBoolean === false) {\n            return TypeNavigationMode.Trigger;\n        }\n        // finally, check the setting\n        const configString = configurationService.getValue(typeNavigationModeSettingKey);\n        if (configString === 'automatic') {\n            return TypeNavigationMode.Automatic;\n        }\n        else if (configString === 'trigger') {\n            return TypeNavigationMode.Trigger;\n        }\n        return undefined;\n    };\n    const horizontalScrolling = options.horizontalScrolling !== undefined ? options.horizontalScrolling : Boolean(configurationService.getValue(horizontalScrollingKey));\n    const [workbenchListOptions, disposable] = instantiationService.invokeFunction(toWorkbenchListOptions, options);\n    const paddingBottom = options.paddingBottom;\n    const renderIndentGuides = options.renderIndentGuides !== undefined ? options.renderIndentGuides : configurationService.getValue(treeRenderIndentGuidesKey);\n    return {\n        getTypeNavigationMode,\n        disposable,\n        options: {\n            // ...options, // TODO@Joao why is this not splatted here?\n            keyboardSupport: false,\n            ...workbenchListOptions,\n            indent: typeof configurationService.getValue(treeIndentKey) === 'number' ? configurationService.getValue(treeIndentKey) : undefined,\n            renderIndentGuides,\n            smoothScrolling: Boolean(configurationService.getValue(listSmoothScrolling)),\n            defaultFindMode: getDefaultTreeFindMode(configurationService),\n            defaultFindMatchType: getDefaultTreeFindMatchType(configurationService),\n            horizontalScrolling,\n            scrollByPage: Boolean(configurationService.getValue(scrollByPageKey)),\n            paddingBottom: paddingBottom,\n            hideTwistiesOfChildlessElements: options.hideTwistiesOfChildlessElements,\n            expandOnlyOnTwistieClick: options.expandOnlyOnTwistieClick ?? (configurationService.getValue(treeExpandMode) === 'doubleClick'),\n            contextViewProvider: contextViewService,\n            findWidgetStyles: defaultFindWidgetStyles,\n            enableStickyScroll: Boolean(configurationService.getValue(treeStickyScroll)),\n            stickyScrollMaxItemCount: Number(configurationService.getValue(treeStickyScrollMaxElements)),\n        }\n    };\n}\nlet WorkbenchTreeInternals = class WorkbenchTreeInternals {\n    get onDidOpen() { return this.navigator.onDidOpen; }\n    constructor(tree, options, getTypeNavigationMode, overrideStyles, contextKeyService, listService, configurationService) {\n        this.tree = tree;\n        this.disposables = [];\n        this.contextKeyService = createScopedContextKeyService(contextKeyService, tree);\n        this.disposables.push(createScrollObserver(this.contextKeyService, tree));\n        this.listSupportsMultiSelect = WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService);\n        this.listSupportsMultiSelect.set(options.multipleSelectionSupport !== false);\n        const listSelectionNavigation = WorkbenchListSelectionNavigation.bindTo(this.contextKeyService);\n        listSelectionNavigation.set(Boolean(options.selectionNavigation));\n        this.listSupportFindWidget = WorkbenchListSupportsFind.bindTo(this.contextKeyService);\n        this.listSupportFindWidget.set(options.findWidgetEnabled ?? true);\n        this.hasSelectionOrFocus = WorkbenchListHasSelectionOrFocus.bindTo(this.contextKeyService);\n        this.hasDoubleSelection = WorkbenchListDoubleSelection.bindTo(this.contextKeyService);\n        this.hasMultiSelection = WorkbenchListMultiSelection.bindTo(this.contextKeyService);\n        this.treeElementCanCollapse = WorkbenchTreeElementCanCollapse.bindTo(this.contextKeyService);\n        this.treeElementHasParent = WorkbenchTreeElementHasParent.bindTo(this.contextKeyService);\n        this.treeElementCanExpand = WorkbenchTreeElementCanExpand.bindTo(this.contextKeyService);\n        this.treeElementHasChild = WorkbenchTreeElementHasChild.bindTo(this.contextKeyService);\n        this.treeFindOpen = WorkbenchTreeFindOpen.bindTo(this.contextKeyService);\n        this.treeStickyScrollFocused = WorkbenchTreeStickyScrollFocused.bindTo(this.contextKeyService);\n        this._useAltAsMultipleSelectionModifier = useAltAsMultipleSelectionModifier(configurationService);\n        this.updateStyleOverrides(overrideStyles);\n        const updateCollapseContextKeys = () => {\n            const focus = tree.getFocus()[0];\n            if (!focus) {\n                return;\n            }\n            const node = tree.getNode(focus);\n            this.treeElementCanCollapse.set(node.collapsible && !node.collapsed);\n            this.treeElementHasParent.set(!!tree.getParentElement(focus));\n            this.treeElementCanExpand.set(node.collapsible && node.collapsed);\n            this.treeElementHasChild.set(!!tree.getFirstElementChild(focus));\n        };\n        const interestingContextKeys = new Set();\n        interestingContextKeys.add(WorkbenchListTypeNavigationModeKey);\n        interestingContextKeys.add(WorkbenchListAutomaticKeyboardNavigationLegacyKey);\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            updateCollapseContextKeys();\n        }), tree.onDidChangeCollapseState(updateCollapseContextKeys), tree.onDidChangeModel(updateCollapseContextKeys), tree.onDidChangeFindOpenState(enabled => this.treeFindOpen.set(enabled)), tree.onDidChangeStickyScrollFocused(focused => this.treeStickyScrollFocused.set(focused)), 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 = { ...newOptions, indent };\n            }\n            if (e.affectsConfiguration(treeRenderIndentGuidesKey) && options.renderIndentGuides === undefined) {\n                const renderIndentGuides = configurationService.getValue(treeRenderIndentGuidesKey);\n                newOptions = { ...newOptions, renderIndentGuides };\n            }\n            if (e.affectsConfiguration(listSmoothScrolling)) {\n                const smoothScrolling = Boolean(configurationService.getValue(listSmoothScrolling));\n                newOptions = { ...newOptions, smoothScrolling };\n            }\n            if (e.affectsConfiguration(defaultFindModeSettingKey) || e.affectsConfiguration(keyboardNavigationSettingKey)) {\n                const defaultFindMode = getDefaultTreeFindMode(configurationService);\n                newOptions = { ...newOptions, defaultFindMode };\n            }\n            if (e.affectsConfiguration(typeNavigationModeSettingKey) || e.affectsConfiguration(keyboardNavigationSettingKey)) {\n                const typeNavigationMode = getTypeNavigationMode();\n                newOptions = { ...newOptions, typeNavigationMode };\n            }\n            if (e.affectsConfiguration(defaultFindMatchTypeSettingKey)) {\n                const defaultFindMatchType = getDefaultTreeFindMatchType(configurationService);\n                newOptions = { ...newOptions, defaultFindMatchType };\n            }\n            if (e.affectsConfiguration(horizontalScrollingKey) && options.horizontalScrolling === undefined) {\n                const horizontalScrolling = Boolean(configurationService.getValue(horizontalScrollingKey));\n                newOptions = { ...newOptions, horizontalScrolling };\n            }\n            if (e.affectsConfiguration(scrollByPageKey)) {\n                const scrollByPage = Boolean(configurationService.getValue(scrollByPageKey));\n                newOptions = { ...newOptions, scrollByPage };\n            }\n            if (e.affectsConfiguration(treeExpandMode) && options.expandOnlyOnTwistieClick === undefined) {\n                newOptions = { ...newOptions, expandOnlyOnTwistieClick: configurationService.getValue(treeExpandMode) === 'doubleClick' };\n            }\n            if (e.affectsConfiguration(treeStickyScroll)) {\n                const enableStickyScroll = configurationService.getValue(treeStickyScroll);\n                newOptions = { ...newOptions, enableStickyScroll };\n            }\n            if (e.affectsConfiguration(treeStickyScrollMaxElements)) {\n                const stickyScrollMaxItemCount = Math.max(1, configurationService.getValue(treeStickyScrollMaxElements));\n                newOptions = { ...newOptions, stickyScrollMaxItemCount };\n            }\n            if (e.affectsConfiguration(mouseWheelScrollSensitivityKey)) {\n                const mouseWheelScrollSensitivity = configurationService.getValue(mouseWheelScrollSensitivityKey);\n                newOptions = { ...newOptions, mouseWheelScrollSensitivity };\n            }\n            if (e.affectsConfiguration(fastScrollSensitivityKey)) {\n                const fastScrollSensitivity = configurationService.getValue(fastScrollSensitivityKey);\n                newOptions = { ...newOptions, fastScrollSensitivity };\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({ typeNavigationMode: getTypeNavigationMode() });\n            }\n        }));\n        this.navigator = new TreeResourceNavigator(tree, { configurationService, ...options });\n        this.disposables.push(this.navigator);\n    }\n    updateOptions(options) {\n        if (options.multipleSelectionSupport !== undefined) {\n            this.listSupportsMultiSelect.set(!!options.multipleSelectionSupport);\n        }\n    }\n    updateStyleOverrides(overrideStyles) {\n        this.tree.style(overrideStyles ? getListStyles(overrideStyles) : defaultListStyles);\n    }\n    dispose() {\n        this.disposables = dispose(this.disposables);\n    }\n};\nWorkbenchTreeInternals = __decorate([\n    __param(4, IContextKeyService),\n    __param(5, IListService),\n    __param(6, IConfigurationService)\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            markdownEnumDescriptions: [\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        [scrollByPageKey]: {\n            type: 'boolean',\n            default: false,\n            description: localize('list.scrollByPage', \"Controls whether clicks in the scrollbar scroll page by page.\")\n        },\n        [treeIndentKey]: {\n            type: 'number',\n            default: 8,\n            minimum: 4,\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        [mouseWheelScrollSensitivityKey]: {\n            type: 'number',\n            default: 1,\n            markdownDescription: localize('Mouse Wheel Scroll Sensitivity', \"A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events.\")\n        },\n        [fastScrollSensitivityKey]: {\n            type: 'number',\n            default: 5,\n            markdownDescription: localize('Fast Scroll Sensitivity', \"Scrolling speed multiplier when pressing `Alt`.\")\n        },\n        [defaultFindModeSettingKey]: {\n            type: 'string',\n            enum: ['highlight', 'filter'],\n            enumDescriptions: [\n                localize('defaultFindModeSettingKey.highlight', \"Highlight elements when searching. Further up and down navigation will traverse only the highlighted elements.\"),\n                localize('defaultFindModeSettingKey.filter', \"Filter elements when searching.\")\n            ],\n            default: 'highlight',\n            description: localize('defaultFindModeSettingKey', \"Controls the default find mode for lists and trees in the workbench.\")\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            deprecated: true,\n            deprecationMessage: localize('keyboardNavigationSettingKeyDeprecated', \"Please use 'workbench.list.defaultFindMode' and\t'workbench.list.typeNavigationMode' instead.\")\n        },\n        [defaultFindMatchTypeSettingKey]: {\n            type: 'string',\n            enum: ['fuzzy', 'contiguous'],\n            enumDescriptions: [\n                localize('defaultFindMatchTypeSettingKey.fuzzy', \"Use fuzzy matching when searching.\"),\n                localize('defaultFindMatchTypeSettingKey.contiguous', \"Use contiguous matching when searching.\")\n            ],\n            default: 'fuzzy',\n            description: localize('defaultFindMatchTypeSettingKey', \"Controls the type of matching used when searching lists and trees in the workbench.\")\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        [treeStickyScroll]: {\n            type: 'boolean',\n            default: true,\n            description: localize('sticky scroll', \"Controls whether sticky scrolling is enabled in trees.\"),\n        },\n        [treeStickyScrollMaxElements]: {\n            type: 'number',\n            minimum: 1,\n            default: 7,\n            markdownDescription: localize('sticky scroll maximum items', \"Controls the number of sticky elements displayed in the tree when {0} is enabled.\", '`#workbench.tree.enableStickyScroll#`'),\n        },\n        [typeNavigationModeSettingKey]: {\n            type: 'string',\n            enum: ['automatic', 'trigger'],\n            default: 'automatic',\n            markdownDescription: localize('typeNavigationMode2', \"Controls how type navigation works in lists and trees in the workbench. When set to `trigger`, type navigation begins once the `list.triggerTypeNavigation` command is run.\"),\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 { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { renderLabelWithIcons } from '../iconLabel/iconLabels.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport * as objects from '../../../common/objects.js';\n/**\n * A widget which can render a label with substring highlights, often\n * originating from a filter function like the fuzzy matcher.\n */\nexport class HighlightedLabel extends Disposable {\n    /**\n     * Create a new {@link HighlightedLabel}.\n     *\n     * @param container The parent container to append to.\n     */\n    constructor(container, options) {\n        super();\n        this.options = options;\n        this.text = '';\n        this.title = '';\n        this.highlights = [];\n        this.didEverRender = false;\n        this.supportIcons = options?.supportIcons ?? false;\n        this.domNode = dom.append(container, dom.$('span.monaco-highlighted-label'));\n    }\n    /**\n     * The label's DOM node.\n     */\n    get element() {\n        return this.domNode;\n    }\n    /**\n     * Set the label and highlights.\n     *\n     * @param text The label to display.\n     * @param highlights The ranges to highlight.\n     * @param title An optional title for the hover tooltip.\n     * @param escapeNewLines Whether to escape new lines.\n     * @returns\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                if (this.supportIcons) {\n                    children.push(...renderLabelWithIcons(substring));\n                }\n                else {\n                    children.push(substring);\n                }\n                pos = highlight.start;\n            }\n            const substring = this.text.substring(pos, 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            if (this.supportIcons) {\n                children.push(...renderLabelWithIcons(substring));\n            }\n            else {\n                children.push(substring);\n            }\n        }\n        dom.reset(this.domNode, ...children);\n        if (this.options?.hoverDelegate?.showNativeHover) {\n            /* While custom hover is not inside custom hover */\n            this.domNode.title = this.title;\n        }\n        else {\n            if (!this.customHover && this.title !== '') {\n                const hoverDelegate = this.options?.hoverDelegate ?? getDefaultHoverDelegate('mouse');\n                this.customHover = this._register(getBaseLayerHoverDelegate().setupManagedHover(hoverDelegate, this.domNode, this.title));\n            }\n            else if (this.customHover) {\n                this.customHover.update(this.title);\n            }\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 *--------------------------------------------------------------------------------------------*/\nimport './iconlabel.css';\nimport * as dom from '../../dom.js';\nimport { HighlightedLabel } from '../highlightedlabel/highlightedLabel.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { equals } from '../../../common/objects.js';\nimport { Range } from '../../../common/range.js';\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nimport { isString } from '../../../common/types.js';\nimport { stripIcons } from '../../../common/iconLabels.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 classNames(classNames) {\n        if (this.disposed || equals(classNames, this._classNames)) {\n            return;\n        }\n        this._classNames = classNames;\n        this._element.classList.value = '';\n        this._element.classList.add(...classNames);\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.customHovers = new Map();\n        this.creationOptions = options;\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        this.nameContainer = dom.append(this.labelContainer, dom.$('span.monaco-icon-name-container'));\n        if (options?.supportHighlights || options?.supportIcons) {\n            this.nameNode = this._register(new LabelWithHighlights(this.nameContainer, !!options.supportIcons));\n        }\n        else {\n            this.nameNode = new Label(this.nameContainer);\n        }\n        this.hoverDelegate = options?.hoverDelegate ?? getDefaultHoverDelegate('mouse');\n    }\n    get element() {\n        return this.domNode.element;\n    }\n    setLabel(label, description, options) {\n        const labelClasses = ['monaco-icon-label'];\n        const containerClasses = ['monaco-icon-label-container'];\n        let ariaLabel = '';\n        if (options) {\n            if (options.extraClasses) {\n                labelClasses.push(...options.extraClasses);\n            }\n            if (options.italic) {\n                labelClasses.push('italic');\n            }\n            if (options.strikethrough) {\n                labelClasses.push('strikethrough');\n            }\n            if (options.disabledCommand) {\n                containerClasses.push('disabled');\n            }\n            if (options.title) {\n                if (typeof options.title === 'string') {\n                    ariaLabel += options.title;\n                }\n                else {\n                    ariaLabel += label;\n                }\n            }\n        }\n        const existingIconNode = this.domNode.element.querySelector('.monaco-icon-label-iconpath');\n        if (options?.iconPath) {\n            let iconNode;\n            if (!existingIconNode || !(dom.isHTMLElement(existingIconNode))) {\n                iconNode = dom.$('.monaco-icon-label-iconpath');\n                this.domNode.element.prepend(iconNode);\n            }\n            else {\n                iconNode = existingIconNode;\n            }\n            iconNode.style.backgroundImage = dom.asCSSUrl(options?.iconPath);\n        }\n        else if (existingIconNode) {\n            existingIconNode.remove();\n        }\n        this.domNode.classNames = labelClasses;\n        this.domNode.element.setAttribute('aria-label', ariaLabel);\n        this.labelContainer.classList.value = '';\n        this.labelContainer.classList.add(...containerClasses);\n        this.setupHover(options?.descriptionTitle ? this.labelContainer : this.element, options?.title);\n        this.nameNode.setLabel(label, options);\n        if (description || this.descriptionNode) {\n            const descriptionNode = this.getOrCreateDescriptionNode();\n            if (descriptionNode instanceof HighlightedLabel) {\n                descriptionNode.set(description || '', options ? options.descriptionMatches : undefined, undefined, options?.labelEscapeNewLines);\n                this.setupHover(descriptionNode.element, options?.descriptionTitle);\n            }\n            else {\n                descriptionNode.textContent = description && options?.labelEscapeNewLines ? HighlightedLabel.escapeNewLines(description, []) : (description || '');\n                this.setupHover(descriptionNode.element, options?.descriptionTitle || '');\n                descriptionNode.empty = !description;\n            }\n        }\n        if (options?.suffix || this.suffixNode) {\n            const suffixNode = this.getOrCreateSuffixNode();\n            suffixNode.textContent = options?.suffix ?? '';\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.showNativeHover) {\n            function setupNativeHover(htmlElement, tooltip) {\n                if (isString(tooltip)) {\n                    // Icons don't render in the native hover so we strip them out\n                    htmlElement.title = stripIcons(tooltip);\n                }\n                else if (tooltip?.markdownNotSupportedFallback) {\n                    htmlElement.title = tooltip.markdownNotSupportedFallback;\n                }\n                else {\n                    htmlElement.removeAttribute('title');\n                }\n            }\n            setupNativeHover(htmlElement, tooltip);\n        }\n        else {\n            const hoverDisposable = getBaseLayerHoverDelegate().setupManagedHover(this.hoverDelegate, htmlElement, tooltip);\n            if (hoverDisposable) {\n                this.customHovers.set(htmlElement, hoverDisposable);\n            }\n        }\n    }\n    dispose() {\n        super.dispose();\n        for (const disposable of this.customHovers.values()) {\n            disposable.dispose();\n        }\n        this.customHovers.clear();\n    }\n    getOrCreateSuffixNode() {\n        if (!this.suffixNode) {\n            const suffixContainer = this._register(new FastLabelNode(dom.after(this.nameContainer, dom.$('span.monaco-icon-suffix-container'))));\n            this.suffixNode = this._register(new FastLabelNode(dom.append(suffixContainer.element, dom.$('span.label-suffix'))));\n        }\n        return this.suffixNode;\n    }\n    getOrCreateDescriptionNode() {\n        if (!this.descriptionNode) {\n            const descriptionContainer = this._register(new FastLabelNode(dom.append(this.labelContainer, dom.$('span.monaco-icon-description-container'))));\n            if (this.creationOptions?.supportDescriptionHighlights) {\n                this.descriptionNode = this._register(new HighlightedLabel(dom.append(descriptionContainer.element, dom.$('span.label-description')), { supportIcons: !!this.creationOptions.supportIcons }));\n            }\n            else {\n                this.descriptionNode = this._register(new FastLabelNode(dom.append(descriptionContainer.element, dom.$('span.label-description'))));\n            }\n        }\n        return this.descriptionNode;\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?.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?.domId && `${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?.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 extends Disposable {\n    constructor(container, supportIcons) {\n        super();\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 = this._register(new HighlightedLabel(dom.append(this.container, dom.$('a.label-name', { id: options?.domId })), { supportIcons: this.supportIcons }));\n            }\n            this.singleLabel.set(label, options?.matches, undefined, options?.labelEscapeNewLines);\n        }\n        else {\n            this.container.innerText = '';\n            this.container.classList.add('multiple');\n            this.singleLabel = undefined;\n            const separator = options?.separator || '/';\n            const matches = splitMatches(label, separator, 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?.domId && `${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 = this._register(new HighlightedLabel(dom.append(this.container, name), { supportIcons: this.supportIcons }));\n                highlightedLabel.set(l, m, undefined, 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 { getBaseLayerHoverDelegate } from '../hover/hoverDelegate2.js';\nimport { getDefaultHoverDelegate } from '../hover/hoverDelegateFactory.js';\nimport { UILabelProvider } from '../../../common/keybindingLabels.js';\nimport { Disposable } from '../../../common/lifecycle.js';\nimport { equals } from '../../../common/objects.js';\nimport './keybindingLabel.css';\nimport { localize } from '../../../../nls.js';\nconst $ = dom.$;\nexport const unthemedKeybindingLabelOptions = {\n    keybindingLabelBackground: undefined,\n    keybindingLabelForeground: undefined,\n    keybindingLabelBorder: undefined,\n    keybindingLabelBottomBorder: undefined,\n    keybindingLabelShadow: undefined\n};\nexport class KeybindingLabel extends Disposable {\n    constructor(container, os, options) {\n        super();\n        this.os = os;\n        this.keyElements = new Set();\n        this.options = options || Object.create(null);\n        const labelForeground = this.options.keybindingLabelForeground;\n        this.domNode = dom.append(container, $('.monaco-keybinding'));\n        if (labelForeground) {\n            this.domNode.style.color = labelForeground;\n        }\n        this.hover = this._register(getBaseLayerHoverDelegate().setupManagedHover(getDefaultHoverDelegate('mouse'), this.domNode, ''));\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            const chords = this.keybinding.getChords();\n            if (chords[0]) {\n                this.renderChord(this.domNode, chords[0], this.matches ? this.matches.firstPart : null);\n            }\n            for (let i = 1; i < chords.length; i++) {\n                dom.append(this.domNode, $('span.monaco-keybinding-key-chord-separator', undefined, ' '));\n                this.renderChord(this.domNode, chords[i], this.matches ? this.matches.chordPart : null);\n            }\n            const title = (this.options.disableTitle ?? false) ? undefined : this.keybinding.getAriaLabel() || undefined;\n            this.hover.update(title);\n            this.domNode.setAttribute('aria-label', title || '');\n        }\n        else if (this.options && this.options.renderUnboundKeybindings) {\n            this.renderUnbound(this.domNode);\n        }\n        this.didEverRender = true;\n    }\n    clear() {\n        dom.clearNode(this.domNode);\n        this.keyElements.clear();\n    }\n    renderChord(parent, chord, match) {\n        const modifierLabels = UILabelProvider.modifierLabels[this.os];\n        if (chord.ctrlKey) {\n            this.renderKey(parent, modifierLabels.ctrlKey, Boolean(match?.ctrlKey), modifierLabels.separator);\n        }\n        if (chord.shiftKey) {\n            this.renderKey(parent, modifierLabels.shiftKey, Boolean(match?.shiftKey), modifierLabels.separator);\n        }\n        if (chord.altKey) {\n            this.renderKey(parent, modifierLabels.altKey, Boolean(match?.altKey), modifierLabels.separator);\n        }\n        if (chord.metaKey) {\n            this.renderKey(parent, modifierLabels.metaKey, Boolean(match?.metaKey), modifierLabels.separator);\n        }\n        const keyLabel = chord.keyLabel;\n        if (keyLabel) {\n            this.renderKey(parent, keyLabel, Boolean(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        if (this.options.keybindingLabelBackground) {\n            keyElement.style.backgroundColor = this.options.keybindingLabelBackground;\n        }\n        if (this.options.keybindingLabelBorder) {\n            keyElement.style.borderColor = this.options.keybindingLabelBorder;\n        }\n        if (this.options.keybindingLabelBottomBorder) {\n            keyElement.style.borderBottomColor = this.options.keybindingLabelBottomBorder;\n        }\n        if (this.options.keybindingLabelShadow) {\n            keyElement.style.boxShadow = `inset 0 -1px 0 ${this.options.keybindingLabelShadow}`;\n        }\n        return keyElement;\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 *--------------------------------------------------------------------------------------------*/\nimport { Lazy } from './lazy.js';\n// When comparing large numbers of strings it's better for performance to create an\n// Intl.Collator object and use the function provided by its compare property\n// than it is to use String.prototype.localeCompare()\n// A collator with numeric sorting enabled, and no sensitivity to case, accents or diacritics.\nconst intlFileNameCollatorBaseNumeric = new Lazy(() => {\n    const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' });\n    return {\n        collator,\n        collatorIsNumeric: collator.resolvedOptions().numeric\n    };\n});\n// A collator with numeric sorting enabled.\nconst intlFileNameCollatorNumeric = new Lazy(() => {\n    const collator = new Intl.Collator(undefined, { numeric: true });\n    return {\n        collator\n    };\n});\n// A collator with numeric sorting enabled, and sensitivity to accents and diacritics but not case.\nconst intlFileNameCollatorNumericCaseInsensitive = new Lazy(() => {\n    const collator = new Intl.Collator(undefined, { numeric: true, sensitivity: 'accent' });\n    return {\n        collator\n    };\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 will make compare(`foo1`, `foo01`) === 0. 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 *--------------------------------------------------------------------------------------------*/\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 QuickPickItemElementRenderer_1;\nimport * as dom from '../../../base/browser/dom.js';\nimport { Emitter, Event, EventBufferer } from '../../../base/common/event.js';\nimport { localize } from '../../../nls.js';\nimport { IInstantiationService } from '../../instantiation/common/instantiation.js';\nimport { WorkbenchObjectTree } from '../../list/browser/listService.js';\nimport { IThemeService } from '../../theme/common/themeService.js';\nimport { Disposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { QuickPickFocus } from '../common/quickInput.js';\nimport { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js';\nimport { OS } from '../../../base/common/platform.js';\nimport { memoize } from '../../../base/common/decorators.js';\nimport { IconLabel } from '../../../base/browser/ui/iconLabel/iconLabel.js';\nimport { KeybindingLabel } from '../../../base/browser/ui/keybindingLabel/keybindingLabel.js';\nimport { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js';\nimport { isDark } from '../../theme/common/theme.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { quickInputButtonToAction } from './quickInputUtils.js';\nimport { Lazy } from '../../../base/common/lazy.js';\nimport { getCodiconAriaLabel, matchesFuzzyIconAware, parseLabelWithIcons } from '../../../base/common/iconLabels.js';\nimport { compareAnything } from '../../../base/common/comparers.js';\nimport { ltrim } from '../../../base/common/strings.js';\nimport { RenderIndentGuides } from '../../../base/browser/ui/tree/abstractTree.js';\nimport { ThrottledDelayer } from '../../../base/common/async.js';\nimport { isCancellationError } from '../../../base/common/errors.js';\nimport { IAccessibilityService } from '../../accessibility/common/accessibility.js';\nimport { observableValue, observableValueOpts, transaction } from '../../../base/common/observable.js';\nimport { equals } from '../../../base/common/arrays.js';\nconst $ = dom.$;\nclass BaseQuickPickItemElement {\n    constructor(index, hasCheckbox, mainItem) {\n        this.index = index;\n        this.hasCheckbox = hasCheckbox;\n        this._hidden = false;\n        this._init = new Lazy(() => {\n            const saneLabel = mainItem.label ?? '';\n            const saneSortLabel = parseLabelWithIcons(saneLabel).text.trim();\n            const saneAriaLabel = mainItem.ariaLabel || [saneLabel, this.saneDescription, this.saneDetail]\n                .map(s => getCodiconAriaLabel(s))\n                .filter(s => !!s)\n                .join(', ');\n            return {\n                saneLabel,\n                saneSortLabel,\n                saneAriaLabel\n            };\n        });\n        this._saneDescription = mainItem.description;\n        this._saneTooltip = mainItem.tooltip;\n    }\n    // #region Lazy Getters\n    get saneLabel() {\n        return this._init.value.saneLabel;\n    }\n    get saneSortLabel() {\n        return this._init.value.saneSortLabel;\n    }\n    get saneAriaLabel() {\n        return this._init.value.saneAriaLabel;\n    }\n    get element() {\n        return this._element;\n    }\n    set element(value) {\n        this._element = value;\n    }\n    get hidden() {\n        return this._hidden;\n    }\n    set hidden(value) {\n        this._hidden = value;\n    }\n    get saneDescription() {\n        return this._saneDescription;\n    }\n    set saneDescription(value) {\n        this._saneDescription = value;\n    }\n    get saneDetail() {\n        return this._saneDetail;\n    }\n    set saneDetail(value) {\n        this._saneDetail = value;\n    }\n    get saneTooltip() {\n        return this._saneTooltip;\n    }\n    set saneTooltip(value) {\n        this._saneTooltip = value;\n    }\n    get labelHighlights() {\n        return this._labelHighlights;\n    }\n    set labelHighlights(value) {\n        this._labelHighlights = value;\n    }\n    get descriptionHighlights() {\n        return this._descriptionHighlights;\n    }\n    set descriptionHighlights(value) {\n        this._descriptionHighlights = value;\n    }\n    get detailHighlights() {\n        return this._detailHighlights;\n    }\n    set detailHighlights(value) {\n        this._detailHighlights = value;\n    }\n}\nclass QuickPickItemElement extends BaseQuickPickItemElement {\n    constructor(index, hasCheckbox, fireButtonTriggered, _onChecked, item, _separator) {\n        super(index, hasCheckbox, item);\n        this.fireButtonTriggered = fireButtonTriggered;\n        this._onChecked = _onChecked;\n        this.item = item;\n        this._separator = _separator;\n        this._checked = false;\n        this.onChecked = hasCheckbox\n            ? Event.map(Event.filter(this._onChecked.event, e => e.element === this), e => e.checked)\n            : Event.None;\n        this._saneDetail = item.detail;\n        this._labelHighlights = item.highlights?.label;\n        this._descriptionHighlights = item.highlights?.description;\n        this._detailHighlights = item.highlights?.detail;\n    }\n    get separator() {\n        return this._separator;\n    }\n    set separator(value) {\n        this._separator = value;\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({ element: this, checked: value });\n        }\n    }\n    get checkboxDisabled() {\n        return !!this.item.disabled;\n    }\n}\nvar QuickPickSeparatorFocusReason;\n(function (QuickPickSeparatorFocusReason) {\n    /**\n     * No item is hovered or active\n     */\n    QuickPickSeparatorFocusReason[QuickPickSeparatorFocusReason[\"NONE\"] = 0] = \"NONE\";\n    /**\n     * Some item within this section is hovered\n     */\n    QuickPickSeparatorFocusReason[QuickPickSeparatorFocusReason[\"MOUSE_HOVER\"] = 1] = \"MOUSE_HOVER\";\n    /**\n     * Some item within this section is active\n     */\n    QuickPickSeparatorFocusReason[QuickPickSeparatorFocusReason[\"ACTIVE_ITEM\"] = 2] = \"ACTIVE_ITEM\";\n})(QuickPickSeparatorFocusReason || (QuickPickSeparatorFocusReason = {}));\nclass QuickPickSeparatorElement extends BaseQuickPickItemElement {\n    constructor(index, fireSeparatorButtonTriggered, separator) {\n        super(index, false, separator);\n        this.fireSeparatorButtonTriggered = fireSeparatorButtonTriggered;\n        this.separator = separator;\n        this.children = new Array();\n        /**\n         * If this item is >0, it means that there is some item in the list that is either:\n         * * hovered over\n         * * active\n         */\n        this.focusInsideSeparator = QuickPickSeparatorFocusReason.NONE;\n    }\n}\nclass QuickInputItemDelegate {\n    getHeight(element) {\n        if (element instanceof QuickPickSeparatorElement) {\n            return 30;\n        }\n        return element.saneDetail ? 44 : 22;\n    }\n    getTemplateId(element) {\n        if (element instanceof QuickPickItemElement) {\n            return QuickPickItemElementRenderer.ID;\n        }\n        else {\n            return QuickPickSeparatorElementRenderer.ID;\n        }\n    }\n}\nclass QuickInputAccessibilityProvider {\n    getWidgetAriaLabel() {\n        return localize('quickInput', \"Quick Input\");\n    }\n    getAriaLabel(element) {\n        return element.separator?.label\n            ? `${element.saneAriaLabel}, ${element.separator.label}`\n            : element.saneAriaLabel;\n    }\n    getWidgetRole() {\n        return 'listbox';\n    }\n    getRole(element) {\n        return element.hasCheckbox ? 'checkbox' : 'option';\n    }\n    isChecked(element) {\n        if (!element.hasCheckbox || !(element instanceof QuickPickItemElement)) {\n            return undefined;\n        }\n        return {\n            get value() { return element.checked; },\n            onDidChange: e => element.onChecked(() => e()),\n        };\n    }\n}\nclass BaseQuickInputListRenderer {\n    constructor(hoverDelegate) {\n        this.hoverDelegate = hoverDelegate;\n    }\n    // TODO: only do the common stuff here and have a subclass handle their specific stuff\n    renderTemplate(container) {\n        const data = Object.create(null);\n        data.toDisposeElement = new DisposableStore();\n        data.toDisposeTemplate = new DisposableStore();\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.add(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        // 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, hoverDelegate: this.hoverDelegate });\n        data.toDisposeTemplate.add(data.label);\n        data.icon = dom.prepend(data.label.element, $('.quick-input-list-icon'));\n        // Keybinding\n        const keybindingContainer = dom.append(row1, $('.quick-input-list-entry-keybinding'));\n        data.keybinding = new KeybindingLabel(keybindingContainer, OS);\n        data.toDisposeTemplate.add(data.keybinding);\n        // Detail\n        const detailContainer = dom.append(row2, $('.quick-input-list-label-meta'));\n        data.detail = new IconLabel(detailContainer, { supportHighlights: true, supportIcons: true, hoverDelegate: this.hoverDelegate });\n        data.toDisposeTemplate.add(data.detail);\n        // Separator\n        data.separator = dom.append(data.entry, $('.quick-input-list-separator'));\n        // Actions\n        data.actionBar = new ActionBar(data.entry, this.hoverDelegate ? { hoverDelegate: this.hoverDelegate } : undefined);\n        data.actionBar.domNode.classList.add('quick-input-list-entry-action-bar');\n        data.toDisposeTemplate.add(data.actionBar);\n        return data;\n    }\n    disposeTemplate(data) {\n        data.toDisposeElement.dispose();\n        data.toDisposeTemplate.dispose();\n    }\n    disposeElement(_element, _index, data) {\n        data.toDisposeElement.clear();\n        data.actionBar.clear();\n    }\n}\nlet QuickPickItemElementRenderer = class QuickPickItemElementRenderer extends BaseQuickInputListRenderer {\n    static { QuickPickItemElementRenderer_1 = this; }\n    static { this.ID = 'quickpickitem'; }\n    constructor(hoverDelegate, themeService) {\n        super(hoverDelegate);\n        this.themeService = themeService;\n        // Follow what we do in the separator renderer\n        this._itemsWithSeparatorsFrequency = new Map();\n    }\n    get templateId() {\n        return QuickPickItemElementRenderer_1.ID;\n    }\n    renderTemplate(container) {\n        const data = super.renderTemplate(container);\n        data.toDisposeTemplate.add(dom.addStandardDisposableListener(data.checkbox, dom.EventType.CHANGE, e => {\n            data.element.checked = data.checkbox.checked;\n        }));\n        return data;\n    }\n    renderElement(node, index, data) {\n        const element = node.element;\n        data.element = element;\n        element.element = data.entry ?? undefined;\n        const mainItem = element.item;\n        data.checkbox.checked = element.checked;\n        data.toDisposeElement.add(element.onChecked(checked => data.checkbox.checked = checked));\n        data.checkbox.disabled = element.checkboxDisabled;\n        const { labelHighlights, descriptionHighlights, detailHighlights } = element;\n        // Icon\n        if (mainItem.iconPath) {\n            const icon = isDark(this.themeService.getColorTheme().type) ? mainItem.iconPath.dark : (mainItem.iconPath.light ?? mainItem.iconPath.dark);\n            const iconUrl = URI.revive(icon);\n            data.icon.className = 'quick-input-list-icon';\n            data.icon.style.backgroundImage = dom.asCSSUrl(iconUrl);\n        }\n        else {\n            data.icon.style.backgroundImage = '';\n            data.icon.className = mainItem.iconClass ? `quick-input-list-icon ${mainItem.iconClass}` : '';\n        }\n        // Label\n        let descriptionTitle;\n        // if we have a tooltip, that will be the hover,\n        // with the saneDescription as fallback if it\n        // is defined\n        if (!element.saneTooltip && element.saneDescription) {\n            descriptionTitle = {\n                markdown: {\n                    value: element.saneDescription,\n                    supportThemeIcons: true\n                },\n                markdownNotSupportedFallback: element.saneDescription\n            };\n        }\n        const options = {\n            matches: labelHighlights || [],\n            // If we have a tooltip, we want that to be shown and not any other hover\n            descriptionTitle,\n            descriptionMatches: descriptionHighlights || [],\n            labelEscapeNewLines: true\n        };\n        options.extraClasses = mainItem.iconClasses;\n        options.italic = mainItem.italic;\n        options.strikethrough = mainItem.strikethrough;\n        data.entry.classList.remove('quick-input-list-separator-as-item');\n        data.label.setLabel(element.saneLabel, element.saneDescription, options);\n        // Keybinding\n        data.keybinding.set(mainItem.keybinding);\n        // Detail\n        if (element.saneDetail) {\n            let title;\n            // If we have a tooltip, we want that to be shown and not any other hover\n            if (!element.saneTooltip) {\n                title = {\n                    markdown: {\n                        value: element.saneDetail,\n                        supportThemeIcons: true\n                    },\n                    markdownNotSupportedFallback: element.saneDetail\n                };\n            }\n            data.detail.element.style.display = '';\n            data.detail.setLabel(element.saneDetail, undefined, {\n                matches: detailHighlights,\n                title,\n                labelEscapeNewLines: true\n            });\n        }\n        else {\n            data.detail.element.style.display = 'none';\n        }\n        // Separator\n        if (element.separator?.label) {\n            data.separator.textContent = element.separator.label;\n            data.separator.style.display = '';\n            this.addItemWithSeparator(element);\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        const buttons = mainItem.buttons;\n        if (buttons && buttons.length) {\n            data.actionBar.push(buttons.map((button, index) => quickInputButtonToAction(button, `id-${index}`, () => element.fireButtonTriggered({ button, item: element.item }))), { 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        this.removeItemWithSeparator(element.element);\n        super.disposeElement(element, _index, data);\n    }\n    isItemWithSeparatorVisible(item) {\n        return this._itemsWithSeparatorsFrequency.has(item);\n    }\n    addItemWithSeparator(item) {\n        this._itemsWithSeparatorsFrequency.set(item, (this._itemsWithSeparatorsFrequency.get(item) || 0) + 1);\n    }\n    removeItemWithSeparator(item) {\n        const frequency = this._itemsWithSeparatorsFrequency.get(item) || 0;\n        if (frequency > 1) {\n            this._itemsWithSeparatorsFrequency.set(item, frequency - 1);\n        }\n        else {\n            this._itemsWithSeparatorsFrequency.delete(item);\n        }\n    }\n};\nQuickPickItemElementRenderer = QuickPickItemElementRenderer_1 = __decorate([\n    __param(1, IThemeService)\n], QuickPickItemElementRenderer);\nclass QuickPickSeparatorElementRenderer extends BaseQuickInputListRenderer {\n    constructor() {\n        super(...arguments);\n        // This is a frequency map because sticky scroll re-uses the same renderer to render a second\n        // instance of the same separator.\n        this._visibleSeparatorsFrequency = new Map();\n    }\n    static { this.ID = 'quickpickseparator'; }\n    get templateId() {\n        return QuickPickSeparatorElementRenderer.ID;\n    }\n    get visibleSeparators() {\n        return [...this._visibleSeparatorsFrequency.keys()];\n    }\n    isSeparatorVisible(separator) {\n        return this._visibleSeparatorsFrequency.has(separator);\n    }\n    renderTemplate(container) {\n        const data = super.renderTemplate(container);\n        data.checkbox.style.display = 'none';\n        return data;\n    }\n    renderElement(node, index, data) {\n        const element = node.element;\n        data.element = element;\n        element.element = data.entry ?? undefined;\n        element.element.classList.toggle('focus-inside', !!element.focusInsideSeparator);\n        const mainItem = element.separator;\n        const { labelHighlights, descriptionHighlights, detailHighlights } = element;\n        // Icon\n        data.icon.style.backgroundImage = '';\n        data.icon.className = '';\n        // Label\n        let descriptionTitle;\n        // if we have a tooltip, that will be the hover,\n        // with the saneDescription as fallback if it\n        // is defined\n        if (!element.saneTooltip && element.saneDescription) {\n            descriptionTitle = {\n                markdown: {\n                    value: element.saneDescription,\n                    supportThemeIcons: true\n                },\n                markdownNotSupportedFallback: element.saneDescription\n            };\n        }\n        const options = {\n            matches: labelHighlights || [],\n            // If we have a tooltip, we want that to be shown and not any other hover\n            descriptionTitle,\n            descriptionMatches: descriptionHighlights || [],\n            labelEscapeNewLines: true\n        };\n        data.entry.classList.add('quick-input-list-separator-as-item');\n        data.label.setLabel(element.saneLabel, element.saneDescription, options);\n        // Detail\n        if (element.saneDetail) {\n            let title;\n            // If we have a tooltip, we want that to be shown and not any other hover\n            if (!element.saneTooltip) {\n                title = {\n                    markdown: {\n                        value: element.saneDetail,\n                        supportThemeIcons: true\n                    },\n                    markdownNotSupportedFallback: element.saneDetail\n                };\n            }\n            data.detail.element.style.display = '';\n            data.detail.setLabel(element.saneDetail, undefined, {\n                matches: detailHighlights,\n                title,\n                labelEscapeNewLines: true\n            });\n        }\n        else {\n            data.detail.element.style.display = 'none';\n        }\n        // Separator\n        data.separator.style.display = 'none';\n        data.entry.classList.add('quick-input-list-separator-border');\n        // Actions\n        const buttons = mainItem.buttons;\n        if (buttons && buttons.length) {\n            data.actionBar.push(buttons.map((button, index) => quickInputButtonToAction(button, `id-${index}`, () => element.fireSeparatorButtonTriggered({ button, separator: element.separator }))), { icon: true, label: false });\n            data.entry.classList.add('has-actions');\n        }\n        else {\n            data.entry.classList.remove('has-actions');\n        }\n        this.addSeparator(element);\n    }\n    disposeElement(element, _index, data) {\n        this.removeSeparator(element.element);\n        if (!this.isSeparatorVisible(element.element)) {\n            element.element.element?.classList.remove('focus-inside');\n        }\n        super.disposeElement(element, _index, data);\n    }\n    addSeparator(separator) {\n        this._visibleSeparatorsFrequency.set(separator, (this._visibleSeparatorsFrequency.get(separator) || 0) + 1);\n    }\n    removeSeparator(separator) {\n        const frequency = this._visibleSeparatorsFrequency.get(separator) || 0;\n        if (frequency > 1) {\n            this._visibleSeparatorsFrequency.set(separator, frequency - 1);\n        }\n        else {\n            this._visibleSeparatorsFrequency.delete(separator);\n        }\n    }\n}\nlet QuickInputTree = class QuickInputTree extends Disposable {\n    constructor(parent, hoverDelegate, linkOpenerDelegate, id, instantiationService, accessibilityService) {\n        super();\n        this.parent = parent;\n        this.hoverDelegate = hoverDelegate;\n        this.linkOpenerDelegate = linkOpenerDelegate;\n        this.accessibilityService = accessibilityService;\n        //#region QuickInputTree Events\n        this._onKeyDown = new Emitter();\n        this._onLeave = new Emitter();\n        /**\n         * Event that is fired when the tree would no longer have focus.\n        */\n        this.onLeave = this._onLeave.event;\n        this._visibleCountObservable = observableValue('VisibleCount', 0);\n        this.onChangedVisibleCount = Event.fromObservable(this._visibleCountObservable, this._store);\n        this._allVisibleCheckedObservable = observableValue('AllVisibleChecked', false);\n        this.onChangedAllVisibleChecked = Event.fromObservable(this._allVisibleCheckedObservable, this._store);\n        this._checkedCountObservable = observableValue('CheckedCount', 0);\n        this.onChangedCheckedCount = Event.fromObservable(this._checkedCountObservable, this._store);\n        this._checkedElementsObservable = observableValueOpts({ equalsFn: equals }, new Array());\n        this.onChangedCheckedElements = Event.fromObservable(this._checkedElementsObservable, this._store);\n        this._onButtonTriggered = new Emitter();\n        this.onButtonTriggered = this._onButtonTriggered.event;\n        this._onSeparatorButtonTriggered = new Emitter();\n        this.onSeparatorButtonTriggered = this._onSeparatorButtonTriggered.event;\n        this._elementChecked = new Emitter();\n        this._elementCheckedEventBufferer = new EventBufferer();\n        //#endregion\n        this._hasCheckboxes = false;\n        this._inputElements = new Array();\n        this._elementTree = new Array();\n        this._itemElements = new Array();\n        // Elements that apply to the current set of elements\n        this._elementDisposable = this._register(new DisposableStore());\n        this._matchOnDescription = false;\n        this._matchOnDetail = false;\n        this._matchOnLabel = true;\n        this._matchOnLabelMode = 'fuzzy';\n        this._sortByLabel = true;\n        this._shouldLoop = true;\n        this._container = dom.append(this.parent, $('.quick-input-list'));\n        this._separatorRenderer = new QuickPickSeparatorElementRenderer(hoverDelegate);\n        this._itemRenderer = instantiationService.createInstance(QuickPickItemElementRenderer, hoverDelegate);\n        this._tree = this._register(instantiationService.createInstance((WorkbenchObjectTree), 'QuickInput', this._container, new QuickInputItemDelegate(), [this._itemRenderer, this._separatorRenderer], {\n            filter: {\n                filter(element) {\n                    return element.hidden\n                        ? 0 /* TreeVisibility.Hidden */\n                        : element instanceof QuickPickSeparatorElement\n                            ? 2 /* TreeVisibility.Recurse */\n                            : 1 /* TreeVisibility.Visible */;\n                },\n            },\n            sorter: {\n                compare: (element, otherElement) => {\n                    if (!this.sortByLabel || !this._lastQueryString) {\n                        return 0;\n                    }\n                    const normalizedSearchValue = this._lastQueryString.toLowerCase();\n                    return compareEntries(element, otherElement, normalizedSearchValue);\n                },\n            },\n            accessibilityProvider: new QuickInputAccessibilityProvider(),\n            setRowLineHeight: false,\n            multipleSelectionSupport: false,\n            hideTwistiesOfChildlessElements: true,\n            renderIndentGuides: RenderIndentGuides.None,\n            findWidgetEnabled: false,\n            indent: 0,\n            horizontalScrolling: false,\n            allowNonCollapsibleParents: true,\n            alwaysConsumeMouseWheel: true\n        }));\n        this._tree.getHTMLElement().id = id;\n        this._registerListeners();\n    }\n    //#region public getters/setters\n    get onDidChangeFocus() {\n        return Event.map(this._tree.onDidChangeFocus, e => e.elements.filter((e) => e instanceof QuickPickItemElement).map(e => e.item), this._store);\n    }\n    get onDidChangeSelection() {\n        return Event.map(this._tree.onDidChangeSelection, e => ({\n            items: e.elements.filter((e) => e instanceof QuickPickItemElement).map(e => e.item),\n            event: e.browserEvent\n        }), this._store);\n    }\n    get displayed() {\n        return this._container.style.display !== 'none';\n    }\n    set displayed(value) {\n        this._container.style.display = value ? '' : 'none';\n    }\n    get scrollTop() {\n        return this._tree.scrollTop;\n    }\n    set scrollTop(scrollTop) {\n        this._tree.scrollTop = scrollTop;\n    }\n    get ariaLabel() {\n        return this._tree.ariaLabel;\n    }\n    set ariaLabel(label) {\n        this._tree.ariaLabel = label ?? '';\n    }\n    set enabled(value) {\n        this._tree.getHTMLElement().style.pointerEvents = value ? '' : 'none';\n    }\n    get matchOnDescription() {\n        return this._matchOnDescription;\n    }\n    set matchOnDescription(value) {\n        this._matchOnDescription = value;\n    }\n    get matchOnDetail() {\n        return this._matchOnDetail;\n    }\n    set matchOnDetail(value) {\n        this._matchOnDetail = value;\n    }\n    get matchOnLabel() {\n        return this._matchOnLabel;\n    }\n    set matchOnLabel(value) {\n        this._matchOnLabel = value;\n    }\n    get matchOnLabelMode() {\n        return this._matchOnLabelMode;\n    }\n    set matchOnLabelMode(value) {\n        this._matchOnLabelMode = value;\n    }\n    get sortByLabel() {\n        return this._sortByLabel;\n    }\n    set sortByLabel(value) {\n        this._sortByLabel = value;\n    }\n    get shouldLoop() {\n        return this._shouldLoop;\n    }\n    set shouldLoop(value) {\n        this._shouldLoop = value;\n    }\n    //#endregion\n    //#region register listeners\n    _registerListeners() {\n        this._registerOnKeyDown();\n        this._registerOnContainerClick();\n        this._registerOnMouseMiddleClick();\n        this._registerOnTreeModelChanged();\n        this._registerOnElementChecked();\n        this._registerOnContextMenu();\n        this._registerHoverListeners();\n        this._registerSelectionChangeListener();\n        this._registerSeparatorActionShowingListeners();\n    }\n    _registerOnKeyDown() {\n        // TODO: Should this be added at a higher level?\n        this._register(this._tree.onKeyDown(e => {\n            const event = new StandardKeyboardEvent(e);\n            switch (event.keyCode) {\n                case 10 /* KeyCode.Space */:\n                    this.toggleCheckbox();\n                    break;\n            }\n            this._onKeyDown.fire(event);\n        }));\n    }\n    _registerOnContainerClick() {\n        this._register(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    }\n    _registerOnMouseMiddleClick() {\n        this._register(dom.addDisposableListener(this._container, dom.EventType.AUXCLICK, e => {\n            if (e.button === 1) {\n                this._onLeave.fire();\n            }\n        }));\n    }\n    _registerOnTreeModelChanged() {\n        this._register(this._tree.onDidChangeModel(() => {\n            const visibleCount = this._itemElements.filter(e => !e.hidden).length;\n            this._visibleCountObservable.set(visibleCount, undefined);\n            if (this._hasCheckboxes) {\n                this._updateCheckedObservables();\n            }\n        }));\n    }\n    _registerOnElementChecked() {\n        // Only fire the last event when buffered\n        this._register(this._elementCheckedEventBufferer.wrapEvent(this._elementChecked.event, (_, e) => e)(_ => this._updateCheckedObservables()));\n    }\n    _registerOnContextMenu() {\n        this._register(this._tree.onContextMenu(e => {\n            if (e.element) {\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._tree.setSelection([e.element]);\n            }\n        }));\n    }\n    _registerHoverListeners() {\n        const delayer = this._register(new ThrottledDelayer(this.hoverDelegate.delay));\n        this._register(this._tree.onMouseOver(async (e) => {\n            // If we hover over an anchor element, we don't want to show the hover because\n            // the anchor may have a tooltip that we want to show instead.\n            if (dom.isHTMLAnchorElement(e.browserEvent.target)) {\n                delayer.cancel();\n                return;\n            }\n            if (\n            // anchors are an exception as called out above so we skip them here\n            !(dom.isHTMLAnchorElement(e.browserEvent.relatedTarget)) &&\n                // check if the mouse is still over the same element\n                dom.isAncestor(e.browserEvent.relatedTarget, e.element?.element)) {\n                return;\n            }\n            try {\n                await delayer.trigger(async () => {\n                    if (e.element instanceof QuickPickItemElement) {\n                        this.showHover(e.element);\n                    }\n                });\n            }\n            catch (e) {\n                // Ignore cancellation errors due to mouse out\n                if (!isCancellationError(e)) {\n                    throw e;\n                }\n            }\n        }));\n        this._register(this._tree.onMouseOut(e => {\n            // onMouseOut triggers every time a new element has been moused over\n            // even if it's on the same list item. We only want one event, so we\n            // check if the mouse is still over the same element.\n            if (dom.isAncestor(e.browserEvent.relatedTarget, e.element?.element)) {\n                return;\n            }\n            delayer.cancel();\n        }));\n    }\n    /**\n     * Register's focus change and mouse events so that we can track when items inside of a\n     * separator's section are focused or hovered so that we can display the separator's actions\n     */\n    _registerSeparatorActionShowingListeners() {\n        this._register(this._tree.onDidChangeFocus(e => {\n            const parent = e.elements[0]\n                ? this._tree.getParentElement(e.elements[0])\n                // treat null as focus lost and when we have no separators\n                : null;\n            for (const separator of this._separatorRenderer.visibleSeparators) {\n                const value = separator === parent;\n                // get bitness of ACTIVE_ITEM and check if it changed\n                const currentActive = !!(separator.focusInsideSeparator & QuickPickSeparatorFocusReason.ACTIVE_ITEM);\n                if (currentActive !== value) {\n                    if (value) {\n                        separator.focusInsideSeparator |= QuickPickSeparatorFocusReason.ACTIVE_ITEM;\n                    }\n                    else {\n                        separator.focusInsideSeparator &= ~QuickPickSeparatorFocusReason.ACTIVE_ITEM;\n                    }\n                    this._tree.rerender(separator);\n                }\n            }\n        }));\n        this._register(this._tree.onMouseOver(e => {\n            const parent = e.element\n                ? this._tree.getParentElement(e.element)\n                : null;\n            for (const separator of this._separatorRenderer.visibleSeparators) {\n                if (separator !== parent) {\n                    continue;\n                }\n                const currentMouse = !!(separator.focusInsideSeparator & QuickPickSeparatorFocusReason.MOUSE_HOVER);\n                if (!currentMouse) {\n                    separator.focusInsideSeparator |= QuickPickSeparatorFocusReason.MOUSE_HOVER;\n                    this._tree.rerender(separator);\n                }\n            }\n        }));\n        this._register(this._tree.onMouseOut(e => {\n            const parent = e.element\n                ? this._tree.getParentElement(e.element)\n                : null;\n            for (const separator of this._separatorRenderer.visibleSeparators) {\n                if (separator !== parent) {\n                    continue;\n                }\n                const currentMouse = !!(separator.focusInsideSeparator & QuickPickSeparatorFocusReason.MOUSE_HOVER);\n                if (currentMouse) {\n                    separator.focusInsideSeparator &= ~QuickPickSeparatorFocusReason.MOUSE_HOVER;\n                    this._tree.rerender(separator);\n                }\n            }\n        }));\n    }\n    _registerSelectionChangeListener() {\n        // When the user selects a separator, the separator will move to the top and focus will be\n        // set to the first element after the separator.\n        this._register(this._tree.onDidChangeSelection(e => {\n            const elementsWithoutSeparators = e.elements.filter((e) => e instanceof QuickPickItemElement);\n            if (elementsWithoutSeparators.length !== e.elements.length) {\n                if (e.elements.length === 1 && e.elements[0] instanceof QuickPickSeparatorElement) {\n                    this._tree.setFocus([e.elements[0].children[0]]);\n                    this._tree.reveal(e.elements[0], 0);\n                }\n                this._tree.setSelection(elementsWithoutSeparators);\n            }\n        }));\n    }\n    //#endregion\n    //#region public methods\n    setAllVisibleChecked(checked) {\n        this._elementCheckedEventBufferer.bufferEvents(() => {\n            this._itemElements.forEach(element => {\n                if (!element.hidden && !element.checkboxDisabled) {\n                    // Would fire an event if we didn't beffer the events\n                    element.checked = checked;\n                }\n            });\n        });\n    }\n    setElements(inputElements) {\n        this._elementDisposable.clear();\n        this._lastQueryString = undefined;\n        this._inputElements = inputElements;\n        this._hasCheckboxes = this.parent.classList.contains('show-checkboxes');\n        let currentSeparatorElement;\n        this._itemElements = new Array();\n        this._elementTree = inputElements.reduce((result, item, index) => {\n            let element;\n            if (item.type === 'separator') {\n                if (!item.buttons) {\n                    // This separator will be rendered as a part of the list item\n                    return result;\n                }\n                currentSeparatorElement = new QuickPickSeparatorElement(index, e => this._onSeparatorButtonTriggered.fire(e), item);\n                element = currentSeparatorElement;\n            }\n            else {\n                const previous = index > 0 ? inputElements[index - 1] : undefined;\n                let separator;\n                if (previous && previous.type === 'separator' && !previous.buttons) {\n                    // Found an inline separator so we clear out the current separator element\n                    currentSeparatorElement = undefined;\n                    separator = previous;\n                }\n                const qpi = new QuickPickItemElement(index, this._hasCheckboxes, e => this._onButtonTriggered.fire(e), this._elementChecked, item, separator);\n                this._itemElements.push(qpi);\n                if (currentSeparatorElement) {\n                    currentSeparatorElement.children.push(qpi);\n                    return result;\n                }\n                element = qpi;\n            }\n            result.push(element);\n            return result;\n        }, new Array());\n        this._setElementsToTree(this._elementTree);\n        // Accessibility hack, unfortunately on next tick\n        // https://github.com/microsoft/vscode/issues/211976\n        if (this.accessibilityService.isScreenReaderOptimized()) {\n            setTimeout(() => {\n                const focusedElement = this._tree.getHTMLElement().querySelector(`.monaco-list-row.focused`);\n                const parent = focusedElement?.parentNode;\n                if (focusedElement && parent) {\n                    const nextSibling = focusedElement.nextSibling;\n                    focusedElement.remove();\n                    parent.insertBefore(focusedElement, nextSibling);\n                }\n            }, 0);\n        }\n    }\n    setFocusedElements(items) {\n        const elements = items.map(item => this._itemElements.find(e => e.item === item))\n            .filter((e) => !!e)\n            .filter(e => !e.hidden);\n        this._tree.setFocus(elements);\n        if (items.length > 0) {\n            const focused = this._tree.getFocus()[0];\n            if (focused) {\n                this._tree.reveal(focused);\n            }\n        }\n    }\n    getActiveDescendant() {\n        return this._tree.getHTMLElement().getAttribute('aria-activedescendant');\n    }\n    setSelectedElements(items) {\n        const elements = items.map(item => this._itemElements.find(e => e.item === item))\n            .filter((e) => !!e);\n        this._tree.setSelection(elements);\n    }\n    getCheckedElements() {\n        return this._itemElements.filter(e => e.checked)\n            .map(e => e.item);\n    }\n    setCheckedElements(items) {\n        this._elementCheckedEventBufferer.bufferEvents(() => {\n            const checked = new Set();\n            for (const item of items) {\n                checked.add(item);\n            }\n            for (const element of this._itemElements) {\n                // Would fire an event if we didn't beffer the events\n                element.checked = checked.has(element.item);\n            }\n        });\n    }\n    focus(what) {\n        if (!this._itemElements.length) {\n            return;\n        }\n        if (what === QuickPickFocus.Second && this._itemElements.length < 2) {\n            what = QuickPickFocus.First;\n        }\n        switch (what) {\n            case QuickPickFocus.First:\n                this._tree.scrollTop = 0;\n                this._tree.focusFirst(undefined, (e) => e.element instanceof QuickPickItemElement);\n                break;\n            case QuickPickFocus.Second: {\n                this._tree.scrollTop = 0;\n                let isSecondItem = false;\n                this._tree.focusFirst(undefined, (e) => {\n                    if (!(e.element instanceof QuickPickItemElement)) {\n                        return false;\n                    }\n                    if (isSecondItem) {\n                        return true;\n                    }\n                    isSecondItem = !isSecondItem;\n                    return false;\n                });\n                break;\n            }\n            case QuickPickFocus.Last:\n                this._tree.scrollTop = this._tree.scrollHeight;\n                this._tree.focusLast(undefined, (e) => e.element instanceof QuickPickItemElement);\n                break;\n            case QuickPickFocus.Next: {\n                const prevFocus = this._tree.getFocus();\n                this._tree.focusNext(undefined, this._shouldLoop, undefined, (e) => {\n                    if (!(e.element instanceof QuickPickItemElement)) {\n                        return false;\n                    }\n                    this._tree.reveal(e.element);\n                    return true;\n                });\n                const currentFocus = this._tree.getFocus();\n                if (prevFocus.length && prevFocus[0] === currentFocus[0] && prevFocus[0] === this._itemElements[this._itemElements.length - 1]) {\n                    this._onLeave.fire();\n                }\n                break;\n            }\n            case QuickPickFocus.Previous: {\n                const prevFocus = this._tree.getFocus();\n                this._tree.focusPrevious(undefined, this._shouldLoop, undefined, (e) => {\n                    if (!(e.element instanceof QuickPickItemElement)) {\n                        return false;\n                    }\n                    const parent = this._tree.getParentElement(e.element);\n                    if (parent === null || parent.children[0] !== e.element) {\n                        this._tree.reveal(e.element);\n                    }\n                    else {\n                        // Only if we are the first child of a separator do we reveal the separator\n                        this._tree.reveal(parent);\n                    }\n                    return true;\n                });\n                const currentFocus = this._tree.getFocus();\n                if (prevFocus.length && prevFocus[0] === currentFocus[0] && prevFocus[0] === this._itemElements[0]) {\n                    this._onLeave.fire();\n                }\n                break;\n            }\n            case QuickPickFocus.NextPage:\n                this._tree.focusNextPage(undefined, (e) => {\n                    if (!(e.element instanceof QuickPickItemElement)) {\n                        return false;\n                    }\n                    this._tree.reveal(e.element);\n                    return true;\n                });\n                break;\n            case QuickPickFocus.PreviousPage:\n                this._tree.focusPreviousPage(undefined, (e) => {\n                    if (!(e.element instanceof QuickPickItemElement)) {\n                        return false;\n                    }\n                    const parent = this._tree.getParentElement(e.element);\n                    if (parent === null || parent.children[0] !== e.element) {\n                        this._tree.reveal(e.element);\n                    }\n                    else {\n                        this._tree.reveal(parent);\n                    }\n                    return true;\n                });\n                break;\n            case QuickPickFocus.NextSeparator: {\n                let foundSeparatorAsItem = false;\n                const before = this._tree.getFocus()[0];\n                this._tree.focusNext(undefined, true, undefined, (e) => {\n                    if (foundSeparatorAsItem) {\n                        // This should be the index right after the separator so it\n                        // is the item we want to focus.\n                        return true;\n                    }\n                    if (e.element instanceof QuickPickSeparatorElement) {\n                        foundSeparatorAsItem = true;\n                        // If the separator is visible, then we should just reveal its first child so it's not as jarring.\n                        if (this._separatorRenderer.isSeparatorVisible(e.element)) {\n                            this._tree.reveal(e.element.children[0]);\n                        }\n                        else {\n                            // If the separator is not visible, then we should\n                            // push it up to the top of the list.\n                            this._tree.reveal(e.element, 0);\n                        }\n                    }\n                    else if (e.element instanceof QuickPickItemElement) {\n                        if (e.element.separator) {\n                            if (this._itemRenderer.isItemWithSeparatorVisible(e.element)) {\n                                this._tree.reveal(e.element);\n                            }\n                            else {\n                                this._tree.reveal(e.element, 0);\n                            }\n                            return true;\n                        }\n                        else if (e.element === this._elementTree[0]) {\n                            // We should stop at the first item in the list if it's a regular item.\n                            this._tree.reveal(e.element, 0);\n                            return true;\n                        }\n                    }\n                    return false;\n                });\n                const after = this._tree.getFocus()[0];\n                if (before === after) {\n                    // If we didn't move, then we should just move to the end\n                    // of the list.\n                    this._tree.scrollTop = this._tree.scrollHeight;\n                    this._tree.focusLast(undefined, (e) => e.element instanceof QuickPickItemElement);\n                }\n                break;\n            }\n            case QuickPickFocus.PreviousSeparator: {\n                let focusElement;\n                // If we are already sitting on an inline separator, then we\n                // have already found the _current_ separator and need to\n                // move to the previous one.\n                let foundSeparator = !!this._tree.getFocus()[0]?.separator;\n                this._tree.focusPrevious(undefined, true, undefined, (e) => {\n                    if (e.element instanceof QuickPickSeparatorElement) {\n                        if (foundSeparator) {\n                            if (!focusElement) {\n                                if (this._separatorRenderer.isSeparatorVisible(e.element)) {\n                                    this._tree.reveal(e.element);\n                                }\n                                else {\n                                    this._tree.reveal(e.element, 0);\n                                }\n                                focusElement = e.element.children[0];\n                            }\n                        }\n                        else {\n                            foundSeparator = true;\n                        }\n                    }\n                    else if (e.element instanceof QuickPickItemElement) {\n                        if (!focusElement) {\n                            if (e.element.separator) {\n                                if (this._itemRenderer.isItemWithSeparatorVisible(e.element)) {\n                                    this._tree.reveal(e.element);\n                                }\n                                else {\n                                    this._tree.reveal(e.element, 0);\n                                }\n                                focusElement = e.element;\n                            }\n                            else if (e.element === this._elementTree[0]) {\n                                // We should stop at the first item in the list if it's a regular item.\n                                this._tree.reveal(e.element, 0);\n                                return true;\n                            }\n                        }\n                    }\n                    return false;\n                });\n                if (focusElement) {\n                    this._tree.setFocus([focusElement]);\n                }\n                break;\n            }\n        }\n    }\n    clearFocus() {\n        this._tree.setFocus([]);\n    }\n    domFocus() {\n        this._tree.domFocus();\n    }\n    layout(maxHeight) {\n        this._tree.getHTMLElement().style.maxHeight = maxHeight ? `${\n        // Make sure height aligns with list item heights\n        Math.floor(maxHeight / 44) * 44\n            // Add some extra height so that it's clear there's more to scroll\n            + 6}px` : '';\n        this._tree.layout();\n    }\n    filter(query) {\n        this._lastQueryString = query;\n        if (!(this._sortByLabel || this._matchOnLabel || this._matchOnDescription || this._matchOnDetail)) {\n            this._tree.layout();\n            return false;\n        }\n        const queryWithWhitespace = query;\n        query = query.trim();\n        // Reset filtering\n        if (!query || !(this.matchOnLabel || this.matchOnDescription || this.matchOnDetail)) {\n            this._itemElements.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                if (element.item) {\n                    element.separator = previous && previous.type === 'separator' && !previous.buttons ? previous : undefined;\n                }\n            });\n        }\n        // Filter by value (since we support icons in labels, use $(..) aware fuzzy matching)\n        else {\n            let currentSeparator;\n            this._itemElements.forEach(element => {\n                let labelHighlights;\n                if (this.matchOnLabelMode === 'fuzzy') {\n                    labelHighlights = this.matchOnLabel ? matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneLabel)) ?? undefined : undefined;\n                }\n                else {\n                    labelHighlights = this.matchOnLabel ? matchesContiguousIconAware(queryWithWhitespace, parseLabelWithIcons(element.saneLabel)) ?? undefined : undefined;\n                }\n                const descriptionHighlights = this.matchOnDescription ? matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneDescription || '')) ?? undefined : undefined;\n                const detailHighlights = this.matchOnDetail ? matchesFuzzyIconAware(query, parseLabelWithIcons(element.saneDetail || '')) ?? undefined : undefined;\n                if (labelHighlights || descriptionHighlights || detailHighlights) {\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 ? !element.item.alwaysShow : true;\n                }\n                // Ensure separators are filtered out first before deciding if we need to bring them back\n                if (element.item) {\n                    element.separator = undefined;\n                }\n                else if (element.separator) {\n                    element.hidden = true;\n                }\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] || undefined;\n                    if (previous?.type === 'separator' && !previous.buttons) {\n                        currentSeparator = previous;\n                    }\n                    if (currentSeparator && !element.hidden) {\n                        element.separator = currentSeparator;\n                        currentSeparator = undefined;\n                    }\n                }\n            });\n        }\n        this._setElementsToTree(this._sortByLabel && query\n            // We don't render any separators if we're sorting so just render the elements\n            ? this._itemElements\n            // Render the full tree\n            : this._elementTree);\n        this._tree.layout();\n        return true;\n    }\n    toggleCheckbox() {\n        this._elementCheckedEventBufferer.bufferEvents(() => {\n            const elements = this._tree.getFocus().filter((e) => e instanceof QuickPickItemElement);\n            const allChecked = this._allVisibleChecked(elements);\n            for (const element of elements) {\n                if (!element.checkboxDisabled) {\n                    // Would fire an event if we didn't have the flag set\n                    element.checked = !allChecked;\n                }\n            }\n        });\n    }\n    style(styles) {\n        this._tree.style(styles);\n    }\n    toggleHover() {\n        const focused = this._tree.getFocus()[0];\n        if (!focused?.saneTooltip || !(focused instanceof QuickPickItemElement)) {\n            return;\n        }\n        // if there's a hover already, hide it (toggle off)\n        if (this._lastHover && !this._lastHover.isDisposed) {\n            this._lastHover.dispose();\n            return;\n        }\n        // If there is no hover, show it (toggle on)\n        this.showHover(focused);\n        const store = new DisposableStore();\n        store.add(this._tree.onDidChangeFocus(e => {\n            if (e.elements[0] instanceof QuickPickItemElement) {\n                this.showHover(e.elements[0]);\n            }\n        }));\n        if (this._lastHover) {\n            store.add(this._lastHover);\n        }\n        this._elementDisposable.add(store);\n    }\n    //#endregion\n    //#region private methods\n    _setElementsToTree(elements) {\n        const treeElements = new Array();\n        for (const element of elements) {\n            if (element instanceof QuickPickSeparatorElement) {\n                treeElements.push({\n                    element,\n                    collapsible: false,\n                    collapsed: false,\n                    children: element.children.map(e => ({\n                        element: e,\n                        collapsible: false,\n                        collapsed: false,\n                    })),\n                });\n            }\n            else {\n                treeElements.push({\n                    element,\n                    collapsible: false,\n                    collapsed: false,\n                });\n            }\n        }\n        this._tree.setChildren(null, treeElements);\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    _updateCheckedObservables() {\n        transaction((tx) => {\n            this._allVisibleCheckedObservable.set(this._allVisibleChecked(this._itemElements, false), tx);\n            const checkedCount = this._itemElements.filter(element => element.checked).length;\n            this._checkedCountObservable.set(checkedCount, tx);\n            this._checkedElementsObservable.set(this.getCheckedElements(), tx);\n        });\n    }\n    /**\n     * Disposes of the hover and shows a new one for the given index if it has a tooltip.\n     * @param element The element to show the hover for\n     */\n    showHover(element) {\n        if (this._lastHover && !this._lastHover.isDisposed) {\n            this.hoverDelegate.onDidHideHover?.();\n            this._lastHover?.dispose();\n        }\n        if (!element.element || !element.saneTooltip) {\n            return;\n        }\n        this._lastHover = this.hoverDelegate.showHover({\n            content: element.saneTooltip,\n            target: element.element,\n            linkHandler: (url) => {\n                this.linkOpenerDelegate(url);\n            },\n            appearance: {\n                showPointer: true,\n            },\n            container: this._container,\n            position: {\n                hoverPosition: 1 /* HoverPosition.RIGHT */\n            }\n        }, false);\n    }\n};\n__decorate([\n    memoize\n], QuickInputTree.prototype, \"onDidChangeFocus\", null);\n__decorate([\n    memoize\n], QuickInputTree.prototype, \"onDidChangeSelection\", null);\nQuickInputTree = __decorate([\n    __param(4, IInstantiationService),\n    __param(5, IAccessibilityService)\n], QuickInputTree);\nexport { QuickInputTree };\nfunction matchesContiguousIconAware(query, target) {\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 matchesContiguous(query, text);\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 = matchesContiguous(query, wordToMatchAgainstWithoutIconsTrimmed);\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}\nfunction matchesContiguous(word, wordToMatchAgainst) {\n    const matchIndex = wordToMatchAgainst.toLowerCase().indexOf(word.toLowerCase());\n    if (matchIndex !== -1) {\n        return [{ start: matchIndex, end: matchIndex + word.length }];\n    }\n    return null;\n}\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.saneSortLabel, elementB.saneSortLabel, lookFor);\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { isMacintosh } from '../../../base/common/platform.js';\nimport { localize } from '../../../nls.js';\nimport { ContextKeyExpr } from '../../contextkey/common/contextkey.js';\nimport { InputFocusedContext } from '../../contextkey/common/contextkeys.js';\nimport { KeybindingsRegistry } from '../../keybinding/common/keybindingsRegistry.js';\nimport { endOfQuickInputBoxContext, inQuickInputContext, quickInputTypeContextKeyValue } from './quickInput.js';\nimport { IQuickInputService, QuickPickFocus } from '../common/quickInput.js';\nconst defaultCommandAndKeybindingRule = {\n    weight: 200 /* KeybindingWeight.WorkbenchContrib */,\n    when: ContextKeyExpr.and(ContextKeyExpr.equals(quickInputTypeContextKeyValue, \"quickPick\" /* QuickInputType.QuickPick */), inQuickInputContext),\n    metadata: { description: localize('quickPick', \"Used while in the context of the quick pick. If you change one keybinding for this command, you should change all of the other keybindings (modifier variants) of this command as well.\") }\n};\nfunction registerQuickPickCommandAndKeybindingRule(rule, options = {}) {\n    KeybindingsRegistry.registerCommandAndKeybindingRule({\n        ...defaultCommandAndKeybindingRule,\n        ...rule,\n        secondary: getSecondary(rule.primary, rule.secondary ?? [], options)\n    });\n}\nconst ctrlKeyMod = isMacintosh ? 256 /* KeyMod.WinCtrl */ : 2048 /* KeyMod.CtrlCmd */;\n// This function will generate all the combinations of keybindings for the given primary keybinding\nfunction getSecondary(primary, secondary, options = {}) {\n    if (options.withAltMod) {\n        secondary.push(512 /* KeyMod.Alt */ + primary);\n    }\n    if (options.withCtrlMod) {\n        secondary.push(ctrlKeyMod + primary);\n        if (options.withAltMod) {\n            secondary.push(512 /* KeyMod.Alt */ + ctrlKeyMod + primary);\n        }\n    }\n    if (options.withCmdMod && isMacintosh) {\n        secondary.push(2048 /* KeyMod.CtrlCmd */ + primary);\n        if (options.withCtrlMod) {\n            secondary.push(2048 /* KeyMod.CtrlCmd */ + 256 /* KeyMod.WinCtrl */ + primary);\n        }\n        if (options.withAltMod) {\n            secondary.push(2048 /* KeyMod.CtrlCmd */ + 512 /* KeyMod.Alt */ + primary);\n            if (options.withCtrlMod) {\n                secondary.push(2048 /* KeyMod.CtrlCmd */ + 512 /* KeyMod.Alt */ + 256 /* KeyMod.WinCtrl */ + primary);\n            }\n        }\n    }\n    return secondary;\n}\n//#region Navigation\nfunction focusHandler(focus, focusOnQuickNatigate) {\n    return accessor => {\n        // Assuming this is a quick pick due to above when clause\n        const currentQuickPick = accessor.get(IQuickInputService).currentQuickInput;\n        if (!currentQuickPick) {\n            return;\n        }\n        if (focusOnQuickNatigate && currentQuickPick.quickNavigate) {\n            return currentQuickPick.focus(focusOnQuickNatigate);\n        }\n        return currentQuickPick.focus(focus);\n    };\n}\nregisterQuickPickCommandAndKeybindingRule({ id: 'quickInput.pageNext', primary: 12 /* KeyCode.PageDown */, handler: focusHandler(QuickPickFocus.NextPage) }, { withAltMod: true, withCtrlMod: true, withCmdMod: true });\nregisterQuickPickCommandAndKeybindingRule({ id: 'quickInput.pagePrevious', primary: 11 /* KeyCode.PageUp */, handler: focusHandler(QuickPickFocus.PreviousPage) }, { withAltMod: true, withCtrlMod: true, withCmdMod: true });\nregisterQuickPickCommandAndKeybindingRule({ id: 'quickInput.first', primary: ctrlKeyMod + 14 /* KeyCode.Home */, handler: focusHandler(QuickPickFocus.First) }, { withAltMod: true, withCmdMod: true });\nregisterQuickPickCommandAndKeybindingRule({ id: 'quickInput.last', primary: ctrlKeyMod + 13 /* KeyCode.End */, handler: focusHandler(QuickPickFocus.Last) }, { withAltMod: true, withCmdMod: true });\nregisterQuickPickCommandAndKeybindingRule({ id: 'quickInput.next', primary: 18 /* KeyCode.DownArrow */, handler: focusHandler(QuickPickFocus.Next) }, { withCtrlMod: true });\nregisterQuickPickCommandAndKeybindingRule({ id: 'quickInput.previous', primary: 16 /* KeyCode.UpArrow */, handler: focusHandler(QuickPickFocus.Previous) }, { withCtrlMod: true });\n// The next & previous separator commands are interesting because if we are in quick access mode, we are already holding a modifier key down.\n// In this case, we want that modifier key+up/down to navigate to the next/previous item, not the next/previous separator.\n// To handle this, we have a separate command for navigating to the next/previous separator when we are not in quick access mode.\n// If, however, we are in quick access mode, and you hold down an additional modifier key, we will navigate to the next/previous separator.\nconst nextSeparatorFallbackDesc = localize('quickInput.nextSeparatorWithQuickAccessFallback', \"If we're in quick access mode, this will navigate to the next item. If we are not in quick access mode, this will navigate to the next separator.\");\nconst prevSeparatorFallbackDesc = localize('quickInput.previousSeparatorWithQuickAccessFallback', \"If we're in quick access mode, this will navigate to the previous item. If we are not in quick access mode, this will navigate to the previous separator.\");\nif (isMacintosh) {\n    registerQuickPickCommandAndKeybindingRule({\n        id: 'quickInput.nextSeparatorWithQuickAccessFallback',\n        primary: 2048 /* KeyMod.CtrlCmd */ + 18 /* KeyCode.DownArrow */,\n        handler: focusHandler(QuickPickFocus.NextSeparator, QuickPickFocus.Next),\n        metadata: { description: nextSeparatorFallbackDesc }\n    });\n    registerQuickPickCommandAndKeybindingRule({\n        id: 'quickInput.nextSeparator',\n        primary: 2048 /* KeyMod.CtrlCmd */ + 512 /* KeyMod.Alt */ + 18 /* KeyCode.DownArrow */,\n        // Since macOS has the cmd key as the primary modifier, we need to add this additional\n        // keybinding to capture cmd+ctrl+upArrow\n        secondary: [2048 /* KeyMod.CtrlCmd */ + 256 /* KeyMod.WinCtrl */ + 18 /* KeyCode.DownArrow */],\n        handler: focusHandler(QuickPickFocus.NextSeparator)\n    }, { withCtrlMod: true });\n    registerQuickPickCommandAndKeybindingRule({\n        id: 'quickInput.previousSeparatorWithQuickAccessFallback',\n        primary: 2048 /* KeyMod.CtrlCmd */ + 16 /* KeyCode.UpArrow */,\n        handler: focusHandler(QuickPickFocus.PreviousSeparator, QuickPickFocus.Previous),\n        metadata: { description: prevSeparatorFallbackDesc }\n    });\n    registerQuickPickCommandAndKeybindingRule({\n        id: 'quickInput.previousSeparator',\n        primary: 2048 /* KeyMod.CtrlCmd */ + 512 /* KeyMod.Alt */ + 16 /* KeyCode.UpArrow */,\n        // Since macOS has the cmd key as the primary modifier, we need to add this additional\n        // keybinding to capture cmd+ctrl+upArrow\n        secondary: [2048 /* KeyMod.CtrlCmd */ + 256 /* KeyMod.WinCtrl */ + 16 /* KeyCode.UpArrow */],\n        handler: focusHandler(QuickPickFocus.PreviousSeparator)\n    }, { withCtrlMod: true });\n}\nelse {\n    registerQuickPickCommandAndKeybindingRule({\n        id: 'quickInput.nextSeparatorWithQuickAccessFallback',\n        primary: 512 /* KeyMod.Alt */ + 18 /* KeyCode.DownArrow */,\n        handler: focusHandler(QuickPickFocus.NextSeparator, QuickPickFocus.Next),\n        metadata: { description: nextSeparatorFallbackDesc }\n    });\n    registerQuickPickCommandAndKeybindingRule({\n        id: 'quickInput.nextSeparator',\n        primary: 2048 /* KeyMod.CtrlCmd */ + 512 /* KeyMod.Alt */ + 18 /* KeyCode.DownArrow */,\n        handler: focusHandler(QuickPickFocus.NextSeparator)\n    });\n    registerQuickPickCommandAndKeybindingRule({\n        id: 'quickInput.previousSeparatorWithQuickAccessFallback',\n        primary: 512 /* KeyMod.Alt */ + 16 /* KeyCode.UpArrow */,\n        handler: focusHandler(QuickPickFocus.PreviousSeparator, QuickPickFocus.Previous),\n        metadata: { description: prevSeparatorFallbackDesc }\n    });\n    registerQuickPickCommandAndKeybindingRule({\n        id: 'quickInput.previousSeparator',\n        primary: 2048 /* KeyMod.CtrlCmd */ + 512 /* KeyMod.Alt */ + 16 /* KeyCode.UpArrow */,\n        handler: focusHandler(QuickPickFocus.PreviousSeparator)\n    });\n}\n//#endregion\n//#region Accept\nregisterQuickPickCommandAndKeybindingRule({\n    id: 'quickInput.acceptInBackground',\n    // If we are in the quick pick but the input box is not focused or our cursor is at the end of the input box\n    when: ContextKeyExpr.and(defaultCommandAndKeybindingRule.when, ContextKeyExpr.or(InputFocusedContext.negate(), endOfQuickInputBoxContext)),\n    primary: 17 /* KeyCode.RightArrow */,\n    // Need a little extra weight to ensure this keybinding is preferred over the default cmd+alt+right arrow keybinding\n    // https://github.com/microsoft/vscode/blob/1451e4fbbbf074a4355cc537c35b547b80ce1c52/src/vs/workbench/browser/parts/editor/editorActions.ts#L1178-L1195\n    weight: 200 /* KeybindingWeight.WorkbenchContrib */ + 50,\n    handler: (accessor) => {\n        const currentQuickPick = accessor.get(IQuickInputService).currentQuickInput;\n        currentQuickPick?.accept(true);\n    },\n}, { withAltMod: true, withCtrlMod: true, withCmdMod: 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 QuickInputController_1;\nimport * as dom from '../../../base/browser/dom.js';\nimport { ActionBar } from '../../../base/browser/ui/actionbar/actionbar.js';\nimport { Button } from '../../../base/browser/ui/button/button.js';\nimport { CountBadge } from '../../../base/browser/ui/countBadge/countBadge.js';\nimport { ProgressBar } from '../../../base/browser/ui/progressbar/progressbar.js';\nimport { CancellationToken } from '../../../base/common/cancellation.js';\nimport { Emitter, Event } from '../../../base/common/event.js';\nimport { Disposable, dispose } from '../../../base/common/lifecycle.js';\nimport Severity from '../../../base/common/severity.js';\nimport { localize } from '../../../nls.js';\nimport { QuickInputHideReason } from '../common/quickInput.js';\nimport { QuickInputBox } from './quickInputBox.js';\nimport { QuickPick, backButton, InputBox, InQuickInputContextKey, QuickInputTypeContextKey, EndOfQuickInputBoxContextKey } from './quickInput.js';\nimport { ILayoutService } from '../../layout/browser/layoutService.js';\nimport { mainWindow } from '../../../base/browser/window.js';\nimport { IInstantiationService } from '../../instantiation/common/instantiation.js';\nimport { QuickInputTree } from './quickInputTree.js';\nimport { IContextKeyService } from '../../contextkey/common/contextkey.js';\nimport './quickInputActions.js';\nconst $ = dom.$;\nlet QuickInputController = class QuickInputController extends Disposable {\n    static { QuickInputController_1 = this; }\n    static { this.MAX_WIDTH = 600; } // Max total width of quick input widget\n    get currentQuickInput() { return this.controller ?? undefined; }\n    get container() { return this._container; }\n    constructor(options, layoutService, instantiationService, contextKeyService) {\n        super();\n        this.options = options;\n        this.layoutService = layoutService;\n        this.instantiationService = instantiationService;\n        this.contextKeyService = contextKeyService;\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.inQuickInputContext = InQuickInputContextKey.bindTo(this.contextKeyService);\n        this.quickInputTypeContext = QuickInputTypeContextKey.bindTo(this.contextKeyService);\n        this.endOfQuickInputBoxContext = EndOfQuickInputBoxContextKey.bindTo(this.contextKeyService);\n        this.idPrefix = options.idPrefix;\n        this._container = options.container;\n        this.styles = options.styles;\n        this._register(Event.runAndSubscribe(dom.onDidRegisterWindow, ({ window, disposables }) => this.registerKeyModsListeners(window, disposables), { window: mainWindow, disposables: this._store }));\n        this._register(dom.onWillUnregisterWindow(window => {\n            if (this.ui && dom.getWindow(this.ui.container) === window) {\n                // The window this quick input is contained in is about to\n                // close, so we have to make sure to reparent it back to an\n                // existing parent to not loose functionality.\n                // (https://github.com/microsoft/vscode/issues/195870)\n                this.reparentUI(this.layoutService.mainContainer);\n                this.layout(this.layoutService.mainContainerDimension, this.layoutService.mainContainerOffset.quickPickTop);\n            }\n        }));\n    }\n    registerKeyModsListeners(window, disposables) {\n        const listener = (e) => {\n            this.keyMods.ctrlCmd = e.ctrlKey || e.metaKey;\n            this.keyMods.alt = e.altKey;\n        };\n        for (const event of [dom.EventType.KEY_DOWN, dom.EventType.KEY_UP, dom.EventType.MOUSE_DOWN]) {\n            disposables.add(dom.addDisposableListener(window, event, listener, true));\n        }\n    }\n    getUI(showInActiveContainer) {\n        if (this.ui) {\n            // In order to support aux windows, re-parent the controller\n            // if the original event is from a different document\n            if (showInActiveContainer) {\n                if (dom.getWindow(this._container) !== dom.getWindow(this.layoutService.activeContainer)) {\n                    this.reparentUI(this.layoutService.activeContainer);\n                    this.layout(this.layoutService.activeContainerDimension, this.layoutService.activeContainerOffset.quickPickTop);\n                }\n            }\n            return this.ui;\n        }\n        const container = dom.append(this._container, $('.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, { hoverDelegate: this.options.hoverDelegate }));\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, { hoverDelegate: this.options.hoverDelegate }));\n        rightActionBar.domNode.classList.add('quick-input-right-action-bar');\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        checkAll.setAttribute('aria-label', localize('quickInput.checkAll', \"Toggle all checkboxes\"));\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 inputContainer = dom.append(headerContainer, $('.quick-input-and-message'));\n        const filterContainer = dom.append(inputContainer, $('.quick-input-filter'));\n        const inputBox = this._register(new QuickInputBox(filterContainer, this.styles.inputBox, this.styles.toggle));\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\") }, this.styles.countBadge);\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\") }, this.styles.countBadge);\n        const inlineActionBar = this._register(new ActionBar(headerContainer, { hoverDelegate: this.options.hoverDelegate }));\n        inlineActionBar.domNode.classList.add('quick-input-inline-action-bar');\n        const okContainer = dom.append(headerContainer, $('.quick-input-action'));\n        const ok = this._register(new Button(okContainer, this.styles.button));\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 = this._register(new Button(customButtonContainer, { ...this.styles.button, supportIcons: true }));\n        customButton.label = localize('custom', \"Custom\");\n        this._register(customButton.onDidClick(e => {\n            this.onDidCustomEmitter.fire();\n        }));\n        const message = dom.append(inputContainer, $(`#${this.idPrefix}message.quick-input-message`));\n        const progressBar = this._register(new ProgressBar(container, this.styles.progressBar));\n        progressBar.getContainer().classList.add('quick-input-progress');\n        const widget = dom.append(container, $('.quick-input-html-widget'));\n        widget.tabIndex = -1;\n        const description1 = dom.append(container, $('.quick-input-description'));\n        const listId = this.idPrefix + 'list';\n        const list = this._register(this.instantiationService.createInstance(QuickInputTree, container, this.options.hoverDelegate, this.options.linkOpenerDelegate, listId));\n        inputBox.setAttribute('aria-controls', listId);\n        this._register(list.onDidChangeFocus(() => {\n            inputBox.setAttribute('aria-activedescendant', list.getActiveDescendant() ?? '');\n        }));\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            // TODO@TylerLeonhardt https://github.com/microsoft/vscode/issues/203675\n            setTimeout(() => {\n                if (!this.controller) {\n                    return;\n                }\n                inputBox.setFocus();\n                if (this.controller instanceof QuickPick && this.controller.canSelectMany) {\n                    list.clearFocus();\n                }\n            }, 0);\n        }));\n        const focusTracker = dom.trackFocus(container);\n        this._register(focusTracker);\n        this._register(dom.addDisposableListener(container, dom.EventType.FOCUS, e => {\n            const ui = this.getUI();\n            if (dom.isAncestor(e.relatedTarget, ui.inputContainer)) {\n                const value = ui.inputBox.isSelectionAtEnd();\n                if (this.endOfQuickInputBoxContext.get() !== value) {\n                    this.endOfQuickInputBoxContext.set(value);\n                }\n            }\n            // Ignore focus events within container\n            if (dom.isAncestor(e.relatedTarget, ui.container)) {\n                return;\n            }\n            this.inQuickInputContext.set(true);\n            this.previousFocusElement = dom.isHTMLElement(e.relatedTarget) ? 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.inQuickInputContext.set(false);\n            this.endOfQuickInputBoxContext.set(false);\n            this.previousFocusElement = undefined;\n        }));\n        this._register(inputBox.onKeyDown(_ => {\n            const value = this.getUI().inputBox.isSelectionAtEnd();\n            if (this.endOfQuickInputBoxContext.get() !== value) {\n                this.endOfQuickInputBoxContext.set(value);\n            }\n        }));\n        this._register(dom.addDisposableListener(container, dom.EventType.FOCUS, (e) => {\n            inputBox.setFocus();\n        }));\n        // TODO: Turn into commands instead of handling KEY_DOWN\n        // Keybindings for the quickinput widget as a whole\n        this._register(dom.addStandardDisposableListener(container, dom.EventType.KEY_DOWN, (event) => {\n            if (dom.isAncestor(event.target, widget)) {\n                return; // Ignore event if target is inside widget to allow the widget to handle the event.\n            }\n            switch (event.keyCode) {\n                case 3 /* KeyCode.Enter */:\n                    dom.EventHelper.stop(event, true);\n                    if (this.enabled) {\n                        this.onDidAcceptEmitter.fire();\n                    }\n                    break;\n                case 9 /* KeyCode.Escape */:\n                    dom.EventHelper.stop(event, true);\n                    this.hide(QuickInputHideReason.Gesture);\n                    break;\n                case 2 /* KeyCode.Tab */:\n                    if (!event.altKey && !event.ctrlKey && !event.metaKey) {\n                        // detect only visible actions\n                        const selectors = [\n                            '.quick-input-list .monaco-action-bar .always-visible',\n                            '.quick-input-list-entry:hover .monaco-action-bar',\n                            '.monaco-list-row.focused .monaco-action-bar'\n                        ];\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.displayed) {\n                            selectors.push('.monaco-list');\n                        }\n                        // focus links if there are any\n                        if (this.getUI().message) {\n                            selectors.push('.quick-input-message a');\n                        }\n                        if (this.getUI().widget) {\n                            if (dom.isAncestor(event.target, this.getUI().widget)) {\n                                // let the widget control tab\n                                break;\n                            }\n                            selectors.push('.quick-input-html-widget');\n                        }\n                        const stops = container.querySelectorAll(selectors.join(', '));\n                        if (event.shiftKey && event.target === stops[0]) {\n                            // Clear the focus from the list in order to allow\n                            // screen readers to read operations in the input box.\n                            dom.EventHelper.stop(event, true);\n                            list.clearFocus();\n                        }\n                        else if (!event.shiftKey && dom.isAncestor(event.target, stops[stops.length - 1])) {\n                            dom.EventHelper.stop(event, true);\n                            stops[0].focus();\n                        }\n                    }\n                    break;\n                case 10 /* KeyCode.Space */:\n                    if (event.ctrlKey) {\n                        dom.EventHelper.stop(event, true);\n                        this.getUI().list.toggleHover();\n                    }\n                    break;\n            }\n        }));\n        this.ui = {\n            container,\n            styleSheet,\n            leftActionBar,\n            titleBar,\n            title,\n            description1,\n            description2,\n            widget,\n            rightActionBar,\n            inlineActionBar,\n            checkAll,\n            inputContainer,\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            show: controller => this.show(controller),\n            hide: () => this.hide(),\n            setVisibilities: visibilities => this.setVisibilities(visibilities),\n            setEnabled: enabled => this.setEnabled(enabled),\n            setContextKey: contextKey => this.options.setContextKey(contextKey),\n            linkOpenerDelegate: content => this.options.linkOpenerDelegate(content)\n        };\n        this.updateStyles();\n        return this.ui;\n    }\n    reparentUI(container) {\n        if (this.ui) {\n            this._container = container;\n            dom.append(this._container, this.ui.container);\n        }\n    }\n    pick(picks, options = {}, token = CancellationToken.None) {\n        return new Promise((doResolve, reject) => {\n            let resolve = (result) => {\n                resolve = doResolve;\n                options.onKeyMods?.(input.keyMods);\n                doResolve(result);\n            };\n            if (token.isCancellationRequested) {\n                resolve(undefined);\n                return;\n            }\n            const input = this.createQuickPick({ useSeparators: true });\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({\n                    ...event,\n                    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(activeItem => activeItem !== removed[0]);\n                            const keepScrollPositionBefore = input.keepScrollPosition;\n                            input.keepScrollPosition = true;\n                            input.items = items;\n                            if (activeItems) {\n                                input.activeItems = activeItems;\n                            }\n                            input.keepScrollPosition = keepScrollPositionBefore;\n                        }\n                    }\n                })),\n                input.onDidTriggerSeparatorButton(event => options.onDidTriggerSeparatorButton?.(event)),\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            if (options.value) {\n                input.value = options.value;\n            }\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.quickNavigate = options.quickNavigate;\n            input.hideInput = !!options.hideInput;\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(options = { useSeparators: false }) {\n        const ui = this.getUI(true);\n        return new QuickPick(ui);\n    }\n    createInputBox() {\n        const ui = this.getUI(true);\n        return new InputBox(ui);\n    }\n    show(controller) {\n        const ui = this.getUI(true);\n        this.onShowEmitter.fire();\n        const oldController = this.controller;\n        this.controller = controller;\n        oldController?.didHide();\n        this.setEnabled(true);\n        ui.leftActionBar.clear();\n        ui.title.textContent = '';\n        ui.description1.textContent = '';\n        ui.description2.textContent = '';\n        dom.reset(ui.widget);\n        ui.rightActionBar.clear();\n        ui.inlineActionBar.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        ui.inputBox.toggles = undefined;\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        this.quickInputTypeContext.set(controller.type);\n    }\n    isVisible() {\n        return !!this.ui && this.ui.container.style.display !== 'none';\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.inputContainer.style.display = visibilities.inputBox ? '' : '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.displayed = !!visibilities.list;\n        ui.container.classList.toggle('show-checkboxes', !!visibilities.checkBox);\n        ui.container.classList.toggle('hidden-input', !visibilities.inputBox && !visibilities.description);\n        this.updateLayout(); // TODO\n    }\n    setEnabled(enabled) {\n        if (enabled !== this.enabled) {\n            this.enabled = enabled;\n            for (const item of this.getUI().leftActionBar.viewItems) {\n                item.action.enabled = enabled;\n            }\n            for (const item of this.getUI().rightActionBar.viewItems) {\n                item.action.enabled = enabled;\n            }\n            this.getUI().checkAll.disabled = !enabled;\n            this.getUI().inputBox.enabled = enabled;\n            this.getUI().ok.enabled = enabled;\n            this.getUI().list.enabled = enabled;\n        }\n    }\n    hide(reason) {\n        const controller = this.controller;\n        if (!controller) {\n            return;\n        }\n        controller.willHide(reason);\n        const container = this.ui?.container;\n        const focusChanged = container && !dom.isAncestorOfActiveElement(container);\n        this.controller = null;\n        this.onHideEmitter.fire();\n        if (container) {\n            container.style.display = 'none';\n        }\n        if (!focusChanged) {\n            let currentElement = this.previousFocusElement;\n            while (currentElement && !currentElement.offsetParent) {\n                currentElement = currentElement.parentElement ?? undefined;\n            }\n            if (currentElement?.offsetParent) {\n                currentElement.focus();\n                this.previousFocusElement = undefined;\n            }\n            else {\n                this.options.returnFocus();\n            }\n        }\n        controller.didHide(reason);\n    }\n    layout(dimension, titleBarOffset) {\n        this.dimension = dimension;\n        this.titleBarOffset = titleBarOffset;\n        this.updateLayout();\n    }\n    updateLayout() {\n        if (this.ui && this.isVisible()) {\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_1.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, widgetBorder, widgetShadow, } = this.styles.widget;\n            this.ui.titleBar.style.backgroundColor = quickInputTitleBackground ?? '';\n            this.ui.container.style.backgroundColor = quickInputBackground ?? '';\n            this.ui.container.style.color = quickInputForeground ?? '';\n            this.ui.container.style.border = widgetBorder ? `1px solid ${widgetBorder}` : '';\n            this.ui.container.style.boxShadow = widgetShadow ? `0 0 8px 2px ${widgetShadow}` : '';\n            this.ui.list.style(this.styles.list);\n            const content = [];\n            if (this.styles.pickerGroup.pickerGroupBorder) {\n                content.push(`.quick-input-list .quick-input-list-entry { border-top-color:  ${this.styles.pickerGroup.pickerGroupBorder}; }`);\n            }\n            if (this.styles.pickerGroup.pickerGroupForeground) {\n                content.push(`.quick-input-list .quick-input-list-separator { color:  ${this.styles.pickerGroup.pickerGroupForeground}; }`);\n            }\n            if (this.styles.pickerGroup.pickerGroupForeground) {\n                content.push(`.quick-input-list .quick-input-list-separator-as-item { color: var(--vscode-descriptionForeground); }`);\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 = QuickInputController_1 = __decorate([\n    __param(1, ILayoutService),\n    __param(2, IInstantiationService),\n    __param(3, IContextKeyService)\n], QuickInputController);\nexport { QuickInputController };\n","/*---------------------------------------------------------------------------------------------\n *  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 { CancellationToken } from '../../../base/common/cancellation.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { IContextKeyService, RawContextKey } from '../../contextkey/common/contextkey.js';\nimport { IInstantiationService } from '../../instantiation/common/instantiation.js';\nimport { ILayoutService } from '../../layout/browser/layoutService.js';\nimport { IOpenerService } from '../../opener/common/opener.js';\nimport { QuickAccessController } from './quickAccess.js';\nimport { defaultButtonStyles, defaultCountBadgeStyles, defaultInputBoxStyles, defaultKeybindingLabelStyles, defaultProgressBarStyles, defaultToggleStyles, getListStyles } from '../../theme/browser/defaultStyles.js';\nimport { activeContrastBorder, asCssVariable, pickerGroupBorder, pickerGroupForeground, quickInputBackground, quickInputForeground, quickInputListFocusBackground, quickInputListFocusForeground, quickInputListFocusIconForeground, quickInputTitleBackground, widgetBorder, widgetShadow } from '../../theme/common/colorRegistry.js';\nimport { IThemeService, Themable } from '../../theme/common/themeService.js';\nimport { QuickInputHoverDelegate } from './quickInput.js';\nimport { QuickInputController } from './quickInputController.js';\nimport { IConfigurationService } from '../../configuration/common/configuration.js';\nimport { getWindow } from '../../../base/browser/dom.js';\nlet QuickInputService = class QuickInputService extends Themable {\n    get controller() {\n        if (!this._controller) {\n            this._controller = this._register(this.createController());\n        }\n        return this._controller;\n    }\n    get hasController() { return !!this._controller; }\n    get currentQuickInput() { return this.controller.currentQuickInput; }\n    get quickAccess() {\n        if (!this._quickAccess) {\n            this._quickAccess = this._register(this.instantiationService.createInstance(QuickAccessController));\n        }\n        return this._quickAccess;\n    }\n    constructor(instantiationService, contextKeyService, themeService, layoutService, configurationService) {\n        super(themeService);\n        this.instantiationService = instantiationService;\n        this.contextKeyService = contextKeyService;\n        this.layoutService = layoutService;\n        this.configurationService = configurationService;\n        this._onShow = this._register(new Emitter());\n        this._onHide = this._register(new Emitter());\n        this.contexts = new Map();\n    }\n    createController(host = this.layoutService, options) {\n        const defaultOptions = {\n            idPrefix: 'quickInput_',\n            container: host.activeContainer,\n            ignoreFocusOut: () => false,\n            backKeybindingLabel: () => undefined,\n            setContextKey: (id) => this.setContextKey(id),\n            linkOpenerDelegate: (content) => {\n                // HACK: https://github.com/microsoft/vscode/issues/173691\n                this.instantiationService.invokeFunction(accessor => {\n                    const openerService = accessor.get(IOpenerService);\n                    openerService.open(content, { allowCommands: true, fromUserGesture: true });\n                });\n            },\n            returnFocus: () => host.focus(),\n            styles: this.computeStyles(),\n            hoverDelegate: this._register(this.instantiationService.createInstance(QuickInputHoverDelegate))\n        };\n        const controller = this._register(this.instantiationService.createInstance(QuickInputController, {\n            ...defaultOptions,\n            ...options\n        }));\n        controller.layout(host.activeContainerDimension, host.activeContainerOffset.quickPickTop);\n        // Layout changes\n        this._register(host.onDidLayoutActiveContainer(dimension => {\n            if (getWindow(host.activeContainer) === getWindow(controller.container)) {\n                controller.layout(dimension, host.activeContainerOffset.quickPickTop);\n            }\n        }));\n        this._register(host.onDidChangeActiveContainer(() => {\n            if (controller.isVisible()) {\n                return;\n            }\n            controller.layout(host.activeContainerDimension, host.activeContainerOffset.quickPickTop);\n        }));\n        // Context keys\n        this._register(controller.onShow(() => {\n            this.resetContextKeys();\n            this._onShow.fire();\n        }));\n        this._register(controller.onHide(() => {\n            this.resetContextKeys();\n            this._onHide.fire();\n        }));\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        key?.set(true);\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(options = { useSeparators: false }) {\n        return this.controller.createQuickPick(options);\n    }\n    createInputBox() {\n        return this.controller.createInputBox();\n    }\n    updateStyles() {\n        if (this.hasController) {\n            this.controller.applyStyles(this.computeStyles());\n        }\n    }\n    computeStyles() {\n        return {\n            widget: {\n                quickInputBackground: asCssVariable(quickInputBackground),\n                quickInputForeground: asCssVariable(quickInputForeground),\n                quickInputTitleBackground: asCssVariable(quickInputTitleBackground),\n                widgetBorder: asCssVariable(widgetBorder),\n                widgetShadow: asCssVariable(widgetShadow),\n            },\n            inputBox: defaultInputBoxStyles,\n            toggle: defaultToggleStyles,\n            countBadge: defaultCountBadgeStyles,\n            button: defaultButtonStyles,\n            progressBar: defaultProgressBarStyles,\n            keybindingLabel: defaultKeybindingLabelStyles,\n            list: getListStyles({\n                listBackground: quickInputBackground,\n                listFocusBackground: quickInputListFocusBackground,\n                listFocusForeground: quickInputListFocusForeground,\n                // Look like focused when inactive.\n                listInactiveFocusForeground: quickInputListFocusForeground,\n                listInactiveSelectionIconForeground: quickInputListFocusIconForeground,\n                listInactiveFocusBackground: quickInputListFocusBackground,\n                listFocusOutline: activeContrastBorder,\n                listInactiveFocusOutline: activeContrastBorder,\n            }),\n            pickerGroup: {\n                pickerGroupBorder: asCssVariable(pickerGroupBorder),\n                pickerGroupForeground: asCssVariable(pickerGroupForeground),\n            }\n        };\n    }\n};\nQuickInputService = __decorate([\n    __param(0, IInstantiationService),\n    __param(1, IContextKeyService),\n    __param(2, IThemeService),\n    __param(3, ILayoutService),\n    __param(4, IConfigurationService)\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 { Event } from '../../../../base/common/event.js';\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 { EditorScopedLayoutService } from '../standaloneLayoutService.js';\nimport { ICodeEditorService } from '../../../browser/services/codeEditorService.js';\nimport { QuickInputService } from '../../../../platform/quickinput/browser/quickInputService.js';\nimport { createSingleCallFunction } from '../../../../base/common/functional.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nlet EditorScopedQuickInputService = class EditorScopedQuickInputService extends QuickInputService {\n    constructor(editor, instantiationService, contextKeyService, themeService, codeEditorService, configurationService) {\n        super(instantiationService, contextKeyService, themeService, new EditorScopedLayoutService(editor.getContainerDomNode(), codeEditorService), configurationService);\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        if (contribution) {\n            const widget = contribution.widget;\n            this.host = {\n                _serviceBrand: undefined,\n                get mainContainer() { return widget.getDomNode(); },\n                getContainer() { return widget.getDomNode(); },\n                whenContainerStylesLoaded() { return undefined; },\n                get containers() { return [widget.getDomNode()]; },\n                get activeContainer() { return widget.getDomNode(); },\n                get mainContainerDimension() { return editor.getLayoutInfo(); },\n                get activeContainerDimension() { return editor.getLayoutInfo(); },\n                get onDidLayoutMainContainer() { return editor.onDidLayoutChange; },\n                get onDidLayoutActiveContainer() { return editor.onDidLayoutChange; },\n                get onDidLayoutContainer() { return Event.map(editor.onDidLayoutChange, dimension => ({ container: widget.getDomNode(), dimension })); },\n                get onDidChangeActiveContainer() { return Event.None; },\n                get onDidAddContainer() { return Event.None; },\n                get mainContainerOffset() { return { top: 0, quickPickTop: 0 }; },\n                get activeContainerOffset() { return { top: 0, quickPickTop: 0 }; },\n                focus: () => editor.focus()\n            };\n        }\n        else {\n            this.host = undefined;\n        }\n    }\n    createController() {\n        return super.createController(this.host);\n    }\n};\nEditorScopedQuickInputService = __decorate([\n    __param(1, IInstantiationService),\n    __param(2, IContextKeyService),\n    __param(3, IThemeService),\n    __param(4, ICodeEditorService),\n    __param(5, IConfigurationService)\n], EditorScopedQuickInputService);\nlet StandaloneQuickInputService = class StandaloneQuickInputService {\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(EditorScopedQuickInputService, editor);\n            this.mapEditorToService.set(editor, quickInputService);\n            createSingleCallFunction(editor.onDidDispose)(() => {\n                newQuickInputService.dispose();\n                this.mapEditorToService.delete(editor);\n            });\n        }\n        return quickInputService;\n    }\n    get currentQuickInput() { return this.activeService.currentQuickInput; }\n    get quickAccess() { return this.activeService.quickAccess; }\n    constructor(instantiationService, codeEditorService) {\n        this.instantiationService = instantiationService;\n        this.codeEditorService = codeEditorService;\n        this.mapEditorToService = new Map();\n    }\n    pick(picks, options, token = CancellationToken.None) {\n        return this.activeService /* TS fail */.pick(picks, options, token);\n    }\n    createQuickPick(options = { useSeparators: false }) {\n        return this.activeService.createQuickPick(options);\n    }\n    createInputBox() {\n        return this.activeService.createInputBox();\n    }\n};\nStandaloneQuickInputService = __decorate([\n    __param(0, IInstantiationService),\n    __param(1, ICodeEditorService)\n], StandaloneQuickInputService);\nexport { StandaloneQuickInputService };\nexport class QuickInputEditorContribution {\n    static { this.ID = 'editor.controller.quickInput'; }\n    static get(editor) {\n        return editor.getContribution(QuickInputEditorContribution.ID);\n    }\n    constructor(editor) {\n        this.editor = editor;\n        this.widget = new QuickInputEditorWidget(this.editor);\n    }\n    dispose() {\n        this.widget.dispose();\n    }\n}\nexport class QuickInputEditorWidget {\n    static { this.ID = 'editor.contrib.quickInputWidget'; }\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 /* OverlayWidgetPositionPreference.TOP_CENTER */ };\n    }\n    dispose() {\n        this.codeEditor.removeOverlayWidget(this);\n    }\n}\nregisterEditorContribution(QuickInputEditorContribution.ID, QuickInputEditorContribution, 4 /* EditorContributionInstantiation.Lazy */);\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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._parsedThemeRuleBrand = undefined;\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    const result = [];\n    let resultLen = 0;\n    for (let i = 0, len = source.length; i < len; i++) {\n        const entry = source[i];\n        let fontStyle = -1 /* FontStyle.NotSet */;\n        if (typeof entry.fontStyle === 'string') {\n            fontStyle = 0 /* FontStyle.None */;\n            const segments = entry.fontStyle.split(' ');\n            for (let j = 0, lenJ = segments.length; j < lenJ; j++) {\n                const segment = segments[j];\n                switch (segment) {\n                    case 'italic':\n                        fontStyle = fontStyle | 1 /* FontStyle.Italic */;\n                        break;\n                    case 'bold':\n                        fontStyle = fontStyle | 2 /* FontStyle.Bold */;\n                        break;\n                    case 'underline':\n                        fontStyle = fontStyle | 4 /* FontStyle.Underline */;\n                        break;\n                    case 'strikethrough':\n                        fontStyle = fontStyle | 8 /* FontStyle.Strikethrough */;\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        const 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 /* FontStyle.None */;\n    let defaultForeground = '000000';\n    let defaultBackground = 'ffffff';\n    while (parsedThemeRules.length >= 1 && parsedThemeRules[0].token === '') {\n        const incomingDefaults = parsedThemeRules.shift();\n        if (incomingDefaults.fontStyle !== -1 /* FontStyle.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    const colorMap = new ColorMap();\n    // start with token colors from custom token themes\n    for (const color of customTokenColors) {\n        colorMap.getId(color);\n    }\n    const foregroundColorId = colorMap.getId(defaultForeground);\n    const backgroundColorId = colorMap.getId(defaultBackground);\n    const defaults = new ThemeTrieElementRule(defaultFontStyle, foregroundColorId, backgroundColorId);\n    const root = new ThemeTrieElement(defaults);\n    for (let i = 0, len = parsedThemeRules.length; i < len; i++) {\n        const 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    static createFromRawTokenTheme(source, customTokenColors) {\n        return this.createFromParsedTokenTheme(parseTokenTheme(source), customTokenColors);\n    }\n    static createFromParsedTokenTheme(source, customTokenColors) {\n        return resolveParsedTokenThemeRules(source, customTokenColors);\n    }\n    constructor(colorMap, root) {\n        this._colorMap = colorMap;\n        this._root = root;\n        this._cache = new Map();\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            const rule = this._match(token);\n            const standardToken = toStandardTokenType(token);\n            result = (rule.metadata\n                | (standardToken << 8 /* MetadataConsts.TOKEN_TYPE_OFFSET */)) >>> 0;\n            this._cache.set(token, result);\n        }\n        return (result\n            | (languageId << 0 /* MetadataConsts.LANGUAGEID_OFFSET */)) >>> 0;\n    }\n}\nconst STANDARD_TOKEN_TYPE_REGEXP = /\\b(comment|string|regex|regexp)\\b/;\nexport function toStandardTokenType(tokenType) {\n    const m = tokenType.match(STANDARD_TOKEN_TYPE_REGEXP);\n    if (!m) {\n        return 0 /* StandardTokenType.Other */;\n    }\n    switch (m[1]) {\n        case 'comment':\n            return 1 /* StandardTokenType.Comment */;\n        case 'string':\n            return 2 /* StandardTokenType.String */;\n        case 'regex':\n            return 3 /* StandardTokenType.RegEx */;\n        case 'regexp':\n            return 3 /* StandardTokenType.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._themeTrieElementRuleBrand = undefined;\n        this._fontStyle = fontStyle;\n        this._foreground = foreground;\n        this._background = background;\n        this.metadata = ((this._fontStyle << 11 /* MetadataConsts.FONT_STYLE_OFFSET */)\n            | (this._foreground << 15 /* MetadataConsts.FOREGROUND_OFFSET */)\n            | (this._background << 24 /* MetadataConsts.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 /* FontStyle.NotSet */) {\n            this._fontStyle = fontStyle;\n        }\n        if (foreground !== 0 /* ColorId.None */) {\n            this._foreground = foreground;\n        }\n        if (background !== 0 /* ColorId.None */) {\n            this._background = background;\n        }\n        this.metadata = ((this._fontStyle << 11 /* MetadataConsts.FONT_STYLE_OFFSET */)\n            | (this._foreground << 15 /* MetadataConsts.FOREGROUND_OFFSET */)\n            | (this._background << 24 /* MetadataConsts.BACKGROUND_OFFSET */)) >>> 0;\n    }\n}\nexport class ThemeTrieElement {\n    constructor(mainRule) {\n        this._themeTrieElementBrand = undefined;\n        this._mainRule = mainRule;\n        this._children = new Map();\n    }\n    match(token) {\n        if (token === '') {\n            return this._mainRule;\n        }\n        const 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        const 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        const 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    const rules = [];\n    for (let i = 1, len = colorMap.length; i < len; i++) {\n        const 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    rules.push('.mtks { text-decoration: line-through; }');\n    rules.push('.mtks.mtku { text-decoration: underline line-through; 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 { editorActiveIndentGuide1, editorIndentGuide1 } from '../../common/core/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        [editorIndentGuide1]: '#D3D3D3',\n        [editorActiveIndentGuide1]: '#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        [editorIndentGuide1]: '#404040',\n        [editorActiveIndentGuide1]: '#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        [editorIndentGuide1]: '#FFFFFF',\n        [editorActiveIndentGuide1]: '#FFFFFF',\n    }\n};\n/* -------------------------------- End hc-black theme -------------------------------- */\n/* -------------------------------- Begin hc-light theme -------------------------------- */\nexport const hc_light = {\n    base: 'hc-light',\n    inherit: false,\n    rules: [\n        { token: '', foreground: '292929', background: 'FFFFFF' },\n        { token: 'invalid', foreground: 'B5200D' },\n        { token: 'emphasis', fontStyle: 'italic' },\n        { token: 'strong', fontStyle: 'bold' },\n        { token: 'variable', foreground: '264F70' },\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: '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: 'B5200D' },\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: '264F78' },\n        { token: 'attribute.value', foreground: '0451A5' },\n        { token: 'string', foreground: 'A31515' },\n        { token: 'string.sql', foreground: 'B5200D' },\n        { token: 'keyword', foreground: '0000FF' },\n        { token: 'keyword.flow', foreground: 'AF00DB' },\n        { token: 'operator.sql', foreground: '778899' },\n        { token: 'operator.swift', foreground: '666666' },\n        { token: 'predefined.sql', foreground: 'C700C7' },\n    ],\n    colors: {\n        [editorBackground]: '#FFFFFF',\n        [editorForeground]: '#292929',\n        [editorIndentGuide1]: '#292929',\n        [editorActiveIndentGuide1]: '#292929',\n    }\n};\n/* -------------------------------- End hc-light 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 { RunOnceScheduler } from '../../../base/common/async.js';\nimport { Codicon } from '../../../base/common/codicons.js';\nimport { getCodiconFontCharacters } from '../../../base/common/codiconsUtil.js';\nimport { ThemeIcon } from '../../../base/common/themables.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { isString } from '../../../base/common/types.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { localize } from '../../../nls.js';\nimport { Extensions as JSONExtensions } from '../../jsonschemas/common/jsonContributionRegistry.js';\nimport * as platform from '../../registry/common/platform.js';\n//  ------ API types\n// icon registry\nexport const Extensions = {\n    IconContribution: 'base.contributions.icons'\n};\nexport var IconContribution;\n(function (IconContribution) {\n    function getDefinition(contribution, registry) {\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        return definition;\n    }\n    IconContribution.getDefinition = getDefinition;\n})(IconContribution || (IconContribution = {}));\nexport var IconFontDefinition;\n(function (IconFontDefinition) {\n    function toJSONObject(iconFont) {\n        return {\n            weight: iconFont.weight,\n            style: iconFont.style,\n            src: iconFont.src.map(s => ({ format: s.format, location: s.location.toString() }))\n        };\n    }\n    IconFontDefinition.toJSONObject = toJSONObject;\n    function fromJSONObject(json) {\n        const stringOrUndef = (s) => isString(s) ? s : undefined;\n        if (json && Array.isArray(json.src) && json.src.every((s) => isString(s.format) && isString(s.location))) {\n            return {\n                weight: stringOrUndef(json.weight),\n                style: stringOrUndef(json.style),\n                src: json.src.map((s) => ({ format: s.format, location: URI.parse(s.location) }))\n            };\n        }\n        return undefined;\n    }\n    IconFontDefinition.fromJSONObject = fromJSONObject;\n})(IconFontDefinition || (IconFontDefinition = {}));\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('iconDefinition.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('iconDefinition.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: `^${ThemeIcon.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        const iconContribution = { id, description, defaults, deprecationMessage };\n        this.iconsById[id] = iconContribution;\n        const 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    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        const 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    const codiconFontCharacters = getCodiconFontCharacters();\n    for (const icon in codiconFontCharacters) {\n        const fontCharacter = '\\\\' + codiconFontCharacters[icon].toString(16);\n        iconRegistry.registerIcon(icon, { fontCharacter });\n    }\n}\ninitialize();\nexport const iconsSchemaId = 'vscode://schemas/icons';\nconst 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', Codicon.close, localize('widgetClose', 'Icon for the close action in widgets.'));\nexport const gotoPreviousLocation = registerIcon('goto-previous-location', Codicon.arrowUp, localize('previousChangeIcon', 'Icon for goto previous editor location.'));\nexport const gotoNextLocation = registerIcon('goto-next-location', Codicon.arrowDown, localize('nextChangeIcon', 'Icon for goto next editor location.'));\nexport const syncing = ThemeIcon.modify(Codicon.sync, 'spin');\nexport const spinningLoading = ThemeIcon.modify(Codicon.loading, 'spin');\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { asCSSPropertyValue, asCSSUrl } from '../../../base/browser/dom.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { ThemeIcon } from '../../../base/common/themables.js';\nimport { getIconRegistry } from '../common/iconRegistry.js';\nexport function getIconsStyleSheet(themeService) {\n    const disposable = new DisposableStore();\n    const onDidChangeEmmiter = disposable.add(new Emitter());\n    const iconRegistry = getIconRegistry();\n    disposable.add(iconRegistry.onDidChange(() => onDidChangeEmmiter.fire()));\n    if (themeService) {\n        disposable.add(themeService.onDidProductIconThemeChange(() => onDidChangeEmmiter.fire()));\n    }\n    return {\n        dispose: () => disposable.dispose(),\n        onDidChange: onDidChangeEmmiter.event,\n        getCSS() {\n            const productIconTheme = themeService ? themeService.getProductIconTheme() : new UnthemedProductIconTheme();\n            const usedFontIds = {};\n            const rules = [];\n            const rootAttribs = [];\n            for (const contribution of iconRegistry.getIcons()) {\n                const definition = productIconTheme.getIcon(contribution);\n                if (!definition) {\n                    continue;\n                }\n                const fontContribution = definition.font;\n                const fontFamilyVar = `--vscode-icon-${contribution.id}-font-family`;\n                const contentVar = `--vscode-icon-${contribution.id}-content`;\n                if (fontContribution) {\n                    usedFontIds[fontContribution.id] = fontContribution.definition;\n                    rootAttribs.push(`${fontFamilyVar}: ${asCSSPropertyValue(fontContribution.id)};`, `${contentVar}: '${definition.fontCharacter}';`);\n                    rules.push(`.codicon-${contribution.id}:before { content: '${definition.fontCharacter}'; font-family: ${asCSSPropertyValue(fontContribution.id)}; }`);\n                }\n                else {\n                    rootAttribs.push(`${contentVar}: '${definition.fontCharacter}'; ${fontFamilyVar}: 'codicon';`);\n                    rules.push(`.codicon-${contribution.id}:before { content: '${definition.fontCharacter}'; }`);\n                }\n            }\n            for (const id in usedFontIds) {\n                const definition = usedFontIds[id];\n                const fontWeight = definition.weight ? `font-weight: ${definition.weight};` : '';\n                const fontStyle = definition.style ? `font-style: ${definition.style};` : '';\n                const src = definition.src.map(l => `${asCSSUrl(l.location)} format('${l.format}')`).join(', ');\n                rules.push(`@font-face { src: ${src}; font-family: ${asCSSPropertyValue(id)};${fontWeight}${fontStyle} font-display: block; }`);\n            }\n            rules.push(`:root { ${rootAttribs.join(' ')} }`);\n            return rules.join('\\n');\n        }\n    };\n}\nexport class UnthemedProductIconTheme {\n    getIcon(contribution) {\n        const iconRegistry = getIconRegistry();\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        return definition;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { addMatchMediaChangeListener } from '../../../base/browser/browser.js';\nimport { Color } from '../../../base/common/color.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { TokenizationRegistry } from '../../common/languages.js';\nimport { TokenMetadata } from '../../common/encodedTokenAttributes.js';\nimport { TokenTheme, generateTokensCSSForColorMap } from '../../common/languages/supports/tokenization.js';\nimport { hc_black, hc_light, vs, vs_dark } from '../common/themes.js';\nimport { Registry } from '../../../platform/registry/common/platform.js';\nimport { asCssVariableName, 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, isDark, isHighContrast } from '../../../platform/theme/common/theme.js';\nimport { getIconsStyleSheet, UnthemedProductIconTheme } from '../../../platform/theme/browser/iconsStyleSheet.js';\nimport { mainWindow } from '../../../base/browser/window.js';\nexport const VS_LIGHT_THEME_NAME = 'vs';\nexport const VS_DARK_THEME_NAME = 'vs-dark';\nexport const HC_BLACK_THEME_NAME = 'hc-black';\nexport const HC_LIGHT_THEME_NAME = 'hc-light';\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        const 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 (const id in this.themeData.colors) {\n                colors.set(id, Color.fromHex(this.themeData.colors[id]));\n            }\n            if (this.themeData.inherit) {\n                const baseData = getBuiltinRules(this.themeData.base);\n                for (const 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 this.getColors().has(colorId);\n    }\n    get type() {\n        switch (this.base) {\n            case VS_LIGHT_THEME_NAME: return ColorScheme.LIGHT;\n            case HC_BLACK_THEME_NAME: return ColorScheme.HIGH_CONTRAST_DARK;\n            case HC_LIGHT_THEME_NAME: return ColorScheme.HIGH_CONTRAST_LIGHT;\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                const baseData = getBuiltinRules(this.themeData.base);\n                rules = baseData.rules;\n                if (baseData.encodedTokensColors) {\n                    encodedTokensColors = baseData.encodedTokensColors;\n                }\n            }\n            // Pick up default colors from `editor.foreground` and `editor.background` if available\n            const editorForeground = this.themeData.colors['editor.foreground'];\n            const editorBackground = this.themeData.colors['editor.background'];\n            if (editorForeground || editorBackground) {\n                const rule = { token: '' };\n                if (editorForeground) {\n                    rule.foreground = editorForeground;\n                }\n                if (editorBackground) {\n                    rule.background = editorBackground;\n                }\n                rules.push(rule);\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 /* FontStyle.Italic */),\n            bold: Boolean(fontStyle & 2 /* FontStyle.Bold */),\n            underline: Boolean(fontStyle & 4 /* FontStyle.Underline */),\n            strikethrough: Boolean(fontStyle & 8 /* FontStyle.Strikethrough */)\n        };\n    }\n}\nfunction isBuiltinTheme(themeName) {\n    return (themeName === VS_LIGHT_THEME_NAME\n        || themeName === VS_DARK_THEME_NAME\n        || themeName === HC_BLACK_THEME_NAME\n        || themeName === HC_LIGHT_THEME_NAME);\n}\nfunction getBuiltinRules(builtinTheme) {\n    switch (builtinTheme) {\n        case VS_LIGHT_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        case HC_LIGHT_THEME_NAME:\n            return hc_light;\n    }\n}\nfunction newBuiltInTheme(builtinTheme) {\n    const themeData = getBuiltinRules(builtinTheme);\n    return new StandaloneTheme(builtinTheme, themeData);\n}\nexport class StandaloneThemeService extends Disposable {\n    constructor() {\n        super();\n        this._onColorThemeChange = this._register(new Emitter());\n        this.onDidColorThemeChange = this._onColorThemeChange.event;\n        this._onProductIconThemeChange = this._register(new Emitter());\n        this.onDidProductIconThemeChange = this._onProductIconThemeChange.event;\n        this._environment = Object.create(null);\n        this._builtInProductIconTheme = new UnthemedProductIconTheme();\n        this._autoDetectHighContrast = true;\n        this._knownThemes = new Map();\n        this._knownThemes.set(VS_LIGHT_THEME_NAME, newBuiltInTheme(VS_LIGHT_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        this._knownThemes.set(HC_LIGHT_THEME_NAME, newBuiltInTheme(HC_LIGHT_THEME_NAME));\n        const iconsStyleSheet = this._register(getIconsStyleSheet(this));\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_LIGHT_THEME_NAME);\n        this._onOSSchemeChanged();\n        this._register(iconsStyleSheet.onDidChange(() => {\n            this._codiconCSS = iconsStyleSheet.getCSS();\n            this._updateCSS();\n        }));\n        addMatchMediaChangeListener(mainWindow, '(forced-colors: active)', () => {\n            this._onOSSchemeChanged();\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(undefined, style => {\n                style.className = 'monaco-colors';\n                style.textContent = this._allCSS;\n            });\n            this._styleElements.push(this._globalStyleElement);\n        }\n        return Disposable.None;\n    }\n    _registerShadowDomContainer(domNode) {\n        const styleElement = dom.createStyleSheet(domNode, style => {\n            style.className = 'monaco-colors';\n            style.textContent = this._allCSS;\n        });\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_LIGHT_THEME_NAME);\n        }\n        this._updateActualTheme(theme);\n    }\n    _updateActualTheme(desiredTheme) {\n        if (!desiredTheme || this._theme === desiredTheme) {\n            // Nothing to do\n            return;\n        }\n        this._theme = desiredTheme;\n        this._updateThemeOrColorMap();\n    }\n    _onOSSchemeChanged() {\n        if (this._autoDetectHighContrast) {\n            const wantsHighContrast = mainWindow.matchMedia(`(forced-colors: active)`).matches;\n            if (wantsHighContrast !== isHighContrast(this._theme.type)) {\n                // switch to high contrast or non-high contrast but stick to dark or light\n                let newThemeName;\n                if (isDark(this._theme.type)) {\n                    newThemeName = wantsHighContrast ? HC_BLACK_THEME_NAME : VS_DARK_THEME_NAME;\n                }\n                else {\n                    newThemeName = wantsHighContrast ? HC_LIGHT_THEME_NAME : VS_LIGHT_THEME_NAME;\n                }\n                this._updateActualTheme(this._knownThemes.get(newThemeName));\n            }\n        }\n    }\n    setAutoDetectHighContrast(autoDetectHighContrast) {\n        this._autoDetectHighContrast = autoDetectHighContrast;\n        this._onOSSchemeChanged();\n    }\n    _updateThemeOrColorMap() {\n        const cssRules = [];\n        const hasRule = {};\n        const 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 colorVariables = [];\n        for (const item of colorRegistry.getColors()) {\n            const color = this._theme.getColor(item.id, true);\n            if (color) {\n                colorVariables.push(`${asCssVariableName(item.id)}: ${color.toString()};`);\n            }\n        }\n        ruleCollector.addRule(`.monaco-editor, .monaco-diff-editor, .monaco-component { ${colorVariables.join('\\n')} }`);\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    getProductIconTheme() {\n        return this._builtInProductIconTheme;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 *--------------------------------------------------------------------------------------------*/\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 { addDisposableListener } from '../../../base/browser/dom.js';\nimport { mainWindow } from '../../../base/browser/window.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from '../common/accessibility.js';\nimport { IConfigurationService } from '../../configuration/common/configuration.js';\nimport { IContextKeyService } from '../../contextkey/common/contextkey.js';\nimport { ILayoutService } from '../../layout/browser/layoutService.js';\nlet AccessibilityService = class AccessibilityService extends Disposable {\n    constructor(_contextKeyService, _layoutService, _configurationService) {\n        super();\n        this._contextKeyService = _contextKeyService;\n        this._layoutService = _layoutService;\n        this._configurationService = _configurationService;\n        this._accessibilitySupport = 0 /* AccessibilitySupport.Unknown */;\n        this._onDidChangeScreenReaderOptimized = new Emitter();\n        this._onDidChangeReducedMotion = new Emitter();\n        this._onDidChangeLinkUnderline = 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            if (e.affectsConfiguration('workbench.reduceMotion')) {\n                this._configMotionReduced = this._configurationService.getValue('workbench.reduceMotion');\n                this._onDidChangeReducedMotion.fire();\n            }\n        }));\n        updateContextKey();\n        this._register(this.onDidChangeScreenReaderOptimized(() => updateContextKey()));\n        const reduceMotionMatcher = mainWindow.matchMedia(`(prefers-reduced-motion: reduce)`);\n        this._systemMotionReduced = reduceMotionMatcher.matches;\n        this._configMotionReduced = this._configurationService.getValue('workbench.reduceMotion');\n        this._linkUnderlinesEnabled = this._configurationService.getValue('accessibility.underlineLinks');\n        this.initReducedMotionListeners(reduceMotionMatcher);\n        this.initLinkUnderlineListeners();\n    }\n    initReducedMotionListeners(reduceMotionMatcher) {\n        this._register(addDisposableListener(reduceMotionMatcher, 'change', () => {\n            this._systemMotionReduced = reduceMotionMatcher.matches;\n            if (this._configMotionReduced === 'auto') {\n                this._onDidChangeReducedMotion.fire();\n            }\n        }));\n        const updateRootClasses = () => {\n            const reduce = this.isMotionReduced();\n            this._layoutService.mainContainer.classList.toggle('reduce-motion', reduce);\n            this._layoutService.mainContainer.classList.toggle('enable-motion', !reduce);\n        };\n        updateRootClasses();\n        this._register(this.onDidChangeReducedMotion(() => updateRootClasses()));\n    }\n    initLinkUnderlineListeners() {\n        this._register(this._configurationService.onDidChangeConfiguration(e => {\n            if (e.affectsConfiguration('accessibility.underlineLinks')) {\n                const linkUnderlinesEnabled = this._configurationService.getValue('accessibility.underlineLinks');\n                this._linkUnderlinesEnabled = linkUnderlinesEnabled;\n                this._onDidChangeLinkUnderline.fire();\n            }\n        }));\n        const updateLinkUnderlineClasses = () => {\n            const underlineLinks = this._linkUnderlinesEnabled;\n            this._layoutService.mainContainer.classList.toggle('underline-links', underlineLinks);\n        };\n        updateLinkUnderlineClasses();\n        this._register(this.onDidChangeLinkUnderlines(() => updateLinkUnderlineClasses()));\n    }\n    onDidChangeLinkUnderlines(listener) {\n        return this._onDidChangeLinkUnderline.event(listener);\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 /* AccessibilitySupport.Enabled */);\n    }\n    get onDidChangeReducedMotion() {\n        return this._onDidChangeReducedMotion.event;\n    }\n    isMotionReduced() {\n        const config = this._configMotionReduced;\n        return config === 'on' || (config === 'auto' && this._systemMotionReduced);\n    }\n    getAccessibilitySupport() {\n        return this._accessibilitySupport;\n    }\n};\nAccessibilityService = __decorate([\n    __param(0, IContextKeyService),\n    __param(1, ILayoutService),\n    __param(2, 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 __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 PersistedMenuHideState_1, MenuInfo_1;\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { DebounceEmitter, Emitter } from '../../../base/common/event.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { isIMenuItem, isISubmenuItem, MenuItemAction, MenuRegistry, SubmenuItemAction } from './actions.js';\nimport { ICommandService } from '../../commands/common/commands.js';\nimport { IContextKeyService } from '../../contextkey/common/contextkey.js';\nimport { Separator, toAction } from '../../../base/common/actions.js';\nimport { IStorageService } from '../../storage/common/storage.js';\nimport { removeFastWithoutKeepingOrder } from '../../../base/common/arrays.js';\nimport { localize } from '../../../nls.js';\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\nlet MenuService = class MenuService {\n    constructor(_commandService, _keybindingService, storageService) {\n        this._commandService = _commandService;\n        this._keybindingService = _keybindingService;\n        this._hiddenStates = new PersistedMenuHideState(storageService);\n    }\n    createMenu(id, contextKeyService, options) {\n        return new MenuImpl(id, this._hiddenStates, { emitEventsForSubmenuChanges: false, eventDebounceDelay: 50, ...options }, this._commandService, this._keybindingService, contextKeyService);\n    }\n    getMenuActions(id, contextKeyService, options) {\n        const menu = new MenuImpl(id, this._hiddenStates, { emitEventsForSubmenuChanges: false, eventDebounceDelay: 50, ...options }, this._commandService, this._keybindingService, contextKeyService);\n        const actions = menu.getActions(options);\n        menu.dispose();\n        return actions;\n    }\n    resetHiddenStates(ids) {\n        this._hiddenStates.reset(ids);\n    }\n};\nMenuService = __decorate([\n    __param(0, ICommandService),\n    __param(1, IKeybindingService),\n    __param(2, IStorageService)\n], MenuService);\nexport { MenuService };\nlet PersistedMenuHideState = class PersistedMenuHideState {\n    static { PersistedMenuHideState_1 = this; }\n    static { this._key = 'menu.hiddenCommands'; }\n    constructor(_storageService) {\n        this._storageService = _storageService;\n        this._disposables = new DisposableStore();\n        this._onDidChange = new Emitter();\n        this.onDidChange = this._onDidChange.event;\n        this._ignoreChangeEvent = false;\n        this._hiddenByDefaultCache = new Map();\n        try {\n            const raw = _storageService.get(PersistedMenuHideState_1._key, 0 /* StorageScope.PROFILE */, '{}');\n            this._data = JSON.parse(raw);\n        }\n        catch (err) {\n            this._data = Object.create(null);\n        }\n        this._disposables.add(_storageService.onDidChangeValue(0 /* StorageScope.PROFILE */, PersistedMenuHideState_1._key, this._disposables)(() => {\n            if (!this._ignoreChangeEvent) {\n                try {\n                    const raw = _storageService.get(PersistedMenuHideState_1._key, 0 /* StorageScope.PROFILE */, '{}');\n                    this._data = JSON.parse(raw);\n                }\n                catch (err) {\n                    console.log('FAILED to read storage after UPDATE', err);\n                }\n            }\n            this._onDidChange.fire();\n        }));\n    }\n    dispose() {\n        this._onDidChange.dispose();\n        this._disposables.dispose();\n    }\n    _isHiddenByDefault(menu, commandId) {\n        return this._hiddenByDefaultCache.get(`${menu.id}/${commandId}`) ?? false;\n    }\n    setDefaultState(menu, commandId, hidden) {\n        this._hiddenByDefaultCache.set(`${menu.id}/${commandId}`, hidden);\n    }\n    isHidden(menu, commandId) {\n        const hiddenByDefault = this._isHiddenByDefault(menu, commandId);\n        const state = this._data[menu.id]?.includes(commandId) ?? false;\n        return hiddenByDefault ? !state : state;\n    }\n    updateHidden(menu, commandId, hidden) {\n        const hiddenByDefault = this._isHiddenByDefault(menu, commandId);\n        if (hiddenByDefault) {\n            hidden = !hidden;\n        }\n        const entries = this._data[menu.id];\n        if (!hidden) {\n            // remove and cleanup\n            if (entries) {\n                const idx = entries.indexOf(commandId);\n                if (idx >= 0) {\n                    removeFastWithoutKeepingOrder(entries, idx);\n                }\n                if (entries.length === 0) {\n                    delete this._data[menu.id];\n                }\n            }\n        }\n        else {\n            // add unless already added\n            if (!entries) {\n                this._data[menu.id] = [commandId];\n            }\n            else {\n                const idx = entries.indexOf(commandId);\n                if (idx < 0) {\n                    entries.push(commandId);\n                }\n            }\n        }\n        this._persist();\n    }\n    reset(menus) {\n        if (menus === undefined) {\n            // reset all\n            this._data = Object.create(null);\n            this._persist();\n        }\n        else {\n            // reset only for a specific menu\n            for (const { id } of menus) {\n                if (this._data[id]) {\n                    delete this._data[id];\n                }\n            }\n            this._persist();\n        }\n    }\n    _persist() {\n        try {\n            this._ignoreChangeEvent = true;\n            const raw = JSON.stringify(this._data);\n            this._storageService.store(PersistedMenuHideState_1._key, raw, 0 /* StorageScope.PROFILE */, 0 /* StorageTarget.USER */);\n        }\n        finally {\n            this._ignoreChangeEvent = false;\n        }\n    }\n};\nPersistedMenuHideState = PersistedMenuHideState_1 = __decorate([\n    __param(0, IStorageService)\n], PersistedMenuHideState);\nclass MenuInfoSnapshot {\n    constructor(_id, _collectContextKeysForSubmenus) {\n        this._id = _id;\n        this._collectContextKeysForSubmenus = _collectContextKeysForSubmenus;\n        this._menuGroups = [];\n        this._allMenuIds = new Set();\n        this._structureContextKeys = new Set();\n        this._preconditionContextKeys = new Set();\n        this._toggledContextKeys = new Set();\n        this.refresh();\n    }\n    get allMenuIds() {\n        return this._allMenuIds;\n    }\n    get structureContextKeys() {\n        return this._structureContextKeys;\n    }\n    get preconditionContextKeys() {\n        return this._preconditionContextKeys;\n    }\n    get toggledContextKeys() {\n        return this._toggledContextKeys;\n    }\n    refresh() {\n        // reset\n        this._menuGroups.length = 0;\n        this._allMenuIds.clear();\n        this._structureContextKeys.clear();\n        this._preconditionContextKeys.clear();\n        this._toggledContextKeys.clear();\n        const menuItems = this._sort(MenuRegistry.getMenuItems(this._id));\n        let group;\n        for (const 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 and submenu ids for eventing\n            this._collectContextKeysAndSubmenuIds(item);\n        }\n        this._allMenuIds.add(this._id);\n    }\n    _sort(menuItems) {\n        // no sorting needed in snapshot\n        return menuItems;\n    }\n    _collectContextKeysAndSubmenuIds(item) {\n        MenuInfoSnapshot._fillInKbExprKeys(item.when, this._structureContextKeys);\n        if (isIMenuItem(item)) {\n            // keep precondition keys for event if applicable\n            if (item.command.precondition) {\n                MenuInfoSnapshot._fillInKbExprKeys(item.command.precondition, this._preconditionContextKeys);\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                MenuInfoSnapshot._fillInKbExprKeys(toggledExpression, this._toggledContextKeys);\n            }\n        }\n        else if (this._collectContextKeysForSubmenus) {\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._collectContextKeysAndSubmenuIds, this);\n            this._allMenuIds.add(item.submenu);\n        }\n    }\n    static _fillInKbExprKeys(exp, set) {\n        if (exp) {\n            for (const key of exp.keys()) {\n                set.add(key);\n            }\n        }\n    }\n}\nlet MenuInfo = MenuInfo_1 = class MenuInfo extends MenuInfoSnapshot {\n    constructor(_id, _hiddenStates, _collectContextKeysForSubmenus, _commandService, _keybindingService, _contextKeyService) {\n        super(_id, _collectContextKeysForSubmenus);\n        this._hiddenStates = _hiddenStates;\n        this._commandService = _commandService;\n        this._keybindingService = _keybindingService;\n        this._contextKeyService = _contextKeyService;\n        this.refresh();\n    }\n    createActionGroups(options) {\n        const result = [];\n        for (const group of this._menuGroups) {\n            const [id, items] = group;\n            let activeActions;\n            for (const item of items) {\n                if (this._contextKeyService.contextMatchesRules(item.when)) {\n                    const isMenuItem = isIMenuItem(item);\n                    if (isMenuItem) {\n                        this._hiddenStates.setDefaultState(this._id, item.command.id, !!item.isHiddenByDefault);\n                    }\n                    const menuHide = createMenuHide(this._id, isMenuItem ? item.command : item, this._hiddenStates);\n                    if (isMenuItem) {\n                        // MenuItemAction\n                        const menuKeybinding = createConfigureKeybindingAction(this._commandService, this._keybindingService, item.command.id, item.when);\n                        (activeActions ??= []).push(new MenuItemAction(item.command, item.alt, options, menuHide, menuKeybinding, this._contextKeyService, this._commandService));\n                    }\n                    else {\n                        // SubmenuItemAction\n                        const groups = new MenuInfo_1(item.submenu, this._hiddenStates, this._collectContextKeysForSubmenus, this._commandService, this._keybindingService, this._contextKeyService).createActionGroups(options);\n                        const submenuActions = Separator.join(...groups.map(g => g[1]));\n                        if (submenuActions.length > 0) {\n                            (activeActions ??= []).push(new SubmenuItemAction(item, menuHide, submenuActions));\n                        }\n                    }\n                }\n            }\n            if (activeActions && activeActions.length > 0) {\n                result.push([id, activeActions]);\n            }\n        }\n        return result;\n    }\n    _sort(menuItems) {\n        return menuItems.sort(MenuInfo_1._compareMenuItems);\n    }\n    static _compareMenuItems(a, b) {\n        const aGroup = a.group;\n        const 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            const value = aGroup.localeCompare(bGroup);\n            if (value !== 0) {\n                return value;\n            }\n        }\n        // sort on priority - default is 0\n        const aPrio = a.order || 0;\n        const 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 MenuInfo_1._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};\nMenuInfo = MenuInfo_1 = __decorate([\n    __param(3, ICommandService),\n    __param(4, IKeybindingService),\n    __param(5, IContextKeyService)\n], MenuInfo);\nlet MenuImpl = class MenuImpl {\n    constructor(id, hiddenStates, options, commandService, keybindingService, contextKeyService) {\n        this._disposables = new DisposableStore();\n        this._menuInfo = new MenuInfo(id, hiddenStates, options.emitEventsForSubmenuChanges, commandService, keybindingService, contextKeyService);\n        // Rebuild this menu whenever the menu registry reports an event for this MenuId.\n        // This usually happen while code and extensions are loaded and affects the over\n        // structure of the menu\n        const rebuildMenuSoon = new RunOnceScheduler(() => {\n            this._menuInfo.refresh();\n            this._onDidChange.fire({ menu: this, isStructuralChange: true, isEnablementChange: true, isToggleChange: true });\n        }, options.eventDebounceDelay);\n        this._disposables.add(rebuildMenuSoon);\n        this._disposables.add(MenuRegistry.onDidChangeMenu(e => {\n            for (const id of this._menuInfo.allMenuIds) {\n                if (e.has(id)) {\n                    rebuildMenuSoon.schedule();\n                    break;\n                }\n            }\n        }));\n        // When context keys or storage state changes we need to check if the menu also has changed. However,\n        // we only do that when someone listens on this menu because (1) these events are\n        // firing often and (2) menu are often leaked\n        const lazyListener = this._disposables.add(new DisposableStore());\n        const merge = (events) => {\n            let isStructuralChange = false;\n            let isEnablementChange = false;\n            let isToggleChange = false;\n            for (const item of events) {\n                isStructuralChange = isStructuralChange || item.isStructuralChange;\n                isEnablementChange = isEnablementChange || item.isEnablementChange;\n                isToggleChange = isToggleChange || item.isToggleChange;\n                if (isStructuralChange && isEnablementChange && isToggleChange) {\n                    // everything is TRUE, no need to continue iterating\n                    break;\n                }\n            }\n            return { menu: this, isStructuralChange, isEnablementChange, isToggleChange };\n        };\n        const startLazyListener = () => {\n            lazyListener.add(contextKeyService.onDidChangeContext(e => {\n                const isStructuralChange = e.affectsSome(this._menuInfo.structureContextKeys);\n                const isEnablementChange = e.affectsSome(this._menuInfo.preconditionContextKeys);\n                const isToggleChange = e.affectsSome(this._menuInfo.toggledContextKeys);\n                if (isStructuralChange || isEnablementChange || isToggleChange) {\n                    this._onDidChange.fire({ menu: this, isStructuralChange, isEnablementChange, isToggleChange });\n                }\n            }));\n            lazyListener.add(hiddenStates.onDidChange(e => {\n                this._onDidChange.fire({ menu: this, isStructuralChange: true, isEnablementChange: false, isToggleChange: false });\n            }));\n        };\n        this._onDidChange = new DebounceEmitter({\n            // start/stop context key listener\n            onWillAddFirstListener: startLazyListener,\n            onDidRemoveLastListener: lazyListener.clear.bind(lazyListener),\n            delay: options.eventDebounceDelay,\n            merge\n        });\n        this.onDidChange = this._onDidChange.event;\n    }\n    getActions(options) {\n        return this._menuInfo.createActionGroups(options);\n    }\n    dispose() {\n        this._disposables.dispose();\n        this._onDidChange.dispose();\n    }\n};\nMenuImpl = __decorate([\n    __param(3, ICommandService),\n    __param(4, IKeybindingService),\n    __param(5, IContextKeyService)\n], MenuImpl);\nfunction createMenuHide(menu, command, states) {\n    const id = isISubmenuItem(command) ? command.submenu.id : command.id;\n    const title = typeof command.title === 'string' ? command.title : command.title.value;\n    const hide = toAction({\n        id: `hide/${menu.id}/${id}`,\n        label: localize('hide.label', 'Hide \\'{0}\\'', title),\n        run() { states.updateHidden(menu, id, true); }\n    });\n    const toggle = toAction({\n        id: `toggle/${menu.id}/${id}`,\n        label: title,\n        get checked() { return !states.isHidden(menu, id); },\n        run() { states.updateHidden(menu, id, !!this.checked); }\n    });\n    return {\n        hide,\n        toggle,\n        get isHidden() { return !toggle.checked; },\n    };\n}\nexport function createConfigureKeybindingAction(commandService, keybindingService, commandId, when = undefined, enabled = true) {\n    return toAction({\n        id: `configureKeybinding/${commandId}`,\n        label: localize('configure keybinding', \"Configure Keybinding\"),\n        enabled,\n        run() {\n            // Only set the when clause when there is no keybinding\n            // It is possible that the action and the keybinding have different when clauses\n            const hasKeybinding = !!keybindingService.lookupKeybinding(commandId); // This may only be called inside the `run()` method as it can be expensive on startup. #210529\n            const whenValue = !hasKeybinding && when ? when.serialize() : undefined;\n            commandService.executeCommand('workbench.action.openGlobalKeybindings', `@command:${commandId}` + (whenValue ? ` +when:${whenValue}` : ''));\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 BrowserClipboardService_1;\nimport { isSafari, isWebkitWebView } from '../../../base/browser/browser.js';\nimport { $, addDisposableListener, getActiveDocument, getActiveWindow, isHTMLElement, onDidRegisterWindow } from '../../../base/browser/dom.js';\nimport { mainWindow } from '../../../base/browser/window.js';\nimport { DeferredPromise } from '../../../base/common/async.js';\nimport { Event } from '../../../base/common/event.js';\nimport { hash } from '../../../base/common/hash.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { ILayoutService } from '../../layout/browser/layoutService.js';\nimport { ILogService } from '../../log/common/log.js';\n/**\n * Custom mime type used for storing a list of uris in the clipboard.\n *\n * Requires support for custom web clipboards https://github.com/w3c/clipboard-apis/pull/175\n */\nconst vscodeResourcesMime = 'application/vnd.code.resources';\nlet BrowserClipboardService = class BrowserClipboardService extends Disposable {\n    static { BrowserClipboardService_1 = this; }\n    constructor(layoutService, logService) {\n        super();\n        this.layoutService = layoutService;\n        this.logService = logService;\n        this.mapTextToType = new Map(); // unsupported in web (only in-memory)\n        this.findText = ''; // unsupported in web (only in-memory)\n        this.resources = []; // unsupported in web (only in-memory)\n        this.resourcesStateHash = undefined;\n        if (isSafari || isWebkitWebView) {\n            this.installWebKitWriteTextWorkaround();\n        }\n        // Keep track of copy operations to reset our set of\n        // copied resources: since we keep resources in memory\n        // and not in the clipboard, we have to invalidate\n        // that state when the user copies other data.\n        this._register(Event.runAndSubscribe(onDidRegisterWindow, ({ window, disposables }) => {\n            disposables.add(addDisposableListener(window.document, 'copy', () => this.clearResourcesState()));\n        }, { window: mainWindow, disposables: this._store }));\n    }\n    // In Safari, it has the following note:\n    //\n    // \"The request to write to the clipboard must be triggered during a user gesture.\n    // A call to clipboard.write or clipboard.writeText outside the scope of a user\n    // gesture(such as \"click\" or \"touch\" event handlers) will result in the immediate\n    // rejection of the promise returned by the API call.\"\n    // From: https://webkit.org/blog/10855/async-clipboard-api/\n    //\n    // Since extensions run in a web worker, and handle gestures in an asynchronous way,\n    // they are not classified by Safari as \"in response to a user gesture\" and will reject.\n    //\n    // This function sets up some handlers to work around that behavior.\n    installWebKitWriteTextWorkaround() {\n        const handler = () => {\n            const currentWritePromise = new DeferredPromise();\n            // Cancel the previous promise since we just created a new one in response to this new event\n            if (this.webKitPendingClipboardWritePromise && !this.webKitPendingClipboardWritePromise.isSettled) {\n                this.webKitPendingClipboardWritePromise.cancel();\n            }\n            this.webKitPendingClipboardWritePromise = currentWritePromise;\n            // The ctor of ClipboardItem allows you to pass in a promise that will resolve to a string.\n            // This allows us to pass in a Promise that will either be cancelled by another event or\n            // resolved with the contents of the first call to this.writeText.\n            // see https://developer.mozilla.org/en-US/docs/Web/API/ClipboardItem/ClipboardItem#parameters\n            getActiveWindow().navigator.clipboard.write([new ClipboardItem({\n                    'text/plain': currentWritePromise.p,\n                })]).catch(async (err) => {\n                if (!(err instanceof Error) || err.name !== 'NotAllowedError' || !currentWritePromise.isRejected) {\n                    this.logService.error(err);\n                }\n            });\n        };\n        this._register(Event.runAndSubscribe(this.layoutService.onDidAddContainer, ({ container, disposables }) => {\n            disposables.add(addDisposableListener(container, 'click', handler));\n            disposables.add(addDisposableListener(container, 'keydown', handler));\n        }, { container: this.layoutService.mainContainer, disposables: this._store }));\n    }\n    async writeText(text, type) {\n        // Clear resources given we are writing text\n        this.clearResourcesState();\n        // With type: only in-memory is supported\n        if (type) {\n            this.mapTextToType.set(type, text);\n            return;\n        }\n        if (this.webKitPendingClipboardWritePromise) {\n            // For Safari, we complete this Promise which allows the call to `navigator.clipboard.write()`\n            // above to resolve and successfully copy to the clipboard. If we let this continue, Safari\n            // would throw an error because this call stack doesn't appear to originate from a user gesture.\n            return this.webKitPendingClipboardWritePromise.complete(text);\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 await getActiveWindow().navigator.clipboard.writeText(text);\n        }\n        catch (error) {\n            console.error(error);\n        }\n        // Fallback to textarea and execCommand solution\n        this.fallbackWriteText(text);\n    }\n    fallbackWriteText(text) {\n        const activeDocument = getActiveDocument();\n        const activeElement = activeDocument.activeElement;\n        const textArea = activeDocument.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        activeDocument.execCommand('copy');\n        if (isHTMLElement(activeElement)) {\n            activeElement.focus();\n        }\n        textArea.remove();\n    }\n    async readText(type) {\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 await getActiveWindow().navigator.clipboard.readText();\n        }\n        catch (error) {\n            console.error(error);\n        }\n        return '';\n    }\n    async readFindText() {\n        return this.findText;\n    }\n    async writeFindText(text) {\n        this.findText = text;\n    }\n    static { this.MAX_RESOURCE_STATE_SOURCE_LENGTH = 1000; }\n    async readResources() {\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            const items = await getActiveWindow().navigator.clipboard.read();\n            for (const item of items) {\n                if (item.types.includes(`web ${vscodeResourcesMime}`)) {\n                    const blob = await item.getType(`web ${vscodeResourcesMime}`);\n                    const resources = JSON.parse(await blob.text()).map(x => URI.from(x));\n                    return resources;\n                }\n            }\n        }\n        catch (error) {\n            // Noop\n        }\n        const resourcesStateHash = await this.computeResourcesStateHash();\n        if (this.resourcesStateHash !== resourcesStateHash) {\n            this.clearResourcesState(); // state mismatch, resources no longer valid\n        }\n        return this.resources;\n    }\n    async computeResourcesStateHash() {\n        if (this.resources.length === 0) {\n            return undefined; // no resources, no hash needed\n        }\n        // Resources clipboard is managed in-memory only and thus\n        // fails to invalidate when clipboard data is changing.\n        // As such, we compute the hash of the current clipboard\n        // and use that to later validate the resources clipboard.\n        const clipboardText = await this.readText();\n        return hash(clipboardText.substring(0, BrowserClipboardService_1.MAX_RESOURCE_STATE_SOURCE_LENGTH));\n    }\n    clearInternalState() {\n        this.clearResourcesState();\n    }\n    clearResourcesState() {\n        this.resources = [];\n        this.resourcesStateHash = undefined;\n    }\n};\nBrowserClipboardService = BrowserClipboardService_1 = __decorate([\n    __param(0, ILayoutService),\n    __param(1, ILogService)\n], BrowserClipboardService);\nexport { BrowserClipboardService };\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 *--------------------------------------------------------------------------------------------*/\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 { Disposable, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { cloneAndChange } from '../../../base/common/objects.js';\nimport { TernarySearchTree } from '../../../base/common/ternarySearchTree.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { localize } from '../../../nls.js';\nimport { CommandsRegistry } from '../../commands/common/commands.js';\nimport { IConfigurationService } from '../../configuration/common/configuration.js';\nimport { IContextKeyService, RawContextKey } from '../common/contextkey.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    get value() {\n        return { ...this._value };\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    static { this.INSTANCE = new NullContext(); }\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}\nclass ConfigAwareContextValuesContainer extends Context {\n    static { this._keyPrefix = 'config.'; }\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 === 7 /* ConfigurationTarget.DEFAULT */) {\n                // new setting, reset everything\n                const allKeys = Array.from(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}\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    allKeysContainedIn(keys) {\n        return this.affectsSome(keys);\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    allKeysContainedIn(keys) {\n        return this.keys.every(key => keys.has(key));\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    allKeysContainedIn(keys) {\n        return this.events.every(evt => evt.allKeysContainedIn(keys));\n    }\n}\nfunction allEventKeysInContext(event, context) {\n    return event.allKeysContainedIn(new Set(Object.keys(context)));\n}\nexport class AbstractContextKeyService extends Disposable {\n    constructor(myContextId) {\n        super();\n        this._onDidChangeContext = this._register(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 = (rules ? rules.evaluate(context) : true);\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    dispose() {\n        super.dispose();\n        this._isDisposed = true;\n    }\n}\nlet ContextKeyService = class ContextKeyService extends AbstractContextKeyService {\n    constructor(configurationService) {\n        super(0);\n        this._contexts = new Map();\n        this._lastContextId = 0;\n        const myContext = this._register(new ConfigAwareContextValuesContainer(this._myContextId, configurationService, this._onDidChangeContext));\n        this._contexts.set(this._myContextId, 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    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        const 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 = this._register(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(e => {\n            const thisContainer = this._parent.getContextValuesContainer(this._myContextId);\n            const thisContextValues = thisContainer.value;\n            if (!allEventKeysInContext(e, thisContextValues)) {\n                this._onDidChangeContext.fire(e);\n            }\n        });\n    }\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._parent.disposeContext(this._myContextId);\n        this._domNode.removeAttribute(KEYBINDING_CONTEXT_ATTR);\n        super.dispose();\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}\nexport function setContext(accessor, contextKey, contextValue) {\n    const contextKeyService = accessor.get(IContextKeyService);\n    contextKeyService.createKey(String(contextKey), stringifyURIs(contextValue));\n}\nfunction stringifyURIs(contextValue) {\n    return cloneAndChange(contextValue, (obj) => {\n        if (typeof obj === 'object' && obj.$mid === 1 /* MarshalledId.Uri */) {\n            return URI.revive(obj).toString();\n        }\n        if (obj instanceof URI) {\n            return obj.toString();\n        }\n        return undefined;\n    });\n}\nCommandsRegistry.registerCommand('_setContext', setContext);\nCommandsRegistry.registerCommand({\n    id: 'getContextKeyInfo',\n    handler() {\n        return [...RawContextKey.all()].sort((a, b) => a.key.localeCompare(b.key));\n    },\n    metadata: {\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 (const 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 *--------------------------------------------------------------------------------------------*/\nexport class Node {\n    constructor(key, data) {\n        this.key = key;\n        this.data = data;\n        this.incoming = new Map();\n        this.outgoing = new Map();\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 (const 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(toNode.key, toNode);\n        toNode.incoming.set(fromNode.key, fromNode);\n    }\n    removeNode(data) {\n        const key = this._hashFn(data);\n        this._nodes.delete(key);\n        for (const 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(key, data);\n            this._nodes.set(key, node);\n        }\n        return node;\n    }\n    isEmpty() {\n        return this._nodes.size === 0;\n    }\n    toString() {\n        const data = [];\n        for (const [key, value] of this._nodes) {\n            data.push(`${key}\\n\\t(-> incoming)[${[...value.incoming.keys()].join(', ')}]\\n\\t(outgoing ->)[${[...value.outgoing.keys()].join(',')}]\\n`);\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 (const [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 (const [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 *--------------------------------------------------------------------------------------------*/\nexport class ServiceCollection {\n    constructor(...entries) {\n        this._entries = new Map();\n        for (const [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    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 { GlobalIdleValue } from '../../../base/common/async.js';\nimport { illegalState } from '../../../base/common/errors.js';\nimport { dispose, isDisposable, toDisposable } from '../../../base/common/lifecycle.js';\nimport { SyncDescriptor } from './descriptors.js';\nimport { Graph } from './graph.js';\nimport { IInstantiationService, _util } from './instantiation.js';\nimport { ServiceCollection } from './serviceCollection.js';\nimport { LinkedList } from '../../../base/common/linkedList.js';\n// TRACING\nconst _enableAllTracing = false;\nclass CyclicDependencyError extends Error {\n    constructor(graph) {\n        super('cyclic dependency between services');\n        this.message = graph.findCycleSlow() ?? `UNABLE to detect cycle, dumping graph: \\n${graph.toString()}`;\n    }\n}\nexport class InstantiationService {\n    constructor(_services = new ServiceCollection(), _strict = false, _parent, _enableTracing = _enableAllTracing) {\n        this._services = _services;\n        this._strict = _strict;\n        this._parent = _parent;\n        this._enableTracing = _enableTracing;\n        this._isDisposed = false;\n        this._servicesToMaybeDispose = new Set();\n        this._children = new Set();\n        this._activeInstantiations = new Set();\n        this._services.set(IInstantiationService, this);\n        this._globalGraph = _enableTracing ? _parent?._globalGraph ?? new Graph(e => e) : undefined;\n    }\n    dispose() {\n        if (!this._isDisposed) {\n            this._isDisposed = true;\n            // dispose all child services\n            dispose(this._children);\n            this._children.clear();\n            // dispose all services created by this service\n            for (const candidate of this._servicesToMaybeDispose) {\n                if (isDisposable(candidate)) {\n                    candidate.dispose();\n                }\n            }\n            this._servicesToMaybeDispose.clear();\n        }\n    }\n    _throwIfDisposed() {\n        if (this._isDisposed) {\n            throw new Error('InstantiationService has been disposed');\n        }\n    }\n    createChild(services, store) {\n        this._throwIfDisposed();\n        const that = this;\n        const result = new class extends InstantiationService {\n            dispose() {\n                that._children.delete(result);\n                super.dispose();\n            }\n        }(services, this._strict, this, this._enableTracing);\n        this._children.add(result);\n        store?.add(result);\n        return result;\n    }\n    invokeFunction(fn, ...args) {\n        this._throwIfDisposed();\n        const _trace = Trace.traceInvocation(this._enableTracing, fn);\n        let _done = false;\n        try {\n            const accessor = {\n                get: (id) => {\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) {\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        this._throwIfDisposed();\n        let _trace;\n        let result;\n        if (ctorOrDescriptor instanceof SyncDescriptor) {\n            _trace = Trace.traceCreation(this._enableTracing, ctorOrDescriptor.ctor);\n            result = this._createInstance(ctorOrDescriptor.ctor, ctorOrDescriptor.staticArguments.concat(rest), _trace);\n        }\n        else {\n            _trace = Trace.traceCreation(this._enableTracing, 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        const serviceDependencies = _util.getServiceDependencies(ctor).sort((a, b) => a.index - b.index);\n        const serviceArgs = [];\n        for (const dependency of serviceDependencies) {\n            const service = this._getOrCreateServiceInstance(dependency.id, _trace);\n            if (!service) {\n                this._throwIfStrict(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id}.`, false);\n            }\n            serviceArgs.push(service);\n        }\n        const 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.trace(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);\n            const 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 Reflect.construct(ctor, args.concat(serviceArgs));\n    }\n    _setCreatedServiceInstance(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._setCreatedServiceInstance(id, instance);\n        }\n        else {\n            throw new Error('illegalState - setting UNKNOWN service instance');\n        }\n    }\n    _getServiceInstanceOrDescriptor(id) {\n        const 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        if (this._globalGraph && this._globalGraphImplicitDependency) {\n            this._globalGraph.insertEdge(this._globalGraphImplicitDependency, String(id));\n        }\n        const 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        const seen = new Set();\n        while (stack.length) {\n            const item = stack.pop();\n            if (seen.has(String(item.id))) {\n                continue;\n            }\n            seen.add(String(item.id));\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 (const dependency of _util.getServiceDependencies(item.desc.ctor)) {\n                const instanceOrDesc = this._getServiceInstanceOrDescriptor(dependency.id);\n                if (!instanceOrDesc) {\n                    this._throwIfStrict(`[createInstance] ${id} depends on ${dependency.id} which is NOT registered.`, true);\n                }\n                // take note of all service dependencies\n                this._globalGraph?.insertEdge(String(item.id), String(dependency.id));\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._setCreatedServiceInstance(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(id, ctor, args, supportsDelayedInstantiation, _trace, this._servicesToMaybeDispose);\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(id, ctor, args = [], supportsDelayedInstantiation, _trace, disposeBucket) {\n        if (!supportsDelayedInstantiation) {\n            // eager instantiation\n            const result = this._createInstance(ctor, args, _trace);\n            disposeBucket.add(result);\n            return result;\n        }\n        else {\n            const child = new InstantiationService(undefined, this._strict, this, this._enableTracing);\n            child._globalGraphImplicitDependency = String(id);\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            // return \"empty events\" when the service isn't instantiated yet\n            const earlyListeners = new Map();\n            const idle = new GlobalIdleValue(() => {\n                const result = child._createInstance(ctor, args, _trace);\n                // early listeners that we kept are now being subscribed to\n                // the real service\n                for (const [key, values] of earlyListeners) {\n                    const candidate = result[key];\n                    if (typeof candidate === 'function') {\n                        for (const value of values) {\n                            value.disposable = candidate.apply(result, value.listener);\n                        }\n                    }\n                }\n                earlyListeners.clear();\n                disposeBucket.add(result);\n                return result;\n            });\n            return new Proxy(Object.create(null), {\n                get(target, key) {\n                    if (!idle.isInitialized) {\n                        // looks like an event\n                        if (typeof key === 'string' && (key.startsWith('onDid') || key.startsWith('onWill'))) {\n                            let list = earlyListeners.get(key);\n                            if (!list) {\n                                list = new LinkedList();\n                                earlyListeners.set(key, list);\n                            }\n                            const event = (callback, thisArg, disposables) => {\n                                if (idle.isInitialized) {\n                                    return idle.value[key](callback, thisArg, disposables);\n                                }\n                                else {\n                                    const entry = { listener: [callback, thisArg, disposables], disposable: undefined };\n                                    const rm = list.push(entry);\n                                    const result = toDisposable(() => {\n                                        rm();\n                                        entry.disposable?.dispose();\n                                    });\n                                    return result;\n                                }\n                            };\n                            return event;\n                        }\n                    }\n                    // value already exists\n                    if (key in target) {\n                        return target[key];\n                    }\n                    // create value\n                    const 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                getPrototypeOf(_target) {\n                    return ctor.prototype;\n                }\n            });\n        }\n    }\n    _throwIfStrict(msg, printWarning) {\n        if (printWarning) {\n            console.warn(msg);\n        }\n        if (this._strict) {\n            throw new Error(msg);\n        }\n    }\n}\nexport class Trace {\n    static { this.all = new Set(); }\n    static { this._None = new class extends Trace {\n        constructor() { super(0 /* TraceType.None */, null); }\n        stop() { }\n        branch() { return this; }\n    }; }\n    static traceInvocation(_enableTracing, ctor) {\n        return !_enableTracing ? Trace._None : new Trace(2 /* TraceType.Invocation */, ctor.name || new Error().stack.split('\\n').slice(3, 4).join('\\n'));\n    }\n    static traceCreation(_enableTracing, ctor) {\n        return !_enableTracing ? Trace._None : new Trace(1 /* TraceType.Creation */, ctor.name);\n    }\n    static { this._totals = 0; }\n    constructor(type, name) {\n        this.type = type;\n        this.name = name;\n        this._start = Date.now();\n        this._dep = [];\n    }\n    branch(id, first) {\n        const child = new Trace(3 /* TraceType.Branch */, id.toString());\n        this._dep.push([id, first, child]);\n        return child;\n    }\n    stop() {\n        const dur = Date.now() - this._start;\n        Trace._totals += dur;\n        let causedCreation = false;\n        function printChild(n, trace) {\n            const res = [];\n            const 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                    const 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        const lines = [\n            `${this.type === 1 /* TraceType.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            Trace.all.add(lines.join('\\n'));\n        }\n    }\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 *--------------------------------------------------------------------------------------------*/\nimport { isFalsyOrEmpty, isNonEmptyArray } from '../../../base/common/arrays.js';\nimport { DebounceEmitter } from '../../../base/common/event.js';\nimport { Iterable } from '../../../base/common/iterator.js';\nimport { ResourceMap } from '../../../base/common/map.js';\nimport { Schemas } from '../../../base/common/network.js';\nimport { URI } from '../../../base/common/uri.js';\nimport { MarkerSeverity } from './markers.js';\nexport const unsupportedSchemas = new Set([\n    Schemas.inMemory,\n    Schemas.vscodeSourceControl,\n    Schemas.walkThrough,\n    Schemas.walkThroughSnippet,\n    Schemas.vscodeChatCodeBlock,\n]);\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        const ownerMap = this._byResource.get(resource);\n        return ownerMap?.get(owner);\n    }\n    delete(resource, owner) {\n        let removedA = false;\n        let removedB = false;\n        const ownerMap = this._byResource.get(resource);\n        if (ownerMap) {\n            removedA = ownerMap.delete(owner);\n        }\n        const 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        if (typeof key === 'string') {\n            return this._byOwner.get(key)?.values() ?? Iterable.empty();\n        }\n        if (URI.isUri(key)) {\n            return this._byResource.get(key)?.values() ?? 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 (unsupportedSchemas.has(resource.scheme)) {\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 DebounceEmitter({\n            delay: 0,\n            merge: MarkerService._merge\n        });\n        this.onMarkerChanged = this._onMarkerChanged.event;\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    changeAll(owner, data) {\n        const changes = [];\n        // remove old marker\n        const existing = this._data.values(owner);\n        if (existing) {\n            for (const data of existing) {\n                const first = Iterable.first(data);\n                if (first) {\n                    changes.push(first.resource);\n                    this._data.delete(first.resource, owner);\n                }\n            }\n        }\n        // add new markers\n        if (isNonEmptyArray(data)) {\n            // group by resource\n            const groups = new ResourceMap();\n            for (const { resource, marker: markerData } of data) {\n                const marker = MarkerService._toMarker(owner, resource, markerData);\n                if (!marker) {\n                    // filter bad markers\n                    continue;\n                }\n                const array = groups.get(resource);\n                if (!array) {\n                    groups.set(resource, [marker]);\n                    changes.push(resource);\n                }\n                else {\n                    array.push(marker);\n                }\n            }\n            // insert all\n            for (const [resource, value] of groups) {\n                this._data.set(resource, owner, value);\n            }\n        }\n        if (changes.length > 0) {\n            this._onMarkerChanged.fire(changes);\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 (const markers of this._data.values()) {\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        else {\n            // of one resource OR owner\n            const iterable = this._data.values(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    // --- event debounce logic\n    static _merge(all) {\n        const set = new ResourceMap();\n        for (const array of all) {\n            for (const item of array) {\n                set.set(item, true);\n            }\n        }\n        return Array.from(set.keys());\n    }\n}\n","import { Disposable } from '../../../base/common/lifecycle.js';\nimport { ConfigurationModel } from './configurationModels.js';\nimport { Extensions } from './configurationRegistry.js';\nimport { Registry } from '../../registry/common/platform.js';\nexport class DefaultConfiguration extends Disposable {\n    get configurationModel() {\n        return this._configurationModel;\n    }\n    constructor(logService) {\n        super();\n        this.logService = logService;\n        this._configurationModel = ConfigurationModel.createEmptyModel(this.logService);\n    }\n    reload() {\n        this.resetConfigurationModel();\n        return this.configurationModel;\n    }\n    getConfigurationDefaultOverrides() {\n        return {};\n    }\n    resetConfigurationModel() {\n        this._configurationModel = ConfigurationModel.createEmptyModel(this.logService);\n        const properties = Registry.as(Extensions.Configuration).getConfigurationProperties();\n        this.updateConfigurationModel(Object.keys(properties), properties);\n    }\n    updateConfigurationModel(properties, configurationProperties) {\n        const configurationDefaultsOverrides = this.getConfigurationDefaultOverrides();\n        for (const key of properties) {\n            const defaultOverrideValue = configurationDefaultsOverrides[key];\n            const propertySchema = configurationProperties[key];\n            if (defaultOverrideValue !== undefined) {\n                this._configurationModel.setValue(key, defaultOverrideValue);\n            }\n            else if (propertySchema) {\n                this._configurationModel.setValue(key, propertySchema.default);\n            }\n            else {\n                this._configurationModel.removeValue(key);\n            }\n        }\n    }\n}\n","import { localize } from '../../../nls.js';\nimport { createDecorator } from '../../instantiation/common/instantiation.js';\nexport const IAccessibilitySignalService = createDecorator('accessibilitySignalService');\n/** Make sure you understand the doc comments of the method you want to call when using this token! */\nexport const AcknowledgeDocCommentsToken = Symbol('AcknowledgeDocCommentsToken');\n/**\n * Corresponds to the audio files in ./media.\n*/\nexport class Sound {\n    static register(options) {\n        const sound = new Sound(options.fileName);\n        return sound;\n    }\n    static { this.error = Sound.register({ fileName: 'error.mp3' }); }\n    static { this.warning = Sound.register({ fileName: 'warning.mp3' }); }\n    static { this.success = Sound.register({ fileName: 'success.mp3' }); }\n    static { this.foldedArea = Sound.register({ fileName: 'foldedAreas.mp3' }); }\n    static { this.break = Sound.register({ fileName: 'break.mp3' }); }\n    static { this.quickFixes = Sound.register({ fileName: 'quickFixes.mp3' }); }\n    static { this.taskCompleted = Sound.register({ fileName: 'taskCompleted.mp3' }); }\n    static { this.taskFailed = Sound.register({ fileName: 'taskFailed.mp3' }); }\n    static { this.terminalBell = Sound.register({ fileName: 'terminalBell.mp3' }); }\n    static { this.diffLineInserted = Sound.register({ fileName: 'diffLineInserted.mp3' }); }\n    static { this.diffLineDeleted = Sound.register({ fileName: 'diffLineDeleted.mp3' }); }\n    static { this.diffLineModified = Sound.register({ fileName: 'diffLineModified.mp3' }); }\n    static { this.chatRequestSent = Sound.register({ fileName: 'chatRequestSent.mp3' }); }\n    static { this.chatResponseReceived1 = Sound.register({ fileName: 'chatResponseReceived1.mp3' }); }\n    static { this.chatResponseReceived2 = Sound.register({ fileName: 'chatResponseReceived2.mp3' }); }\n    static { this.chatResponseReceived3 = Sound.register({ fileName: 'chatResponseReceived3.mp3' }); }\n    static { this.chatResponseReceived4 = Sound.register({ fileName: 'chatResponseReceived4.mp3' }); }\n    static { this.clear = Sound.register({ fileName: 'clear.mp3' }); }\n    static { this.save = Sound.register({ fileName: 'save.mp3' }); }\n    static { this.format = Sound.register({ fileName: 'format.mp3' }); }\n    static { this.voiceRecordingStarted = Sound.register({ fileName: 'voiceRecordingStarted.mp3' }); }\n    static { this.voiceRecordingStopped = Sound.register({ fileName: 'voiceRecordingStopped.mp3' }); }\n    static { this.progress = Sound.register({ fileName: 'progress.mp3' }); }\n    constructor(fileName) {\n        this.fileName = fileName;\n    }\n}\nexport class SoundSource {\n    constructor(randomOneOf) {\n        this.randomOneOf = randomOneOf;\n    }\n}\nexport class AccessibilitySignal {\n    constructor(sound, name, legacySoundSettingsKey, settingsKey, legacyAnnouncementSettingsKey, announcementMessage) {\n        this.sound = sound;\n        this.name = name;\n        this.legacySoundSettingsKey = legacySoundSettingsKey;\n        this.settingsKey = settingsKey;\n        this.legacyAnnouncementSettingsKey = legacyAnnouncementSettingsKey;\n        this.announcementMessage = announcementMessage;\n    }\n    static { this._signals = new Set(); }\n    static register(options) {\n        const soundSource = new SoundSource('randomOneOf' in options.sound ? options.sound.randomOneOf : [options.sound]);\n        const signal = new AccessibilitySignal(soundSource, options.name, options.legacySoundSettingsKey, options.settingsKey, options.legacyAnnouncementSettingsKey, options.announcementMessage);\n        AccessibilitySignal._signals.add(signal);\n        return signal;\n    }\n    static { this.errorAtPosition = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.positionHasError.name', 'Error at Position'),\n        sound: Sound.error,\n        announcementMessage: localize('accessibility.signals.positionHasError', 'Error'),\n        settingsKey: 'accessibility.signals.positionHasError',\n        delaySettingsKey: 'accessibility.signalOptions.delays.errorAtPosition'\n    }); }\n    static { this.warningAtPosition = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.positionHasWarning.name', 'Warning at Position'),\n        sound: Sound.warning,\n        announcementMessage: localize('accessibility.signals.positionHasWarning', 'Warning'),\n        settingsKey: 'accessibility.signals.positionHasWarning',\n        delaySettingsKey: 'accessibility.signalOptions.delays.warningAtPosition'\n    }); }\n    static { this.errorOnLine = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.lineHasError.name', 'Error on Line'),\n        sound: Sound.error,\n        legacySoundSettingsKey: 'audioCues.lineHasError',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.error',\n        announcementMessage: localize('accessibility.signals.lineHasError', 'Error on Line'),\n        settingsKey: 'accessibility.signals.lineHasError',\n    }); }\n    static { this.warningOnLine = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.lineHasWarning.name', 'Warning on Line'),\n        sound: Sound.warning,\n        legacySoundSettingsKey: 'audioCues.lineHasWarning',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.warning',\n        announcementMessage: localize('accessibility.signals.lineHasWarning', 'Warning on Line'),\n        settingsKey: 'accessibility.signals.lineHasWarning',\n    }); }\n    static { this.foldedArea = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.lineHasFoldedArea.name', 'Folded Area on Line'),\n        sound: Sound.foldedArea,\n        legacySoundSettingsKey: 'audioCues.lineHasFoldedArea',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.foldedArea',\n        announcementMessage: localize('accessibility.signals.lineHasFoldedArea', 'Folded'),\n        settingsKey: 'accessibility.signals.lineHasFoldedArea',\n    }); }\n    static { this.break = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.lineHasBreakpoint.name', 'Breakpoint on Line'),\n        sound: Sound.break,\n        legacySoundSettingsKey: 'audioCues.lineHasBreakpoint',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.breakpoint',\n        announcementMessage: localize('accessibility.signals.lineHasBreakpoint', 'Breakpoint'),\n        settingsKey: 'accessibility.signals.lineHasBreakpoint',\n    }); }\n    static { this.inlineSuggestion = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.lineHasInlineSuggestion.name', 'Inline Suggestion on Line'),\n        sound: Sound.quickFixes,\n        legacySoundSettingsKey: 'audioCues.lineHasInlineSuggestion',\n        settingsKey: 'accessibility.signals.lineHasInlineSuggestion',\n    }); }\n    static { this.terminalQuickFix = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.terminalQuickFix.name', 'Terminal Quick Fix'),\n        sound: Sound.quickFixes,\n        legacySoundSettingsKey: 'audioCues.terminalQuickFix',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.terminalQuickFix',\n        announcementMessage: localize('accessibility.signals.terminalQuickFix', 'Quick Fix'),\n        settingsKey: 'accessibility.signals.terminalQuickFix',\n    }); }\n    static { this.onDebugBreak = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.onDebugBreak.name', 'Debugger Stopped on Breakpoint'),\n        sound: Sound.break,\n        legacySoundSettingsKey: 'audioCues.onDebugBreak',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.onDebugBreak',\n        announcementMessage: localize('accessibility.signals.onDebugBreak', 'Breakpoint'),\n        settingsKey: 'accessibility.signals.onDebugBreak',\n    }); }\n    static { this.noInlayHints = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.noInlayHints', 'No Inlay Hints on Line'),\n        sound: Sound.error,\n        legacySoundSettingsKey: 'audioCues.noInlayHints',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.noInlayHints',\n        announcementMessage: localize('accessibility.signals.noInlayHints', 'No Inlay Hints'),\n        settingsKey: 'accessibility.signals.noInlayHints',\n    }); }\n    static { this.taskCompleted = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.taskCompleted', 'Task Completed'),\n        sound: Sound.taskCompleted,\n        legacySoundSettingsKey: 'audioCues.taskCompleted',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.taskCompleted',\n        announcementMessage: localize('accessibility.signals.taskCompleted', 'Task Completed'),\n        settingsKey: 'accessibility.signals.taskCompleted',\n    }); }\n    static { this.taskFailed = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.taskFailed', 'Task Failed'),\n        sound: Sound.taskFailed,\n        legacySoundSettingsKey: 'audioCues.taskFailed',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.taskFailed',\n        announcementMessage: localize('accessibility.signals.taskFailed', 'Task Failed'),\n        settingsKey: 'accessibility.signals.taskFailed',\n    }); }\n    static { this.terminalCommandFailed = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.terminalCommandFailed', 'Terminal Command Failed'),\n        sound: Sound.error,\n        legacySoundSettingsKey: 'audioCues.terminalCommandFailed',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.terminalCommandFailed',\n        announcementMessage: localize('accessibility.signals.terminalCommandFailed', 'Command Failed'),\n        settingsKey: 'accessibility.signals.terminalCommandFailed',\n    }); }\n    static { this.terminalCommandSucceeded = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.terminalCommandSucceeded', 'Terminal Command Succeeded'),\n        sound: Sound.success,\n        announcementMessage: localize('accessibility.signals.terminalCommandSucceeded', 'Command Succeeded'),\n        settingsKey: 'accessibility.signals.terminalCommandSucceeded',\n    }); }\n    static { this.terminalBell = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.terminalBell', 'Terminal Bell'),\n        sound: Sound.terminalBell,\n        legacySoundSettingsKey: 'audioCues.terminalBell',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.terminalBell',\n        announcementMessage: localize('accessibility.signals.terminalBell', 'Terminal Bell'),\n        settingsKey: 'accessibility.signals.terminalBell',\n    }); }\n    static { this.notebookCellCompleted = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.notebookCellCompleted', 'Notebook Cell Completed'),\n        sound: Sound.taskCompleted,\n        legacySoundSettingsKey: 'audioCues.notebookCellCompleted',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.notebookCellCompleted',\n        announcementMessage: localize('accessibility.signals.notebookCellCompleted', 'Notebook Cell Completed'),\n        settingsKey: 'accessibility.signals.notebookCellCompleted',\n    }); }\n    static { this.notebookCellFailed = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.notebookCellFailed', 'Notebook Cell Failed'),\n        sound: Sound.taskFailed,\n        legacySoundSettingsKey: 'audioCues.notebookCellFailed',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.notebookCellFailed',\n        announcementMessage: localize('accessibility.signals.notebookCellFailed', 'Notebook Cell Failed'),\n        settingsKey: 'accessibility.signals.notebookCellFailed',\n    }); }\n    static { this.diffLineInserted = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.diffLineInserted', 'Diff Line Inserted'),\n        sound: Sound.diffLineInserted,\n        legacySoundSettingsKey: 'audioCues.diffLineInserted',\n        settingsKey: 'accessibility.signals.diffLineInserted',\n    }); }\n    static { this.diffLineDeleted = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.diffLineDeleted', 'Diff Line Deleted'),\n        sound: Sound.diffLineDeleted,\n        legacySoundSettingsKey: 'audioCues.diffLineDeleted',\n        settingsKey: 'accessibility.signals.diffLineDeleted',\n    }); }\n    static { this.diffLineModified = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.diffLineModified', 'Diff Line Modified'),\n        sound: Sound.diffLineModified,\n        legacySoundSettingsKey: 'audioCues.diffLineModified',\n        settingsKey: 'accessibility.signals.diffLineModified',\n    }); }\n    static { this.chatRequestSent = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.chatRequestSent', 'Chat Request Sent'),\n        sound: Sound.chatRequestSent,\n        legacySoundSettingsKey: 'audioCues.chatRequestSent',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.chatRequestSent',\n        announcementMessage: localize('accessibility.signals.chatRequestSent', 'Chat Request Sent'),\n        settingsKey: 'accessibility.signals.chatRequestSent',\n    }); }\n    static { this.chatResponseReceived = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.chatResponseReceived', 'Chat Response Received'),\n        legacySoundSettingsKey: 'audioCues.chatResponseReceived',\n        sound: {\n            randomOneOf: [\n                Sound.chatResponseReceived1,\n                Sound.chatResponseReceived2,\n                Sound.chatResponseReceived3,\n                Sound.chatResponseReceived4\n            ]\n        },\n        settingsKey: 'accessibility.signals.chatResponseReceived'\n    }); }\n    static { this.progress = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.progress', 'Progress'),\n        sound: Sound.progress,\n        legacySoundSettingsKey: 'audioCues.chatResponsePending',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.progress',\n        announcementMessage: localize('accessibility.signals.progress', 'Progress'),\n        settingsKey: 'accessibility.signals.progress'\n    }); }\n    static { this.clear = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.clear', 'Clear'),\n        sound: Sound.clear,\n        legacySoundSettingsKey: 'audioCues.clear',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.clear',\n        announcementMessage: localize('accessibility.signals.clear', 'Clear'),\n        settingsKey: 'accessibility.signals.clear'\n    }); }\n    static { this.save = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.save', 'Save'),\n        sound: Sound.save,\n        legacySoundSettingsKey: 'audioCues.save',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.save',\n        announcementMessage: localize('accessibility.signals.save', 'Save'),\n        settingsKey: 'accessibility.signals.save'\n    }); }\n    static { this.format = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.format', 'Format'),\n        sound: Sound.format,\n        legacySoundSettingsKey: 'audioCues.format',\n        legacyAnnouncementSettingsKey: 'accessibility.alert.format',\n        announcementMessage: localize('accessibility.signals.format', 'Format'),\n        settingsKey: 'accessibility.signals.format'\n    }); }\n    static { this.voiceRecordingStarted = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.voiceRecordingStarted', 'Voice Recording Started'),\n        sound: Sound.voiceRecordingStarted,\n        legacySoundSettingsKey: 'audioCues.voiceRecordingStarted',\n        settingsKey: 'accessibility.signals.voiceRecordingStarted'\n    }); }\n    static { this.voiceRecordingStopped = AccessibilitySignal.register({\n        name: localize('accessibilitySignals.voiceRecordingStopped', 'Voice Recording Stopped'),\n        sound: Sound.voiceRecordingStopped,\n        legacySoundSettingsKey: 'audioCues.voiceRecordingStopped',\n        settingsKey: 'accessibility.signals.voiceRecordingStopped'\n    }); }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { MultiplexLogger } from './log.js';\nexport class LogService extends Disposable {\n    constructor(primaryLogger, otherLoggers = []) {\n        super();\n        this.logger = new MultiplexLogger([primaryLogger, ...otherLoggers]);\n        this._register(primaryLogger.onDidChangeLogLevel(level => this.setLevel(level)));\n    }\n    get onDidChangeLogLevel() {\n        return this.logger.onDidChangeLogLevel;\n    }\n    setLevel(level) {\n        this.logger.setLevel(level);\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    warn(message, ...args) {\n        this.logger.warn(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 *--------------------------------------------------------------------------------------------*/\nconst editorFeatures = [];\n/**\n * Registers an editor feature. Editor features will be instantiated only once, as soon as\n * the first code editor is instantiated.\n */\nexport function registerEditorFeature(ctor) {\n    editorFeatures.push(ctor);\n}\nexport function getEditorFeatures() {\n    return editorFeatures.slice(0);\n}\n","/**\n * The monaco build doesn't like the dynamic import of tree sitter in the real service.\n * We use a dummy sertive here to make the build happy.\n */\nexport class StandaloneTreeSitterParserService {\n    getParseResult(textModel) {\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 './standaloneCodeEditorService.js';\nimport './standaloneLayoutService.js';\nimport '../../../platform/undoRedo/common/undoRedoService.js';\nimport '../../common/services/languageFeatureDebounce.js';\nimport '../../common/services/semanticTokensStylingService.js';\nimport '../../common/services/languageFeaturesService.js';\nimport '../../browser/services/hoverService/hoverService.js';\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 } from '../../../base/common/event.js';\nimport { KeyCodeChord, decodeKeybinding } from '../../../base/common/keybindings.js';\nimport { ImmortalReference, toDisposable, DisposableStore, Disposable, combinedDisposable } 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 { IBulkEditService, ResourceEdit, ResourceTextEdit } from '../../browser/services/bulkEditService.js';\nimport { isDiffEditorConfigurationKey, isEditorConfigurationKey } from '../../common/config/editorConfigurationSchema.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/model.js';\nimport { ITextModelService } from '../../common/services/resolverService.js';\nimport { ITextResourceConfigurationService, ITextResourcePropertiesService } from '../../common/services/textResourceConfiguration.js';\nimport { CommandsRegistry, ICommandService } from '../../../platform/commands/common/commands.js';\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\nimport { Configuration, ConfigurationModel, ConfigurationChangeEvent } from '../../../platform/configuration/common/configurationModels.js';\nimport { IContextKeyService } from '../../../platform/contextkey/common/contextkey.js';\nimport { IDialogService } from '../../../platform/dialogs/common/dialogs.js';\nimport { createDecorator, IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nimport { AbstractKeybindingService } from '../../../platform/keybinding/common/abstractKeybindingService.js';\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.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 { ILabelService } from '../../../platform/label/common/label.js';\nimport { INotificationService, NoOpNotification } from '../../../platform/notification/common/notification.js';\nimport { IEditorProgressService, IProgressService } from '../../../platform/progress/common/progress.js';\nimport { ITelemetryService } from '../../../platform/telemetry/common/telemetry.js';\nimport { IWorkspaceContextService, WorkspaceFolder, STANDALONE_EDITOR_WORKSPACE_ID } from '../../../platform/workspace/common/workspace.js';\nimport { ILayoutService } from '../../../platform/layout/browser/layoutService.js';\nimport { StandaloneServicesNLS } from '../../common/standaloneStrings.js';\nimport { basename } from '../../../base/common/resources.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { ConsoleLogger, ILogService } from '../../../platform/log/common/log.js';\nimport { IWorkspaceTrustManagementService } from '../../../platform/workspace/common/workspaceTrust.js';\nimport { IContextMenuService, IContextViewService } from '../../../platform/contextview/browser/contextView.js';\nimport { ContextViewService } from '../../../platform/contextview/browser/contextViewService.js';\nimport { LanguageService } from '../../common/services/languageService.js';\nimport { ContextMenuService } from '../../../platform/contextview/browser/contextMenuService.js';\nimport { getSingletonServiceDescriptors, registerSingleton } from '../../../platform/instantiation/common/extensions.js';\nimport { OpenerService } from '../../browser/services/openerService.js';\nimport { IEditorWorkerService } from '../../common/services/editorWorker.js';\nimport { EditorWorkerService } from '../../browser/services/editorWorkerService.js';\nimport { ILanguageService } from '../../common/languages/language.js';\nimport { MarkerDecorationsService } from '../../common/services/markerDecorationsService.js';\nimport { IMarkerDecorationsService } from '../../common/services/markerDecorations.js';\nimport { ModelService } from '../../common/services/modelService.js';\nimport { StandaloneQuickInputService } from './quickInput/standaloneQuickInputService.js';\nimport { StandaloneThemeService } from './standaloneThemeService.js';\nimport { IStandaloneThemeService } from '../common/standaloneTheme.js';\nimport { AccessibilityService } from '../../../platform/accessibility/browser/accessibilityService.js';\nimport { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\nimport { IMenuService } from '../../../platform/actions/common/actions.js';\nimport { MenuService } from '../../../platform/actions/common/menuService.js';\nimport { BrowserClipboardService } from '../../../platform/clipboard/browser/clipboardService.js';\nimport { IClipboardService } from '../../../platform/clipboard/common/clipboardService.js';\nimport { ContextKeyService } from '../../../platform/contextkey/browser/contextKeyService.js';\nimport { SyncDescriptor } from '../../../platform/instantiation/common/descriptors.js';\nimport { InstantiationService } from '../../../platform/instantiation/common/instantiationService.js';\nimport { ServiceCollection } from '../../../platform/instantiation/common/serviceCollection.js';\nimport { IListService, ListService } from '../../../platform/list/browser/listService.js';\nimport { IMarkerService } from '../../../platform/markers/common/markers.js';\nimport { MarkerService } from '../../../platform/markers/common/markerService.js';\nimport { IOpenerService } from '../../../platform/opener/common/opener.js';\nimport { IQuickInputService } from '../../../platform/quickinput/common/quickInput.js';\nimport { IStorageService, InMemoryStorageService } from '../../../platform/storage/common/storage.js';\nimport { DefaultConfiguration } from '../../../platform/configuration/common/configurations.js';\nimport { IAccessibilitySignalService } from '../../../platform/accessibilitySignal/browser/accessibilitySignalService.js';\nimport { ILanguageFeaturesService } from '../../common/services/languageFeatures.js';\nimport { ILanguageConfigurationService } from '../../common/languages/languageConfigurationRegistry.js';\nimport { LogService } from '../../../platform/log/common/logService.js';\nimport { getEditorFeatures } from '../../common/editorFeatures.js';\nimport { onUnexpectedError } from '../../../base/common/errors.js';\nimport { IEnvironmentService } from '../../../platform/environment/common/environment.js';\nimport { mainWindow } from '../../../base/browser/window.js';\nimport { ResourceMap } from '../../../base/common/map.js';\nimport { ITreeSitterParserService } from '../../common/services/treeSitterParserService.js';\nimport { StandaloneTreeSitterParserService } from './standaloneTreeSitterService.js';\nclass 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}\nlet StandaloneTextModelService = class StandaloneTextModelService {\n    constructor(modelService) {\n        this.modelService = modelService;\n    }\n    createModelReference(resource) {\n        const model = this.modelService.getModel(resource);\n        if (!model) {\n            return Promise.reject(new Error(`Model not found`));\n        }\n        return Promise.resolve(new ImmortalReference(new SimpleModel(model)));\n    }\n};\nStandaloneTextModelService = __decorate([\n    __param(0, IModelService)\n], StandaloneTextModelService);\nclass StandaloneEditorProgressService {\n    static { this.NULL_PROGRESS_RUNNER = {\n        done: () => { },\n        total: () => { },\n        worked: () => { }\n    }; }\n    show() {\n        return StandaloneEditorProgressService.NULL_PROGRESS_RUNNER;\n    }\n    async showWhile(promise, delay) {\n        await promise;\n    }\n}\nclass StandaloneProgressService {\n    withProgress(_options, task, onDidCancel) {\n        return task({\n            report: () => { },\n        });\n    }\n}\nclass StandaloneEnvironmentService {\n    constructor() {\n        this.isExtensionDevelopment = false;\n        this.isBuilt = false;\n    }\n}\nclass StandaloneDialogService {\n    async confirm(confirmation) {\n        const confirmed = this.doConfirm(confirmation.message, confirmation.detail);\n        return {\n            confirmed,\n            checkboxChecked: false // unsupported\n        };\n    }\n    doConfirm(message, detail) {\n        let messageText = message;\n        if (detail) {\n            messageText = messageText + '\\n\\n' + detail;\n        }\n        return mainWindow.confirm(messageText);\n    }\n    async prompt(prompt) {\n        let result = undefined;\n        const confirmed = this.doConfirm(prompt.message, prompt.detail);\n        if (confirmed) {\n            const promptButtons = [...(prompt.buttons ?? [])];\n            if (prompt.cancelButton && typeof prompt.cancelButton !== 'string' && typeof prompt.cancelButton !== 'boolean') {\n                promptButtons.push(prompt.cancelButton);\n            }\n            result = await promptButtons[0]?.run({ checkboxChecked: false });\n        }\n        return { result };\n    }\n    async error(message, detail) {\n        await this.prompt({ type: Severity.Error, message, detail });\n    }\n}\nexport class StandaloneNotificationService {\n    static { this.NO_OP = new NoOpNotification(); }\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 StandaloneNotificationService.NO_OP;\n    }\n    prompt(severity, message, choices, options) {\n        return StandaloneNotificationService.NO_OP;\n    }\n    status(message, options) {\n        return Disposable.None;\n    }\n}\nlet StandaloneCommandService = class StandaloneCommandService {\n    constructor(instantiationService) {\n        this._onWillExecuteCommand = new Emitter();\n        this._onDidExecuteCommand = new Emitter();\n        this.onDidExecuteCommand = this._onDidExecuteCommand.event;\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};\nStandaloneCommandService = __decorate([\n    __param(0, IInstantiationService)\n], StandaloneCommandService);\nexport { StandaloneCommandService };\nlet StandaloneKeybindingService = class StandaloneKeybindingService extends AbstractKeybindingService {\n    constructor(contextKeyService, commandService, telemetryService, notificationService, logService, codeEditorService) {\n        super(contextKeyService, commandService, telemetryService, notificationService, logService);\n        this._cachedResolver = null;\n        this._dynamicKeybindings = [];\n        this._domNodeListeners = [];\n        const addContainer = (domNode) => {\n            const disposables = new DisposableStore();\n            // for standard keybindings\n            disposables.add(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            disposables.add(dom.addDisposableListener(domNode, 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            this._domNodeListeners.push(new DomNodeListeners(domNode, disposables));\n        };\n        const removeContainer = (domNode) => {\n            for (let i = 0; i < this._domNodeListeners.length; i++) {\n                const domNodeListeners = this._domNodeListeners[i];\n                if (domNodeListeners.domNode === domNode) {\n                    this._domNodeListeners.splice(i, 1);\n                    domNodeListeners.dispose();\n                }\n            }\n        };\n        const addCodeEditor = (codeEditor) => {\n            if (codeEditor.getOption(61 /* EditorOption.inDiffEditor */)) {\n                return;\n            }\n            addContainer(codeEditor.getContainerDomNode());\n        };\n        const removeCodeEditor = (codeEditor) => {\n            if (codeEditor.getOption(61 /* EditorOption.inDiffEditor */)) {\n                return;\n            }\n            removeContainer(codeEditor.getContainerDomNode());\n        };\n        this._register(codeEditorService.onCodeEditorAdd(addCodeEditor));\n        this._register(codeEditorService.onCodeEditorRemove(removeCodeEditor));\n        codeEditorService.listCodeEditors().forEach(addCodeEditor);\n        const addDiffEditor = (diffEditor) => {\n            addContainer(diffEditor.getContainerDomNode());\n        };\n        const removeDiffEditor = (diffEditor) => {\n            removeContainer(diffEditor.getContainerDomNode());\n        };\n        this._register(codeEditorService.onDiffEditorAdd(addDiffEditor));\n        this._register(codeEditorService.onDiffEditorRemove(removeDiffEditor));\n        codeEditorService.listDiffEditors().forEach(addDiffEditor);\n    }\n    addDynamicKeybinding(command, keybinding, handler, when) {\n        return combinedDisposable(CommandsRegistry.registerCommand(command, handler), this.addDynamicKeybindings([{\n                keybinding,\n                command,\n                when\n            }]));\n    }\n    addDynamicKeybindings(rules) {\n        const entries = rules.map((rule) => {\n            const keybinding = decodeKeybinding(rule.keybinding, OS);\n            return {\n                keybinding,\n                command: rule.command ?? null,\n                commandArgs: rule.commandArgs,\n                when: rule.when,\n                weight1: 1000,\n                weight2: 0,\n                extensionId: null,\n                isBuiltinExtension: false\n            };\n        });\n        this._dynamicKeybindings = this._dynamicKeybindings.concat(entries);\n        this.updateResolver();\n        return toDisposable(() => {\n            // Search the first entry and remove them all since they will be contiguous\n            for (let i = 0; i < this._dynamicKeybindings.length; i++) {\n                if (this._dynamicKeybindings[i] === entries[0]) {\n                    this._dynamicKeybindings.splice(i, entries.length);\n                    this.updateResolver();\n                    return;\n                }\n            }\n        });\n    }\n    updateResolver() {\n        this._cachedResolver = null;\n        this._onDidUpdateKeybindings.fire();\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 mainWindow.document.hasFocus();\n    }\n    _toNormalizedKeybindingItems(items, isDefault) {\n        const result = [];\n        let 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 = USLayoutResolvedKeybinding.resolveKeybinding(keybinding, OS);\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    resolveKeyboardEvent(keyboardEvent) {\n        const chord = new KeyCodeChord(keyboardEvent.ctrlKey, keyboardEvent.shiftKey, keyboardEvent.altKey, keyboardEvent.metaKey, keyboardEvent.keyCode);\n        return new USLayoutResolvedKeybinding([chord], OS);\n    }\n};\nStandaloneKeybindingService = __decorate([\n    __param(0, IContextKeyService),\n    __param(1, ICommandService),\n    __param(2, ITelemetryService),\n    __param(3, INotificationService),\n    __param(4, ILogService),\n    __param(5, ICodeEditorService)\n], StandaloneKeybindingService);\nexport { StandaloneKeybindingService };\nclass DomNodeListeners extends Disposable {\n    constructor(domNode, disposables) {\n        super();\n        this.domNode = domNode;\n        this._register(disposables);\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}\nlet StandaloneConfigurationService = class StandaloneConfigurationService {\n    constructor(logService) {\n        this.logService = logService;\n        this._onDidChangeConfiguration = new Emitter();\n        this.onDidChangeConfiguration = this._onDidChangeConfiguration.event;\n        const defaultConfiguration = new DefaultConfiguration(logService);\n        this._configuration = new Configuration(defaultConfiguration.reload(), ConfigurationModel.createEmptyModel(logService), ConfigurationModel.createEmptyModel(logService), ConfigurationModel.createEmptyModel(logService), ConfigurationModel.createEmptyModel(logService), ConfigurationModel.createEmptyModel(logService), new ResourceMap(), ConfigurationModel.createEmptyModel(logService), new ResourceMap(), logService);\n        defaultConfiguration.dispose();\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        const 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, undefined, this.logService);\n            configurationChangeEvent.source = 8 /* ConfigurationTarget.MEMORY */;\n            this._onDidChangeConfiguration.fire(configurationChangeEvent);\n        }\n        return Promise.resolve();\n    }\n    updateValue(key, value, arg3, arg4) {\n        return this.updateValues([[key, value]]);\n    }\n    inspect(key, options = {}) {\n        return this._configuration.inspect(key, options, undefined);\n    }\n};\nStandaloneConfigurationService = __decorate([\n    __param(0, ILogService)\n], StandaloneConfigurationService);\nexport { StandaloneConfigurationService };\nlet StandaloneResourceConfigurationService = class StandaloneResourceConfigurationService {\n    constructor(configurationService, modelService, languageService) {\n        this.configurationService = configurationService;\n        this.modelService = modelService;\n        this.languageService = languageService;\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        const language = resource ? this.getLanguage(resource, position) : undefined;\n        if (typeof section === 'undefined') {\n            return this.configurationService.getValue({\n                resource,\n                overrideIdentifier: language\n            });\n        }\n        return this.configurationService.getValue(section, {\n            resource,\n            overrideIdentifier: language\n        });\n    }\n    getLanguage(resource, position) {\n        const model = this.modelService.getModel(resource);\n        if (model) {\n            return position ? model.getLanguageIdAtPosition(position.lineNumber, position.column) : model.getLanguageId();\n        }\n        return this.languageService.guessLanguageIdByFilepathOrFirstLine(resource);\n    }\n};\nStandaloneResourceConfigurationService = __decorate([\n    __param(0, IConfigurationService),\n    __param(1, IModelService),\n    __param(2, ILanguageService)\n], StandaloneResourceConfigurationService);\nlet StandaloneResourcePropertiesService = class StandaloneResourcePropertiesService {\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 && typeof eol === 'string' && eol !== 'auto') {\n            return eol;\n        }\n        return (isLinux || isMacintosh) ? '\\n' : '\\r\\n';\n    }\n};\nStandaloneResourcePropertiesService = __decorate([\n    __param(0, IConfigurationService)\n], StandaloneResourcePropertiesService);\nclass StandaloneTelemetryService {\n    publicLog2() { }\n}\nclass StandaloneWorkspaceContextService {\n    static { this.SCHEME = 'inmemory'; }\n    constructor() {\n        const resource = URI.from({ scheme: StandaloneWorkspaceContextService.SCHEME, authority: 'model', path: '/' });\n        this.workspace = { id: STANDALONE_EDITOR_WORKSPACE_ID, folders: [new WorkspaceFolder({ uri: resource, name: '', index: 0 })] };\n    }\n    getWorkspace() {\n        return this.workspace;\n    }\n    getWorkspaceFolder(resource) {\n        return resource && resource.scheme === StandaloneWorkspaceContextService.SCHEME ? this.workspace.folders[0] : null;\n    }\n}\nexport function updateConfigurationService(configurationService, source, isDiffEditor) {\n    if (!source) {\n        return;\n    }\n    if (!(configurationService instanceof StandaloneConfigurationService)) {\n        return;\n    }\n    const 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}\nlet StandaloneBulkEditService = class StandaloneBulkEditService {\n    constructor(_modelService) {\n        this._modelService = _modelService;\n        //\n    }\n    hasPreviewHandler() {\n        return false;\n    }\n    async apply(editsIn, _options) {\n        const edits = Array.isArray(editsIn) ? editsIn : ResourceEdit.convert(editsIn);\n        const textEdits = new Map();\n        for (const 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(StandaloneServicesNLS.bulkEditServiceSummary, totalEdits, totalFiles),\n            isApplied: totalEdits > 0\n        };\n    }\n};\nStandaloneBulkEditService = __decorate([\n    __param(0, IModelService)\n], StandaloneBulkEditService);\nclass StandaloneUriLabelService {\n    getUriLabel(resource, options) {\n        if (resource.scheme === 'file') {\n            return resource.fsPath;\n        }\n        return resource.path;\n    }\n    getUriBasenameLabel(resource) {\n        return basename(resource);\n    }\n}\nlet StandaloneContextViewService = class StandaloneContextViewService extends ContextViewService {\n    constructor(layoutService, _codeEditorService) {\n        super(layoutService);\n        this._codeEditorService = _codeEditorService;\n    }\n    showContextView(delegate, container, shadowRoot) {\n        if (!container) {\n            const codeEditor = this._codeEditorService.getFocusedCodeEditor() || this._codeEditorService.getActiveCodeEditor();\n            if (codeEditor) {\n                container = codeEditor.getContainerDomNode();\n            }\n        }\n        return super.showContextView(delegate, container, shadowRoot);\n    }\n};\nStandaloneContextViewService = __decorate([\n    __param(0, ILayoutService),\n    __param(1, ICodeEditorService)\n], StandaloneContextViewService);\nclass StandaloneWorkspaceTrustManagementService {\n    constructor() {\n        this._neverEmitter = new Emitter();\n        this.onDidChangeTrust = this._neverEmitter.event;\n    }\n    isWorkspaceTrusted() {\n        return true;\n    }\n}\nclass StandaloneLanguageService extends LanguageService {\n    constructor() {\n        super();\n    }\n}\nclass StandaloneLogService extends LogService {\n    constructor() {\n        super(new ConsoleLogger());\n    }\n}\nlet StandaloneContextMenuService = class StandaloneContextMenuService extends ContextMenuService {\n    constructor(telemetryService, notificationService, contextViewService, keybindingService, menuService, contextKeyService) {\n        super(telemetryService, notificationService, contextViewService, keybindingService, menuService, contextKeyService);\n        this.configure({ blockMouse: false }); // we do not want that in the standalone editor\n    }\n};\nStandaloneContextMenuService = __decorate([\n    __param(0, ITelemetryService),\n    __param(1, INotificationService),\n    __param(2, IContextViewService),\n    __param(3, IKeybindingService),\n    __param(4, IMenuService),\n    __param(5, IContextKeyService)\n], StandaloneContextMenuService);\nexport const standaloneEditorWorkerDescriptor = {\n    amdModuleId: 'vs/editor/common/services/editorSimpleWorker',\n    esmModuleLocation: undefined,\n    label: 'editorWorkerService'\n};\nlet StandaloneEditorWorkerService = class StandaloneEditorWorkerService extends EditorWorkerService {\n    constructor(modelService, configurationService, logService, languageConfigurationService, languageFeaturesService) {\n        super(standaloneEditorWorkerDescriptor, modelService, configurationService, logService, languageConfigurationService, languageFeaturesService);\n    }\n};\nStandaloneEditorWorkerService = __decorate([\n    __param(0, IModelService),\n    __param(1, ITextResourceConfigurationService),\n    __param(2, ILogService),\n    __param(3, ILanguageConfigurationService),\n    __param(4, ILanguageFeaturesService)\n], StandaloneEditorWorkerService);\nclass StandaloneAccessbilitySignalService {\n    async playSignal(cue, options) {\n    }\n}\nregisterSingleton(ILogService, StandaloneLogService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IConfigurationService, StandaloneConfigurationService, 0 /* InstantiationType.Eager */);\nregisterSingleton(ITextResourceConfigurationService, StandaloneResourceConfigurationService, 0 /* InstantiationType.Eager */);\nregisterSingleton(ITextResourcePropertiesService, StandaloneResourcePropertiesService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IWorkspaceContextService, StandaloneWorkspaceContextService, 0 /* InstantiationType.Eager */);\nregisterSingleton(ILabelService, StandaloneUriLabelService, 0 /* InstantiationType.Eager */);\nregisterSingleton(ITelemetryService, StandaloneTelemetryService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IDialogService, StandaloneDialogService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IEnvironmentService, StandaloneEnvironmentService, 0 /* InstantiationType.Eager */);\nregisterSingleton(INotificationService, StandaloneNotificationService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IMarkerService, MarkerService, 0 /* InstantiationType.Eager */);\nregisterSingleton(ILanguageService, StandaloneLanguageService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IStandaloneThemeService, StandaloneThemeService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IModelService, ModelService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IMarkerDecorationsService, MarkerDecorationsService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IContextKeyService, ContextKeyService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IProgressService, StandaloneProgressService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IEditorProgressService, StandaloneEditorProgressService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IStorageService, InMemoryStorageService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IEditorWorkerService, StandaloneEditorWorkerService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IBulkEditService, StandaloneBulkEditService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IWorkspaceTrustManagementService, StandaloneWorkspaceTrustManagementService, 0 /* InstantiationType.Eager */);\nregisterSingleton(ITextModelService, StandaloneTextModelService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IAccessibilityService, AccessibilityService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IListService, ListService, 0 /* InstantiationType.Eager */);\nregisterSingleton(ICommandService, StandaloneCommandService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IKeybindingService, StandaloneKeybindingService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IQuickInputService, StandaloneQuickInputService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IContextViewService, StandaloneContextViewService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IOpenerService, OpenerService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IClipboardService, BrowserClipboardService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IContextMenuService, StandaloneContextMenuService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IMenuService, MenuService, 0 /* InstantiationType.Eager */);\nregisterSingleton(IAccessibilitySignalService, StandaloneAccessbilitySignalService, 0 /* InstantiationType.Eager */);\nregisterSingleton(ITreeSitterParserService, StandaloneTreeSitterParserService, 0 /* InstantiationType.Eager */);\n/**\n * We don't want to eagerly instantiate services because embedders get a one time chance\n * to override services when they create the first editor.\n */\nexport var StandaloneServices;\n(function (StandaloneServices) {\n    const serviceCollection = new ServiceCollection();\n    for (const [id, descriptor] of getSingletonServiceDescriptors()) {\n        serviceCollection.set(id, descriptor);\n    }\n    const instantiationService = new InstantiationService(serviceCollection, true);\n    serviceCollection.set(IInstantiationService, instantiationService);\n    function get(serviceId) {\n        if (!initialized) {\n            initialize({});\n        }\n        const r = serviceCollection.get(serviceId);\n        if (!r) {\n            throw new Error('Missing service ' + serviceId);\n        }\n        if (r instanceof SyncDescriptor) {\n            return instantiationService.invokeFunction((accessor) => accessor.get(serviceId));\n        }\n        else {\n            return r;\n        }\n    }\n    StandaloneServices.get = get;\n    let initialized = false;\n    const onDidInitialize = new Emitter();\n    function initialize(overrides) {\n        if (initialized) {\n            return instantiationService;\n        }\n        initialized = true;\n        // Add singletons that were registered after this module loaded\n        for (const [id, descriptor] of getSingletonServiceDescriptors()) {\n            if (!serviceCollection.get(id)) {\n                serviceCollection.set(id, descriptor);\n            }\n        }\n        // Initialize the service collection with the overrides, but only if the\n        // service was not instantiated in the meantime.\n        for (const serviceId in overrides) {\n            if (overrides.hasOwnProperty(serviceId)) {\n                const serviceIdentifier = createDecorator(serviceId);\n                const r = serviceCollection.get(serviceIdentifier);\n                if (r instanceof SyncDescriptor) {\n                    serviceCollection.set(serviceIdentifier, overrides[serviceId]);\n                }\n            }\n        }\n        // Instantiate all editor features\n        const editorFeatures = getEditorFeatures();\n        for (const feature of editorFeatures) {\n            try {\n                instantiationService.createInstance(feature);\n            }\n            catch (err) {\n                onUnexpectedError(err);\n            }\n        }\n        onDidInitialize.fire();\n        return instantiationService;\n    }\n    StandaloneServices.initialize = initialize;\n    /**\n     * Executes callback once services are initialized.\n     */\n    function withServices(callback) {\n        if (initialized) {\n            return callback();\n        }\n        const disposable = new DisposableStore();\n        const listener = disposable.add(onDidInitialize.event(() => {\n            listener.dispose();\n            disposable.add(callback());\n        }));\n        return disposable;\n    }\n    StandaloneServices.withServices = withServices;\n})(StandaloneServices || (StandaloneServices = {}));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { getAllMethodNames } from '../../../base/common/objects.js';\nimport { EditorWorkerClient } from '../../browser/services/editorWorkerService.js';\nimport { standaloneEditorWorkerDescriptor } from './standaloneServices.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        const workerDescriptor = {\n            amdModuleId: standaloneEditorWorkerDescriptor.amdModuleId,\n            esmModuleLocation: standaloneEditorWorkerDescriptor.esmModuleLocation,\n            label: opts.label,\n        };\n        super(workerDescriptor, opts.keepIdleModels || false, modelService);\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 ? 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                    const 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.workerWithSyncedResources(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 *--------------------------------------------------------------------------------------------*/\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 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        this._lineDecorationBrand = undefined;\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        const result = [];\n        let 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 /* InlineDecorationType.Regular */ || d.type === 3 /* InlineDecorationType.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            return a.startColumn - b.startColumn;\n        }\n        if (a.endColumn !== b.endColumn) {\n            return a.endColumn - b.endColumn;\n        }\n        const typeCmp = LineDecoration._typeCompare(a.type, b.type);\n        if (typeCmp !== 0) {\n            return typeCmp;\n        }\n        if (a.className !== b.className) {\n            return a.className < b.className ? -1 : 1;\n        }\n        return 0;\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        const 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 /* InlineDecorationType.Before */\n                ? 2 /* LinePartMetadata.PSEUDO_BEFORE */\n                : d.type === 2 /* InlineDecorationType.After */\n                    ? 4 /* LinePartMetadata.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 /* Constants.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 *--------------------------------------------------------------------------------------------*/\nexport class LinePart {\n    constructor(\n    /**\n     * last char index of this token (not inclusive).\n     */\n    endIndex, type, metadata, containsRTL) {\n        this.endIndex = endIndex;\n        this.type = type;\n        this.metadata = metadata;\n        this.containsRTL = containsRTL;\n        this._linePartBrand = undefined;\n    }\n    isWhitespace() {\n        return (this.metadata & 1 /* LinePartMetadata.IS_WHITESPACE_MASK */ ? true : false);\n    }\n    isPseudoAfter() {\n        return (this.metadata & 4 /* LinePartMetadata.PSEUDO_AFTER_MASK */ ? true : 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 *--------------------------------------------------------------------------------------------*/\nimport * as nls from '../../../nls.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { StringBuilder } from '../core/stringBuilder.js';\nimport { LineDecoration, LineDecorationsNormalizer } from './lineDecorations.js';\nimport { LinePart } from './linePart.js';\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 /* RenderWhitespace.All */\n            : renderWhitespace === 'boundary'\n                ? 1 /* RenderWhitespace.Boundary */\n                : renderWhitespace === 'selection'\n                    ? 2 /* RenderWhitespace.Selection */\n                    : renderWhitespace === 'trailing'\n                        ? 3 /* RenderWhitespace.Trailing */\n                        : 0 /* RenderWhitespace.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}\nexport class DomPosition {\n    constructor(partIndex, charIndex) {\n        this.partIndex = partIndex;\n        this.charIndex = charIndex;\n    }\n}\n/**\n * Provides a both direction mapping between a line's character and its rendered position.\n */\nexport class CharacterMapping {\n    static getPartIndex(partData) {\n        return (partData & 4294901760 /* CharacterMappingConstants.PART_INDEX_MASK */) >>> 16 /* CharacterMappingConstants.PART_INDEX_OFFSET */;\n    }\n    static getCharIndex(partData) {\n        return (partData & 65535 /* CharacterMappingConstants.CHAR_INDEX_MASK */) >>> 0 /* CharacterMappingConstants.CHAR_INDEX_OFFSET */;\n    }\n    constructor(length, partCount) {\n        this.length = length;\n        this._data = new Uint32Array(this.length);\n        this._horizontalOffset = new Uint32Array(this.length);\n    }\n    setColumnInfo(column, partIndex, charIndex, horizontalOffset) {\n        const partData = ((partIndex << 16 /* CharacterMappingConstants.PART_INDEX_OFFSET */)\n            | (charIndex << 0 /* CharacterMappingConstants.CHAR_INDEX_OFFSET */)) >>> 0;\n        this._data[column - 1] = partData;\n        this._horizontalOffset[column - 1] = horizontalOffset;\n    }\n    getHorizontalOffset(column) {\n        if (this._horizontalOffset.length === 0) {\n            // No characters on this line\n            return 0;\n        }\n        return this._horizontalOffset[column - 1];\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    getDomPosition(column) {\n        const partData = this.charOffsetToPartData(column - 1);\n        const partIndex = CharacterMapping.getPartIndex(partData);\n        const charIndex = CharacterMapping.getCharIndex(partData);\n        return new DomPosition(partIndex, charIndex);\n    }\n    getColumn(domPosition, partLength) {\n        const charOffset = this.partDataToCharOffset(domPosition.partIndex, partLength, domPosition.charIndex);\n        return charOffset + 1;\n    }\n    partDataToCharOffset(partIndex, partLength, charIndex) {\n        if (this.length === 0) {\n            return 0;\n        }\n        const searchEntry = ((partIndex << 16 /* CharacterMappingConstants.PART_INDEX_OFFSET */)\n            | (charIndex << 0 /* CharacterMappingConstants.CHAR_INDEX_OFFSET */)) >>> 0;\n        let min = 0;\n        let max = this.length - 1;\n        while (min + 1 < max) {\n            const mid = ((min + max) >>> 1);\n            const 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        const minEntry = this._data[min];\n        const maxEntry = this._data[max];\n        if (minEntry === searchEntry) {\n            return min;\n        }\n        if (maxEntry === searchEntry) {\n            return max;\n        }\n        const minPartIndex = CharacterMapping.getPartIndex(minEntry);\n        const minCharIndex = CharacterMapping.getCharIndex(minEntry);\n        const 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        const minEntryDistance = charIndex - minCharIndex;\n        const 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._renderLineOutputBrand = undefined;\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.appendString(`<span>`);\n            let beforeCount = 0;\n            let afterCount = 0;\n            let containsForeignElements = 0 /* ForeignElementType.None */;\n            for (const lineDecoration of input.lineDecorations) {\n                if (lineDecoration.type === 1 /* InlineDecorationType.Before */ || lineDecoration.type === 2 /* InlineDecorationType.After */) {\n                    sb.appendString(`<span class=\"`);\n                    sb.appendString(lineDecoration.className);\n                    sb.appendString(`\"></span>`);\n                    if (lineDecoration.type === 1 /* InlineDecorationType.Before */) {\n                        containsForeignElements |= 1 /* ForeignElementType.Before */;\n                        beforeCount++;\n                    }\n                    if (lineDecoration.type === 2 /* InlineDecorationType.After */) {\n                        containsForeignElements |= 2 /* ForeignElementType.After */;\n                        afterCount++;\n                    }\n                }\n            }\n            sb.appendString(`</span>`);\n            const characterMapping = new CharacterMapping(1, beforeCount + afterCount);\n            characterMapping.setColumnInfo(1, beforeCount, 0, 0);\n            return new RenderLineOutput(characterMapping, false, containsForeignElements);\n        }\n        // completely empty line\n        sb.appendString('<span><span></span></span>');\n        return new RenderLineOutput(new CharacterMapping(0, 0), false, 0 /* ForeignElementType.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    const sb = new StringBuilder(10000);\n    const 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, overflowingCharCount, 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.overflowingCharCount = overflowingCharCount;\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 overflowingCharCount;\n    let len;\n    if (input.stopRenderingLineAfter !== -1 && input.stopRenderingLineAfter < lineContent.length) {\n        isOverflowing = true;\n        overflowingCharCount = lineContent.length - input.stopRenderingLineAfter;\n        len = input.stopRenderingLineAfter;\n    }\n    else {\n        isOverflowing = false;\n        overflowingCharCount = 0;\n        len = lineContent.length;\n    }\n    let tokens = transformAndRemoveOverflowing(lineContent, input.containsRTL, input.lineTokens, input.fauxIndentLength, len);\n    if (input.renderControlCharacters && !input.isBasicASCII) {\n        // Calling `extractControlCharacters` before adding (possibly empty) line parts\n        // for inline decorations. `extractControlCharacters` removes empty line parts.\n        tokens = extractControlCharacters(lineContent, tokens);\n    }\n    if (input.renderWhitespace === 4 /* RenderWhitespace.All */ ||\n        input.renderWhitespace === 1 /* RenderWhitespace.Boundary */ ||\n        (input.renderWhitespace === 2 /* RenderWhitespace.Selection */ && !!input.selectionsOnLine) ||\n        (input.renderWhitespace === 3 /* RenderWhitespace.Trailing */ && !input.continuesWithWrappedLine)) {\n        tokens = _applyRenderWhitespace(input, lineContent, len, tokens);\n    }\n    let containsForeignElements = 0 /* ForeignElementType.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 /* InlineDecorationType.RegularAffectingLetterSpacing */) {\n                // Pretend there are foreign elements... although not 100% accurate.\n                containsForeignElements |= 1 /* ForeignElementType.Before */;\n            }\n            else if (lineDecoration.type === 1 /* InlineDecorationType.Before */) {\n                containsForeignElements |= 1 /* ForeignElementType.Before */;\n            }\n            else if (lineDecoration.type === 2 /* InlineDecorationType.After */) {\n                containsForeignElements |= 2 /* ForeignElementType.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, overflowingCharCount, 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(lineContent, lineContainsRTL, tokens, fauxIndentLength, len) {\n    const result = [];\n    let 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, false);\n    }\n    let startOffset = fauxIndentLength;\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            const tokenContainsRTL = (lineContainsRTL ? strings.containsRTL(lineContent.substring(startOffset, len)) : false);\n            result[resultLen++] = new LinePart(len, type, 0, tokenContainsRTL);\n            break;\n        }\n        const tokenContainsRTL = (lineContainsRTL ? strings.containsRTL(lineContent.substring(startOffset, endIndex)) : false);\n        result[resultLen++] = new LinePart(endIndex, type, 0, tokenContainsRTL);\n        startOffset = endIndex;\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    const result = [];\n    let 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 /* Constants.LongToken */ < tokenEndIndex) {\n                const tokenType = token.type;\n                const tokenMetadata = token.metadata;\n                const tokenContainsRTL = token.containsRTL;\n                let lastSpaceOffset = -1;\n                let currTokenStart = lastTokenEndIndex;\n                for (let j = lastTokenEndIndex; j < tokenEndIndex; j++) {\n                    if (lineContent.charCodeAt(j) === 32 /* CharCode.Space */) {\n                        lastSpaceOffset = j;\n                    }\n                    if (lastSpaceOffset !== -1 && j - currTokenStart >= 50 /* Constants.LongToken */) {\n                        // Split at `lastSpaceOffset` + 1\n                        result[resultLen++] = new LinePart(lastSpaceOffset + 1, tokenType, tokenMetadata, tokenContainsRTL);\n                        currTokenStart = lastSpaceOffset + 1;\n                        lastSpaceOffset = -1;\n                    }\n                }\n                if (currTokenStart !== tokenEndIndex) {\n                    result[resultLen++] = new LinePart(tokenEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\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            const diff = (tokenEndIndex - lastTokenEndIndex);\n            if (diff > 50 /* Constants.LongToken */) {\n                const tokenType = token.type;\n                const tokenMetadata = token.metadata;\n                const tokenContainsRTL = token.containsRTL;\n                const piecesCount = Math.ceil(diff / 50 /* Constants.LongToken */);\n                for (let j = 1; j < piecesCount; j++) {\n                    const pieceEndIndex = lastTokenEndIndex + (j * 50 /* Constants.LongToken */);\n                    result[resultLen++] = new LinePart(pieceEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n                }\n                result[resultLen++] = new LinePart(tokenEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n            }\n            else {\n                result[resultLen++] = token;\n            }\n            lastTokenEndIndex = tokenEndIndex;\n        }\n    }\n    return result;\n}\nfunction isControlCharacter(charCode) {\n    if (charCode < 32) {\n        return (charCode !== 9 /* CharCode.Tab */);\n    }\n    if (charCode === 127) {\n        // DEL\n        return true;\n    }\n    if ((charCode >= 0x202A && charCode <= 0x202E)\n        || (charCode >= 0x2066 && charCode <= 0x2069)\n        || (charCode >= 0x200E && charCode <= 0x200F)\n        || charCode === 0x061C) {\n        // Unicode Directional Formatting Characters\n        // LRE\tU+202A\tLEFT-TO-RIGHT EMBEDDING\n        // RLE\tU+202B\tRIGHT-TO-LEFT EMBEDDING\n        // PDF\tU+202C\tPOP DIRECTIONAL FORMATTING\n        // LRO\tU+202D\tLEFT-TO-RIGHT OVERRIDE\n        // RLO\tU+202E\tRIGHT-TO-LEFT OVERRIDE\n        // LRI\tU+2066\tLEFT-TO-RIGHT ISOLATE\n        // RLI\tU+2067\tRIGHT-TO-LEFT ISOLATE\n        // FSI\tU+2068\tFIRST STRONG ISOLATE\n        // PDI\tU+2069\tPOP DIRECTIONAL ISOLATE\n        // LRM\tU+200E\tLEFT-TO-RIGHT MARK\n        // RLM\tU+200F\tRIGHT-TO-LEFT MARK\n        // ALM\tU+061C\tARABIC LETTER MARK\n        return true;\n    }\n    return false;\n}\nfunction extractControlCharacters(lineContent, tokens) {\n    const result = [];\n    let lastLinePart = new LinePart(0, '', 0, false);\n    let charOffset = 0;\n    for (const token of tokens) {\n        const tokenEndIndex = token.endIndex;\n        for (; charOffset < tokenEndIndex; charOffset++) {\n            const charCode = lineContent.charCodeAt(charOffset);\n            if (isControlCharacter(charCode)) {\n                if (charOffset > lastLinePart.endIndex) {\n                    // emit previous part if it has text\n                    lastLinePart = new LinePart(charOffset, token.type, token.metadata, token.containsRTL);\n                    result.push(lastLinePart);\n                }\n                lastLinePart = new LinePart(charOffset + 1, 'mtkcontrol', token.metadata, false);\n                result.push(lastLinePart);\n            }\n        }\n        if (charOffset > lastLinePart.endIndex) {\n            // emit previous part if it has text\n            lastLinePart = new LinePart(tokenEndIndex, token.type, token.metadata, token.containsRTL);\n            result.push(lastLinePart);\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 /* RenderWhitespace.Boundary */);\n    const onlyTrailing = (input.renderWhitespace === 3 /* RenderWhitespace.Trailing */);\n    const generateLinePartForEachWhitespace = (input.renderSpaceWidth !== input.spaceWidth);\n    const result = [];\n    let resultLen = 0;\n    let tokenIndex = 0;\n    let tokenType = tokens[tokenIndex].type;\n    let tokenContainsRTL = tokens[tokenIndex].containsRTL;\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 /* CharCode.Tab */) {\n            // a tab character is rendered both in all and boundary cases\n            isInWhitespace = true;\n        }\n        else if (chCode === 32 /* CharCode.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 /* CharCode.Null */);\n                    isInWhitespace = (nextChCode === 32 /* CharCode.Space */ || nextChCode === 9 /* CharCode.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 (isInWhitespace && tokenContainsRTL) {\n            // If the token contains RTL text, breaking it up into multiple line parts\n            // to render whitespace might affect the browser's bidi layout.\n            //\n            // We render whitespace in such tokens only if the whitespace\n            // is the leading or the trailing whitespace of the line,\n            // which doesn't affect the browser's bidi layout.\n            if (charIndex >= firstNonWhitespaceIndex && charIndex <= lastNonWhitespaceIndex) {\n                isInWhitespace = false;\n            }\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 /* LinePartMetadata.IS_WHITESPACE */, false);\n                    }\n                }\n                else {\n                    result[resultLen++] = new LinePart(charIndex, 'mtkw', 1 /* LinePartMetadata.IS_WHITESPACE */, false);\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, tokenContainsRTL);\n                tmpIndent = tmpIndent % tabSize;\n            }\n        }\n        if (chCode === 9 /* CharCode.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                tokenContainsRTL = tokens[tokenIndex].containsRTL;\n                tokenEndIndex = tokens[tokenIndex].endIndex;\n            }\n            else {\n                break;\n            }\n        }\n    }\n    let generateWhitespace = false;\n    if (wasInWhitespace) {\n        // was in whitespace token\n        if (continuesWithWrappedLine && onlyBoundary) {\n            const lastCharCode = (len > 0 ? lineContent.charCodeAt(len - 1) : 0 /* CharCode.Null */);\n            const prevCharCode = (len > 1 ? lineContent.charCodeAt(len - 2) : 0 /* CharCode.Null */);\n            const isSingleTrailingSpace = (lastCharCode === 32 /* CharCode.Space */ && (prevCharCode !== 32 /* CharCode.Space */ && prevCharCode !== 9 /* CharCode.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 /* LinePartMetadata.IS_WHITESPACE */, false);\n            }\n        }\n        else {\n            result[resultLen++] = new LinePart(len, 'mtkw', 1 /* LinePartMetadata.IS_WHITESPACE */, false);\n        }\n    }\n    else {\n        result[resultLen++] = new LinePart(len, tokenType, 0, tokenContainsRTL);\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    const result = [];\n    let resultLen = 0;\n    let 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        const tokenContainsRTL = token.containsRTL;\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, tokenContainsRTL);\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, tokenContainsRTL);\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, tokenContainsRTL);\n                break;\n            }\n        }\n        if (tokenEndIndex > lastResultEndIndex) {\n            lastResultEndIndex = tokenEndIndex;\n            result[resultLen++] = new LinePart(lastResultEndIndex, tokenType, tokenMetadata, tokenContainsRTL);\n        }\n    }\n    const lastTokenEndIndex = tokens[tokens.length - 1].endIndex;\n    if (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\n        while (lineDecorationIndex < lineDecorationsLen && lineDecorations[lineDecorationIndex].startOffset === lastTokenEndIndex) {\n            const lineDecoration = lineDecorations[lineDecorationIndex];\n            result[resultLen++] = new LinePart(lastResultEndIndex, lineDecoration.className, lineDecoration.metadata, false);\n            lineDecorationIndex++;\n        }\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 overflowingCharCount = input.overflowingCharCount;\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 lastCharacterMappingDefined = false;\n    let charIndex = 0;\n    let visibleColumn = startVisibleColumn;\n    let charOffsetInPart = 0; // the character offset in the current part\n    let charHorizontalOffset = 0; // the character horizontal position in terms of chars relative to line start\n    let partDisplacement = 0;\n    if (containsRTL) {\n        sb.appendString('<span dir=\"ltr\">');\n    }\n    else {\n        sb.appendString('<span>');\n    }\n    for (let partIndex = 0, tokensLen = parts.length; partIndex < tokensLen; partIndex++) {\n        const part = parts[partIndex];\n        const partEndIndex = part.endIndex;\n        const partType = part.type;\n        const partContainsRTL = part.containsRTL;\n        const partRendersWhitespace = (renderWhitespace !== 0 /* RenderWhitespace.None */ && part.isWhitespace());\n        const partRendersWhitespaceWithWidth = partRendersWhitespace && !fontIsMonospace && (partType === 'mtkw' /*only whitespace*/ || !containsForeignElements);\n        const partIsEmptyAndHasPseudoAfter = (charIndex === partEndIndex && part.isPseudoAfter());\n        charOffsetInPart = 0;\n        sb.appendString('<span ');\n        if (partContainsRTL) {\n            sb.appendString('style=\"unicode-bidi:isolate\" ');\n        }\n        sb.appendString('class=\"');\n        sb.appendString(partRendersWhitespaceWithWidth ? 'mtkz' : partType);\n        sb.appendASCIICharCode(34 /* CharCode.DoubleQuote */);\n        if (partRendersWhitespace) {\n            let partWidth = 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 /* CharCode.Tab */ ? (tabSize - (_visibleColumn % tabSize)) : 1) | 0;\n                    partWidth += charWidth;\n                    if (_charIndex >= fauxIndentLength) {\n                        _visibleColumn += charWidth;\n                    }\n                }\n            }\n            if (partRendersWhitespaceWithWidth) {\n                sb.appendString(' style=\"width:');\n                sb.appendString(String(spaceWidth * partWidth));\n                sb.appendString('px\"');\n            }\n            sb.appendASCIICharCode(62 /* CharCode.GreaterThan */);\n            for (; charIndex < partEndIndex; charIndex++) {\n                characterMapping.setColumnInfo(charIndex + 1, partIndex - partDisplacement, charOffsetInPart, charHorizontalOffset);\n                partDisplacement = 0;\n                const charCode = lineContent.charCodeAt(charIndex);\n                let producedCharacters;\n                let charWidth;\n                if (charCode === 9 /* CharCode.Tab */) {\n                    producedCharacters = (tabSize - (visibleColumn % tabSize)) | 0;\n                    charWidth = producedCharacters;\n                    if (!canUseHalfwidthRightwardsArrow || charWidth > 1) {\n                        sb.appendCharCode(0x2192); // RIGHTWARDS ARROW\n                    }\n                    else {\n                        sb.appendCharCode(0xFFEB); // HALFWIDTH RIGHTWARDS ARROW\n                    }\n                    for (let space = 2; space <= charWidth; space++) {\n                        sb.appendCharCode(0xA0); // &nbsp;\n                    }\n                }\n                else { // must be CharCode.Space\n                    producedCharacters = 2;\n                    charWidth = 1;\n                    sb.appendCharCode(renderSpaceCharCode); // &middot; or word separator middle dot\n                    sb.appendCharCode(0x200C); // ZERO WIDTH NON-JOINER\n                }\n                charOffsetInPart += producedCharacters;\n                charHorizontalOffset += charWidth;\n                if (charIndex >= fauxIndentLength) {\n                    visibleColumn += charWidth;\n                }\n            }\n        }\n        else {\n            sb.appendASCIICharCode(62 /* CharCode.GreaterThan */);\n            for (; charIndex < partEndIndex; charIndex++) {\n                characterMapping.setColumnInfo(charIndex + 1, partIndex - partDisplacement, charOffsetInPart, charHorizontalOffset);\n                partDisplacement = 0;\n                const charCode = lineContent.charCodeAt(charIndex);\n                let producedCharacters = 1;\n                let charWidth = 1;\n                switch (charCode) {\n                    case 9 /* CharCode.Tab */:\n                        producedCharacters = (tabSize - (visibleColumn % tabSize));\n                        charWidth = producedCharacters;\n                        for (let space = 1; space <= producedCharacters; space++) {\n                            sb.appendCharCode(0xA0); // &nbsp;\n                        }\n                        break;\n                    case 32 /* CharCode.Space */:\n                        sb.appendCharCode(0xA0); // &nbsp;\n                        break;\n                    case 60 /* CharCode.LessThan */:\n                        sb.appendString('&lt;');\n                        break;\n                    case 62 /* CharCode.GreaterThan */:\n                        sb.appendString('&gt;');\n                        break;\n                    case 38 /* CharCode.Ampersand */:\n                        sb.appendString('&amp;');\n                        break;\n                    case 0 /* CharCode.Null */:\n                        if (renderControlCharacters) {\n                            // See https://unicode-table.com/en/blocks/control-pictures/\n                            sb.appendCharCode(9216);\n                        }\n                        else {\n                            sb.appendString('&#00;');\n                        }\n                        break;\n                    case 65279 /* CharCode.UTF8_BOM */:\n                    case 8232 /* CharCode.LINE_SEPARATOR */:\n                    case 8233 /* CharCode.PARAGRAPH_SEPARATOR */:\n                    case 133 /* CharCode.NEXT_LINE */:\n                        sb.appendCharCode(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.appendCharCode(9216 + charCode);\n                        }\n                        else if (renderControlCharacters && charCode === 127) {\n                            // DEL\n                            sb.appendCharCode(9249);\n                        }\n                        else if (renderControlCharacters && isControlCharacter(charCode)) {\n                            sb.appendString('[U+');\n                            sb.appendString(to4CharHex(charCode));\n                            sb.appendString(']');\n                            producedCharacters = 8;\n                            charWidth = producedCharacters;\n                        }\n                        else {\n                            sb.appendCharCode(charCode);\n                        }\n                }\n                charOffsetInPart += producedCharacters;\n                charHorizontalOffset += charWidth;\n                if (charIndex >= fauxIndentLength) {\n                    visibleColumn += charWidth;\n                }\n            }\n        }\n        if (partIsEmptyAndHasPseudoAfter) {\n            partDisplacement++;\n        }\n        else {\n            partDisplacement = 0;\n        }\n        if (charIndex >= len && !lastCharacterMappingDefined && part.isPseudoAfter()) {\n            lastCharacterMappingDefined = true;\n            characterMapping.setColumnInfo(charIndex + 1, partIndex, charOffsetInPart, charHorizontalOffset);\n        }\n        sb.appendString('</span>');\n    }\n    if (!lastCharacterMappingDefined) {\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.setColumnInfo(len + 1, parts.length - 1, charOffsetInPart, charHorizontalOffset);\n    }\n    if (isOverflowing) {\n        sb.appendString('<span class=\"mtkoverflow\">');\n        sb.appendString(nls.localize('showMore', \"Show more ({0})\", renderOverflowingCharCount(overflowingCharCount)));\n        sb.appendString('</span>');\n    }\n    sb.appendString('</span>');\n    return new RenderLineOutput(characterMapping, containsRTL, containsForeignElements);\n}\nfunction to4CharHex(n) {\n    return n.toString(16).toUpperCase().padStart(4, '0');\n}\nfunction renderOverflowingCharCount(n) {\n    if (n < 1024) {\n        return nls.localize('overflow.chars', \"{0} chars\", n);\n    }\n    if (n < 1024 * 1024) {\n        return `${(n / 1024).toFixed(1)} KB`;\n    }\n    return `${(n / 1024 / 1024).toFixed(1)} MB`;\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 * as strings from '../../base/common/strings.js';\nimport { Range } from './core/range.js';\nexport class Viewport {\n    constructor(top, left, width, height) {\n        this._viewportBrand = undefined;\n        this.top = top | 0;\n        this.left = left | 0;\n        this.width = width | 0;\n        this.height = height | 0;\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, inlineDecorations) {\n        this._viewLineDataBrand = undefined;\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        this.inlineDecorations = inlineDecorations;\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 SingleLineInlineDecoration {\n    constructor(startOffset, endOffset, inlineClassName, inlineClassNameAffectsLetterSpacing) {\n        this.startOffset = startOffset;\n        this.endOffset = endOffset;\n        this.inlineClassName = inlineClassName;\n        this.inlineClassNameAffectsLetterSpacing = inlineClassNameAffectsLetterSpacing;\n    }\n    toInlineDecoration(lineNumber) {\n        return new InlineDecoration(new Range(lineNumber, this.startOffset + 1, lineNumber, this.endOffset + 1), this.inlineClassName, this.inlineClassNameAffectsLetterSpacing ? 3 /* InlineDecorationType.RegularAffectingLetterSpacing */ : 0 /* InlineDecorationType.Regular */);\n    }\n}\nexport class ViewModelDecoration {\n    constructor(range, options) {\n        this._viewModelDecorationBrand = undefined;\n        this.range = range;\n        this.options = options;\n    }\n}\nexport class OverviewRulerDecorationsGroup {\n    constructor(color, zIndex, \n    /**\n     * Decorations are encoded in a number array using the following scheme:\n     *  - 3*i = lane\n     *  - 3*i+1 = startLineNumber\n     *  - 3*i+2 = endLineNumber\n     */\n    data) {\n        this.color = color;\n        this.zIndex = zIndex;\n        this.data = data;\n    }\n    static compareByRenderingProps(a, b) {\n        if (a.zIndex === b.zIndex) {\n            if (a.color < b.color) {\n                return -1;\n            }\n            if (a.color > b.color) {\n                return 1;\n            }\n            return 0;\n        }\n        return a.zIndex - b.zIndex;\n    }\n    static equals(a, b) {\n        return (a.color === b.color\n            && a.zIndex === b.zIndex\n            && arrays.equals(a.data, b.data));\n    }\n    static equalsArr(a, b) {\n        return arrays.equals(a, b, OverviewRulerDecorationsGroup.equals);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 * substituteMatchesRe is used on lexer regex rules and can substitutes predefined patterns:\n * \t\t$Sn => n'th part of state\n *\n */\nexport function substituteMatchesRe(lexer, str, state) {\n    const re = /\\$[sS](\\d\\d?)/g;\n    let stateMatches = null;\n    return str.replace(re, function (full, s) {\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 *--------------------------------------------------------------------------------------------*/\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 MonarchTokenizer_1;\n/**\n * Create a syntax highighter with a fully declarative JSON style lexer description\n * using regular expressions.\n */\nimport { Disposable } from '../../../../base/common/lifecycle.js';\nimport * as languages from '../../../common/languages.js';\nimport { NullState, nullTokenizeEncoded, nullTokenize } from '../../../common/languages/nullTokenize.js';\nimport * as monarchCommon from './monarchCommon.js';\nimport { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';\nconst CACHE_STACK_DEPTH = 5;\n/**\n * Reuse the same stack elements up to a certain depth.\n */\nclass MonarchStackElementFactory {\n    static { this._INSTANCE = new MonarchStackElementFactory(CACHE_STACK_DEPTH); }\n    static create(parent, state) {\n        return this._INSTANCE.create(parent, state);\n    }\n    constructor(maxCacheDepth) {\n        this._maxCacheDepth = maxCacheDepth;\n        this._entries = Object.create(null);\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}\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 EmbeddedLanguageData {\n    constructor(languageId, state) {\n        this.languageId = languageId;\n        this.state = state;\n    }\n    equals(other) {\n        return (this.languageId === other.languageId\n            && this.state.equals(other.state));\n    }\n    clone() {\n        const stateClone = this.state.clone();\n        // save an object\n        if (stateClone === this.state) {\n            return this;\n        }\n        return new EmbeddedLanguageData(this.languageId, this.state);\n    }\n}\n/**\n * Reuse the same line states up to a certain depth.\n */\nclass MonarchLineStateFactory {\n    static { this._INSTANCE = new MonarchLineStateFactory(CACHE_STACK_DEPTH); }\n    static create(stack, embeddedLanguageData) {\n        return this._INSTANCE.create(stack, embeddedLanguageData);\n    }\n    constructor(maxCacheDepth) {\n        this._maxCacheDepth = maxCacheDepth;\n        this._entries = Object.create(null);\n    }\n    create(stack, embeddedLanguageData) {\n        if (embeddedLanguageData !== null) {\n            // no caching when embedding\n            return new MonarchLineState(stack, embeddedLanguageData);\n        }\n        if (stack !== null && stack.depth >= this._maxCacheDepth) {\n            // no caching above a certain depth\n            return new MonarchLineState(stack, embeddedLanguageData);\n        }\n        const 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}\nclass MonarchLineState {\n    constructor(stack, embeddedLanguageData) {\n        this.stack = stack;\n        this.embeddedLanguageData = embeddedLanguageData;\n    }\n    clone() {\n        const embeddedlanguageDataClone = this.embeddedLanguageData ? this.embeddedLanguageData.clone() : null;\n        // save an object\n        if (embeddedlanguageDataClone === this.embeddedLanguageData) {\n            return this;\n        }\n        return MonarchLineStateFactory.create(this.stack, this.embeddedLanguageData);\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.embeddedLanguageData === null && other.embeddedLanguageData === null) {\n            return true;\n        }\n        if (this.embeddedLanguageData === null || other.embeddedLanguageData === null) {\n            return false;\n        }\n        return this.embeddedLanguageData.equals(other.embeddedLanguageData);\n    }\n}\nclass MonarchClassicTokensCollector {\n    constructor() {\n        this._tokens = [];\n        this._languageId = null;\n        this._lastTokenType = null;\n        this._lastTokenLanguage = null;\n    }\n    enterLanguage(languageId) {\n        this._languageId = languageId;\n    }\n    emit(startOffset, type) {\n        if (this._lastTokenType === type && this._lastTokenLanguage === this._languageId) {\n            return;\n        }\n        this._lastTokenType = type;\n        this._lastTokenLanguage = this._languageId;\n        this._tokens.push(new languages.Token(startOffset, type, this._languageId));\n    }\n    nestedLanguageTokenize(embeddedLanguageLine, hasEOL, embeddedLanguageData, offsetDelta) {\n        const nestedLanguageId = embeddedLanguageData.languageId;\n        const embeddedModeState = embeddedLanguageData.state;\n        const nestedLanguageTokenizationSupport = languages.TokenizationRegistry.get(nestedLanguageId);\n        if (!nestedLanguageTokenizationSupport) {\n            this.enterLanguage(nestedLanguageId);\n            this.emit(offsetDelta, '');\n            return embeddedModeState;\n        }\n        const nestedResult = nestedLanguageTokenizationSupport.tokenize(embeddedLanguageLine, hasEOL, embeddedModeState);\n        if (offsetDelta !== 0) {\n            for (const token of nestedResult.tokens) {\n                this._tokens.push(new languages.Token(token.offset + offsetDelta, token.type, token.language));\n            }\n        }\n        else {\n            this._tokens = this._tokens.concat(nestedResult.tokens);\n        }\n        this._lastTokenType = null;\n        this._lastTokenLanguage = null;\n        this._languageId = null;\n        return nestedResult.endState;\n    }\n    finalize(endState) {\n        return new languages.TokenizationResult(this._tokens, endState);\n    }\n}\nclass MonarchModernTokensCollector {\n    constructor(languageService, theme) {\n        this._languageService = languageService;\n        this._theme = theme;\n        this._prependTokens = null;\n        this._tokens = [];\n        this._currentLanguageId = 0 /* LanguageId.Null */;\n        this._lastTokenMetadata = 0;\n    }\n    enterLanguage(languageId) {\n        this._currentLanguageId = this._languageService.languageIdCodec.encodeLanguageId(languageId);\n    }\n    emit(startOffset, type) {\n        const metadata = this._theme.match(this._currentLanguageId, type) | 1024 /* MetadataConsts.BALANCED_BRACKETS_MASK */;\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        const aLen = (a !== null ? a.length : 0);\n        const bLen = b.length;\n        const 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        const 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    nestedLanguageTokenize(embeddedLanguageLine, hasEOL, embeddedLanguageData, offsetDelta) {\n        const nestedLanguageId = embeddedLanguageData.languageId;\n        const embeddedModeState = embeddedLanguageData.state;\n        const nestedLanguageTokenizationSupport = languages.TokenizationRegistry.get(nestedLanguageId);\n        if (!nestedLanguageTokenizationSupport) {\n            this.enterLanguage(nestedLanguageId);\n            this.emit(offsetDelta, '');\n            return embeddedModeState;\n        }\n        const nestedResult = nestedLanguageTokenizationSupport.tokenizeEncoded(embeddedLanguageLine, hasEOL, embeddedModeState);\n        if (offsetDelta !== 0) {\n            for (let i = 0, len = nestedResult.tokens.length; i < len; i += 2) {\n                nestedResult.tokens[i] += offsetDelta;\n            }\n        }\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 languages.EncodedTokenizationResult(MonarchModernTokensCollector._merge(this._prependTokens, this._tokens, null), endState);\n    }\n}\nlet MonarchTokenizer = MonarchTokenizer_1 = class MonarchTokenizer extends Disposable {\n    constructor(languageService, standaloneThemeService, languageId, lexer, _configurationService) {\n        super();\n        this._configurationService = _configurationService;\n        this._languageService = languageService;\n        this._standaloneThemeService = standaloneThemeService;\n        this._languageId = languageId;\n        this._lexer = lexer;\n        this._embeddedLanguages = Object.create(null);\n        this.embeddedLoaded = Promise.resolve(undefined);\n        // Set up listening for embedded modes\n        let emitting = false;\n        this._register(languages.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                const language = e.changedLanguages[i];\n                if (this._embeddedLanguages[language]) {\n                    isOneOfMyEmbeddedModes = true;\n                    break;\n                }\n            }\n            if (isOneOfMyEmbeddedModes) {\n                emitting = true;\n                languages.TokenizationRegistry.handleChange([this._languageId]);\n                emitting = false;\n            }\n        }));\n        this._maxTokenizationLineLength = this._configurationService.getValue('editor.maxTokenizationLineLength', {\n            overrideIdentifier: this._languageId\n        });\n        this._register(this._configurationService.onDidChangeConfiguration(e => {\n            if (e.affectsConfiguration('editor.maxTokenizationLineLength')) {\n                this._maxTokenizationLineLength = this._configurationService.getValue('editor.maxTokenizationLineLength', {\n                    overrideIdentifier: this._languageId\n                });\n            }\n        }));\n    }\n    getLoadStatus() {\n        const promises = [];\n        for (const nestedLanguageId in this._embeddedLanguages) {\n            const tokenizationSupport = languages.TokenizationRegistry.get(nestedLanguageId);\n            if (tokenizationSupport) {\n                // The nested language is already loaded\n                if (tokenizationSupport instanceof MonarchTokenizer_1) {\n                    const nestedModeStatus = tokenizationSupport.getLoadStatus();\n                    if (nestedModeStatus.loaded === false) {\n                        promises.push(nestedModeStatus.promise);\n                    }\n                }\n                continue;\n            }\n            if (!languages.TokenizationRegistry.isResolved(nestedLanguageId)) {\n                // The nested language is in the process of being loaded\n                promises.push(languages.TokenizationRegistry.getOrCreate(nestedLanguageId));\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        const rootState = MonarchStackElementFactory.create(null, this._lexer.start);\n        return MonarchLineStateFactory.create(rootState, null);\n    }\n    tokenize(line, hasEOL, lineState) {\n        if (line.length >= this._maxTokenizationLineLength) {\n            return nullTokenize(this._languageId, lineState);\n        }\n        const tokensCollector = new MonarchClassicTokensCollector();\n        const endLineState = this._tokenize(line, hasEOL, lineState, tokensCollector);\n        return tokensCollector.finalize(endLineState);\n    }\n    tokenizeEncoded(line, hasEOL, lineState) {\n        if (line.length >= this._maxTokenizationLineLength) {\n            return nullTokenizeEncoded(this._languageService.languageIdCodec.encodeLanguageId(this._languageId), lineState);\n        }\n        const tokensCollector = new MonarchModernTokensCollector(this._languageService, this._standaloneThemeService.getColorTheme().tokenTheme);\n        const endLineState = this._tokenize(line, hasEOL, lineState, tokensCollector);\n        return tokensCollector.finalize(endLineState);\n    }\n    _tokenize(line, hasEOL, lineState, collector) {\n        if (lineState.embeddedLanguageData) {\n            return this._nestedTokenize(line, hasEOL, lineState, 0, collector);\n        }\n        else {\n            return this._myTokenize(line, hasEOL, lineState, 0, collector);\n        }\n    }\n    _findLeavingNestedLanguageOffset(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.resolveRegex(state.stack.state);\n            const regexSource = regex.source;\n            if (regexSource.substr(0, 4) === '^(?:' && regexSource.substr(regexSource.length - 1, 1) === ')') {\n                const flags = (regex.ignoreCase ? 'i' : '') + (regex.unicode ? 'u' : '');\n                regex = new RegExp(regexSource.substr(4, regexSource.length - 5), flags);\n            }\n            const 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        const popOffset = this._findLeavingNestedLanguageOffset(line, lineState);\n        if (popOffset === -1) {\n            // tokenization will not leave nested language\n            const nestedEndState = tokensCollector.nestedLanguageTokenize(line, hasEOL, lineState.embeddedLanguageData, offsetDelta);\n            return MonarchLineStateFactory.create(lineState.stack, new EmbeddedLanguageData(lineState.embeddedLanguageData.languageId, nestedEndState));\n        }\n        const nestedLanguageLine = line.substring(0, popOffset);\n        if (nestedLanguageLine.length > 0) {\n            // tokenize with the nested language\n            tokensCollector.nestedLanguageTokenize(nestedLanguageLine, false, lineState.embeddedLanguageData, offsetDelta);\n        }\n        const 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.enterLanguage(this._languageId);\n        const lineWithoutLFLength = lineWithoutLF.length;\n        const line = (hasEOL && this._lexer.includeLF ? lineWithoutLF + '\\n' : lineWithoutLF);\n        const lineLength = line.length;\n        let embeddedLanguageData = lineState.embeddedLanguageData;\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 enteringEmbeddedLanguage = 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                const restOfLine = line.substr(pos);\n                for (const rule of rules) {\n                    if (pos === 0 || !rule.matchOnlyAtLineStart) {\n                        matches = restOfLine.match(rule.resolveRegex(state));\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 language?\n                if (action.nextEmbedded) {\n                    if (action.nextEmbedded === '@pop') {\n                        if (!embeddedLanguageData) {\n                            throw monarchCommon.createError(this._lexer, 'cannot pop embedded language if not inside one');\n                        }\n                        embeddedLanguageData = null;\n                    }\n                    else if (embeddedLanguageData) {\n                        throw monarchCommon.createError(this._lexer, 'cannot enter embedded language from within an embedded language');\n                    }\n                    else {\n                        enteringEmbeddedLanguage = 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 computeNewStateForEmbeddedLanguage = (enteringEmbeddedLanguage) => {\n                // support language names, mime types, and language ids\n                const languageId = (this._languageService.getLanguageIdByLanguageName(enteringEmbeddedLanguage)\n                    || this._languageService.getLanguageIdByMimeType(enteringEmbeddedLanguage)\n                    || enteringEmbeddedLanguage);\n                const embeddedLanguageData = this._getNestedEmbeddedLanguageData(languageId);\n                if (pos < lineLength) {\n                    // there is content from the embedded language on this line\n                    const restOfLine = lineWithoutLF.substr(pos);\n                    return this._nestedTokenize(restOfLine, hasEOL, MonarchLineStateFactory.create(stack, embeddedLanguageData), offsetDelta + pos, tokensCollector);\n                }\n                else {\n                    return MonarchLineStateFactory.create(stack, embeddedLanguageData);\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 (enteringEmbeddedLanguage !== null) {\n                        return computeNewStateForEmbeddedLanguage(enteringEmbeddedLanguage);\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                    const rest = result.substr('@brackets'.length);\n                    const 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                    const 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 (enteringEmbeddedLanguage !== null) {\n                return computeNewStateForEmbeddedLanguage(enteringEmbeddedLanguage);\n            }\n        }\n        return MonarchLineStateFactory.create(stack, embeddedLanguageData);\n    }\n    _getNestedEmbeddedLanguageData(languageId) {\n        if (!this._languageService.isRegisteredLanguageId(languageId)) {\n            return new EmbeddedLanguageData(languageId, NullState);\n        }\n        if (languageId !== this._languageId) {\n            // Fire language loading event\n            this._languageService.requestBasicLanguageFeatures(languageId);\n            languages.TokenizationRegistry.getOrCreate(languageId);\n            this._embeddedLanguages[languageId] = true;\n        }\n        const tokenizationSupport = languages.TokenizationRegistry.get(languageId);\n        if (tokenizationSupport) {\n            return new EmbeddedLanguageData(languageId, tokenizationSupport.getInitialState());\n        }\n        return new EmbeddedLanguageData(languageId, NullState);\n    }\n};\nMonarchTokenizer = MonarchTokenizer_1 = __decorate([\n    __param(4, IConfigurationService)\n], MonarchTokenizer);\nexport { MonarchTokenizer };\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    const brackets = lexer.brackets;\n    for (const bracket of brackets) {\n        if (bracket.open === matched) {\n            return { token: bracket.token, bracketType: 1 /* monarchCommon.MonarchBracket.Open */ };\n        }\n        else if (bracket.close === matched) {\n            return { token: bracket.token, bracketType: -1 /* monarchCommon.MonarchBracket.Close */ };\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 { createTrustedTypesPolicy } from '../../../base/browser/trustedTypes.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { TokenizationRegistry } from '../../common/languages.js';\nimport { LineTokens } from '../../common/tokens/lineTokens.js';\nimport { RenderLineInput, renderViewLine2 as renderViewLine } from '../../common/viewLayout/viewLineRenderer.js';\nimport { ViewLineRenderingData } from '../../common/viewModel.js';\nimport { MonarchTokenizer } from '../common/monarch/monarchLexer.js';\nconst ttPolicy = createTrustedTypesPolicy('standaloneColorizer', { createHTML: value => value });\nexport class Colorizer {\n    static colorizeElement(themeService, languageService, domNode, options) {\n        options = options || {};\n        const theme = options.theme || 'vs';\n        const 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        const languageId = languageService.getLanguageIdByMimeType(mimeType) || mimeType;\n        themeService.setTheme(theme);\n        const text = domNode.firstChild ? domNode.firstChild.nodeValue : '';\n        domNode.className += ' ' + theme;\n        const render = (str) => {\n            const trustedhtml = ttPolicy?.createHTML(str) ?? str;\n            domNode.innerHTML = trustedhtml;\n        };\n        return this.colorize(languageService, text || '', languageId, options).then(render, (err) => console.error(err));\n    }\n    static async colorize(languageService, text, languageId, options) {\n        const languageIdCodec = languageService.languageIdCodec;\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        const lines = strings.splitLines(text);\n        if (!languageService.isRegisteredLanguageId(languageId)) {\n            return _fakeColorize(lines, tabSize, languageIdCodec);\n        }\n        const tokenizationSupport = await TokenizationRegistry.getOrCreate(languageId);\n        if (tokenizationSupport) {\n            return _colorize(lines, tabSize, tokenizationSupport, languageIdCodec);\n        }\n        return _fakeColorize(lines, tabSize, languageIdCodec);\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        const 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        const content = model.getLineContent(lineNumber);\n        model.tokenization.forceTokenization(lineNumber);\n        const tokens = model.tokenization.getLineTokens(lineNumber);\n        const inflatedTokens = tokens.inflate();\n        return this.colorizeLine(content, model.mightContainNonBasicASCII(), model.mightContainRTL(), inflatedTokens, tabSize);\n    }\n}\nfunction _colorize(lines, tabSize, tokenizationSupport, languageIdCodec) {\n    return new Promise((c, e) => {\n        const execute = () => {\n            const result = _actualColorize(lines, tabSize, tokenizationSupport, languageIdCodec);\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, languageIdCodec) {\n    let html = [];\n    const defaultMetadata = ((0 /* FontStyle.None */ << 11 /* MetadataConsts.FONT_STYLE_OFFSET */)\n        | (1 /* ColorId.DefaultForeground */ << 15 /* MetadataConsts.FOREGROUND_OFFSET */)\n        | (2 /* ColorId.DefaultBackground */ << 24 /* MetadataConsts.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        const line = lines[i];\n        tokens[0] = line.length;\n        const lineTokens = new LineTokens(tokens, line, languageIdCodec);\n        const isBasicASCII = ViewLineRenderingData.isBasicASCII(line, /* check for basic ASCII */ true);\n        const containsRTL = ViewLineRenderingData.containsRTL(line, isBasicASCII, /* check for RTL */ true);\n        const 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, languageIdCodec) {\n    let html = [];\n    let state = tokenizationSupport.getInitialState();\n    for (let i = 0, length = lines.length; i < length; i++) {\n        const line = lines[i];\n        const tokenizeResult = tokenizationSupport.tokenizeEncoded(line, true, state);\n        LineTokens.convertToEndOffset(tokenizeResult.tokens, line.length);\n        const lineTokens = new LineTokens(tokenizeResult.tokens, line, languageIdCodec);\n        const isBasicASCII = ViewLineRenderingData.isBasicASCII(line, /* check for basic ASCII */ true);\n        const containsRTL = ViewLineRenderingData.containsRTL(line, isBasicASCII, /* check for RTL */ true);\n        const 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","/*---------------------------------------------------------------------------------------------\n *  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/markerDecorations.js';\nimport { registerEditorContribution } from '../editorExtensions.js';\nlet MarkerDecorationsContribution = class MarkerDecorationsContribution {\n    static { this.ID = 'editor.contrib.markerDecorations'; }\n    constructor(_editor, _markerDecorationsService) {\n        // Doesn't do anything, just requires `IMarkerDecorationsService` to make sure it gets instantiated\n    }\n    dispose() {\n    }\n};\nMarkerDecorationsContribution = __decorate([\n    __param(1, IMarkerDecorationsService)\n], MarkerDecorationsContribution);\nexport { MarkerDecorationsContribution };\nregisterEditorContribution(MarkerDecorationsContribution.ID, MarkerDecorationsContribution, 0 /* EditorContributionInstantiation.Eager */); // eager because it instantiates IMarkerDecorationsService which is responsible for rendering squiggles\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { getWindow, scheduleAtNextAnimationFrame } from '../../../base/browser/dom.js';\nexport class ElementSizeObserver extends Disposable {\n    constructor(referenceDomElement, dimension) {\n        super();\n        this._onDidChange = this._register(new Emitter());\n        this.onDidChange = this._onDidChange.event;\n        this._referenceDomElement = referenceDomElement;\n        this._width = -1;\n        this._height = -1;\n        this._resizeObserver = null;\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 (!this._resizeObserver && this._referenceDomElement) {\n            // We want to react to the resize observer only once per animation frame\n            // The first time the resize observer fires, we will react to it immediately.\n            // Otherwise we will postpone to the next animation frame.\n            // We'll use `observeContentRect` to store the content rect we received.\n            let observedDimenstion = null;\n            const observeNow = () => {\n                if (observedDimenstion) {\n                    this.observe({ width: observedDimenstion.width, height: observedDimenstion.height });\n                }\n                else {\n                    this.observe();\n                }\n            };\n            let shouldObserve = false;\n            let alreadyObservedThisAnimationFrame = false;\n            const update = () => {\n                if (shouldObserve && !alreadyObservedThisAnimationFrame) {\n                    try {\n                        shouldObserve = false;\n                        alreadyObservedThisAnimationFrame = true;\n                        observeNow();\n                    }\n                    finally {\n                        scheduleAtNextAnimationFrame(getWindow(this._referenceDomElement), () => {\n                            alreadyObservedThisAnimationFrame = false;\n                            update();\n                        });\n                    }\n                }\n            };\n            this._resizeObserver = new ResizeObserver((entries) => {\n                if (entries && entries[0] && entries[0].contentRect) {\n                    observedDimenstion = { width: entries[0].contentRect.width, height: entries[0].contentRect.height };\n                }\n                else {\n                    observedDimenstion = null;\n                }\n                shouldObserve = true;\n                update();\n            });\n            this._resizeObserver.observe(this._referenceDomElement);\n        }\n    }\n    stopObserving() {\n        if (this._resizeObserver) {\n            this._resizeObserver.disconnect();\n            this._resizeObserver = null;\n        }\n    }\n    observe(dimension) {\n        this.measureReferenceDomElement(true, dimension);\n    }\n    measureReferenceDomElement(emitEvent, 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 (emitEvent) {\n                this._onDidChange.fire();\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 EditorSettingMigration {\n    static { this.items = []; }\n    constructor(key, migrate) {\n        this.key = key;\n        this.migrate = migrate;\n    }\n    apply(options) {\n        const value = EditorSettingMigration._read(options, this.key);\n        const read = (key) => EditorSettingMigration._read(options, key);\n        const write = (key, value) => EditorSettingMigration._write(options, key, value);\n        this.migrate(value, read, write);\n    }\n    static _read(source, key) {\n        if (typeof source === 'undefined') {\n            return undefined;\n        }\n        const firstDotIndex = key.indexOf('.');\n        if (firstDotIndex >= 0) {\n            const firstSegment = key.substring(0, firstDotIndex);\n            return this._read(source[firstSegment], key.substring(firstDotIndex + 1));\n        }\n        return source[key];\n    }\n    static _write(target, key, value) {\n        const firstDotIndex = key.indexOf('.');\n        if (firstDotIndex >= 0) {\n            const firstSegment = key.substring(0, firstDotIndex);\n            target[firstSegment] = target[firstSegment] || {};\n            this._write(target[firstSegment], key.substring(firstDotIndex + 1), value);\n            return;\n        }\n        target[key] = value;\n    }\n}\nfunction registerEditorSettingMigration(key, migrate) {\n    EditorSettingMigration.items.push(new EditorSettingMigration(key, migrate));\n}\nfunction registerSimpleEditorSettingMigration(key, values) {\n    registerEditorSettingMigration(key, (value, read, write) => {\n        if (typeof value !== 'undefined') {\n            for (const [oldValue, newValue] of values) {\n                if (value === oldValue) {\n                    write(key, newValue);\n                    return;\n                }\n            }\n        }\n    });\n}\n/**\n * Compatibility with old options\n */\nexport function migrateOptions(options) {\n    EditorSettingMigration.items.forEach(migration => migration.apply(options));\n}\nregisterSimpleEditorSettingMigration('wordWrap', [[true, 'on'], [false, 'off']]);\nregisterSimpleEditorSettingMigration('lineNumbers', [[true, 'on'], [false, 'off']]);\nregisterSimpleEditorSettingMigration('cursorBlinking', [['visible', 'solid']]);\nregisterSimpleEditorSettingMigration('renderWhitespace', [[true, 'boundary'], [false, 'none']]);\nregisterSimpleEditorSettingMigration('renderLineHighlight', [[true, 'line'], [false, 'none']]);\nregisterSimpleEditorSettingMigration('acceptSuggestionOnEnter', [[true, 'on'], [false, 'off']]);\nregisterSimpleEditorSettingMigration('tabCompletion', [[false, 'off'], [true, 'onlySnippets']]);\nregisterSimpleEditorSettingMigration('hover', [[true, { enabled: true }], [false, { enabled: false }]]);\nregisterSimpleEditorSettingMigration('parameterHints', [[true, { enabled: true }], [false, { enabled: false }]]);\nregisterSimpleEditorSettingMigration('autoIndent', [[false, 'advanced'], [true, 'full']]);\nregisterSimpleEditorSettingMigration('matchBrackets', [[true, 'always'], [false, 'never']]);\nregisterSimpleEditorSettingMigration('renderFinalNewline', [[true, 'on'], [false, 'off']]);\nregisterSimpleEditorSettingMigration('cursorSmoothCaretAnimation', [[true, 'on'], [false, 'off']]);\nregisterSimpleEditorSettingMigration('occurrencesHighlight', [[true, 'singleFile'], [false, 'off']]);\nregisterSimpleEditorSettingMigration('wordBasedSuggestions', [[true, 'matchingDocuments'], [false, 'off']]);\nregisterEditorSettingMigration('autoClosingBrackets', (value, read, write) => {\n    if (value === false) {\n        write('autoClosingBrackets', 'never');\n        if (typeof read('autoClosingQuotes') === 'undefined') {\n            write('autoClosingQuotes', 'never');\n        }\n        if (typeof read('autoSurround') === 'undefined') {\n            write('autoSurround', 'never');\n        }\n    }\n});\nregisterEditorSettingMigration('renderIndentGuides', (value, read, write) => {\n    if (typeof value !== 'undefined') {\n        write('renderIndentGuides', undefined);\n        if (typeof read('guides.indentation') === 'undefined') {\n            write('guides.indentation', !!value);\n        }\n    }\n});\nregisterEditorSettingMigration('highlightActiveIndentGuide', (value, read, write) => {\n    if (typeof value !== 'undefined') {\n        write('highlightActiveIndentGuide', undefined);\n        if (typeof read('guides.highlightActiveIndentation') === 'undefined') {\n            write('guides.highlightActiveIndentation', !!value);\n        }\n    }\n});\nconst suggestFilteredTypesMapping = {\n    method: 'showMethods',\n    function: 'showFunctions',\n    constructor: 'showConstructors',\n    deprecated: 'showDeprecated',\n    field: 'showFields',\n    variable: 'showVariables',\n    class: 'showClasses',\n    struct: 'showStructs',\n    interface: 'showInterfaces',\n    module: 'showModules',\n    property: 'showProperties',\n    event: 'showEvents',\n    operator: 'showOperators',\n    unit: 'showUnits',\n    value: 'showValues',\n    constant: 'showConstants',\n    enum: 'showEnums',\n    enumMember: 'showEnumMembers',\n    keyword: 'showKeywords',\n    text: 'showWords',\n    color: 'showColors',\n    file: 'showFiles',\n    reference: 'showReferences',\n    folder: 'showFolders',\n    typeParameter: 'showTypeParameters',\n    snippet: 'showSnippets',\n};\nregisterEditorSettingMigration('suggest.filteredTypes', (value, read, write) => {\n    if (value && typeof value === 'object') {\n        for (const entry of Object.entries(suggestFilteredTypesMapping)) {\n            const v = value[entry[0]];\n            if (v === false) {\n                if (typeof read(`suggest.${entry[1]}`) === 'undefined') {\n                    write(`suggest.${entry[1]}`, false);\n                }\n            }\n        }\n        write('suggest.filteredTypes', undefined);\n    }\n});\nregisterEditorSettingMigration('quickSuggestions', (input, read, write) => {\n    if (typeof input === 'boolean') {\n        const value = input ? 'on' : 'off';\n        const newValue = { comments: value, strings: value, other: value };\n        write('quickSuggestions', newValue);\n    }\n});\n// Sticky Scroll\nregisterEditorSettingMigration('experimental.stickyScroll.enabled', (value, read, write) => {\n    if (typeof value === 'boolean') {\n        write('experimental.stickyScroll.enabled', undefined);\n        if (typeof read('stickyScroll.enabled') === 'undefined') {\n            write('stickyScroll.enabled', value);\n        }\n    }\n});\nregisterEditorSettingMigration('experimental.stickyScroll.maxLineCount', (value, read, write) => {\n    if (typeof value === 'number') {\n        write('experimental.stickyScroll.maxLineCount', undefined);\n        if (typeof read('stickyScroll.maxLineCount') === 'undefined') {\n            write('stickyScroll.maxLineCount', value);\n        }\n    }\n});\n// Code Actions on Save\nregisterEditorSettingMigration('codeActionsOnSave', (value, read, write) => {\n    if (value && typeof value === 'object') {\n        let toBeModified = false;\n        const newValue = {};\n        for (const entry of Object.entries(value)) {\n            if (typeof entry[1] === 'boolean') {\n                toBeModified = true;\n                newValue[entry[0]] = entry[1] ? 'explicit' : 'never';\n            }\n            else {\n                newValue[entry[0]] = entry[1];\n            }\n        }\n        if (toBeModified) {\n            write(`codeActionsOnSave`, newValue);\n        }\n    }\n});\n// Migrate Quick Fix Settings\nregisterEditorSettingMigration('codeActionWidget.includeNearbyQuickfixes', (value, read, write) => {\n    if (typeof value === 'boolean') {\n        write('codeActionWidget.includeNearbyQuickfixes', undefined);\n        if (typeof read('codeActionWidget.includeNearbyQuickFixes') === 'undefined') {\n            write('codeActionWidget.includeNearbyQuickFixes', value);\n        }\n    }\n});\n// Migrate the lightbulb settings\nregisterEditorSettingMigration('lightbulb.enabled', (value, read, write) => {\n    if (typeof value === 'boolean') {\n        write('lightbulb.enabled', value ? undefined : 'off');\n    }\n});\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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';\nclass TabFocusImpl {\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        this._tabFocus = tabFocusMode;\n        this._onDidChangeTabFocus.fire(this._tabFocus);\n    }\n}\n/**\n * Control what pressing Tab does.\n * If it is false, pressing Tab or Shift-Tab will be handled by the editor.\n * If it is true, pressing Tab or Shift-Tab will move the browser focus.\n * Defaults to false.\n */\nexport const TabFocus = new TabFocusImpl();\n","/*---------------------------------------------------------------------------------------------\n *  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 browser from '../../../base/browser/browser.js';\nimport * as arrays from '../../../base/common/arrays.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 platform from '../../../base/common/platform.js';\nimport { ElementSizeObserver } from './elementSizeObserver.js';\nimport { FontMeasurements } from './fontMeasurements.js';\nimport { migrateOptions } from './migrateOptions.js';\nimport { TabFocus } from './tabFocus.js';\nimport { ComputeOptionsMemory, ConfigurationChangedEvent, editorOptionsRegistry } from '../../common/config/editorOptions.js';\nimport { EditorZoom } from '../../common/config/editorZoom.js';\nimport { BareFontInfo } from '../../common/config/fontInfo.js';\nimport { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\nimport { getWindow, getWindowById } from '../../../base/browser/dom.js';\nimport { PixelRatio } from '../../../base/browser/pixelRatio.js';\nlet EditorConfiguration = class EditorConfiguration extends Disposable {\n    constructor(isSimpleWidget, contextMenuId, options, container, _accessibilityService) {\n        super();\n        this._accessibilityService = _accessibilityService;\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._isDominatedByLongLines = false;\n        this._viewLineCount = 1;\n        this._lineNumbersDigitCount = 1;\n        this._reservedHeight = 0;\n        this._glyphMarginDecorationLaneCount = 1;\n        this._computeOptionsMemory = new ComputeOptionsMemory();\n        this.isSimpleWidget = isSimpleWidget;\n        this.contextMenuId = contextMenuId;\n        this._containerObserver = this._register(new ElementSizeObserver(container, options.dimension));\n        this._targetWindowId = getWindow(container).vscodeWindowId;\n        this._rawOptions = deepCloneAndMigrateOptions(options);\n        this._validatedOptions = EditorOptionsUtil.validateOptions(this._rawOptions);\n        this.options = this._computeOptions();\n        if (this.options.get(13 /* EditorOption.automaticLayout */)) {\n            this._containerObserver.startObserving();\n        }\n        this._register(EditorZoom.onDidChangeZoomLevel(() => this._recomputeOptions()));\n        this._register(TabFocus.onDidChangeTabFocus(() => this._recomputeOptions()));\n        this._register(this._containerObserver.onDidChange(() => this._recomputeOptions()));\n        this._register(FontMeasurements.onDidChange(() => this._recomputeOptions()));\n        this._register(PixelRatio.getInstance(getWindow(container)).onDidChange(() => this._recomputeOptions()));\n        this._register(this._accessibilityService.onDidChangeScreenReaderOptimized(() => this._recomputeOptions()));\n    }\n    _recomputeOptions() {\n        const newOptions = this._computeOptions();\n        const changeEvent = EditorOptionsUtil.checkEquals(this.options, 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    _computeOptions() {\n        const partialEnv = this._readEnvConfiguration();\n        const bareFontInfo = BareFontInfo.createFromValidatedSettings(this._validatedOptions, partialEnv.pixelRatio, this.isSimpleWidget);\n        const fontInfo = this._readFontInfo(bareFontInfo);\n        const env = {\n            memory: this._computeOptionsMemory,\n            outerWidth: partialEnv.outerWidth,\n            outerHeight: partialEnv.outerHeight - this._reservedHeight,\n            fontInfo: fontInfo,\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            glyphMarginDecorationLaneCount: this._glyphMarginDecorationLaneCount\n        };\n        return EditorOptionsUtil.computeOptions(this._validatedOptions, env);\n    }\n    _readEnvConfiguration() {\n        return {\n            extraEditorClassName: getExtraEditorClassName(),\n            outerWidth: this._containerObserver.getWidth(),\n            outerHeight: this._containerObserver.getHeight(),\n            emptySelectionClipboard: browser.isWebKit || browser.isFirefox,\n            pixelRatio: PixelRatio.getInstance(getWindowById(this._targetWindowId, true).window).value,\n            accessibilitySupport: (this._accessibilityService.isScreenReaderOptimized()\n                ? 2 /* AccessibilitySupport.Enabled */\n                : this._accessibilityService.getAccessibilitySupport())\n        };\n    }\n    _readFontInfo(bareFontInfo) {\n        return FontMeasurements.readFontInfo(getWindowById(this._targetWindowId, true).window, bareFontInfo);\n    }\n    getRawOptions() {\n        return this._rawOptions;\n    }\n    updateOptions(_newOptions) {\n        const newOptions = deepCloneAndMigrateOptions(_newOptions);\n        const didChange = EditorOptionsUtil.applyUpdate(this._rawOptions, newOptions);\n        if (!didChange) {\n            return;\n        }\n        this._validatedOptions = EditorOptionsUtil.validateOptions(this._rawOptions);\n        this._recomputeOptions();\n    }\n    observeContainer(dimension) {\n        this._containerObserver.observe(dimension);\n    }\n    setIsDominatedByLongLines(isDominatedByLongLines) {\n        if (this._isDominatedByLongLines === isDominatedByLongLines) {\n            return;\n        }\n        this._isDominatedByLongLines = isDominatedByLongLines;\n        this._recomputeOptions();\n    }\n    setModelLineCount(modelLineCount) {\n        const lineNumbersDigitCount = digitCount(modelLineCount);\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    setReservedHeight(reservedHeight) {\n        if (this._reservedHeight === reservedHeight) {\n            return;\n        }\n        this._reservedHeight = reservedHeight;\n        this._recomputeOptions();\n    }\n    setGlyphMarginDecorationLaneCount(decorationLaneCount) {\n        if (this._glyphMarginDecorationLaneCount === decorationLaneCount) {\n            return;\n        }\n        this._glyphMarginDecorationLaneCount = decorationLaneCount;\n        this._recomputeOptions();\n    }\n};\nEditorConfiguration = __decorate([\n    __param(4, IAccessibilityService)\n], EditorConfiguration);\nexport { EditorConfiguration };\nfunction digitCount(n) {\n    let r = 0;\n    while (n) {\n        n = Math.floor(n / 10);\n        r++;\n    }\n    return r ? r : 1;\n}\nfunction 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        extra += 'enable-user-select ';\n    }\n    if (platform.isMacintosh) {\n        extra += 'mac ';\n    }\n    return extra;\n}\nclass 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}\nexport class ComputedEditorOptions {\n    constructor() {\n        this._values = [];\n    }\n    _read(id) {\n        if (id >= this._values.length) {\n            throw new Error('Cannot read uninitialized value');\n        }\n        return this._values[id];\n    }\n    get(id) {\n        return this._read(id);\n    }\n    _write(id, value) {\n        this._values[id] = value;\n    }\n}\nclass EditorOptionsUtil {\n    static validateOptions(options) {\n        const result = new ValidatedEditorOptions();\n        for (const editorOption of editorOptionsRegistry) {\n            const value = (editorOption.name === '_never_' ? undefined : options[editorOption.name]);\n            result._write(editorOption.id, editorOption.validate(value));\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' || !a || !b) {\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        if (Object.keys(a).length !== Object.keys(b).length) {\n            return false;\n        }\n        for (const key in a) {\n            if (!EditorOptionsUtil._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 = !EditorOptionsUtil._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     * Returns true if something changed.\n     * Modifies `options`.\n    */\n    static applyUpdate(options, update) {\n        let changed = false;\n        for (const editorOption of editorOptionsRegistry) {\n            if (update.hasOwnProperty(editorOption.name)) {\n                const result = editorOption.applyUpdate(options[editorOption.name], update[editorOption.name]);\n                options[editorOption.name] = result.newValue;\n                changed = changed || result.didChange;\n            }\n        }\n        return changed;\n    }\n}\nfunction deepCloneAndMigrateOptions(_options) {\n    const options = objects.deepClone(_options);\n    migrateOptions(options);\n    return 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 *--------------------------------------------------------------------------------------------*/\nexport var inputLatency;\n(function (inputLatency) {\n    const totalKeydownTime = { total: 0, min: Number.MAX_VALUE, max: 0 };\n    const totalInputTime = { ...totalKeydownTime };\n    const totalRenderTime = { ...totalKeydownTime };\n    const totalInputLatencyTime = { ...totalKeydownTime };\n    let measurementsCount = 0;\n    const state = {\n        keydown: 0 /* EventPhase.Before */,\n        input: 0 /* EventPhase.Before */,\n        render: 0 /* EventPhase.Before */,\n    };\n    /**\n     * Record the start of the keydown event.\n     */\n    function onKeyDown() {\n        /** Direct Check C. See explanation in {@link recordIfFinished} */\n        recordIfFinished();\n        performance.mark('inputlatency/start');\n        performance.mark('keydown/start');\n        state.keydown = 1 /* EventPhase.InProgress */;\n        queueMicrotask(markKeyDownEnd);\n    }\n    inputLatency.onKeyDown = onKeyDown;\n    /**\n     * Mark the end of the keydown event.\n     */\n    function markKeyDownEnd() {\n        if (state.keydown === 1 /* EventPhase.InProgress */) {\n            performance.mark('keydown/end');\n            state.keydown = 2 /* EventPhase.Finished */;\n        }\n    }\n    /**\n     * Record the start of the beforeinput event.\n     */\n    function onBeforeInput() {\n        performance.mark('input/start');\n        state.input = 1 /* EventPhase.InProgress */;\n        /** Schedule Task A. See explanation in {@link recordIfFinished} */\n        scheduleRecordIfFinishedTask();\n    }\n    inputLatency.onBeforeInput = onBeforeInput;\n    /**\n     * Record the start of the input event.\n     */\n    function onInput() {\n        if (state.input === 0 /* EventPhase.Before */) {\n            // it looks like we didn't receive a `beforeinput`\n            onBeforeInput();\n        }\n        queueMicrotask(markInputEnd);\n    }\n    inputLatency.onInput = onInput;\n    function markInputEnd() {\n        if (state.input === 1 /* EventPhase.InProgress */) {\n            performance.mark('input/end');\n            state.input = 2 /* EventPhase.Finished */;\n        }\n    }\n    /**\n     * Record the start of the keyup event.\n     */\n    function onKeyUp() {\n        /** Direct Check D. See explanation in {@link recordIfFinished} */\n        recordIfFinished();\n    }\n    inputLatency.onKeyUp = onKeyUp;\n    /**\n     * Record the start of the selectionchange event.\n     */\n    function onSelectionChange() {\n        /** Direct Check E. See explanation in {@link recordIfFinished} */\n        recordIfFinished();\n    }\n    inputLatency.onSelectionChange = onSelectionChange;\n    /**\n     * Record the start of the animation frame performing the rendering.\n     */\n    function onRenderStart() {\n        // Render may be triggered during input, but we only measure the following animation frame\n        if (state.keydown === 2 /* EventPhase.Finished */ && state.input === 2 /* EventPhase.Finished */ && state.render === 0 /* EventPhase.Before */) {\n            // Only measure the first render after keyboard input\n            performance.mark('render/start');\n            state.render = 1 /* EventPhase.InProgress */;\n            queueMicrotask(markRenderEnd);\n            /** Schedule Task B. See explanation in {@link recordIfFinished} */\n            scheduleRecordIfFinishedTask();\n        }\n    }\n    inputLatency.onRenderStart = onRenderStart;\n    /**\n     * Mark the end of the animation frame performing the rendering.\n     */\n    function markRenderEnd() {\n        if (state.render === 1 /* EventPhase.InProgress */) {\n            performance.mark('render/end');\n            state.render = 2 /* EventPhase.Finished */;\n        }\n    }\n    function scheduleRecordIfFinishedTask() {\n        // Here we can safely assume that the `setTimeout` will not be\n        // artificially delayed by 4ms because we schedule it from\n        // event handlers\n        setTimeout(recordIfFinished);\n    }\n    /**\n     * Record the input latency sample if input handling and rendering are finished.\n     *\n     * The challenge here is that we want to record the latency in such a way that it includes\n     * also the layout and painting work the browser does during the animation frame task.\n     *\n     * Simply scheduling a new task (via `setTimeout`) from the animation frame task would\n     * schedule the new task at the end of the task queue (after other code that uses `setTimeout`),\n     * so we need to use multiple strategies to make sure our task runs before others:\n     *\n     * We schedule tasks (A and B):\n     *    - we schedule a task A (via a `setTimeout` call) when the input starts in `markInputStart`.\n     *      If the animation frame task is scheduled quickly by the browser, then task A has a very good\n     *      chance of being the very first task after the animation frame and thus will record the input latency.\n     *    - however, if the animation frame task is scheduled a bit later, then task A might execute\n     *      before the animation frame task. We therefore schedule another task B from `markRenderStart`.\n     *\n     * We do direct checks in browser event handlers (C, D, E):\n     *    - if the browser has multiple keydown events queued up, they will be scheduled before the `setTimeout` tasks,\n     *      so we do a direct check in the keydown event handler (C).\n     *    - depending on timing, sometimes the animation frame is scheduled even before the `keyup` event, so we\n     *      do a direct check there too (E).\n     *    - the browser oftentimes emits a `selectionchange` event after an `input`, so we do a direct check there (D).\n     */\n    function recordIfFinished() {\n        if (state.keydown === 2 /* EventPhase.Finished */ && state.input === 2 /* EventPhase.Finished */ && state.render === 2 /* EventPhase.Finished */) {\n            performance.mark('inputlatency/end');\n            performance.measure('keydown', 'keydown/start', 'keydown/end');\n            performance.measure('input', 'input/start', 'input/end');\n            performance.measure('render', 'render/start', 'render/end');\n            performance.measure('inputlatency', 'inputlatency/start', 'inputlatency/end');\n            addMeasure('keydown', totalKeydownTime);\n            addMeasure('input', totalInputTime);\n            addMeasure('render', totalRenderTime);\n            addMeasure('inputlatency', totalInputLatencyTime);\n            // console.info(\n            // \t`input latency=${performance.getEntriesByName('inputlatency')[0].duration.toFixed(1)} [` +\n            // \t`keydown=${performance.getEntriesByName('keydown')[0].duration.toFixed(1)}, ` +\n            // \t`input=${performance.getEntriesByName('input')[0].duration.toFixed(1)}, ` +\n            // \t`render=${performance.getEntriesByName('render')[0].duration.toFixed(1)}` +\n            // \t`]`\n            // );\n            measurementsCount++;\n            reset();\n        }\n    }\n    function addMeasure(entryName, cumulativeMeasurement) {\n        const duration = performance.getEntriesByName(entryName)[0].duration;\n        cumulativeMeasurement.total += duration;\n        cumulativeMeasurement.min = Math.min(cumulativeMeasurement.min, duration);\n        cumulativeMeasurement.max = Math.max(cumulativeMeasurement.max, duration);\n    }\n    /**\n     * Clear the current sample.\n     */\n    function reset() {\n        performance.clearMarks('keydown/start');\n        performance.clearMarks('keydown/end');\n        performance.clearMarks('input/start');\n        performance.clearMarks('input/end');\n        performance.clearMarks('render/start');\n        performance.clearMarks('render/end');\n        performance.clearMarks('inputlatency/start');\n        performance.clearMarks('inputlatency/end');\n        performance.clearMeasures('keydown');\n        performance.clearMeasures('input');\n        performance.clearMeasures('render');\n        performance.clearMeasures('inputlatency');\n        state.keydown = 0 /* EventPhase.Before */;\n        state.input = 0 /* EventPhase.Before */;\n        state.render = 0 /* EventPhase.Before */;\n    }\n    /**\n     * Gets all input latency samples and clears the internal buffers to start recording a new set\n     * of samples.\n     */\n    function getAndClearMeasurements() {\n        if (measurementsCount === 0) {\n            return undefined;\n        }\n        // Assemble the result\n        const result = {\n            keydown: cumulativeToFinalMeasurement(totalKeydownTime),\n            input: cumulativeToFinalMeasurement(totalInputTime),\n            render: cumulativeToFinalMeasurement(totalRenderTime),\n            total: cumulativeToFinalMeasurement(totalInputLatencyTime),\n            sampleCount: measurementsCount\n        };\n        // Clear the cumulative measurements\n        clearCumulativeMeasurement(totalKeydownTime);\n        clearCumulativeMeasurement(totalInputTime);\n        clearCumulativeMeasurement(totalRenderTime);\n        clearCumulativeMeasurement(totalInputLatencyTime);\n        measurementsCount = 0;\n        return result;\n    }\n    inputLatency.getAndClearMeasurements = getAndClearMeasurements;\n    function cumulativeToFinalMeasurement(cumulative) {\n        return {\n            average: cumulative.total / measurementsCount,\n            max: cumulative.max,\n            min: cumulative.min,\n        };\n    }\n    function clearCumulativeMeasurement(cumulative) {\n        cumulative.total = 0;\n        cumulative.min = Number.MAX_VALUE;\n        cumulative.max = 0;\n    }\n})(inputLatency || (inputLatency = {}));\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { GlobalPointerMoveMonitor } from '../../base/browser/globalPointerMoveMonitor.js';\nimport { StandardMouseEvent } from '../../base/browser/mouseEvent.js';\nimport { RunOnceScheduler } from '../../base/common/async.js';\nimport { Disposable, DisposableStore } from '../../base/common/lifecycle.js';\nimport { asCssVariable } from '../../platform/theme/common/colorRegistry.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        this._pageCoordinatesBrand = undefined;\n    }\n    toClientCoordinates(targetWindow) {\n        return new ClientCoordinates(this.x - targetWindow.scrollX, this.y - targetWindow.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        this._clientCoordinatesBrand = undefined;\n    }\n    toPageCoordinates(targetWindow) {\n        return new PageCoordinates(this.clientX + targetWindow.scrollX, this.clientY + targetWindow.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        this._editorPagePositionBrand = undefined;\n    }\n}\n/**\n * Coordinates relative to the the (top;left) of the editor that can be used safely with other internal editor metrics.\n * **NOTE**: This position is obtained by taking page coordinates and transforming them relative to the\n * editor's (top;left) position in a way in which scale transformations are taken into account.\n * **NOTE**: These coordinates could be negative if the mouse position is outside the editor.\n */\nexport class CoordinatesRelativeToEditor {\n    constructor(x, y) {\n        this.x = x;\n        this.y = y;\n        this._positionRelativeToEditorBrand = undefined;\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 function createCoordinatesRelativeToEditor(editorViewDomNode, editorPagePosition, pos) {\n    // The editor's page position is read from the DOM using getBoundingClientRect().\n    //\n    // getBoundingClientRect() returns the actual dimensions, while offsetWidth and offsetHeight\n    // reflect the unscaled size. We can use this difference to detect a transform:scale()\n    // and we will apply the transformation in inverse to get mouse coordinates that make sense inside the editor.\n    //\n    // This could be expanded to cover rotation as well maybe by walking the DOM up from `editorViewDomNode`\n    // and computing the effective transformation matrix using getComputedStyle(element).transform.\n    //\n    const scaleX = editorPagePosition.width / editorViewDomNode.offsetWidth;\n    const scaleY = editorPagePosition.height / editorViewDomNode.offsetHeight;\n    // Adjust mouse offsets if editor appears to be scaled via transforms\n    const relativeX = (pos.x - editorPagePosition.x) / scaleX;\n    const relativeY = (pos.y - editorPagePosition.y) / scaleY;\n    return new CoordinatesRelativeToEditor(relativeX, relativeY);\n}\nexport class EditorMouseEvent extends StandardMouseEvent {\n    constructor(e, isFromPointerCapture, editorViewDomNode) {\n        super(dom.getWindow(editorViewDomNode), e);\n        this._editorMouseEventBrand = undefined;\n        this.isFromPointerCapture = isFromPointerCapture;\n        this.pos = new PageCoordinates(this.posx, this.posy);\n        this.editorPos = createEditorPagePosition(editorViewDomNode);\n        this.relativePos = createCoordinatesRelativeToEditor(editorViewDomNode, this.editorPos, this.pos);\n    }\n}\nexport class EditorMouseEventFactory {\n    constructor(editorViewDomNode) {\n        this._editorViewDomNode = editorViewDomNode;\n    }\n    _create(e) {\n        return new EditorMouseEvent(e, false, 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, dom.EventType.MOUSE_DOWN, (e) => {\n            callback(this._create(e));\n        });\n    }\n    onPointerDown(target, callback) {\n        return dom.addDisposableListener(target, dom.EventType.POINTER_DOWN, (e) => {\n            callback(this._create(e), e.pointerId);\n        });\n    }\n    onMouseLeave(target, callback) {\n        return dom.addDisposableListener(target, dom.EventType.MOUSE_LEAVE, (e) => {\n            callback(this._create(e));\n        });\n    }\n    onMouseMove(target, callback) {\n        return dom.addDisposableListener(target, 'mousemove', (e) => callback(this._create(e)));\n    }\n}\nexport class EditorPointerEventFactory {\n    constructor(editorViewDomNode) {\n        this._editorViewDomNode = editorViewDomNode;\n    }\n    _create(e) {\n        return new EditorMouseEvent(e, false, 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, dom.EventType.POINTER_DOWN, (e) => {\n            callback(this._create(e), e.pointerId);\n        });\n    }\n    onPointerLeave(target, callback) {\n        return dom.addDisposableListener(target, dom.EventType.POINTER_LEAVE, (e) => {\n            callback(this._create(e));\n        });\n    }\n    onPointerMove(target, callback) {\n        return dom.addDisposableListener(target, 'pointermove', (e) => callback(this._create(e)));\n    }\n}\nexport class GlobalEditorPointerMoveMonitor extends Disposable {\n    constructor(editorViewDomNode) {\n        super();\n        this._editorViewDomNode = editorViewDomNode;\n        this._globalPointerMoveMonitor = this._register(new GlobalPointerMoveMonitor());\n        this._keydownListener = null;\n    }\n    startMonitoring(initialElement, pointerId, initialButtons, pointerMoveCallback, 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(initialElement.ownerDocument, 'keydown', (e) => {\n            const chord = e.toKeyCodeChord();\n            if (chord.isModifierKey()) {\n                // Allow modifier keys\n                return;\n            }\n            this._globalPointerMoveMonitor.stopMonitoring(true, e.browserEvent);\n        }, true);\n        this._globalPointerMoveMonitor.startMonitoring(initialElement, pointerId, initialButtons, (e) => {\n            pointerMoveCallback(new EditorMouseEvent(e, true, this._editorViewDomNode));\n        }, (e) => {\n            this._keydownListener.dispose();\n            onStopCallback(e);\n        });\n    }\n    stopMonitoring() {\n        this._globalPointerMoveMonitor.stopMonitoring(true);\n    }\n}\n/**\n * A helper to create dynamic css rules, bound to a class name.\n * Rules are reused.\n * Reference counting and delayed garbage collection ensure that no rules leak.\n*/\nexport class DynamicCssRules {\n    static { this._idPool = 0; }\n    constructor(_editor) {\n        this._editor = _editor;\n        this._instanceId = ++DynamicCssRules._idPool;\n        this._counter = 0;\n        this._rules = new Map();\n        // We delay garbage collection so that hanging rules can be reused.\n        this._garbageCollectionScheduler = new RunOnceScheduler(() => this.garbageCollect(), 1000);\n    }\n    createClassNameRef(options) {\n        const rule = this.getOrCreateRule(options);\n        rule.increaseRefCount();\n        return {\n            className: rule.className,\n            dispose: () => {\n                rule.decreaseRefCount();\n                this._garbageCollectionScheduler.schedule();\n            }\n        };\n    }\n    getOrCreateRule(properties) {\n        const key = this.computeUniqueKey(properties);\n        let existingRule = this._rules.get(key);\n        if (!existingRule) {\n            const counter = this._counter++;\n            existingRule = new RefCountedCssRule(key, `dyn-rule-${this._instanceId}-${counter}`, dom.isInShadowDOM(this._editor.getContainerDomNode())\n                ? this._editor.getContainerDomNode()\n                : undefined, properties);\n            this._rules.set(key, existingRule);\n        }\n        return existingRule;\n    }\n    computeUniqueKey(properties) {\n        return JSON.stringify(properties);\n    }\n    garbageCollect() {\n        for (const rule of this._rules.values()) {\n            if (!rule.hasReferences()) {\n                this._rules.delete(rule.key);\n                rule.dispose();\n            }\n        }\n    }\n}\nclass RefCountedCssRule {\n    constructor(key, className, _containerElement, properties) {\n        this.key = key;\n        this.className = className;\n        this.properties = properties;\n        this._referenceCount = 0;\n        this._styleElementDisposables = new DisposableStore();\n        this._styleElement = dom.createStyleSheet(_containerElement, undefined, this._styleElementDisposables);\n        this._styleElement.textContent = this.getCssText(this.className, this.properties);\n    }\n    getCssText(className, properties) {\n        let str = `.${className} {`;\n        for (const prop in properties) {\n            const value = properties[prop];\n            let cssValue;\n            if (typeof value === 'object') {\n                cssValue = asCssVariable(value.id);\n            }\n            else {\n                cssValue = value;\n            }\n            const cssPropName = camelToDashes(prop);\n            str += `\\n\\t${cssPropName}: ${cssValue};`;\n        }\n        str += `\\n}`;\n        return str;\n    }\n    dispose() {\n        this._styleElementDisposables.dispose();\n        this._styleElement = undefined;\n    }\n    increaseRefCount() {\n        this._referenceCount++;\n    }\n    decreaseRefCount() {\n        this._referenceCount--;\n    }\n    hasReferences() {\n        return this._referenceCount > 0;\n    }\n}\nfunction camelToDashes(str) {\n    return str.replace(/(^[A-Z])/, ([first]) => first.toLowerCase())\n        .replace(/([A-Z])/g, ([letter]) => `-${letter.toLowerCase()}`);\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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            const e = events[i];\n            switch (e.type) {\n                case 0 /* viewEvents.ViewEventType.ViewCompositionStart */:\n                    if (this.onCompositionStart(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 1 /* viewEvents.ViewEventType.ViewCompositionEnd */:\n                    if (this.onCompositionEnd(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 2 /* viewEvents.ViewEventType.ViewConfigurationChanged */:\n                    if (this.onConfigurationChanged(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 3 /* viewEvents.ViewEventType.ViewCursorStateChanged */:\n                    if (this.onCursorStateChanged(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 4 /* viewEvents.ViewEventType.ViewDecorationsChanged */:\n                    if (this.onDecorationsChanged(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 5 /* viewEvents.ViewEventType.ViewFlushed */:\n                    if (this.onFlushed(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 6 /* viewEvents.ViewEventType.ViewFocusChanged */:\n                    if (this.onFocusChanged(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 7 /* viewEvents.ViewEventType.ViewLanguageConfigurationChanged */:\n                    if (this.onLanguageConfigurationChanged(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 8 /* viewEvents.ViewEventType.ViewLineMappingChanged */:\n                    if (this.onLineMappingChanged(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 9 /* viewEvents.ViewEventType.ViewLinesChanged */:\n                    if (this.onLinesChanged(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 10 /* viewEvents.ViewEventType.ViewLinesDeleted */:\n                    if (this.onLinesDeleted(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 11 /* viewEvents.ViewEventType.ViewLinesInserted */:\n                    if (this.onLinesInserted(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 12 /* viewEvents.ViewEventType.ViewRevealRangeRequest */:\n                    if (this.onRevealRangeRequest(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 13 /* viewEvents.ViewEventType.ViewScrollChanged */:\n                    if (this.onScrollChanged(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 15 /* viewEvents.ViewEventType.ViewTokensChanged */:\n                    if (this.onTokensChanged(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 14 /* viewEvents.ViewEventType.ViewThemeChanged */:\n                    if (this.onThemeChanged(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 16 /* viewEvents.ViewEventType.ViewTokensColorsChanged */:\n                    if (this.onTokensColorsChanged(e)) {\n                        shouldRender = true;\n                    }\n                    break;\n                case 17 /* viewEvents.ViewEventType.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 { ViewEventHandler } from '../../common/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        target.setAttribute('data-mprt', String(partId));\n    }\n    static read(target) {\n        const r = target.getAttribute('data-mprt');\n        if (r === null) {\n            return 0 /* PartFingerprint.None */;\n        }\n        return parseInt(r, 10);\n    }\n    static collect(child, stopAt) {\n        const result = [];\n        let resultLen = 0;\n        while (child && child !== child.ownerDocument.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._restrictedRenderingContextBrand = undefined;\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, includeViewZones) {\n        return this._viewLayout.getVerticalOffsetForLineNumber(lineNumber, includeViewZones);\n    }\n    getVerticalOffsetAfterLineNumber(lineNumber, includeViewZones) {\n        return this._viewLayout.getVerticalOffsetAfterLineNumber(lineNumber, includeViewZones);\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._renderingContextBrand = undefined;\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    /**\n     * Indicates if the requested range does not end in this line, but continues on the next line.\n     */\n    continuesOnNextLine) {\n        this.outsideRenderedLine = outsideRenderedLine;\n        this.lineNumber = lineNumber;\n        this.ranges = ranges;\n        this.continuesOnNextLine = continuesOnNextLine;\n    }\n}\nexport class HorizontalRange {\n    static from(ranges) {\n        const result = new Array(ranges.length);\n        for (let i = 0, len = ranges.length; i < len; i++) {\n            const range = ranges[i];\n            result[i] = new HorizontalRange(range.left, range.width);\n        }\n        return result;\n    }\n    constructor(left, width) {\n        this._horizontalRangeBrand = undefined;\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 FloatHorizontalRange {\n    constructor(left, width) {\n        this._floatHorizontalRangeBrand = undefined;\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 HorizontalPosition {\n    constructor(outsideRenderedLine, left) {\n        this.outsideRenderedLine = outsideRenderedLine;\n        this.originalLeft = left;\n        this.left = Math.round(this.originalLeft);\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 { FloatHorizontalRange } from '../../view/renderingContext.js';\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 ranges;\n        }\n        ranges.sort(FloatHorizontalRange.compare);\n        const result = [];\n        let resultLen = 0;\n        let prev = ranges[0];\n        for (let i = 1, len = ranges.length; i < len; i++) {\n            const range = ranges[i];\n            if (prev.left + prev.width + 0.9 /* account for browser's rounding errors*/ >= range.left) {\n                prev.width = Math.max(prev.width, range.left + range.width - prev.left);\n            }\n            else {\n                result[resultLen++] = prev;\n                prev = range;\n            }\n        }\n        result[resultLen++] = prev;\n        return result;\n    }\n    static _createHorizontalRangesFromClientRects(clientRects, clientRectDeltaLeft, clientRectScale) {\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) / clientRectScale), clientRect.width / clientRectScale);\n        }\n        return this._mergeAdjacentRanges(result);\n    }\n    static readHorizontalRanges(domNode, startChildIndex, startOffset, endChildIndex, endOffset, context) {\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            context.markDidDomLayout();\n            return this._createHorizontalRangesFromClientRects(clientRects, context.clientRectDeltaLeft, context.clientRectScale);\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 /* Constants.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 /* Constants.MAX_SAFE_SMALL_INTEGER */;\n            }\n            if (!endElement && endOffset === 0 && endChildIndex > 0) {\n                endElement = domNode.children[endChildIndex - 1].firstChild;\n                endOffset = 1073741824 /* Constants.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, context.endNode);\n        context.markDidDomLayout();\n        return this._createHorizontalRangesFromClientRects(clientRects, context.clientRectDeltaLeft, context.clientRectScale);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { FloatHorizontalRange, VisibleRanges } from '../../view/renderingContext.js';\nimport { LineDecoration } from '../../../common/viewLayout/lineDecorations.js';\nimport { RenderLineInput, renderViewLine, LineRange, DomPosition } from '../../../common/viewLayout/viewLineRenderer.js';\nimport { isHighContrast } 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 ViewLineOptions {\n    constructor(config, themeType) {\n        this.themeType = themeType;\n        const options = config.options;\n        const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n        const experimentalWhitespaceRendering = options.get(38 /* EditorOption.experimentalWhitespaceRendering */);\n        if (experimentalWhitespaceRendering === 'off') {\n            this.renderWhitespace = options.get(100 /* EditorOption.renderWhitespace */);\n        }\n        else {\n            // whitespace is rendered in a different layer\n            this.renderWhitespace = 'none';\n        }\n        this.renderControlCharacters = options.get(95 /* EditorOption.renderControlCharacters */);\n        this.spaceWidth = fontInfo.spaceWidth;\n        this.middotWidth = fontInfo.middotWidth;\n        this.wsmiddotWidth = fontInfo.wsmiddotWidth;\n        this.useMonospaceOptimizations = (fontInfo.isMonospace\n            && !options.get(33 /* EditorOption.disableMonospaceOptimizations */));\n        this.canUseHalfwidthRightwardsArrow = fontInfo.canUseHalfwidthRightwardsArrow;\n        this.lineHeight = options.get(67 /* EditorOption.lineHeight */);\n        this.stopRenderingLineAfter = options.get(118 /* EditorOption.stopRenderingLineAfter */);\n        this.fontLigatures = options.get(51 /* EditorOption.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    static { this.CLASS_NAME = 'view-line'; }\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 (isHighContrast(this._options.themeType) || this._options.renderWhitespace === 'selection') {\n            this._isMaybeInvalid = true;\n            return true;\n        }\n        return false;\n    }\n    renderLine(lineNumber, deltaTop, lineHeight, 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 (isHighContrast(options.themeType) || 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 (isHighContrast(options.themeType)) {\n                        actualInlineDecorations.push(new LineDecoration(startColumn, endColumn, 'inline-selected-text', 0 /* InlineDecorationType.Regular */));\n                    }\n                    if (this._options.renderWhitespace === 'selection') {\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.appendString('<div style=\"top:');\n        sb.appendString(String(deltaTop));\n        sb.appendString('px;height:');\n        sb.appendString(String(lineHeight));\n        sb.appendString('px;\" class=\"');\n        sb.appendString(ViewLine.CLASS_NAME);\n        sb.appendString('\">');\n        const output = renderViewLine(renderLineInput, sb);\n        sb.appendString('</div>');\n        let renderedViewLine = null;\n        if (monospaceAssumptionsAreValid && canUseFastRenderedViewLine && lineData.isBasicASCII && options.useMonospaceOptimizations && output.containsForeignElements === 0 /* ForeignElementType.None */) {\n            renderedViewLine = new FastRenderedViewLine(this._renderedViewLine ? this._renderedViewLine.domNode : null, renderLineInput, output.characterMapping);\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, lineHeight) {\n        if (this._renderedViewLine && this._renderedViewLine.domNode) {\n            this._renderedViewLine.domNode.setTop(deltaTop);\n            this._renderedViewLine.domNode.setHeight(lineHeight);\n        }\n    }\n    // --- end IVisibleLineData\n    getWidth(context) {\n        if (!this._renderedViewLine) {\n            return 0;\n        }\n        return this._renderedViewLine.getWidth(context);\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(lineNumber, startColumn, endColumn, context) {\n        if (!this._renderedViewLine) {\n            return null;\n        }\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;\n        if (stopRenderingLineAfter !== -1 && startColumn > stopRenderingLineAfter + 1 && endColumn > stopRenderingLineAfter + 1) {\n            // This range is obviously not visible\n            return new VisibleRanges(true, [new FloatHorizontalRange(this.getWidth(context), 0)]);\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(lineNumber, startColumn, endColumn, context);\n        if (horizontalRanges && horizontalRanges.length > 0) {\n            return new VisibleRanges(false, horizontalRanges);\n        }\n        return null;\n    }\n    getColumnOfNodeOffset(spanNode, offset) {\n        if (!this._renderedViewLine) {\n            return 1;\n        }\n        return this._renderedViewLine.getColumnOfNodeOffset(spanNode, offset);\n    }\n}\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._cachedWidth = -1;\n        this.domNode = domNode;\n        this.input = renderLineInput;\n        const keyColumnCount = Math.floor(renderLineInput.lineContent.length / 300 /* Constants.MaxMonospaceDistance */);\n        if (keyColumnCount > 0) {\n            this._keyColumnPixelOffsetCache = new Float32Array(keyColumnCount);\n            for (let i = 0; i < keyColumnCount; i++) {\n                this._keyColumnPixelOffsetCache[i] = -1;\n            }\n        }\n        else {\n            this._keyColumnPixelOffsetCache = null;\n        }\n        this._characterMapping = characterMapping;\n        this._charWidth = renderLineInput.spaceWidth;\n    }\n    getWidth(context) {\n        if (!this.domNode || this.input.lineContent.length < 300 /* Constants.MaxMonospaceDistance */) {\n            const horizontalOffset = this._characterMapping.getHorizontalOffset(this._characterMapping.length);\n            return Math.round(this._charWidth * horizontalOffset);\n        }\n        if (this._cachedWidth === -1) {\n            this._cachedWidth = this._getReadingTarget(this.domNode).offsetWidth;\n            context?.markDidDomLayout();\n        }\n        return this._cachedWidth;\n    }\n    getWidthIsFast() {\n        return (this.input.lineContent.length < 300 /* Constants.MaxMonospaceDistance */) || this._cachedWidth !== -1;\n    }\n    monospaceAssumptionsAreValid() {\n        if (!this.domNode) {\n            return monospaceAssumptionsAreValid;\n        }\n        if (this.input.lineContent.length < 300 /* Constants.MaxMonospaceDistance */) {\n            const expectedWidth = this.getWidth(null);\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        }\n        return monospaceAssumptionsAreValid;\n    }\n    toSlowRenderedLine() {\n        return createRenderedLine(this.domNode, this.input, this._characterMapping, false, 0 /* ForeignElementType.None */);\n    }\n    getVisibleRangesForRange(lineNumber, startColumn, endColumn, context) {\n        const startPosition = this._getColumnPixelOffset(lineNumber, startColumn, context);\n        const endPosition = this._getColumnPixelOffset(lineNumber, endColumn, context);\n        return [new FloatHorizontalRange(startPosition, endPosition - startPosition)];\n    }\n    _getColumnPixelOffset(lineNumber, column, context) {\n        if (column <= 300 /* Constants.MaxMonospaceDistance */) {\n            const horizontalOffset = this._characterMapping.getHorizontalOffset(column);\n            return this._charWidth * horizontalOffset;\n        }\n        const keyColumnOrdinal = Math.floor((column - 1) / 300 /* Constants.MaxMonospaceDistance */) - 1;\n        const keyColumn = (keyColumnOrdinal + 1) * 300 /* Constants.MaxMonospaceDistance */ + 1;\n        let keyColumnPixelOffset = -1;\n        if (this._keyColumnPixelOffsetCache) {\n            keyColumnPixelOffset = this._keyColumnPixelOffsetCache[keyColumnOrdinal];\n            if (keyColumnPixelOffset === -1) {\n                keyColumnPixelOffset = this._actualReadPixelOffset(lineNumber, keyColumn, context);\n                this._keyColumnPixelOffsetCache[keyColumnOrdinal] = keyColumnPixelOffset;\n            }\n        }\n        if (keyColumnPixelOffset === -1) {\n            // Could not read actual key column pixel offset\n            const horizontalOffset = this._characterMapping.getHorizontalOffset(column);\n            return this._charWidth * horizontalOffset;\n        }\n        const keyColumnHorizontalOffset = this._characterMapping.getHorizontalOffset(keyColumn);\n        const horizontalOffset = this._characterMapping.getHorizontalOffset(column);\n        return keyColumnPixelOffset + this._charWidth * (horizontalOffset - keyColumnHorizontalOffset);\n    }\n    _getReadingTarget(myDomNode) {\n        return myDomNode.domNode.firstChild;\n    }\n    _actualReadPixelOffset(lineNumber, column, context) {\n        if (!this.domNode) {\n            return -1;\n        }\n        const domPosition = this._characterMapping.getDomPosition(column);\n        const r = RangeUtil.readHorizontalRanges(this._getReadingTarget(this.domNode), domPosition.partIndex, domPosition.charIndex, domPosition.partIndex, domPosition.charIndex, context);\n        if (!r || r.length === 0) {\n            return -1;\n        }\n        return r[0].left;\n    }\n    getColumnOfNodeOffset(spanNode, offset) {\n        return getColumnOfNodeOffset(this._characterMapping, spanNode, offset);\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 Float32Array(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(context) {\n        if (!this.domNode) {\n            return 0;\n        }\n        if (this._cachedWidth === -1) {\n            this._cachedWidth = this._getReadingTarget(this.domNode).offsetWidth;\n            context?.markDidDomLayout();\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(lineNumber, 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, lineNumber, startColumn, context);\n            if (startOffset === -1) {\n                return null;\n            }\n            const endOffset = this._readPixelOffset(this.domNode, lineNumber, endColumn, context);\n            if (endOffset === -1) {\n                return null;\n            }\n            return [new FloatHorizontalRange(startOffset, endOffset - startOffset)];\n        }\n        return this._readVisibleRangesForRange(this.domNode, lineNumber, startColumn, endColumn, context);\n    }\n    _readVisibleRangesForRange(domNode, lineNumber, startColumn, endColumn, context) {\n        if (startColumn === endColumn) {\n            const pixelOffset = this._readPixelOffset(domNode, lineNumber, startColumn, context);\n            if (pixelOffset === -1) {\n                return null;\n            }\n            else {\n                return [new FloatHorizontalRange(pixelOffset, 0)];\n            }\n        }\n        else {\n            return this._readRawVisibleRangesForRange(domNode, startColumn, endColumn, context);\n        }\n    }\n    _readPixelOffset(domNode, lineNumber, column, context) {\n        if (this._characterMapping.length === 0) {\n            // This line has no content\n            if (this._containsForeignElements === 0 /* ForeignElementType.None */) {\n                // We can assume the line is really empty\n                return 0;\n            }\n            if (this._containsForeignElements === 2 /* ForeignElementType.After */) {\n                // We have foreign elements after the (empty) line\n                return 0;\n            }\n            if (this._containsForeignElements === 1 /* ForeignElementType.Before */) {\n                // We have foreign elements before the (empty) line\n                return this.getWidth(context);\n            }\n            // We have foreign elements before & after the (empty) line\n            const readingTarget = this._getReadingTarget(domNode);\n            if (readingTarget.firstChild) {\n                context.markDidDomLayout();\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, lineNumber, column, context);\n            this._pixelOffsetCache[column] = result;\n            return result;\n        }\n        return this._actualReadPixelOffset(domNode, lineNumber, column, context);\n    }\n    _actualReadPixelOffset(domNode, lineNumber, 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);\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 /* ForeignElementType.None */) {\n            // This branch helps in the case of whitespace only lines which have a width set\n            return this.getWidth(context);\n        }\n        const domPosition = this._characterMapping.getDomPosition(column);\n        const r = RangeUtil.readHorizontalRanges(this._getReadingTarget(domNode), domPosition.partIndex, domPosition.charIndex, domPosition.partIndex, domPosition.charIndex, context);\n        if (!r || r.length === 0) {\n            return -1;\n        }\n        const result = r[0].left;\n        if (this.input.isBasicASCII) {\n            const horizontalOffset = this._characterMapping.getHorizontalOffset(column);\n            const expectedResult = Math.round(this.input.spaceWidth * horizontalOffset);\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 FloatHorizontalRange(0, this.getWidth(context))];\n        }\n        const startDomPosition = this._characterMapping.getDomPosition(startColumn);\n        const endDomPosition = this._characterMapping.getDomPosition(endColumn);\n        return RangeUtil.readHorizontalRanges(this._getReadingTarget(domNode), startDomPosition.partIndex, startDomPosition.charIndex, endDomPosition.partIndex, endDomPosition.charIndex, context);\n    }\n    /**\n     * Returns the column for the text found at a specific offset inside a rendered dom node\n     */\n    getColumnOfNodeOffset(spanNode, offset) {\n        return getColumnOfNodeOffset(this._characterMapping, spanNode, offset);\n    }\n}\nclass WebKitRenderedViewLine extends RenderedViewLine {\n    _readVisibleRangesForRange(domNode, lineNumber, startColumn, endColumn, context) {\n        const output = super._readVisibleRangesForRange(domNode, lineNumber, 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, lineNumber, 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}\nexport function getColumnOfNodeOffset(characterMapping, spanNode, offset) {\n    const spanNodeTextContentLength = spanNode.textContent.length;\n    let spanIndex = -1;\n    while (spanNode) {\n        spanNode = spanNode.previousSibling;\n        spanIndex++;\n    }\n    return characterMapping.getColumn(new DomPosition(spanIndex, offset), spanNodeTextContentLength);\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 '../core/cursorColumns.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 /* CharCode.Space */:\n                    visibleColumn += 1;\n                    break;\n                case 9 /* CharCode.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 /* Direction.Left */:\n                left = true;\n                break;\n            case 1 /* Direction.Right */:\n                left = false;\n                break;\n            case 2 /* Direction.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 /* CharCode.Space */:\n                        currentVisibleColumn += 1;\n                        break;\n                    case 9 /* CharCode.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 /* CharCode.Space */:\n                    currentVisibleColumn += 1;\n                    break;\n                case 9 /* CharCode.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 { 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/core/cursorColumns.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { AtomicTabMoveOperations } from '../../common/cursor/cursorAtomicMoveOperations.js';\nimport { Lazy } from '../../../base/common/lazy.js';\nclass UnknownHitTestResult {\n    constructor(hitTarget = null) {\n        this.hitTarget = hitTarget;\n        this.type = 0 /* HitTestResultType.Unknown */;\n    }\n}\nclass ContentHitTestResult {\n    get hitTarget() { return this.spanNode; }\n    constructor(position, spanNode, injectedText) {\n        this.position = position;\n        this.spanNode = spanNode;\n        this.injectedText = injectedText;\n        this.type = 1 /* HitTestResultType.Content */;\n    }\n}\nvar HitTestResult;\n(function (HitTestResult) {\n    function createFromDOMInfo(ctx, spanNode, offset) {\n        const position = ctx.getPositionFromDOMInfo(spanNode, offset);\n        if (position) {\n            return new ContentHitTestResult(position, spanNode, null);\n        }\n        return new UnknownHitTestResult(spanNode);\n    }\n    HitTestResult.createFromDOMInfo = createFromDOMInfo;\n})(HitTestResult || (HitTestResult = {}));\nexport class PointerHandlerLastRenderData {\n    constructor(lastViewCursorsRenderData, lastTextareaPosition) {\n        this.lastViewCursorsRenderData = lastViewCursorsRenderData;\n        this.lastTextareaPosition = lastTextareaPosition;\n    }\n}\nexport class MouseTarget {\n    static _deduceRage(position, range = null) {\n        if (!range && position) {\n            return new EditorRange(position.lineNumber, position.column, position.lineNumber, position.column);\n        }\n        return range ?? null;\n    }\n    static createUnknown(element, mouseColumn, position) {\n        return { type: 0 /* MouseTargetType.UNKNOWN */, element, mouseColumn, position, range: this._deduceRage(position) };\n    }\n    static createTextarea(element, mouseColumn) {\n        return { type: 1 /* MouseTargetType.TEXTAREA */, element, mouseColumn, position: null, range: null };\n    }\n    static createMargin(type, element, mouseColumn, position, range, detail) {\n        return { type, element, mouseColumn, position, range, detail };\n    }\n    static createViewZone(type, element, mouseColumn, position, detail) {\n        return { type, element, mouseColumn, position, range: this._deduceRage(position), detail };\n    }\n    static createContentText(element, mouseColumn, position, range, detail) {\n        return { type: 6 /* MouseTargetType.CONTENT_TEXT */, element, mouseColumn, position, range: this._deduceRage(position, range), detail };\n    }\n    static createContentEmpty(element, mouseColumn, position, detail) {\n        return { type: 7 /* MouseTargetType.CONTENT_EMPTY */, element, mouseColumn, position, range: this._deduceRage(position), detail };\n    }\n    static createContentWidget(element, mouseColumn, detail) {\n        return { type: 9 /* MouseTargetType.CONTENT_WIDGET */, element, mouseColumn, position: null, range: null, detail };\n    }\n    static createScrollbar(element, mouseColumn, position) {\n        return { type: 11 /* MouseTargetType.SCROLLBAR */, element, mouseColumn, position, range: this._deduceRage(position) };\n    }\n    static createOverlayWidget(element, mouseColumn, detail) {\n        return { type: 12 /* MouseTargetType.OVERLAY_WIDGET */, element, mouseColumn, position: null, range: null, detail };\n    }\n    static createOutsideEditor(mouseColumn, position, outsidePosition, outsideDistance) {\n        return { type: 13 /* MouseTargetType.OUTSIDE_EDITOR */, element: null, mouseColumn, position, range: this._deduceRage(position), outsidePosition, outsideDistance };\n    }\n    static _typeToString(type) {\n        if (type === 1 /* MouseTargetType.TEXTAREA */) {\n            return 'TEXTAREA';\n        }\n        if (type === 2 /* MouseTargetType.GUTTER_GLYPH_MARGIN */) {\n            return 'GUTTER_GLYPH_MARGIN';\n        }\n        if (type === 3 /* MouseTargetType.GUTTER_LINE_NUMBERS */) {\n            return 'GUTTER_LINE_NUMBERS';\n        }\n        if (type === 4 /* MouseTargetType.GUTTER_LINE_DECORATIONS */) {\n            return 'GUTTER_LINE_DECORATIONS';\n        }\n        if (type === 5 /* MouseTargetType.GUTTER_VIEW_ZONE */) {\n            return 'GUTTER_VIEW_ZONE';\n        }\n        if (type === 6 /* MouseTargetType.CONTENT_TEXT */) {\n            return 'CONTENT_TEXT';\n        }\n        if (type === 7 /* MouseTargetType.CONTENT_EMPTY */) {\n            return 'CONTENT_EMPTY';\n        }\n        if (type === 8 /* MouseTargetType.CONTENT_VIEW_ZONE */) {\n            return 'CONTENT_VIEW_ZONE';\n        }\n        if (type === 9 /* MouseTargetType.CONTENT_WIDGET */) {\n            return 'CONTENT_WIDGET';\n        }\n        if (type === 10 /* MouseTargetType.OVERVIEW_RULER */) {\n            return 'OVERVIEW_RULER';\n        }\n        if (type === 11 /* MouseTargetType.SCROLLBAR */) {\n            return 'SCROLLBAR';\n        }\n        if (type === 12 /* MouseTargetType.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 + ' - ' + JSON.stringify(target.detail);\n    }\n}\nclass ElementPath {\n    static isTextArea(path) {\n        return (path.length === 2\n            && path[0] === 3 /* PartFingerprint.OverflowGuard */\n            && path[1] === 7 /* PartFingerprint.TextArea */);\n    }\n    static isChildOfViewLines(path) {\n        return (path.length >= 4\n            && path[0] === 3 /* PartFingerprint.OverflowGuard */\n            && path[3] === 8 /* PartFingerprint.ViewLines */);\n    }\n    static isStrictChildOfViewLines(path) {\n        return (path.length > 4\n            && path[0] === 3 /* PartFingerprint.OverflowGuard */\n            && path[3] === 8 /* PartFingerprint.ViewLines */);\n    }\n    static isChildOfScrollableElement(path) {\n        return (path.length >= 2\n            && path[0] === 3 /* PartFingerprint.OverflowGuard */\n            && path[1] === 6 /* PartFingerprint.ScrollableElement */);\n    }\n    static isChildOfMinimap(path) {\n        return (path.length >= 2\n            && path[0] === 3 /* PartFingerprint.OverflowGuard */\n            && path[1] === 9 /* PartFingerprint.Minimap */);\n    }\n    static isChildOfContentWidgets(path) {\n        return (path.length >= 4\n            && path[0] === 3 /* PartFingerprint.OverflowGuard */\n            && path[3] === 1 /* PartFingerprint.ContentWidgets */);\n    }\n    static isChildOfOverflowGuard(path) {\n        return (path.length >= 1\n            && path[0] === 3 /* PartFingerprint.OverflowGuard */);\n    }\n    static isChildOfOverflowingContentWidgets(path) {\n        return (path.length >= 1\n            && path[0] === 2 /* PartFingerprint.OverflowingContentWidgets */);\n    }\n    static isChildOfOverlayWidgets(path) {\n        return (path.length >= 2\n            && path[0] === 3 /* PartFingerprint.OverflowGuard */\n            && path[1] === 4 /* PartFingerprint.OverlayWidgets */);\n    }\n    static isChildOfOverflowingOverlayWidgets(path) {\n        return (path.length >= 1\n            && path[0] === 5 /* PartFingerprint.OverflowingOverlayWidgets */);\n    }\n}\nexport class HitTestContext {\n    constructor(context, viewHelper, lastRenderData) {\n        this.viewModel = context.viewModel;\n        const options = context.configuration.options;\n        this.layoutInfo = options.get(146 /* EditorOption.layoutInfo */);\n        this.viewDomNode = viewHelper.viewDomNode;\n        this.lineHeight = options.get(67 /* EditorOption.lineHeight */);\n        this.stickyTabStops = options.get(117 /* EditorOption.stickyTabStops */);\n        this.typicalHalfwidthCharacterWidth = options.get(50 /* EditorOption.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.viewModel.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.viewModel.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.viewModel.getLineCount();\n            const maxLineColumn = this._context.viewModel.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.viewModel.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 !== element.ownerDocument.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, relativePos) {\n        this.editorPos = editorPos;\n        this.pos = pos;\n        this.relativePos = relativePos;\n        this.mouseVerticalOffset = Math.max(0, ctx.getCurrentScrollTop() + this.relativePos.y);\n        this.mouseContentHorizontalOffset = ctx.getCurrentScrollLeft() + this.relativePos.x - ctx.layoutInfo.contentLeft;\n        this.isInMarginArea = (this.relativePos.x < ctx.layoutInfo.contentLeft && this.relativePos.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    get target() {\n        if (this._useHitTestTarget) {\n            return this.hitTestResult.value.hitTarget;\n        }\n        return this._eventTarget;\n    }\n    get targetPath() {\n        if (this._targetPathCacheElement !== this.target) {\n            this._targetPathCacheElement = this.target;\n            this._targetPathCacheValue = PartFingerprints.collect(this.target, this._ctx.viewDomNode);\n        }\n        return this._targetPathCacheValue;\n    }\n    constructor(ctx, editorPos, pos, relativePos, eventTarget) {\n        super(ctx, editorPos, pos, relativePos);\n        this.hitTestResult = new Lazy(() => MouseTargetFactory.doHitTest(this._ctx, this));\n        this._targetPathCacheElement = null;\n        this._targetPathCacheValue = new Uint8Array(0);\n        this._ctx = ctx;\n        this._eventTarget = eventTarget;\n        // If no event target is passed in, we will use the hit test target\n        const hasEventTarget = Boolean(this._eventTarget);\n        this._useHitTestTarget = !hasEventTarget;\n    }\n    toString() {\n        return `pos(${this.pos.x},${this.pos.y}), editorPos(${this.editorPos.x},${this.editorPos.y}), relativePos(${this.relativePos.x},${this.relativePos.y}), mouseVerticalOffset: ${this.mouseVerticalOffset}, mouseContentHorizontalOffset: ${this.mouseContentHorizontalOffset}\\n\\ttarget: ${this.target ? this.target.outerHTML : null}`;\n    }\n    get wouldBenefitFromHitTestTargetSwitch() {\n        return (!this._useHitTestTarget\n            && this.hitTestResult.value.hitTarget !== null\n            && this.target !== this.hitTestResult.value.hitTarget);\n    }\n    switchToHitTestTarget() {\n        this._useHitTestTarget = true;\n    }\n    _getMouseColumn(position = null) {\n        if (position && position.column < this._ctx.viewModel.getLineMaxColumn(position.lineNumber)) {\n            // Most likely, the line contains foreign decorations...\n            return CursorColumns.visibleColumnFromColumn(this._ctx.viewModel.getLineContent(position.lineNumber), position.column, this._ctx.viewModel.model.getOptions().tabSize) + 1;\n        }\n        return this.mouseColumn;\n    }\n    fulfillUnknown(position = null) {\n        return MouseTarget.createUnknown(this.target, this._getMouseColumn(position), position);\n    }\n    fulfillTextarea() {\n        return MouseTarget.createTextarea(this.target, this._getMouseColumn());\n    }\n    fulfillMargin(type, position, range, detail) {\n        return MouseTarget.createMargin(type, this.target, this._getMouseColumn(position), position, range, detail);\n    }\n    fulfillViewZone(type, position, detail) {\n        return MouseTarget.createViewZone(type, this.target, this._getMouseColumn(position), position, detail);\n    }\n    fulfillContentText(position, range, detail) {\n        return MouseTarget.createContentText(this.target, this._getMouseColumn(position), position, range, detail);\n    }\n    fulfillContentEmpty(position, detail) {\n        return MouseTarget.createContentEmpty(this.target, this._getMouseColumn(position), position, detail);\n    }\n    fulfillContentWidget(detail) {\n        return MouseTarget.createContentWidget(this.target, this._getMouseColumn(), detail);\n    }\n    fulfillScrollbar(position) {\n        return MouseTarget.createScrollbar(this.target, this._getMouseColumn(position), position);\n    }\n    fulfillOverlayWidget(detail) {\n        return MouseTarget.createOverlayWidget(this.target, this._getMouseColumn(), detail);\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) || ElementPath.isChildOfOverflowingOverlayWidgets(path)) {\n            return true;\n        }\n        return false;\n    }\n    createMouseTarget(lastRenderData, editorPos, pos, relativePos, target) {\n        const ctx = new HitTestContext(this._context, this._viewHelper, lastRenderData);\n        const request = new HitTestRequest(ctx, editorPos, pos, relativePos, target);\n        try {\n            const r = MouseTargetFactory._createMouseTarget(ctx, request);\n            if (r.type === 6 /* MouseTargetType.CONTENT_TEXT */) {\n                // Snap to the nearest soft tab boundary if atomic soft tabs are enabled.\n                if (ctx.stickyTabStops && r.position !== null) {\n                    const position = MouseTargetFactory._snapToSoftTabBoundary(r.position, ctx.viewModel);\n                    const range = EditorRange.fromPositions(position, position).plusRange(r.range);\n                    return request.fulfillContentText(position, range, r.detail);\n                }\n            }\n            // console.log(MouseTarget.toString(r));\n            return r;\n        }\n        catch (err) {\n            // console.log(err);\n            return request.fulfillUnknown();\n        }\n    }\n    static _createMouseTarget(ctx, request) {\n        // console.log(`${domHitTestExecuted ? '=>' : ''}CAME IN REQUEST: ${request}`);\n        if (request.target === null) {\n            // No target\n            return request.fulfillUnknown();\n        }\n        // we know for a fact that request.target is not null\n        const resolvedRequest = request;\n        let result = null;\n        if (!ElementPath.isChildOfOverflowGuard(request.targetPath) && !ElementPath.isChildOfOverflowingContentWidgets(request.targetPath) && !ElementPath.isChildOfOverflowingOverlayWidgets(request.targetPath)) {\n            // We only render dom nodes inside the overflow guard or in the overflowing content widgets\n            result = result || request.fulfillUnknown();\n        }\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);\n        result = result || MouseTargetFactory._hitTestScrollbar(ctx, resolvedRequest);\n        return (result || request.fulfillUnknown());\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.fulfillContentWidget(widgetId);\n            }\n            else {\n                return request.fulfillUnknown();\n            }\n        }\n        return null;\n    }\n    static _hitTestOverlayWidget(ctx, request) {\n        // Is it an overlay widget?\n        if (ElementPath.isChildOfOverlayWidgets(request.targetPath) || ElementPath.isChildOfOverflowingOverlayWidgets(request.targetPath)) {\n            const widgetId = ctx.findAttribute(request.target, 'widgetId');\n            if (widgetId) {\n                return request.fulfillOverlayWidget(widgetId);\n            }\n            else {\n                return request.fulfillUnknown();\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.fulfillContentText(d.position, null, { mightBeForeignElement: false, injectedText: null });\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.fulfillContentText(d.position, null, { mightBeForeignElement: false, injectedText: null });\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 /* MouseTargetType.CONTENT_VIEW_ZONE */ : 5 /* MouseTargetType.GUTTER_VIEW_ZONE */);\n            return request.fulfillViewZone(mouseTargetType, viewZoneData.position, 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.fulfillContentText(ctx.lastRenderData.lastTextareaPosition, null, { mightBeForeignElement: false, injectedText: null });\n            }\n            return request.fulfillTextarea();\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.relativePos.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                const modelCoordinate = ctx.viewModel.coordinatesConverter.convertViewPositionToModelPosition(res.range.getStartPosition());\n                const lanes = ctx.viewModel.glyphLanes.getLanesAtLine(modelCoordinate.lineNumber);\n                detail.glyphMarginLane = lanes[Math.floor(offset / ctx.lineHeight)];\n                return request.fulfillMargin(2 /* MouseTargetType.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.fulfillMargin(3 /* MouseTargetType.GUTTER_LINE_NUMBERS */, pos, res.range, detail);\n            }\n            offset -= ctx.layoutInfo.lineNumbersWidth;\n            // On the line decorations\n            return request.fulfillMargin(4 /* MouseTargetType.GUTTER_LINE_DECORATIONS */, pos, res.range, detail);\n        }\n        return null;\n    }\n    static _hitTestViewLines(ctx, request) {\n        if (!ElementPath.isChildOfViewLines(request.targetPath)) {\n            return null;\n        }\n        if (ctx.isInTopPadding(request.mouseVerticalOffset)) {\n            return request.fulfillContentEmpty(new Position(1, 1), 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.viewModel.getLineCount();\n            const maxLineColumn = ctx.viewModel.getLineMaxColumn(lineCount);\n            return request.fulfillContentEmpty(new Position(lineCount, maxLineColumn), EMPTY_CONTENT_AFTER_LINES);\n        }\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.viewModel.getLineLength(lineNumber) === 0) {\n                const lineWidth = ctx.getLineWidth(lineNumber);\n                const detail = createEmptyContentDataInLines(request.mouseContentHorizontalOffset - lineWidth);\n                return request.fulfillContentEmpty(new Position(lineNumber, 1), detail);\n            }\n            const lineWidth = ctx.getLineWidth(lineNumber);\n            if (request.mouseContentHorizontalOffset >= lineWidth) {\n                // TODO: This is wrong for RTL\n                const detail = createEmptyContentDataInLines(request.mouseContentHorizontalOffset - lineWidth);\n                const pos = new Position(lineNumber, ctx.viewModel.getLineMaxColumn(lineNumber));\n                return request.fulfillContentEmpty(pos, detail);\n            }\n        }\n        // Do the hit test (if not already done)\n        const hitTestResult = request.hitTestResult.value;\n        if (hitTestResult.type === 1 /* HitTestResultType.Content */) {\n            return MouseTargetFactory.createMouseTargetFromHitTestPosition(ctx, request, hitTestResult.spanNode, hitTestResult.position, hitTestResult.injectedText);\n        }\n        // We didn't hit content...\n        if (request.wouldBenefitFromHitTestTargetSwitch) {\n            // We actually hit something different... Give it one last change by trying again with this new target\n            request.switchToHitTestTarget();\n            return this._createMouseTarget(ctx, request);\n        }\n        // We have tried everything...\n        return request.fulfillUnknown();\n    }\n    static _hitTestMinimap(ctx, request) {\n        if (ElementPath.isChildOfMinimap(request.targetPath)) {\n            const possibleLineNumber = ctx.getLineNumberAtVerticalOffset(request.mouseVerticalOffset);\n            const maxColumn = ctx.viewModel.getLineMaxColumn(possibleLineNumber);\n            return request.fulfillScrollbar(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.viewModel.getLineMaxColumn(possibleLineNumber);\n                    return request.fulfillScrollbar(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.viewModel.getLineMaxColumn(possibleLineNumber);\n            return request.fulfillScrollbar(new Position(possibleLineNumber, maxColumn));\n        }\n        return null;\n    }\n    getMouseColumn(relativePos) {\n        const options = this._context.configuration.options;\n        const layoutInfo = options.get(146 /* EditorOption.layoutInfo */);\n        const mouseContentHorizontalOffset = this._context.viewLayout.getCurrentScrollLeft() + relativePos.x - layoutInfo.contentLeft;\n        return MouseTargetFactory._getMouseColumn(mouseContentHorizontalOffset, options.get(50 /* EditorOption.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, spanNode, pos, injectedText) {\n        const lineNumber = pos.lineNumber;\n        const column = pos.column;\n        const lineWidth = ctx.getLineWidth(lineNumber);\n        if (request.mouseContentHorizontalOffset > lineWidth) {\n            const detail = createEmptyContentDataInLines(request.mouseContentHorizontalOffset - lineWidth);\n            return request.fulfillContentEmpty(pos, detail);\n        }\n        const visibleRange = ctx.visibleRangeForPosition(lineNumber, column);\n        if (!visibleRange) {\n            return request.fulfillUnknown(pos);\n        }\n        const columnHorizontalOffset = visibleRange.left;\n        if (Math.abs(request.mouseContentHorizontalOffset - columnHorizontalOffset) < 1) {\n            return request.fulfillContentText(pos, null, { mightBeForeignElement: !!injectedText, injectedText });\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.viewModel.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        const mouseCoordinates = request.pos.toClientCoordinates(dom.getWindow(ctx.viewDomNode));\n        const spanNodeClientRect = spanNode.getBoundingClientRect();\n        const mouseIsOverSpanNode = (spanNodeClientRect.left <= mouseCoordinates.clientX && mouseCoordinates.clientX <= spanNodeClientRect.right);\n        let rng = null;\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                rng = new EditorRange(lineNumber, prev.column, lineNumber, curr.column);\n                // See https://github.com/microsoft/vscode/issues/152819\n                // Due to the use of zwj, the browser's hit test result is skewed towards the left\n                // Here we try to correct that if the mouse horizontal offset is closer to the right than the left\n                const prevDelta = Math.abs(prev.offset - request.mouseContentHorizontalOffset);\n                const nextDelta = Math.abs(curr.offset - request.mouseContentHorizontalOffset);\n                pos = (prevDelta < nextDelta\n                    ? new Position(lineNumber, prev.column)\n                    : new Position(lineNumber, curr.column));\n                break;\n            }\n        }\n        return request.fulfillContentText(pos, rng, { mightBeForeignElement: !mouseIsOverSpanNode || !!injectedText, injectedText });\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 lineStartVerticalOffset = ctx.getVerticalOffsetForLineNumber(lineNumber);\n        const lineEndVerticalOffset = lineStartVerticalOffset + ctx.lineHeight;\n        const isBelowLastLine = (lineNumber === ctx.viewModel.getLineCount()\n            && request.mouseVerticalOffset > lineEndVerticalOffset);\n        if (!isBelowLastLine) {\n            const lineCenteredVerticalOffset = Math.floor((lineStartVerticalOffset + lineEndVerticalOffset) / 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 + request.editorPos.height) {\n                adjustedPageY = request.editorPos.y + request.editorPos.height - 1;\n            }\n            const adjustedPage = new PageCoordinates(request.pos.x, adjustedPageY);\n            const r = this._actualDoHitTestWithCaretRangeFromPoint(ctx, adjustedPage.toClientCoordinates(dom.getWindow(ctx.viewDomNode)));\n            if (r.type === 1 /* HitTestResultType.Content */) {\n                return r;\n            }\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(dom.getWindow(ctx.viewDomNode)));\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 = ctx.viewDomNode.ownerDocument.caretRangeFromPoint(coords.clientX, coords.clientY);\n        }\n        if (!range || !range.startContainer) {\n            return new UnknownHitTestResult();\n        }\n        // Chrome always hits a TEXT_NODE, while Edge sometimes hits a token span\n        const startContainer = range.startContainer;\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                return HitTestResult.createFromDOMInfo(ctx, parent1, range.startOffset);\n            }\n            else {\n                return new UnknownHitTestResult(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                return HitTestResult.createFromDOMInfo(ctx, startContainer, startContainer.textContent.length);\n            }\n            else {\n                return new UnknownHitTestResult(startContainer);\n            }\n        }\n        return new UnknownHitTestResult();\n    }\n    /**\n     * Most probably Gecko\n     */\n    static _doHitTestWithCaretPositionFromPoint(ctx, coords) {\n        const hitResult = ctx.viewDomNode.ownerDocument.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                return HitTestResult.createFromDOMInfo(ctx, hitResult.offsetNode.parentNode, hitResult.offset);\n            }\n            else {\n                return new UnknownHitTestResult(hitResult.offsetNode.parentNode);\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                    return HitTestResult.createFromDOMInfo(ctx, tokenSpan, 0);\n                }\n            }\n            else if (parent2ClassName === ViewLine.CLASS_NAME) {\n                // it returned the `<span>` with the inline decoration\n                return HitTestResult.createFromDOMInfo(ctx, hitResult.offsetNode, 0);\n            }\n        }\n        return new UnknownHitTestResult(hitResult.offsetNode);\n    }\n    static _snapToSoftTabBoundary(position, viewModel) {\n        const lineContent = viewModel.getLineContent(position.lineNumber);\n        const { tabSize } = viewModel.model.getOptions();\n        const newPosition = AtomicTabMoveOperations.atomicPosition(lineContent, position.column - 1, tabSize, 2 /* Direction.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 = new UnknownHitTestResult();\n        if (typeof ctx.viewDomNode.ownerDocument.caretRangeFromPoint === 'function') {\n            result = this._doHitTestWithCaretRangeFromPoint(ctx, request);\n        }\n        else if (ctx.viewDomNode.ownerDocument.caretPositionFromPoint) {\n            result = this._doHitTestWithCaretPositionFromPoint(ctx, request.pos.toClientCoordinates(dom.getWindow(ctx.viewDomNode)));\n        }\n        if (result.type === 1 /* HitTestResultType.Content */) {\n            const injectedText = ctx.viewModel.getInjectedTextAt(result.position);\n            const normalizedPosition = ctx.viewModel.normalizePosition(result.position, 2 /* PositionAffinity.None */);\n            if (injectedText || !normalizedPosition.equals(result.position)) {\n                result = new ContentHitTestResult(normalizedPosition, result.spanNode, injectedText);\n            }\n        }\n        return result;\n    }\n}\nfunction 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 (the computed shorthand font property might be empty, see #3217)\n        const elWindow = dom.getWindow(el);\n        const fontStyle = elWindow.getComputedStyle(el, null).getPropertyValue('font-style');\n        const fontVariant = elWindow.getComputedStyle(el, null).getPropertyValue('font-variant');\n        const fontWeight = elWindow.getComputedStyle(el, null).getPropertyValue('font-weight');\n        const fontSize = elWindow.getComputedStyle(el, null).getPropertyValue('font-size');\n        const lineHeight = elWindow.getComputedStyle(el, null).getPropertyValue('line-height');\n        const fontFamily = elWindow.getComputedStyle(el, null).getPropertyValue('font-family');\n        const font = `${fontStyle} ${fontVariant} ${fontWeight} ${fontSize}/${lineHeight} ${fontFamily}`;\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    static { this._INSTANCE = null; }\n    static getInstance() {\n        if (!CharWidthReader._INSTANCE) {\n            CharWidthReader._INSTANCE = new CharWidthReader();\n        }\n        return CharWidthReader._INSTANCE;\n    }\n    constructor() {\n        this._cache = {};\n        this._canvas = document.createElement('canvas');\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}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { Disposable } from '../../../base/common/lifecycle.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { HitTestContext, MouseTarget, MouseTargetFactory } from './mouseTarget.js';\nimport { ClientCoordinates, EditorMouseEvent, EditorMouseEventFactory, GlobalEditorPointerMoveMonitor, createEditorPagePosition, createCoordinatesRelativeToEditor, PageCoordinates } 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/viewEventHandler.js';\nimport { MouseWheelClassifier } from '../../../base/browser/ui/scrollbar/scrollableElement.js';\nexport class MouseHandler extends ViewEventHandler {\n    constructor(context, viewController, viewHelper) {\n        super();\n        this._mouseLeaveMonitor = null;\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, this.mouseTargetFactory, (e, testEventTarget) => this._createMouseTarget(e, testEventTarget), (e) => this._getMouseColumn(e)));\n        this.lastMouseLeaveTime = -1;\n        this._height = this._context.configuration.options.get(146 /* EditorOption.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.onMouseMove(this.viewHelper.viewDomNode, (e) => {\n            this._onMouseMove(e);\n            // See https://github.com/microsoft/vscode/issues/138789\n            // When moving the mouse really quickly, the browser sometimes forgets to\n            // send us a `mouseleave` or `mouseout` event. We therefore install here\n            // a global `mousemove` listener to manually recover if the mouse goes outside\n            // the editor. As soon as the mouse leaves outside of the editor, we\n            // remove this listener\n            if (!this._mouseLeaveMonitor) {\n                this._mouseLeaveMonitor = dom.addDisposableListener(this.viewHelper.viewDomNode.ownerDocument, 'mousemove', (e) => {\n                    if (!this.viewHelper.viewDomNode.contains(e.target)) {\n                        // went outside the editor!\n                        this._onMouseLeave(new EditorMouseEvent(e, false, this.viewHelper.viewDomNode));\n                    }\n                });\n            }\n        }));\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        // `pointerdown` events can't be used to determine if there's a double click, or triple click\n        // because their `e.detail` is always 0.\n        // We will therefore save the pointer id for the mouse and then reuse it in the `mousedown` event\n        // for `element.setPointerCapture`.\n        let capturePointerId = 0;\n        this._register(mouseEvents.onPointerDown(this.viewHelper.viewDomNode, (e, pointerId) => {\n            capturePointerId = pointerId;\n        }));\n        // The `pointerup` listener registered by `GlobalEditorPointerMoveMonitor` does not get invoked 100% of the times.\n        // I speculate that this is because the `pointerup` listener is only registered during the `mousedown` event, and perhaps\n        // the `pointerup` event is already queued for dispatching, which makes it that the new listener doesn't get fired.\n        // See https://github.com/microsoft/vscode/issues/146486 for repro steps.\n        // To compensate for that, we simply register here a `pointerup` listener and just communicate it.\n        this._register(dom.addDisposableListener(this.viewHelper.viewDomNode, dom.EventType.POINTER_UP, (e) => {\n            this._mouseDownOperation.onPointerUp();\n        }));\n        this._register(mouseEvents.onMouseDown(this.viewHelper.viewDomNode, (e) => this._onMouseDown(e, capturePointerId)));\n        this._setupMouseWheelZoomListener();\n        this._context.addEventHandler(this);\n    }\n    _setupMouseWheelZoomListener() {\n        const classifier = MouseWheelClassifier.INSTANCE;\n        let prevMouseWheelTime = 0;\n        let gestureStartZoomLevel = EditorZoom.getZoomLevel();\n        let gestureHasZoomModifiers = false;\n        let gestureAccumulatedDelta = 0;\n        const onMouseWheel = (browserEvent) => {\n            this.viewController.emitMouseWheel(browserEvent);\n            if (!this._context.configuration.options.get(76 /* EditorOption.mouseWheelZoom */)) {\n                return;\n            }\n            const e = new StandardWheelEvent(browserEvent);\n            classifier.acceptStandardWheelEvent(e);\n            if (classifier.isPhysicalMouseWheel()) {\n                if (hasMouseWheelZoomModifiers(browserEvent)) {\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            else {\n                // we consider mousewheel events that occur within 50ms of each other to be part of the same gesture\n                // we don't want to consider mouse wheel events where ctrl/cmd is pressed during the inertia phase\n                // we also want to accumulate deltaY values from the same gesture and use that to set the zoom level\n                if (Date.now() - prevMouseWheelTime > 50) {\n                    // reset if more than 50ms have passed\n                    gestureStartZoomLevel = EditorZoom.getZoomLevel();\n                    gestureHasZoomModifiers = hasMouseWheelZoomModifiers(browserEvent);\n                    gestureAccumulatedDelta = 0;\n                }\n                prevMouseWheelTime = Date.now();\n                gestureAccumulatedDelta += e.deltaY;\n                if (gestureHasZoomModifiers) {\n                    EditorZoom.setZoomLevel(gestureStartZoomLevel + gestureAccumulatedDelta / 5);\n                    e.preventDefault();\n                    e.stopPropagation();\n                }\n            }\n        };\n        this._register(dom.addDisposableListener(this.viewHelper.viewDomNode, dom.EventType.MOUSE_WHEEL, onMouseWheel, { capture: true, passive: false }));\n        function hasMouseWheelZoomModifiers(browserEvent) {\n            return (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        }\n    }\n    dispose() {\n        this._context.removeEventHandler(this);\n        if (this._mouseLeaveMonitor) {\n            this._mouseLeaveMonitor.dispose();\n            this._mouseLeaveMonitor = null;\n        }\n        super.dispose();\n    }\n    // --- begin event handlers\n    onConfigurationChanged(e) {\n        if (e.hasChanged(146 /* EditorOption.layoutInfo */)) {\n            // layout change\n            const height = this._context.configuration.options.get(146 /* EditorOption.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    // --- end event handlers\n    getTargetAtClientPoint(clientX, clientY) {\n        const clientPos = new ClientCoordinates(clientX, clientY);\n        const pos = clientPos.toPageCoordinates(dom.getWindow(this.viewHelper.viewDomNode));\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        const relativePos = createCoordinatesRelativeToEditor(this.viewHelper.viewDomNode, editorPos, pos);\n        return this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(), editorPos, pos, relativePos, null);\n    }\n    _createMouseTarget(e, testEventTarget) {\n        let target = e.target;\n        if (!this.viewHelper.viewDomNode.contains(target)) {\n            const shadowRoot = dom.getShadowRoot(this.viewHelper.viewDomNode);\n            if (shadowRoot) {\n                target = shadowRoot.elementsFromPoint(e.posx, e.posy).find((el) => this.viewHelper.viewDomNode.contains(el));\n            }\n        }\n        return this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(), e.editorPos, e.pos, e.relativePos, testEventTarget ? target : null);\n    }\n    _getMouseColumn(e) {\n        return this.mouseTargetFactory.getMouseColumn(e.relativePos);\n    }\n    _onContextMenu(e, testEventTarget) {\n        this.viewController.emitContextMenu({\n            event: e,\n            target: this._createMouseTarget(e, testEventTarget)\n        });\n    }\n    _onMouseMove(e) {\n        const targetIsWidget = this.mouseTargetFactory.mouseTargetIsWidget(e);\n        if (!targetIsWidget) {\n            e.preventDefault();\n        }\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        if (this._mouseLeaveMonitor) {\n            this._mouseLeaveMonitor.dispose();\n            this._mouseLeaveMonitor = null;\n        }\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, pointerId) {\n        const t = this._createMouseTarget(e, true);\n        const targetIsContent = (t.type === 6 /* MouseTargetType.CONTENT_TEXT */ || t.type === 7 /* MouseTargetType.CONTENT_EMPTY */);\n        const targetIsGutter = (t.type === 2 /* MouseTargetType.GUTTER_GLYPH_MARGIN */ || t.type === 3 /* MouseTargetType.GUTTER_LINE_NUMBERS */ || t.type === 4 /* MouseTargetType.GUTTER_LINE_DECORATIONS */);\n        const targetIsLineNumbers = (t.type === 3 /* MouseTargetType.GUTTER_LINE_NUMBERS */);\n        const selectOnLineNumbers = this._context.configuration.options.get(110 /* EditorOption.selectOnLineNumbers */);\n        const targetIsViewZone = (t.type === 8 /* MouseTargetType.CONTENT_VIEW_ZONE */ || t.type === 5 /* MouseTargetType.GUTTER_VIEW_ZONE */);\n        const targetIsWidget = (t.type === 9 /* MouseTargetType.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, pointerId);\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 (shouldHandle && this.viewHelper.shouldSuppressMouseDownOnViewZone(viewZoneData.viewZoneId)) {\n                focus();\n                this._mouseDownOperation.start(t.type, e, pointerId);\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}\nclass MouseDownOperation extends Disposable {\n    constructor(_context, _viewController, _viewHelper, _mouseTargetFactory, createMouseTarget, getMouseColumn) {\n        super();\n        this._context = _context;\n        this._viewController = _viewController;\n        this._viewHelper = _viewHelper;\n        this._mouseTargetFactory = _mouseTargetFactory;\n        this._createMouseTarget = createMouseTarget;\n        this._getMouseColumn = getMouseColumn;\n        this._mouseMoveMonitor = this._register(new GlobalEditorPointerMoveMonitor(this._viewHelper.viewDomNode));\n        this._topBottomDragScrolling = this._register(new TopBottomDragScrolling(this._context, this._viewHelper, this._mouseTargetFactory, (position, inSelectionMode, revealType) => this._dispatchMouse(position, inSelectionMode, revealType)));\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, false);\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            if (position.type === 13 /* MouseTargetType.OUTSIDE_EDITOR */ && (position.outsidePosition === 'above' || position.outsidePosition === 'below')) {\n                this._topBottomDragScrolling.start(position, e);\n            }\n            else {\n                this._topBottomDragScrolling.stop();\n                this._dispatchMouse(position, true, 1 /* NavigationCommandRevealType.Minimal */);\n            }\n        }\n    }\n    start(targetType, e, pointerId) {\n        this._lastMouseEvent = e;\n        this._mouseState.setStartedOnLineNumbers(targetType === 3 /* MouseTargetType.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(92 /* EditorOption.readOnly */)\n            && options.get(35 /* EditorOption.dragAndDrop */)\n            && !options.get(22 /* EditorOption.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 /* MouseTargetType.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(this._viewHelper.viewLinesDomNode, pointerId, e.buttons, (e) => this._onMouseDownThenMove(e), (browserEvent) => {\n                const position = this._findMousePosition(this._lastMouseEvent, false);\n                if (dom.isKeyboardEvent(browserEvent)) {\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, 1 /* NavigationCommandRevealType.Minimal */);\n        if (!this._isActive) {\n            this._isActive = true;\n            this._mouseMoveMonitor.startMonitoring(this._viewHelper.viewLinesDomNode, pointerId, e.buttons, (e) => this._onMouseDownThenMove(e), () => this._stop());\n        }\n    }\n    _stop() {\n        this._isActive = false;\n        this._topBottomDragScrolling.stop();\n    }\n    onHeightChanged() {\n        this._mouseMoveMonitor.stopMonitoring();\n    }\n    onPointerUp() {\n        this._mouseMoveMonitor.stopMonitoring();\n    }\n    onCursorStateChanged(e) {\n        this._currentSelection = e.selections[0];\n    }\n    _getPositionOutsideEditor(e) {\n        const editorContent = e.editorPos;\n        const model = this._context.viewModel;\n        const viewLayout = this._context.viewLayout;\n        const mouseColumn = this._getMouseColumn(e);\n        if (e.posy < editorContent.y) {\n            const outsideDistance = editorContent.y - e.posy;\n            const verticalOffset = Math.max(viewLayout.getCurrentScrollTop() - outsideDistance, 0);\n            const viewZoneData = HitTestContext.getZoneAtCoord(this._context, verticalOffset);\n            if (viewZoneData) {\n                const newPosition = this._helpPositionJumpOverViewZone(viewZoneData);\n                if (newPosition) {\n                    return MouseTarget.createOutsideEditor(mouseColumn, newPosition, 'above', outsideDistance);\n                }\n            }\n            const aboveLineNumber = viewLayout.getLineNumberAtVerticalOffset(verticalOffset);\n            return MouseTarget.createOutsideEditor(mouseColumn, new Position(aboveLineNumber, 1), 'above', outsideDistance);\n        }\n        if (e.posy > editorContent.y + editorContent.height) {\n            const outsideDistance = e.posy - editorContent.y - editorContent.height;\n            const verticalOffset = viewLayout.getCurrentScrollTop() + e.relativePos.y;\n            const viewZoneData = HitTestContext.getZoneAtCoord(this._context, verticalOffset);\n            if (viewZoneData) {\n                const newPosition = this._helpPositionJumpOverViewZone(viewZoneData);\n                if (newPosition) {\n                    return MouseTarget.createOutsideEditor(mouseColumn, newPosition, 'below', outsideDistance);\n                }\n            }\n            const belowLineNumber = viewLayout.getLineNumberAtVerticalOffset(verticalOffset);\n            return MouseTarget.createOutsideEditor(mouseColumn, new Position(belowLineNumber, model.getLineMaxColumn(belowLineNumber)), 'below', outsideDistance);\n        }\n        const possibleLineNumber = viewLayout.getLineNumberAtVerticalOffset(viewLayout.getCurrentScrollTop() + e.relativePos.y);\n        if (e.posx < editorContent.x) {\n            const outsideDistance = editorContent.x - e.posx;\n            return MouseTarget.createOutsideEditor(mouseColumn, new Position(possibleLineNumber, 1), 'left', outsideDistance);\n        }\n        if (e.posx > editorContent.x + editorContent.width) {\n            const outsideDistance = e.posx - editorContent.x - editorContent.width;\n            return MouseTarget.createOutsideEditor(mouseColumn, new Position(possibleLineNumber, model.getLineMaxColumn(possibleLineNumber)), 'right', outsideDistance);\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 /* MouseTargetType.CONTENT_VIEW_ZONE */ || t.type === 5 /* MouseTargetType.GUTTER_VIEW_ZONE */) {\n            const newPosition = this._helpPositionJumpOverViewZone(t.detail);\n            if (newPosition) {\n                return MouseTarget.createViewZone(t.type, t.element, t.mouseColumn, newPosition, 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, revealType) {\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            revealType,\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            onInjectedText: position.type === 6 /* MouseTargetType.CONTENT_TEXT */ && position.detail.injectedText !== null\n        });\n    }\n}\nclass TopBottomDragScrolling extends Disposable {\n    constructor(_context, _viewHelper, _mouseTargetFactory, _dispatchMouse) {\n        super();\n        this._context = _context;\n        this._viewHelper = _viewHelper;\n        this._mouseTargetFactory = _mouseTargetFactory;\n        this._dispatchMouse = _dispatchMouse;\n        this._operation = null;\n    }\n    dispose() {\n        super.dispose();\n        this.stop();\n    }\n    start(position, mouseEvent) {\n        if (this._operation) {\n            this._operation.setPosition(position, mouseEvent);\n        }\n        else {\n            this._operation = new TopBottomDragScrollingOperation(this._context, this._viewHelper, this._mouseTargetFactory, this._dispatchMouse, position, mouseEvent);\n        }\n    }\n    stop() {\n        if (this._operation) {\n            this._operation.dispose();\n            this._operation = null;\n        }\n    }\n}\nclass TopBottomDragScrollingOperation extends Disposable {\n    constructor(_context, _viewHelper, _mouseTargetFactory, _dispatchMouse, position, mouseEvent) {\n        super();\n        this._context = _context;\n        this._viewHelper = _viewHelper;\n        this._mouseTargetFactory = _mouseTargetFactory;\n        this._dispatchMouse = _dispatchMouse;\n        this._position = position;\n        this._mouseEvent = mouseEvent;\n        this._lastTime = Date.now();\n        this._animationFrameDisposable = dom.scheduleAtNextAnimationFrame(dom.getWindow(mouseEvent.browserEvent), () => this._execute());\n    }\n    dispose() {\n        this._animationFrameDisposable.dispose();\n        super.dispose();\n    }\n    setPosition(position, mouseEvent) {\n        this._position = position;\n        this._mouseEvent = mouseEvent;\n    }\n    /**\n     * update internal state and return elapsed ms since last time\n     */\n    _tick() {\n        const now = Date.now();\n        const elapsed = now - this._lastTime;\n        this._lastTime = now;\n        return elapsed;\n    }\n    /**\n     * get the number of lines per second to auto-scroll\n     */\n    _getScrollSpeed() {\n        const lineHeight = this._context.configuration.options.get(67 /* EditorOption.lineHeight */);\n        const viewportInLines = this._context.configuration.options.get(146 /* EditorOption.layoutInfo */).height / lineHeight;\n        const outsideDistanceInLines = this._position.outsideDistance / lineHeight;\n        if (outsideDistanceInLines <= 1.5) {\n            return Math.max(30, viewportInLines * (1 + outsideDistanceInLines));\n        }\n        if (outsideDistanceInLines <= 3) {\n            return Math.max(60, viewportInLines * (2 + outsideDistanceInLines));\n        }\n        return Math.max(200, viewportInLines * (7 + outsideDistanceInLines));\n    }\n    _execute() {\n        const lineHeight = this._context.configuration.options.get(67 /* EditorOption.lineHeight */);\n        const scrollSpeedInLines = this._getScrollSpeed();\n        const elapsed = this._tick();\n        const scrollInPixels = scrollSpeedInLines * (elapsed / 1000) * lineHeight;\n        const scrollValue = (this._position.outsidePosition === 'above' ? -scrollInPixels : scrollInPixels);\n        this._context.viewModel.viewLayout.deltaScrollNow(0, scrollValue);\n        this._viewHelper.renderNow();\n        const viewportData = this._context.viewLayout.getLinesViewportData();\n        const edgeLineNumber = (this._position.outsidePosition === 'above' ? viewportData.startLineNumber : viewportData.endLineNumber);\n        // First, try to find a position that matches the horizontal position of the mouse\n        let mouseTarget;\n        {\n            const editorPos = createEditorPagePosition(this._viewHelper.viewDomNode);\n            const horizontalScrollbarHeight = this._context.configuration.options.get(146 /* EditorOption.layoutInfo */).horizontalScrollbarHeight;\n            const pos = new PageCoordinates(this._mouseEvent.pos.x, editorPos.y + editorPos.height - horizontalScrollbarHeight - 0.1);\n            const relativePos = createCoordinatesRelativeToEditor(this._viewHelper.viewDomNode, editorPos, pos);\n            mouseTarget = this._mouseTargetFactory.createMouseTarget(this._viewHelper.getLastRenderData(), editorPos, pos, relativePos, null);\n        }\n        if (!mouseTarget.position || mouseTarget.position.lineNumber !== edgeLineNumber) {\n            if (this._position.outsidePosition === 'above') {\n                mouseTarget = MouseTarget.createOutsideEditor(this._position.mouseColumn, new Position(edgeLineNumber, 1), 'above', this._position.outsideDistance);\n            }\n            else {\n                mouseTarget = MouseTarget.createOutsideEditor(this._position.mouseColumn, new Position(edgeLineNumber, this._context.viewModel.getLineMaxColumn(edgeLineNumber)), 'below', this._position.outsideDistance);\n            }\n        }\n        this._dispatchMouse(mouseTarget, true, 2 /* NavigationCommandRevealType.None */);\n        this._animationFrameDisposable = dom.scheduleAtNextAnimationFrame(dom.getWindow(mouseTarget.element), () => this._execute());\n    }\n}\nclass MouseDownState {\n    static { this.CLEAR_MOUSE_DOWN_COUNT_TIME = 400; } // ms\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    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 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}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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';\nexport const _debugComposition = false;\nexport class TextAreaState {\n    static { this.EMPTY = new TextAreaState('', 0, 0, null, undefined); }\n    constructor(value, \n    /** the offset where selection starts inside `value` */\n    selectionStart, \n    /** the offset where selection ends inside `value` */\n    selectionEnd, \n    /** the editor range in the view coordinate system that matches the selection inside `value` */\n    selection, \n    /** the visible line count (wrapped, not necessarily matching \\n characters) for the text in `value` before `selectionStart` */\n    newlineCountBeforeSelection) {\n        this.value = value;\n        this.selectionStart = selectionStart;\n        this.selectionEnd = selectionEnd;\n        this.selection = selection;\n        this.newlineCountBeforeSelection = newlineCountBeforeSelection;\n    }\n    toString() {\n        return `[ <${this.value}>, selectionStart: ${this.selectionStart}, selectionEnd: ${this.selectionEnd}]`;\n    }\n    static readFromTextArea(textArea, previousState) {\n        const value = textArea.getValue();\n        const selectionStart = textArea.getSelectionStart();\n        const selectionEnd = textArea.getSelectionEnd();\n        let newlineCountBeforeSelection = undefined;\n        if (previousState) {\n            const valueBeforeSelectionStart = value.substring(0, selectionStart);\n            const previousValueBeforeSelectionStart = previousState.value.substring(0, previousState.selectionStart);\n            if (valueBeforeSelectionStart === previousValueBeforeSelectionStart) {\n                newlineCountBeforeSelection = previousState.newlineCountBeforeSelection;\n            }\n        }\n        return new TextAreaState(value, selectionStart, selectionEnd, null, newlineCountBeforeSelection);\n    }\n    collapseSelection() {\n        if (this.selectionStart === this.value.length) {\n            return this;\n        }\n        return new TextAreaState(this.value, this.value.length, this.value.length, null, undefined);\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.selection?.getStartPosition() ?? null, str, -1);\n        }\n        if (offset >= this.selectionEnd) {\n            const str = this.value.substring(this.selectionEnd, offset);\n            return this._finishDeduceEditorPosition(this.selection?.getEndPosition() ?? null, 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.selection?.getStartPosition() ?? null, str1, 1);\n        }\n        const str2 = this.value.substring(offset, this.selectionEnd);\n        return this._finishDeduceEditorPosition(this.selection?.getEndPosition() ?? null, 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 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        const prefixLength = Math.min(strings.commonPrefixLength(previousState.value, currentState.value), previousState.selectionStart, currentState.selectionStart);\n        const suffixLength = Math.min(strings.commonSuffixLength(previousState.value, currentState.value), previousState.value.length - previousState.selectionEnd, currentState.value.length - currentState.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        if (currentSelectionStart === currentSelectionEnd) {\n            // no current selection\n            const replacePreviousCharacters = (previousState.selectionStart - prefixLength);\n            if (_debugComposition) {\n                console.log(`REMOVE PREVIOUS: ${replacePreviousCharacters} 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}\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(model, selection, linesPerPage, trimLongText) {\n        // Chromium handles very poorly text even of a few thousand chars\n        // Cut text to avoid stalling the entire UI\n        const LIMIT_CHARS = 500;\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        let pretextRange = selectionStartPageRange.intersectRanges(new Range(1, 1, selection.startLineNumber, selection.startColumn));\n        if (trimLongText && model.getValueLengthInRange(pretextRange, 1 /* EndOfLinePreference.LF */) > LIMIT_CHARS) {\n            const pretextStart = model.modifyPosition(pretextRange.getEndPosition(), -LIMIT_CHARS);\n            pretextRange = Range.fromPositions(pretextStart, pretextRange.getEndPosition());\n        }\n        const pretext = model.getValueInRange(pretextRange, 1 /* EndOfLinePreference.LF */);\n        const lastLine = model.getLineCount();\n        const lastLineMaxColumn = model.getLineMaxColumn(lastLine);\n        let posttextRange = selectionEndPageRange.intersectRanges(new Range(selection.endLineNumber, selection.endColumn, lastLine, lastLineMaxColumn));\n        if (trimLongText && model.getValueLengthInRange(posttextRange, 1 /* EndOfLinePreference.LF */) > LIMIT_CHARS) {\n            const posttextEnd = model.modifyPosition(posttextRange.getStartPosition(), LIMIT_CHARS);\n            posttextRange = Range.fromPositions(posttextRange.getStartPosition(), posttextEnd);\n        }\n        const posttext = model.getValueInRange(posttextRange, 1 /* EndOfLinePreference.LF */);\n        let text;\n        if (selectionStartPage === selectionEndPage || selectionStartPage + 1 === selectionEndPage) {\n            // take full selection\n            text = model.getValueInRange(selection, 1 /* EndOfLinePreference.LF */);\n        }\n        else {\n            const selectionRange1 = selectionStartPageRange.intersectRanges(selection);\n            const selectionRange2 = selectionEndPageRange.intersectRanges(selection);\n            text = (model.getValueInRange(selectionRange1, 1 /* EndOfLinePreference.LF */)\n                + String.fromCharCode(8230)\n                + model.getValueInRange(selectionRange2, 1 /* EndOfLinePreference.LF */));\n        }\n        if (trimLongText && 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        return new TextAreaState(pretext + text + posttext, pretext.length, pretext.length + text.length, selection, pretextRange.endLineNumber - pretextRange.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 *--------------------------------------------------------------------------------------------*/\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 browser from '../../../base/browser/browser.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { DomEmitter } from '../../../base/browser/event.js';\nimport { StandardKeyboardEvent } from '../../../base/browser/keyboardEvent.js';\nimport { inputLatency } from '../../../base/browser/performance.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { Emitter, Event } from '../../../base/common/event.js';\nimport { Disposable, MutableDisposable } from '../../../base/common/lifecycle.js';\nimport { Mimes } from '../../../base/common/mime.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { TextAreaState, _debugComposition } from './textAreaState.js';\nimport { Selection } from '../../common/core/selection.js';\nimport { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\nimport { ILogService } from '../../../platform/log/common/log.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    static { this.INSTANCE = new 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}\nclass CompositionContext {\n    constructor() {\n        this._lastTypeTextLength = 0;\n    }\n    handleCompositionUpdate(text) {\n        text = text || '';\n        const typeInput = {\n            text: text,\n            replacePrevCharCnt: this._lastTypeTextLength,\n            replaceNextCharCnt: 0,\n            positionDelta: 0\n        };\n        this._lastTypeTextLength = text.length;\n        return typeInput;\n    }\n}\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 */\nlet TextAreaInput = class TextAreaInput extends Disposable {\n    get textAreaState() {\n        return this._textAreaState;\n    }\n    constructor(_host, _textArea, _OS, _browser, _accessibilityService, _logService) {\n        super();\n        this._host = _host;\n        this._textArea = _textArea;\n        this._OS = _OS;\n        this._browser = _browser;\n        this._accessibilityService = _accessibilityService;\n        this._logService = _logService;\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._asyncFocusGainWriteScreenReaderContent = this._register(new MutableDisposable());\n        this._asyncTriggerCut = this._register(new RunOnceScheduler(() => this._onCut.fire(), 0));\n        this._textAreaState = TextAreaState.EMPTY;\n        this._selectionChangeListener = null;\n        if (this._accessibilityService.isScreenReaderOptimized()) {\n            this.writeNativeTextAreaContent('ctor');\n        }\n        this._register(Event.runAndSubscribe(this._accessibilityService.onDidChangeScreenReaderOptimized, () => {\n            if (this._accessibilityService.isScreenReaderOptimized() && !this._asyncFocusGainWriteScreenReaderContent.value) {\n                this._asyncFocusGainWriteScreenReaderContent.value = this._register(new RunOnceScheduler(() => this.writeNativeTextAreaContent('asyncFocusGain'), 0));\n            }\n            else {\n                this._asyncFocusGainWriteScreenReaderContent.clear();\n            }\n        }));\n        this._hasFocus = false;\n        this._currentComposition = null;\n        let lastKeyDown = null;\n        this._register(this._textArea.onKeyDown((_e) => {\n            const e = new StandardKeyboardEvent(_e);\n            if (e.keyCode === 114 /* KeyCode.KEY_IN_COMPOSITION */\n                || (this._currentComposition && e.keyCode === 1 /* KeyCode.Backspace */)) {\n                // Stop propagation for keyDown events if the IME is processing key input\n                e.stopPropagation();\n            }\n            if (e.equals(9 /* KeyCode.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(this._textArea.onKeyUp((_e) => {\n            const e = new StandardKeyboardEvent(_e);\n            this._onKeyUp.fire(e);\n        }));\n        this._register(this._textArea.onCompositionStart((e) => {\n            if (_debugComposition) {\n                console.log(`[compositionstart]`, e);\n            }\n            const currentComposition = new CompositionContext();\n            if (this._currentComposition) {\n                // simply reset the composition context\n                this._currentComposition = currentComposition;\n                return;\n            }\n            this._currentComposition = currentComposition;\n            if (this._OS === 2 /* OperatingSystem.Macintosh */\n                && lastKeyDown\n                && lastKeyDown.equals(114 /* KeyCode.KEY_IN_COMPOSITION */)\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                && (lastKeyDown.code === 'ArrowRight' || lastKeyDown.code === 'ArrowLeft')) {\n                // Handling long press case on Chromium/Safari macOS + arrow key => pretend the character was selected\n                if (_debugComposition) {\n                    console.log(`[compositionstart] Handling long press case on macOS + arrow key`, e);\n                }\n                // Pretend the previous character was composed (in order to get it removed by subsequent compositionupdate events)\n                currentComposition.handleCompositionUpdate('x');\n                this._onCompositionStart.fire({ data: e.data });\n                return;\n            }\n            if (this._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({ data: e.data });\n                return;\n            }\n            this._onCompositionStart.fire({ data: e.data });\n        }));\n        this._register(this._textArea.onCompositionUpdate((e) => {\n            if (_debugComposition) {\n                console.log(`[compositionupdate]`, e);\n            }\n            const currentComposition = this._currentComposition;\n            if (!currentComposition) {\n                // should not be possible to receive a 'compositionupdate' without a 'compositionstart'\n                return;\n            }\n            if (this._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 = TextAreaState.readFromTextArea(this._textArea, this._textAreaState);\n                const typeInput = TextAreaState.deduceAndroidCompositionInput(this._textAreaState, newState);\n                this._textAreaState = newState;\n                this._onType.fire(typeInput);\n                this._onCompositionUpdate.fire(e);\n                return;\n            }\n            const typeInput = currentComposition.handleCompositionUpdate(e.data);\n            this._textAreaState = TextAreaState.readFromTextArea(this._textArea, this._textAreaState);\n            this._onType.fire(typeInput);\n            this._onCompositionUpdate.fire(e);\n        }));\n        this._register(this._textArea.onCompositionEnd((e) => {\n            if (_debugComposition) {\n                console.log(`[compositionend]`, e);\n            }\n            const currentComposition = this._currentComposition;\n            if (!currentComposition) {\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                return;\n            }\n            this._currentComposition = null;\n            if (this._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 = TextAreaState.readFromTextArea(this._textArea, this._textAreaState);\n                const typeInput = TextAreaState.deduceAndroidCompositionInput(this._textAreaState, newState);\n                this._textAreaState = newState;\n                this._onType.fire(typeInput);\n                this._onCompositionEnd.fire();\n                return;\n            }\n            const typeInput = currentComposition.handleCompositionUpdate(e.data);\n            this._textAreaState = TextAreaState.readFromTextArea(this._textArea, this._textAreaState);\n            this._onType.fire(typeInput);\n            this._onCompositionEnd.fire();\n        }));\n        this._register(this._textArea.onInput((e) => {\n            if (_debugComposition) {\n                console.log(`[input]`, e);\n            }\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._currentComposition) {\n                return;\n            }\n            const newState = TextAreaState.readFromTextArea(this._textArea, this._textAreaState);\n            const typeInput = TextAreaState.deduceInput(this._textAreaState, newState, /*couldBeEmojiInput*/ this._OS === 2 /* OperatingSystem.Macintosh */);\n            if (typeInput.replacePrevCharCnt === 0 && typeInput.text.length === 1) {\n                // one character was typed\n                if (strings.isHighSurrogate(typeInput.text.charCodeAt(0))\n                    || typeInput.text.charCodeAt(0) === 0x7f /* Delete */) {\n                    // Ignore invalid input but keep it around for next time\n                    return;\n                }\n            }\n            this._textAreaState = newState;\n            if (typeInput.text !== ''\n                || typeInput.replacePrevCharCnt !== 0\n                || typeInput.replaceNextCharCnt !== 0\n                || typeInput.positionDelta !== 0) {\n                this._onType.fire(typeInput);\n            }\n        }));\n        // --- Clipboard operations\n        this._register(this._textArea.onCut((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(this._textArea.onCopy((e) => {\n            this._ensureClipboardGetsEditorSelection(e);\n        }));\n        this._register(this._textArea.onPaste((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            e.preventDefault();\n            if (!e.clipboardData) {\n                return;\n            }\n            let [text, metadata] = ClipboardEventUtils.getTextData(e.clipboardData);\n            if (!text) {\n                return;\n            }\n            // try the in-memory store\n            metadata = metadata || InMemoryClipboardMetadataManager.INSTANCE.get(text);\n            this._onPaste.fire({\n                text: text,\n                metadata: metadata\n            });\n        }));\n        this._register(this._textArea.onFocus(() => {\n            const hadFocus = this._hasFocus;\n            this._setHasFocus(true);\n            if (this._accessibilityService.isScreenReaderOptimized() && this._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                if (!this._asyncFocusGainWriteScreenReaderContent.value) {\n                    this._asyncFocusGainWriteScreenReaderContent.value = new RunOnceScheduler(() => this.writeNativeTextAreaContent('asyncFocusGain'), 0);\n                }\n                this._asyncFocusGainWriteScreenReaderContent.value.schedule();\n            }\n        }));\n        this._register(this._textArea.onBlur(() => {\n            if (this._currentComposition) {\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._currentComposition = null;\n                // Clear the textarea to avoid an unwanted cursor type\n                this.writeNativeTextAreaContent('blurWithoutCompositionEnd');\n                // Fire artificial composition end\n                this._onCompositionEnd.fire();\n            }\n            this._setHasFocus(false);\n        }));\n        this._register(this._textArea.onSyntheticTap(() => {\n            if (this._browser.isAndroid && this._currentComposition) {\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._currentComposition = null;\n                // Clear the textarea to avoid an unwanted cursor type\n                this.writeNativeTextAreaContent('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(this._textArea.ownerDocument, 'selectionchange', (e) => {\n            inputLatency.onSelectionChange();\n            if (!this._hasFocus) {\n                return;\n            }\n            if (this._currentComposition) {\n                return;\n            }\n            if (!this._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.selection) {\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        this._setHasFocus(this._textArea.hasFocus());\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.writeNativeTextAreaContent('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    writeNativeTextAreaContent(reason) {\n        if ((!this._accessibilityService.isScreenReaderOptimized() && reason === 'render') || this._currentComposition) {\n            // Do not write to the text on render unless a screen reader is being used #192278\n            // Do not write to the text area when doing composition\n            return;\n        }\n        this._logService.trace(`writeTextAreaState(reason: ${reason})`);\n        this._setAndWriteTextAreaState(reason, this._host.getScreenReaderContent());\n    }\n    _ensureClipboardGetsEditorSelection(e) {\n        const dataToCopy = this._host.getDataToCopy();\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        (this._browser.isFirefox ? dataToCopy.text.replace(/\\r\\n/g, '\\n') : dataToCopy.text), storedMetadata);\n        e.preventDefault();\n        if (e.clipboardData) {\n            ClipboardEventUtils.setTextData(e.clipboardData, dataToCopy.text, dataToCopy.html, storedMetadata);\n        }\n    }\n};\nTextAreaInput = __decorate([\n    __param(4, IAccessibilityService),\n    __param(5, ILogService)\n], TextAreaInput);\nexport { TextAreaInput };\nexport const ClipboardEventUtils = {\n    getTextData(clipboardData) {\n        const text = clipboardData.getData(Mimes.text);\n        let metadata = null;\n        const rawmetadata = 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        if (text.length === 0 && metadata === null && clipboardData.files.length > 0) {\n            // no textual data pasted, generate text from file names\n            const files = Array.prototype.slice.call(clipboardData.files, 0);\n            return [files.map(file => file.name).join('\\n'), null];\n        }\n        return [text, metadata];\n    },\n    setTextData(clipboardData, text, html, metadata) {\n        clipboardData.setData(Mimes.text, text);\n        if (typeof html === 'string') {\n            clipboardData.setData('text/html', html);\n        }\n        clipboardData.setData('vscode-editor-data', JSON.stringify(metadata));\n    }\n};\nexport class TextAreaWrapper extends Disposable {\n    get ownerDocument() {\n        return this._actual.ownerDocument;\n    }\n    constructor(_actual) {\n        super();\n        this._actual = _actual;\n        this.onKeyDown = this._register(new DomEmitter(this._actual, 'keydown')).event;\n        this.onKeyUp = this._register(new DomEmitter(this._actual, 'keyup')).event;\n        this.onCompositionStart = this._register(new DomEmitter(this._actual, 'compositionstart')).event;\n        this.onCompositionUpdate = this._register(new DomEmitter(this._actual, 'compositionupdate')).event;\n        this.onCompositionEnd = this._register(new DomEmitter(this._actual, 'compositionend')).event;\n        this.onBeforeInput = this._register(new DomEmitter(this._actual, 'beforeinput')).event;\n        this.onInput = this._register(new DomEmitter(this._actual, 'input')).event;\n        this.onCut = this._register(new DomEmitter(this._actual, 'cut')).event;\n        this.onCopy = this._register(new DomEmitter(this._actual, 'copy')).event;\n        this.onPaste = this._register(new DomEmitter(this._actual, 'paste')).event;\n        this.onFocus = this._register(new DomEmitter(this._actual, 'focus')).event;\n        this.onBlur = this._register(new DomEmitter(this._actual, 'blur')).event;\n        this._onSyntheticTap = this._register(new Emitter());\n        this.onSyntheticTap = this._onSyntheticTap.event;\n        this._ignoreSelectionChangeTime = 0;\n        this._register(this.onKeyDown(() => inputLatency.onKeyDown()));\n        this._register(this.onBeforeInput(() => inputLatency.onBeforeInput()));\n        this._register(this.onInput(() => inputLatency.onInput()));\n        this._register(this.onKeyUp(() => inputLatency.onKeyUp()));\n        this._register(dom.addDisposableListener(this._actual, TextAreaSyntethicEvents.Tap, () => this._onSyntheticTap.fire()));\n    }\n    hasFocus() {\n        const shadowRoot = dom.getShadowRoot(this._actual);\n        if (shadowRoot) {\n            return shadowRoot.activeElement === this._actual;\n        }\n        else if (this._actual.isConnected) {\n            return dom.getActiveElement() === this._actual;\n        }\n        else {\n            return false;\n        }\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.value;\n    }\n    setValue(reason, value) {\n        const textArea = this._actual;\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.selectionDirection === 'backward' ? this._actual.selectionEnd : this._actual.selectionStart;\n    }\n    getSelectionEnd() {\n        return this._actual.selectionDirection === 'backward' ? this._actual.selectionStart : this._actual.selectionEnd;\n    }\n    setSelectionRange(reason, selectionStart, selectionEnd) {\n        const textArea = this._actual;\n        let activeElement = null;\n        const shadowRoot = dom.getShadowRoot(textArea);\n        if (shadowRoot) {\n            activeElement = shadowRoot.activeElement;\n        }\n        else {\n            activeElement = dom.getActiveElement();\n        }\n        const activeWindow = dom.getWindow(activeElement);\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 && activeWindow.parent !== activeWindow) {\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 && activeWindow.parent !== activeWindow) {\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 { BrowserFeatures } from '../../../base/browser/canIUse.js';\nimport * as dom from '../../../base/browser/dom.js';\nimport { EventType, Gesture } from '../../../base/browser/touch.js';\nimport { mainWindow } from '../../../base/browser/window.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { MouseHandler } from './mouseHandler.js';\nimport { TextAreaSyntethicEvents } from './textAreaInput.js';\nimport { EditorMouseEvent, EditorPointerEventFactory } from '../editorDom.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, false, 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.onPointerMove(this.viewHelper.viewDomNode, (e) => this._onMouseMove(e)));\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, pointerId) => this._onMouseDown(e, pointerId)));\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        this._dispatchGesture(event, /*inSelectionMode*/ false);\n    }\n    onChange(event) {\n        if (this._lastPointerType === 'touch') {\n            this._context.viewModel.viewLayout.deltaScrollNow(-event.translationX, -event.translationY);\n        }\n        if (this._lastPointerType === 'pen') {\n            this._dispatchGesture(event, /*inSelectionMode*/ true);\n        }\n    }\n    _dispatchGesture(event, inSelectionMode) {\n        const target = this._createMouseTarget(new EditorMouseEvent(event, false, this.viewHelper.viewDomNode), false);\n        if (target.position) {\n            this.viewController.dispatchMouse({\n                position: target.position,\n                mouseColumn: target.position.column,\n                startedOnLineNumbers: false,\n                revealType: 1 /* NavigationCommandRevealType.Minimal */,\n                mouseDownCount: event.tapCount,\n                inSelectionMode,\n                altKey: false,\n                ctrlKey: false,\n                metaKey: false,\n                shiftKey: false,\n                leftButton: false,\n                middleButton: false,\n                onInjectedText: target.type === 6 /* MouseTargetType.CONTENT_TEXT */ && target.detail.injectedText !== null\n            });\n        }\n    }\n    _onMouseDown(e, pointerId) {\n        if (e.browserEvent.pointerType === 'touch') {\n            return;\n        }\n        super._onMouseDown(e, pointerId);\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, false, this.viewHelper.viewDomNode), false)));\n    }\n    onTap(event) {\n        event.preventDefault();\n        this.viewHelper.focusTextArea();\n        const target = this._createMouseTarget(new EditorMouseEvent(event, false, 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, 1 /* NavigationCommandRevealType.Minimal */);\n        }\n    }\n    onChange(e) {\n        this._context.viewModel.viewLayout.deltaScrollNow(-e.translationX, -e.translationY);\n    }\n}\nexport class PointerHandler extends Disposable {\n    constructor(context, viewController, viewHelper) {\n        super();\n        const isPhone = platform.isIOS || (platform.isAndroid && platform.isMobile);\n        if (isPhone && BrowserFeatures.pointerEvents) {\n            this.handler = this._register(new PointerEventHandler(context, viewController, viewHelper));\n        }\n        else if (mainWindow.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/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 { Range } from '../../../common/core/range.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { editorDimmedLineNumber, editorLineNumbers } from '../../../common/core/editorColorRegistry.js';\nexport class LineNumbersOverlay extends DynamicViewOverlay {\n    static { this.CLASS_NAME = 'line-numbers'; }\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(67 /* EditorOption.lineHeight */);\n        const lineNumbers = options.get(68 /* EditorOption.lineNumbers */);\n        this._renderLineNumbers = lineNumbers.renderType;\n        this._renderCustomLineNumbers = lineNumbers.renderFn;\n        this._renderFinalNewline = options.get(96 /* EditorOption.renderFinalNewline */);\n        const layoutInfo = options.get(146 /* EditorOption.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.viewModel.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 /* RenderLineNumbersType.Relative */ || this._renderLineNumbers === 3 /* RenderLineNumbersType.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    onDecorationsChanged(e) {\n        return e.affectsLineNumber;\n    }\n    // --- end event handlers\n    _getLineRenderLineNumber(viewLineNumber) {\n        const modelPosition = this._context.viewModel.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 /* RenderLineNumbersType.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 /* RenderLineNumbersType.Interval */) {\n            if (this._lastCursorModelPosition.lineNumber === modelLineNumber) {\n                return String(modelLineNumber);\n            }\n            if (modelLineNumber % 10 === 0) {\n                return String(modelLineNumber);\n            }\n            const finalLineNumber = this._context.viewModel.getLineCount();\n            if (modelLineNumber === finalLineNumber) {\n                return String(modelLineNumber);\n            }\n            return '';\n        }\n        return String(modelLineNumber);\n    }\n    prepareRender(ctx) {\n        if (this._renderLineNumbers === 0 /* RenderLineNumbersType.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 lineNoDecorations = this._context.viewModel.getDecorationsInViewport(ctx.visibleRange).filter(d => !!d.options.lineNumberClassName);\n        lineNoDecorations.sort((a, b) => Range.compareRangesUsingEnds(a.range, b.range));\n        let decorationStartIndex = 0;\n        const lineCount = this._context.viewModel.getLineCount();\n        const output = [];\n        for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n            const lineIndex = lineNumber - visibleStartLineNumber;\n            let renderLineNumber = this._getLineRenderLineNumber(lineNumber);\n            let extraClassNames = '';\n            // skip decorations whose end positions we've already passed\n            while (decorationStartIndex < lineNoDecorations.length && lineNoDecorations[decorationStartIndex].range.endLineNumber < lineNumber) {\n                decorationStartIndex++;\n            }\n            for (let i = decorationStartIndex; i < lineNoDecorations.length; i++) {\n                const { range, options } = lineNoDecorations[i];\n                if (range.startLineNumber <= lineNumber) {\n                    extraClassNames += ' ' + options.lineNumberClassName;\n                }\n            }\n            if (!renderLineNumber && !extraClassNames) {\n                output[lineIndex] = '';\n                continue;\n            }\n            if (lineNumber === lineCount && this._context.viewModel.getLineLength(lineNumber) === 0) {\n                // this is the last line\n                if (this._renderFinalNewline === 'off') {\n                    renderLineNumber = '';\n                }\n                if (this._renderFinalNewline === 'dimmed') {\n                    extraClassNames += ' dimmed-line-number';\n                }\n            }\n            if (lineNumber === this._activeLineNumber) {\n                extraClassNames += ' active-line-number';\n            }\n            output[lineIndex] = (`<div class=\"${LineNumbersOverlay.CLASS_NAME}${lineHeightClassName}${extraClassNames}\" style=\"left:${this._lineNumbersLeft}px;width:${this._lineNumbersWidth}px;\">${renderLineNumber}</div>`);\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 editorLineNumbersColor = theme.getColor(editorLineNumbers);\n    const editorDimmedLineNumberColor = theme.getColor(editorDimmedLineNumber);\n    if (editorDimmedLineNumberColor) {\n        collector.addRule(`.monaco-editor .line-numbers.dimmed-line-number { color: ${editorDimmedLineNumberColor}; }`);\n    }\n    else if (editorLineNumbersColor) {\n        collector.addRule(`.monaco-editor .line-numbers.dimmed-line-number { color: ${editorLineNumbersColor.transparent(0.4)}; }`);\n    }\n});\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport './margin.css';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { ViewPart } from '../../view/viewPart.js';\nexport class Margin extends ViewPart {\n    static { this.CLASS_NAME = 'glyph-margin'; }\n    static { this.OUTER_CLASS_NAME = 'margin'; }\n    constructor(context) {\n        super(context);\n        const options = this._context.configuration.options;\n        const layoutInfo = options.get(146 /* EditorOption.layoutInfo */);\n        this._canUseLayerHinting = !options.get(32 /* EditorOption.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(146 /* EditorOption.layoutInfo */);\n        this._canUseLayerHinting = !options.get(32 /* EditorOption.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}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 *--------------------------------------------------------------------------------------------*/\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 './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 { applyFontInfo } from '../config/domFontInfo.js';\nimport { CopyOptions, TextAreaInput, TextAreaWrapper } 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/core/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';\nimport { TokenizationRegistry } from '../../common/languages.js';\nimport { Color } from '../../../base/common/color.js';\nimport { IME } from '../../../base/common/ime.js';\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\nimport { IInstantiationService } from '../../../platform/instantiation/common/instantiation.js';\nclass VisibleTextAreaData {\n    constructor(_context, modelLineNumber, distanceToModelLineStart, widthOfHiddenLineTextBefore, distanceToModelLineEnd) {\n        this._context = _context;\n        this.modelLineNumber = modelLineNumber;\n        this.distanceToModelLineStart = distanceToModelLineStart;\n        this.widthOfHiddenLineTextBefore = widthOfHiddenLineTextBefore;\n        this.distanceToModelLineEnd = distanceToModelLineEnd;\n        this._visibleTextAreaBrand = undefined;\n        this.startPosition = null;\n        this.endPosition = null;\n        this.visibleTextareaStart = null;\n        this.visibleTextareaEnd = null;\n        /**\n         * When doing composition, the currently composed text might be split up into\n         * multiple tokens, then merged again into a single token, etc. Here we attempt\n         * to keep the presentation of the <textarea> stable by using the previous used\n         * style if multiple tokens come into play. This avoids flickering.\n         */\n        this._previousPresentation = null;\n    }\n    prepareRender(visibleRangeProvider) {\n        const startModelPosition = new Position(this.modelLineNumber, this.distanceToModelLineStart + 1);\n        const endModelPosition = new Position(this.modelLineNumber, this._context.viewModel.model.getLineMaxColumn(this.modelLineNumber) - this.distanceToModelLineEnd);\n        this.startPosition = this._context.viewModel.coordinatesConverter.convertModelPositionToViewPosition(startModelPosition);\n        this.endPosition = this._context.viewModel.coordinatesConverter.convertModelPositionToViewPosition(endModelPosition);\n        if (this.startPosition.lineNumber === this.endPosition.lineNumber) {\n            this.visibleTextareaStart = visibleRangeProvider.visibleRangeForPosition(this.startPosition);\n            this.visibleTextareaEnd = visibleRangeProvider.visibleRangeForPosition(this.endPosition);\n        }\n        else {\n            // TODO: what if the view positions are not on the same line?\n            this.visibleTextareaStart = null;\n            this.visibleTextareaEnd = null;\n        }\n    }\n    definePresentation(tokenPresentation) {\n        if (!this._previousPresentation) {\n            // To avoid flickering, once set, always reuse a presentation throughout the entire IME session\n            if (tokenPresentation) {\n                this._previousPresentation = tokenPresentation;\n            }\n            else {\n                this._previousPresentation = {\n                    foreground: 1 /* ColorId.DefaultForeground */,\n                    italic: false,\n                    bold: false,\n                    underline: false,\n                    strikethrough: false,\n                };\n            }\n        }\n        return this._previousPresentation;\n    }\n}\nconst canUseZeroSizeTextarea = (browser.isFirefox);\nlet TextAreaHandler = class TextAreaHandler extends ViewPart {\n    constructor(context, viewController, visibleRangeProvider, _keybindingService, _instantiationService) {\n        super(context);\n        this._keybindingService = _keybindingService;\n        this._instantiationService = _instantiationService;\n        this._primaryCursorPosition = new Position(1, 1);\n        this._primaryCursorVisibleRange = null;\n        this._viewController = viewController;\n        this._visibleRangeProvider = visibleRangeProvider;\n        this._scrollLeft = 0;\n        this._scrollTop = 0;\n        const options = this._context.configuration.options;\n        const layoutInfo = options.get(146 /* EditorOption.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(50 /* EditorOption.fontInfo */);\n        this._lineHeight = options.get(67 /* EditorOption.lineHeight */);\n        this._emptySelectionClipboard = options.get(37 /* EditorOption.emptySelectionClipboard */);\n        this._copyWithSyntaxHighlighting = options.get(25 /* EditorOption.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, 7 /* PartFingerprint.TextArea */);\n        this.textArea.setClassName(`inputarea ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`);\n        this.textArea.setAttribute('wrap', this._textAreaWrapping && !this._visibleTextArea ? 'on' : 'off');\n        const { tabSize } = this._context.viewModel.model.getOptions();\n        this.textArea.domNode.style.tabSize = `${tabSize * this._fontInfo.spaceWidth}px`;\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('aria-required', options.get(5 /* EditorOption.ariaRequired */) ? 'true' : 'false');\n        this.textArea.setAttribute('tabindex', String(options.get(125 /* EditorOption.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-autocomplete', options.get(92 /* EditorOption.readOnly */) ? 'none' : 'both');\n        this._ensureReadOnlyAttribute();\n        this.textAreaCover = createFastDomNode(document.createElement('div'));\n        this.textAreaCover.setPosition('absolute');\n        const simpleModel = {\n            getLineCount: () => {\n                return this._context.viewModel.getLineCount();\n            },\n            getLineMaxColumn: (lineNumber) => {\n                return this._context.viewModel.getLineMaxColumn(lineNumber);\n            },\n            getValueInRange: (range, eol) => {\n                return this._context.viewModel.getValueInRange(range, eol);\n            },\n            getValueLengthInRange: (range, eol) => {\n                return this._context.viewModel.getValueLengthInRange(range, eol);\n            },\n            modifyPosition: (position, offset) => {\n                return this._context.viewModel.modifyPosition(position, offset);\n            }\n        };\n        const textAreaInputHost = {\n            getDataToCopy: () => {\n                const rawTextToCopy = this._context.viewModel.getPlainTextToCopy(this._modelSelections, this._emptySelectionClipboard, platform.isWindows);\n                const newLineCharacter = this._context.viewModel.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 (CopyOptions.forceCopyWithSyntaxHighlighting || (this._copyWithSyntaxHighlighting && text.length < 65536)) {\n                    const richText = this._context.viewModel.getRichTextToCopy(this._modelSelections, this._emptySelectionClipboard);\n                    if (richText) {\n                        html = richText.html;\n                        mode = richText.mode;\n                    }\n                }\n                return {\n                    isFromEmptySelection,\n                    multicursorText,\n                    text,\n                    html,\n                    mode\n                };\n            },\n            getScreenReaderContent: () => {\n                if (this._accessibilitySupport === 1 /* AccessibilitySupport.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                    const selection = this._selections[0];\n                    if (platform.isMacintosh && 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, Range.fromPositions(position), 0);\n                        }\n                    }\n                    // on macOS, write current selection into textarea will allow system text services pick selected text,\n                    // but we still want to limit the amount of text given Chromium handles very poorly text even of a few\n                    // thousand chars\n                    // (https://github.com/microsoft/vscode/issues/27799)\n                    const LIMIT_CHARS = 500;\n                    if (platform.isMacintosh && !selection.isEmpty() && simpleModel.getValueLengthInRange(selection, 0 /* EndOfLinePreference.TextDefined */) < LIMIT_CHARS) {\n                        const text = simpleModel.getValueInRange(selection, 0 /* EndOfLinePreference.TextDefined */);\n                        return new TextAreaState(text, 0, text.length, selection, 0);\n                    }\n                    // on Safari, document.execCommand('cut') and document.execCommand('copy') will just not work\n                    // if the textarea has no content selected. So if there is an editor selection, ensure something\n                    // is selected in the textarea.\n                    if (browser.isSafari && !selection.isEmpty()) {\n                        const placeholderText = 'vscode-placeholder';\n                        return new TextAreaState(placeholderText, 0, placeholderText.length, null, undefined);\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, Range.fromPositions(position), 0);\n                        }\n                    }\n                    return TextAreaState.EMPTY;\n                }\n                return PagedScreenReaderStrategy.fromEditorSelection(simpleModel, this._selections[0], this._accessibilityPageSize, this._accessibilitySupport === 0 /* AccessibilitySupport.Unknown */);\n            },\n            deduceModelPosition: (viewAnchorPosition, deltaOffset, lineFeedCnt) => {\n                return this._context.viewModel.deduceModelPositionRelativeToViewPosition(viewAnchorPosition, deltaOffset, lineFeedCnt);\n            }\n        };\n        const textAreaWrapper = this._register(new TextAreaWrapper(this.textArea.domNode));\n        this._textAreaInput = this._register(this._instantiationService.createInstance(TextAreaInput, textAreaInputHost, textAreaWrapper, platform.OS, {\n            isAndroid: browser.isAndroid,\n            isChrome: browser.isChrome,\n            isFirefox: browser.isFirefox,\n            isSafari: browser.isSafari,\n        }));\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            // The textarea might contain some content when composition starts.\n            //\n            // When we make the textarea visible, it always has a height of 1 line,\n            // so we don't need to worry too much about content on lines above or below\n            // the selection.\n            //\n            // However, the text on the current line needs to be made visible because\n            // some IME methods allow to move to other glyphs on the current line\n            // (by pressing arrow keys).\n            //\n            // (1) The textarea might contain only some parts of the current line,\n            // like the word before the selection. Also, the content inside the textarea\n            // can grow or shrink as composition occurs. We therefore anchor the textarea\n            // in terms of distance to a certain line start and line end.\n            //\n            // (2) Also, we should not make \\t characters visible, because their rendering\n            // inside the <textarea> will not align nicely with our rendering. We therefore\n            // will hide (if necessary) some of the leading text on the current line.\n            const ta = this.textArea.domNode;\n            const modelSelection = this._modelSelections[0];\n            const { distanceToModelLineStart, widthOfHiddenTextBefore } = (() => {\n                // Find the text that is on the current line before the selection\n                const textBeforeSelection = ta.value.substring(0, Math.min(ta.selectionStart, ta.selectionEnd));\n                const lineFeedOffset1 = textBeforeSelection.lastIndexOf('\\n');\n                const lineTextBeforeSelection = textBeforeSelection.substring(lineFeedOffset1 + 1);\n                // We now search to see if we should hide some part of it (if it contains \\t)\n                const tabOffset1 = lineTextBeforeSelection.lastIndexOf('\\t');\n                const desiredVisibleBeforeCharCount = lineTextBeforeSelection.length - tabOffset1 - 1;\n                const startModelPosition = modelSelection.getStartPosition();\n                const visibleBeforeCharCount = Math.min(startModelPosition.column - 1, desiredVisibleBeforeCharCount);\n                const distanceToModelLineStart = startModelPosition.column - 1 - visibleBeforeCharCount;\n                const hiddenLineTextBefore = lineTextBeforeSelection.substring(0, lineTextBeforeSelection.length - visibleBeforeCharCount);\n                const { tabSize } = this._context.viewModel.model.getOptions();\n                const widthOfHiddenTextBefore = measureText(this.textArea.domNode.ownerDocument, hiddenLineTextBefore, this._fontInfo, tabSize);\n                return { distanceToModelLineStart, widthOfHiddenTextBefore };\n            })();\n            const { distanceToModelLineEnd } = (() => {\n                // Find the text that is on the current line after the selection\n                const textAfterSelection = ta.value.substring(Math.max(ta.selectionStart, ta.selectionEnd));\n                const lineFeedOffset2 = textAfterSelection.indexOf('\\n');\n                const lineTextAfterSelection = lineFeedOffset2 === -1 ? textAfterSelection : textAfterSelection.substring(0, lineFeedOffset2);\n                const tabOffset2 = lineTextAfterSelection.indexOf('\\t');\n                const desiredVisibleAfterCharCount = (tabOffset2 === -1 ? lineTextAfterSelection.length : lineTextAfterSelection.length - tabOffset2 - 1);\n                const endModelPosition = modelSelection.getEndPosition();\n                const visibleAfterCharCount = Math.min(this._context.viewModel.model.getLineMaxColumn(endModelPosition.lineNumber) - endModelPosition.column, desiredVisibleAfterCharCount);\n                const distanceToModelLineEnd = this._context.viewModel.model.getLineMaxColumn(endModelPosition.lineNumber) - endModelPosition.column - visibleAfterCharCount;\n                return { distanceToModelLineEnd };\n            })();\n            // Scroll to reveal the location in the editor where composition occurs\n            this._context.viewModel.revealRange('keyboard', true, Range.fromPositions(this._selections[0].getStartPosition()), 0 /* viewEvents.VerticalRevealType.Simple */, 1 /* ScrollType.Immediate */);\n            this._visibleTextArea = new VisibleTextAreaData(this._context, modelSelection.startLineNumber, distanceToModelLineStart, widthOfHiddenTextBefore, distanceToModelLineEnd);\n            // We turn off wrapping if the <textarea> becomes visible for composition\n            this.textArea.setAttribute('wrap', this._textAreaWrapping && !this._visibleTextArea ? 'on' : 'off');\n            this._visibleTextArea.prepareRender(this._visibleRangeProvider);\n            this._render();\n            // Show the textarea\n            this.textArea.setClassName(`inputarea ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME} ime-input`);\n            this._viewController.compositionStart();\n            this._context.viewModel.onCompositionStart();\n        }));\n        this._register(this._textAreaInput.onCompositionUpdate((e) => {\n            if (!this._visibleTextArea) {\n                return;\n            }\n            this._visibleTextArea.prepareRender(this._visibleRangeProvider);\n            this._render();\n        }));\n        this._register(this._textAreaInput.onCompositionEnd(() => {\n            this._visibleTextArea = null;\n            // We turn on wrapping as necessary if the <textarea> hides after composition\n            this.textArea.setAttribute('wrap', this._textAreaWrapping && !this._visibleTextArea ? 'on' : 'off');\n            this._render();\n            this.textArea.setClassName(`inputarea ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`);\n            this._viewController.compositionEnd();\n            this._context.viewModel.onCompositionEnd();\n        }));\n        this._register(this._textAreaInput.onFocus(() => {\n            this._context.viewModel.setHasFocus(true);\n        }));\n        this._register(this._textAreaInput.onBlur(() => {\n            this._context.viewModel.setHasFocus(false);\n        }));\n        this._register(IME.onDidChange(() => {\n            this._ensureReadOnlyAttribute();\n        }));\n    }\n    writeScreenReaderContent(reason) {\n        this._textAreaInput.writeNativeTextAreaContent(reason);\n    }\n    dispose() {\n        super.dispose();\n    }\n    _getAndroidWordAtPosition(position) {\n        const ANDROID_WORD_SEPARATORS = '`~!@#$%^&*()-=+[{]}\\\\|;:\",.<>/?';\n        const lineContent = this._context.viewModel.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 /* WordCharacterClass.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 /* WordCharacterClass.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.viewModel.getLineContent(position.lineNumber);\n        const wordSeparators = getMapForWordSeparators(this._context.configuration.options.get(132 /* EditorOption.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 /* WordCharacterClass.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.viewModel.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 /* EditorOption.accessibilitySupport */);\n        if (accessibilitySupport === 1 /* AccessibilitySupport.Disabled */) {\n            const toggleKeybindingLabel = this._keybindingService.lookupKeybinding('editor.action.toggleScreenReaderAccessibilityMode')?.getAriaLabel();\n            const runCommandKeybindingLabel = this._keybindingService.lookupKeybinding('workbench.action.showCommands')?.getAriaLabel();\n            const keybindingEditorKeybindingLabel = this._keybindingService.lookupKeybinding('workbench.action.openGlobalKeybindings')?.getAriaLabel();\n            const editorNotAccessibleMessage = nls.localize('accessibilityModeOff', \"The editor is not accessible at this time.\");\n            if (toggleKeybindingLabel) {\n                return nls.localize('accessibilityOffAriaLabel', \"{0} To enable screen reader optimized mode, use {1}\", editorNotAccessibleMessage, toggleKeybindingLabel);\n            }\n            else if (runCommandKeybindingLabel) {\n                return nls.localize('accessibilityOffAriaLabelNoKb', \"{0} To enable screen reader optimized mode, open the quick pick with {1} and run the command Toggle Screen Reader Accessibility Mode, which is currently not triggerable via keyboard.\", editorNotAccessibleMessage, runCommandKeybindingLabel);\n            }\n            else if (keybindingEditorKeybindingLabel) {\n                return nls.localize('accessibilityOffAriaLabelNoKbs', \"{0} Please assign a keybinding for the command Toggle Screen Reader Accessibility Mode by accessing the keybindings editor with {1} and run it.\", editorNotAccessibleMessage, keybindingEditorKeybindingLabel);\n            }\n            else {\n                // SOS\n                return editorNotAccessibleMessage;\n            }\n        }\n        return options.get(4 /* EditorOption.ariaLabel */);\n    }\n    _setAccessibilityOptions(options) {\n        this._accessibilitySupport = options.get(2 /* EditorOption.accessibilitySupport */);\n        const accessibilityPageSize = options.get(3 /* EditorOption.accessibilityPageSize */);\n        if (this._accessibilitySupport === 2 /* AccessibilitySupport.Enabled */ && accessibilityPageSize === EditorOptions.accessibilityPageSize.defaultValue) {\n            // If a screen reader is attached and the default value is not set we should automatically increase the page size to 500 for a better experience\n            this._accessibilityPageSize = 500;\n        }\n        else {\n            this._accessibilityPageSize = accessibilityPageSize;\n        }\n        // When wrapping is enabled and a screen reader might be attached,\n        // we will size the textarea to match the width used for wrapping points computation (see `domLineBreaksComputer.ts`).\n        // This is because screen readers will read the text in the textarea and we'd like that the\n        // wrapping points in the textarea match the wrapping points in the editor.\n        const layoutInfo = options.get(146 /* EditorOption.layoutInfo */);\n        const wrappingColumn = layoutInfo.wrappingColumn;\n        if (wrappingColumn !== -1 && this._accessibilitySupport !== 1 /* AccessibilitySupport.Disabled */) {\n            const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n            this._textAreaWrapping = true;\n            this._textAreaWidth = Math.round(wrappingColumn * fontInfo.typicalHalfwidthCharacterWidth);\n        }\n        else {\n            this._textAreaWrapping = false;\n            this._textAreaWidth = (canUseZeroSizeTextarea ? 0 : 1);\n        }\n    }\n    // --- begin event handlers\n    onConfigurationChanged(e) {\n        const options = this._context.configuration.options;\n        const layoutInfo = options.get(146 /* EditorOption.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(50 /* EditorOption.fontInfo */);\n        this._lineHeight = options.get(67 /* EditorOption.lineHeight */);\n        this._emptySelectionClipboard = options.get(37 /* EditorOption.emptySelectionClipboard */);\n        this._copyWithSyntaxHighlighting = options.get(25 /* EditorOption.copyWithSyntaxHighlighting */);\n        this.textArea.setAttribute('wrap', this._textAreaWrapping && !this._visibleTextArea ? 'on' : 'off');\n        const { tabSize } = this._context.viewModel.model.getOptions();\n        this.textArea.domNode.style.tabSize = `${tabSize * this._fontInfo.spaceWidth}px`;\n        this.textArea.setAttribute('aria-label', this._getAriaLabel(options));\n        this.textArea.setAttribute('aria-required', options.get(5 /* EditorOption.ariaRequired */) ? 'true' : 'false');\n        this.textArea.setAttribute('tabindex', String(options.get(125 /* EditorOption.tabIndex */)));\n        if (e.hasChanged(34 /* EditorOption.domReadOnly */) || e.hasChanged(92 /* EditorOption.readOnly */)) {\n            this._ensureReadOnlyAttribute();\n        }\n        if (e.hasChanged(2 /* EditorOption.accessibilitySupport */)) {\n            this._textAreaInput.writeNativeTextAreaContent('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        // We must update the <textarea> synchronously, otherwise long press IME on macos breaks.\n        // See https://github.com/microsoft/vscode/issues/165821\n        this._textAreaInput.writeNativeTextAreaContent('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    // --- end view API\n    _ensureReadOnlyAttribute() {\n        const options = this._context.configuration.options;\n        // When someone requests to disable IME, we set the \"readonly\" attribute on the <textarea>.\n        // This will prevent composition.\n        const useReadOnly = !IME.enabled || (options.get(34 /* EditorOption.domReadOnly */) && options.get(92 /* EditorOption.readOnly */));\n        if (useReadOnly) {\n            this.textArea.setAttribute('readonly', 'true');\n        }\n        else {\n            this.textArea.removeAttribute('readonly');\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        this._visibleTextArea?.prepareRender(ctx);\n    }\n    render(ctx) {\n        this._textAreaInput.writeNativeTextAreaContent('render');\n        this._render();\n    }\n    _render() {\n        if (this._visibleTextArea) {\n            // The text area is visible for composition reasons\n            const visibleStart = this._visibleTextArea.visibleTextareaStart;\n            const visibleEnd = this._visibleTextArea.visibleTextareaEnd;\n            const startPosition = this._visibleTextArea.startPosition;\n            const endPosition = this._visibleTextArea.endPosition;\n            if (startPosition && endPosition && visibleStart && visibleEnd && visibleEnd.left >= this._scrollLeft && visibleStart.left <= this._scrollLeft + this._contentWidth) {\n                const top = (this._context.viewLayout.getVerticalOffsetForLineNumber(this._primaryCursorPosition.lineNumber) - this._scrollTop);\n                const lineCount = this._newlinecount(this.textArea.domNode.value.substr(0, this.textArea.domNode.selectionStart));\n                let scrollLeft = this._visibleTextArea.widthOfHiddenLineTextBefore;\n                let left = (this._contentLeft + visibleStart.left - this._scrollLeft);\n                // See https://github.com/microsoft/vscode/issues/141725#issuecomment-1050670841\n                // Here we are adding +1 to avoid flickering that might be caused by having a width that is too small.\n                // This could be caused by rounding errors that might only show up with certain font families.\n                // In other words, a pixel might be lost when doing something like\n                //      `Math.round(end) - Math.round(start)`\n                // vs\n                //      `Math.round(end - start)`\n                let width = visibleEnd.left - visibleStart.left + 1;\n                if (left < this._contentLeft) {\n                    // the textarea would be rendered on top of the margin,\n                    // so reduce its width. We use the same technique as\n                    // for hiding text before\n                    const delta = (this._contentLeft - left);\n                    left += delta;\n                    scrollLeft += delta;\n                    width -= delta;\n                }\n                if (width > this._contentWidth) {\n                    // the textarea would be wider than the content width,\n                    // so reduce its width.\n                    width = this._contentWidth;\n                }\n                // Try to render the textarea with the color/font style to match the text under it\n                const viewLineData = this._context.viewModel.getViewLineData(startPosition.lineNumber);\n                const startTokenIndex = viewLineData.tokens.findTokenIndexAtOffset(startPosition.column - 1);\n                const endTokenIndex = viewLineData.tokens.findTokenIndexAtOffset(endPosition.column - 1);\n                const textareaSpansSingleToken = (startTokenIndex === endTokenIndex);\n                const presentation = this._visibleTextArea.definePresentation((textareaSpansSingleToken ? viewLineData.tokens.getPresentation(startTokenIndex) : null));\n                this.textArea.domNode.scrollTop = lineCount * this._lineHeight;\n                this.textArea.domNode.scrollLeft = scrollLeft;\n                this._doRender({\n                    lastRenderPosition: null,\n                    top: top,\n                    left: left,\n                    width: width,\n                    height: this._lineHeight,\n                    useCover: false,\n                    color: (TokenizationRegistry.getColorMap() || [])[presentation.foreground],\n                    italic: presentation.italic,\n                    bold: presentation.bold,\n                    underline: presentation.underline,\n                    strikethrough: presentation.strikethrough\n                });\n            }\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 || this._accessibilitySupport === 2 /* AccessibilitySupport.Enabled */) {\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._doRender({\n                lastRenderPosition: this._primaryCursorPosition,\n                top,\n                left: this._textAreaWrapping ? this._contentLeft : left,\n                width: this._textAreaWidth,\n                height: this._lineHeight,\n                useCover: false\n            });\n            // In case the textarea contains a word, we're going to try to align the textarea's cursor\n            // with our cursor by scrolling the textarea as much as possible\n            this.textArea.domNode.scrollLeft = this._primaryCursorVisibleRange.left;\n            const lineCount = this._textAreaInput.textAreaState.newlineCountBeforeSelection ?? this._newlinecount(this.textArea.domNode.value.substr(0, this.textArea.domNode.selectionStart));\n            this.textArea.domNode.scrollTop = lineCount * this._lineHeight;\n            return;\n        }\n        this._doRender({\n            lastRenderPosition: this._primaryCursorPosition,\n            top: top,\n            left: this._textAreaWrapping ? this._contentLeft : left,\n            width: this._textAreaWidth,\n            height: (canUseZeroSizeTextarea ? 0 : 1),\n            useCover: false\n        });\n    }\n    _newlinecount(text) {\n        let result = 0;\n        let startIndex = -1;\n        do {\n            startIndex = text.indexOf('\\n', startIndex + 1);\n            if (startIndex === -1) {\n                break;\n            }\n            result++;\n        } while (true);\n        return result;\n    }\n    _renderAtTopLeft() {\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        this._doRender({\n            lastRenderPosition: null,\n            top: 0,\n            left: 0,\n            width: this._textAreaWidth,\n            height: (canUseZeroSizeTextarea ? 0 : 1),\n            useCover: true\n        });\n    }\n    _doRender(renderData) {\n        this._lastRenderPosition = renderData.lastRenderPosition;\n        const ta = this.textArea;\n        const tac = this.textAreaCover;\n        applyFontInfo(ta, this._fontInfo);\n        ta.setTop(renderData.top);\n        ta.setLeft(renderData.left);\n        ta.setWidth(renderData.width);\n        ta.setHeight(renderData.height);\n        ta.setColor(renderData.color ? Color.Format.CSS.formatHex(renderData.color) : '');\n        ta.setFontStyle(renderData.italic ? 'italic' : '');\n        if (renderData.bold) {\n            // fontWeight is also set by `applyFontInfo`, so only overwrite it if necessary\n            ta.setFontWeight('bold');\n        }\n        ta.setTextDecoration(`${renderData.underline ? ' underline' : ''}${renderData.strikethrough ? ' line-through' : ''}`);\n        tac.setTop(renderData.useCover ? renderData.top : 0);\n        tac.setLeft(renderData.useCover ? renderData.left : 0);\n        tac.setWidth(renderData.useCover ? renderData.width : 0);\n        tac.setHeight(renderData.useCover ? renderData.height : 0);\n        const options = this._context.configuration.options;\n        if (options.get(57 /* EditorOption.glyphMargin */)) {\n            tac.setClassName('monaco-editor-background textAreaCover ' + Margin.OUTER_CLASS_NAME);\n        }\n        else {\n            if (options.get(68 /* EditorOption.lineNumbers */).renderType !== 0 /* RenderLineNumbersType.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};\nTextAreaHandler = __decorate([\n    __param(3, IKeybindingService),\n    __param(4, IInstantiationService)\n], TextAreaHandler);\nexport { TextAreaHandler };\nfunction measureText(targetDocument, text, fontInfo, tabSize) {\n    if (text.length === 0) {\n        return 0;\n    }\n    const container = targetDocument.createElement('div');\n    container.style.position = 'absolute';\n    container.style.top = '-50000px';\n    container.style.width = '50000px';\n    const regularDomNode = targetDocument.createElement('span');\n    applyFontInfo(regularDomNode, fontInfo);\n    regularDomNode.style.whiteSpace = 'pre'; // just like the textarea\n    regularDomNode.style.tabSize = `${tabSize * fontInfo.spaceWidth}px`; // just like the textarea\n    regularDomNode.append(text);\n    container.appendChild(regularDomNode);\n    targetDocument.body.appendChild(container);\n    const res = regularDomNode.offsetWidth;\n    container.remove();\n    return res;\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { Selection } from './core/selection.js';\nimport { createScopedLineTokens } from './languages/supports.js';\nimport { CursorColumns } from './core/cursorColumns.js';\nimport { normalizeIndentation } from './core/indentation.js';\nconst autoCloseAlways = () => true;\nconst autoCloseNever = () => false;\nconst autoCloseBeforeWhitespace = (chr) => (chr === ' ' || chr === '\\t');\nexport class CursorConfiguration {\n    static shouldRecreate(e) {\n        return (e.hasChanged(146 /* EditorOption.layoutInfo */)\n            || e.hasChanged(132 /* EditorOption.wordSeparators */)\n            || e.hasChanged(37 /* EditorOption.emptySelectionClipboard */)\n            || e.hasChanged(77 /* EditorOption.multiCursorMergeOverlapping */)\n            || e.hasChanged(79 /* EditorOption.multiCursorPaste */)\n            || e.hasChanged(80 /* EditorOption.multiCursorLimit */)\n            || e.hasChanged(6 /* EditorOption.autoClosingBrackets */)\n            || e.hasChanged(7 /* EditorOption.autoClosingComments */)\n            || e.hasChanged(11 /* EditorOption.autoClosingQuotes */)\n            || e.hasChanged(9 /* EditorOption.autoClosingDelete */)\n            || e.hasChanged(10 /* EditorOption.autoClosingOvertype */)\n            || e.hasChanged(14 /* EditorOption.autoSurround */)\n            || e.hasChanged(129 /* EditorOption.useTabStops */)\n            || e.hasChanged(50 /* EditorOption.fontInfo */)\n            || e.hasChanged(92 /* EditorOption.readOnly */)\n            || e.hasChanged(131 /* EditorOption.wordSegmenterLocales */));\n    }\n    constructor(languageId, modelOptions, configuration, languageConfigurationService) {\n        this.languageConfigurationService = languageConfigurationService;\n        this._cursorMoveConfigurationBrand = undefined;\n        this._languageId = languageId;\n        const options = configuration.options;\n        const layoutInfo = options.get(146 /* EditorOption.layoutInfo */);\n        const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n        this.readOnly = options.get(92 /* EditorOption.readOnly */);\n        this.tabSize = modelOptions.tabSize;\n        this.indentSize = modelOptions.indentSize;\n        this.insertSpaces = modelOptions.insertSpaces;\n        this.stickyTabStops = options.get(117 /* EditorOption.stickyTabStops */);\n        this.lineHeight = fontInfo.lineHeight;\n        this.typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n        this.pageSize = Math.max(1, Math.floor(layoutInfo.height / this.lineHeight) - 2);\n        this.useTabStops = options.get(129 /* EditorOption.useTabStops */);\n        this.wordSeparators = options.get(132 /* EditorOption.wordSeparators */);\n        this.emptySelectionClipboard = options.get(37 /* EditorOption.emptySelectionClipboard */);\n        this.copyWithSyntaxHighlighting = options.get(25 /* EditorOption.copyWithSyntaxHighlighting */);\n        this.multiCursorMergeOverlapping = options.get(77 /* EditorOption.multiCursorMergeOverlapping */);\n        this.multiCursorPaste = options.get(79 /* EditorOption.multiCursorPaste */);\n        this.multiCursorLimit = options.get(80 /* EditorOption.multiCursorLimit */);\n        this.autoClosingBrackets = options.get(6 /* EditorOption.autoClosingBrackets */);\n        this.autoClosingComments = options.get(7 /* EditorOption.autoClosingComments */);\n        this.autoClosingQuotes = options.get(11 /* EditorOption.autoClosingQuotes */);\n        this.autoClosingDelete = options.get(9 /* EditorOption.autoClosingDelete */);\n        this.autoClosingOvertype = options.get(10 /* EditorOption.autoClosingOvertype */);\n        this.autoSurround = options.get(14 /* EditorOption.autoSurround */);\n        this.autoIndent = options.get(12 /* EditorOption.autoIndent */);\n        this.wordSegmenterLocales = options.get(131 /* EditorOption.wordSegmenterLocales */);\n        this.surroundingPairs = {};\n        this._electricChars = null;\n        this.shouldAutoCloseBefore = {\n            quote: this._getShouldAutoClose(languageId, this.autoClosingQuotes, true),\n            comment: this._getShouldAutoClose(languageId, this.autoClosingComments, false),\n            bracket: this._getShouldAutoClose(languageId, this.autoClosingBrackets, false),\n        };\n        this.autoClosingPairs = this.languageConfigurationService.getLanguageConfiguration(languageId).getAutoClosingPairs();\n        const surroundingPairs = this.languageConfigurationService.getLanguageConfiguration(languageId).getSurroundingPairs();\n        if (surroundingPairs) {\n            for (const pair of surroundingPairs) {\n                this.surroundingPairs[pair.open] = pair.close;\n            }\n        }\n        const commentsConfiguration = this.languageConfigurationService.getLanguageConfiguration(languageId).comments;\n        this.blockCommentStartToken = commentsConfiguration?.blockCommentStartToken ?? null;\n    }\n    get electricChars() {\n        if (!this._electricChars) {\n            this._electricChars = {};\n            const electricChars = this.languageConfigurationService.getLanguageConfiguration(this._languageId).electricCharacter?.getElectricCharacters();\n            if (electricChars) {\n                for (const char of electricChars) {\n                    this._electricChars[char] = true;\n                }\n            }\n        }\n        return this._electricChars;\n    }\n    /**\n     * Should return opening bracket type to match indentation with\n     */\n    onElectricCharacter(character, context, column) {\n        const scopedLineTokens = createScopedLineTokens(context, column - 1);\n        const electricCharacterSupport = this.languageConfigurationService.getLanguageConfiguration(scopedLineTokens.languageId).electricCharacter;\n        if (!electricCharacterSupport) {\n            return null;\n        }\n        return electricCharacterSupport.onElectricCharacter(character, scopedLineTokens, column - scopedLineTokens.firstCharOffset);\n    }\n    normalizeIndentation(str) {\n        return normalizeIndentation(str, this.indentSize, this.insertSpaces);\n    }\n    _getShouldAutoClose(languageId, autoCloseConfig, forQuotes) {\n        switch (autoCloseConfig) {\n            case 'beforeWhitespace':\n                return autoCloseBeforeWhitespace;\n            case 'languageDefined':\n                return this._getLanguageDefinedShouldAutoClose(languageId, forQuotes);\n            case 'always':\n                return autoCloseAlways;\n            case 'never':\n                return autoCloseNever;\n        }\n    }\n    _getLanguageDefinedShouldAutoClose(languageId, forQuotes) {\n        const autoCloseBeforeSet = this.languageConfigurationService.getLanguageConfiguration(languageId).getAutoCloseBeforeSet(forQuotes);\n        return c => autoCloseBeforeSet.indexOf(c) !== -1;\n    }\n    /**\n     * Returns a visible column from a column.\n     * @see {@link CursorColumns}\n     */\n    visibleColumnFromColumn(model, position) {\n        return CursorColumns.visibleColumnFromColumn(model.getLineContent(position.lineNumber), position.column, this.tabSize);\n    }\n    /**\n     * Returns a visible column from a column.\n     * @see {@link CursorColumns}\n     */\n    columnFromVisibleColumn(model, lineNumber, visibleColumn) {\n        const result = CursorColumns.columnFromVisibleColumn(model.getLineContent(lineNumber), visibleColumn, this.tabSize);\n        const minColumn = model.getLineMinColumn(lineNumber);\n        if (result < minColumn) {\n            return minColumn;\n        }\n        const maxColumn = model.getLineMaxColumn(lineNumber);\n        if (result > maxColumn) {\n            return maxColumn;\n        }\n        return result;\n    }\n}\nexport class CursorState {\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 selection = Selection.liftSelection(modelSelection);\n        const modelState = new SingleCursorState(Range.fromPositions(selection.getSelectionStart()), 0 /* SelectionStartKind.Simple */, 0, selection.getPosition(), 0);\n        return CursorState.fromModelState(modelState);\n    }\n    static fromModelSelections(modelSelections) {\n        const 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    constructor(modelState, viewState) {\n        this._cursorStateBrand = undefined;\n        this.modelState = modelState;\n        this.viewState = viewState;\n    }\n    equals(other) {\n        return (this.viewState.equals(other.viewState) && this.modelState.equals(other.modelState));\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}\n/**\n * Represents the cursor state on either the model or on the view model.\n */\nexport class SingleCursorState {\n    constructor(selectionStart, selectionStartKind, selectionStartLeftoverVisibleColumns, position, leftoverVisibleColumns) {\n        this.selectionStart = selectionStart;\n        this.selectionStartKind = selectionStartKind;\n        this.selectionStartLeftoverVisibleColumns = selectionStartLeftoverVisibleColumns;\n        this.position = position;\n        this.leftoverVisibleColumns = leftoverVisibleColumns;\n        this._singleCursorStateBrand = undefined;\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.selectionStartKind === other.selectionStartKind\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.selectionStartKind, this.selectionStartLeftoverVisibleColumns, new Position(lineNumber, column), leftoverVisibleColumns);\n        }\n        else {\n            // move everything\n            return new SingleCursorState(new Range(lineNumber, column, lineNumber, column), 0 /* SelectionStartKind.Simple */, leftoverVisibleColumns, new Position(lineNumber, column), leftoverVisibleColumns);\n        }\n    }\n    static _computeSelection(selectionStart, position) {\n        if (selectionStart.isEmpty() || !position.isBeforeOrEqual(selectionStart.getStartPosition())) {\n            return Selection.fromPositions(selectionStart.getStartPosition(), position);\n        }\n        else {\n            return Selection.fromPositions(selectionStart.getEndPosition(), position);\n        }\n    }\n}\nexport class EditOperationResult {\n    constructor(type, commands, opts) {\n        this._editOperationResultBrand = undefined;\n        this.type = type;\n        this.commands = commands;\n        this.shouldPushStackElementBefore = opts.shouldPushStackElementBefore;\n        this.shouldPushStackElementAfter = opts.shouldPushStackElementAfter;\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 { 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        const lineCount = Math.abs(toLineNumber - fromLineNumber) + 1;\n        const reversed = (fromLineNumber > toLineNumber);\n        const isRTL = (fromVisibleColumn > toVisibleColumn);\n        const isLTR = (fromVisibleColumn < toVisibleColumn);\n        const result = [];\n        // console.log(`fromVisibleColumn: ${fromVisibleColumn}, toVisibleColumn: ${toVisibleColumn}`);\n        for (let i = 0; i < lineCount; i++) {\n            const lineNumber = fromLineNumber + (reversed ? -i : i);\n            const startColumn = config.columnFromVisibleColumn(model, lineNumber, fromVisibleColumn);\n            const endColumn = config.columnFromVisibleColumn(model, lineNumber, toVisibleColumn);\n            const visibleStartColumn = config.visibleColumnFromColumn(model, new Position(lineNumber, startColumn));\n            const visibleEndColumn = config.visibleColumnFromColumn(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 /* SelectionStartKind.Simple */, 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 /* SelectionStartKind.Simple */, 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 = config.visibleColumnFromColumn(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 { 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        const inverseEditOperations = helper.getInverseEditOperations();\n        const srcRange = inverseEditOperations[0].range;\n        return Selection.fromPositions(srcRange.getEndPosition());\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 Selection.fromRange(srcRange, 0 /* SelectionDirection.LTR */);\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        const inverseEditOperations = helper.getInverseEditOperations();\n        const srcRange = inverseEditOperations[0].range;\n        return Selection.fromPositions(srcRange.getStartPosition());\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        const inverseEditOperations = helper.getInverseEditOperations();\n        const srcRange = inverseEditOperations[0].range;\n        return Selection.fromPositions(srcRange.getEndPosition().delta(this._lineNumberDeltaOffset, 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 '../core/cursorColumns.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { AtomicTabMoveOperations } from './cursorAtomicMoveOperations.js';\nimport { SingleCursorState } from '../cursorCommon.js';\nexport class CursorPosition {\n    constructor(lineNumber, column, leftoverVisibleColumns) {\n        this._cursorPositionBrand = undefined;\n        this.lineNumber = lineNumber;\n        this.column = column;\n        this.leftoverVisibleColumns = leftoverVisibleColumns;\n    }\n}\nexport class MoveOperations {\n    static leftPosition(model, position) {\n        if (position.column > model.getLineMinColumn(position.lineNumber)) {\n            return position.delta(undefined, -strings.prevCharLength(model.getLineContent(position.lineNumber), position.column - 1));\n        }\n        else if (position.lineNumber > 1) {\n            const newLineNumber = position.lineNumber - 1;\n            return new Position(newLineNumber, model.getLineMaxColumn(newLineNumber));\n        }\n        else {\n            return position;\n        }\n    }\n    static leftPositionAtomicSoftTabs(model, position, tabSize) {\n        if (position.column <= model.getLineIndentColumn(position.lineNumber)) {\n            const minColumn = model.getLineMinColumn(position.lineNumber);\n            const lineContent = model.getLineContent(position.lineNumber);\n            const newPosition = AtomicTabMoveOperations.atomicPosition(lineContent, position.column - 1, tabSize, 0 /* Direction.Left */);\n            if (newPosition !== -1 && newPosition + 1 >= minColumn) {\n                return new Position(position.lineNumber, newPosition + 1);\n            }\n        }\n        return this.leftPosition(model, position);\n    }\n    static left(config, model, position) {\n        const pos = config.stickyTabStops\n            ? MoveOperations.leftPositionAtomicSoftTabs(model, position, config.tabSize)\n            : MoveOperations.leftPosition(model, position);\n        return new CursorPosition(pos.lineNumber, pos.column, 0);\n    }\n    /**\n     * @param noOfColumns Must be either `1`\n     * or `Math.round(viewModel.getLineContent(viewLineNumber).length / 2)` (for half lines).\n    */\n    static moveLeft(config, model, cursor, inSelectionMode, noOfColumns) {\n        let lineNumber, column;\n        if (cursor.hasSelection() && !inSelectionMode) {\n            // If the user has a selection and does not want to extend it,\n            // put the cursor at the beginning of the selection.\n            lineNumber = cursor.selection.startLineNumber;\n            column = cursor.selection.startColumn;\n        }\n        else {\n            // This has no effect if noOfColumns === 1.\n            // It is ok to do so in the half-line scenario.\n            const pos = cursor.position.delta(undefined, -(noOfColumns - 1));\n            // We clip the position before normalization, as normalization is not defined\n            // for possibly negative columns.\n            const normalizedPos = model.normalizePosition(MoveOperations.clipPositionColumn(pos, model), 0 /* PositionAffinity.Left */);\n            const p = MoveOperations.left(config, model, normalizedPos);\n            lineNumber = p.lineNumber;\n            column = p.column;\n        }\n        return cursor.move(inSelectionMode, lineNumber, column, 0);\n    }\n    /**\n     * Adjusts the column so that it is within min/max of the line.\n    */\n    static clipPositionColumn(position, model) {\n        return new Position(position.lineNumber, MoveOperations.clipRange(position.column, model.getLineMinColumn(position.lineNumber), model.getLineMaxColumn(position.lineNumber)));\n    }\n    static clipRange(value, min, max) {\n        if (value < min) {\n            return min;\n        }\n        if (value > max) {\n            return max;\n        }\n        return value;\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        if (column < model.getLineIndentColumn(lineNumber)) {\n            const lineContent = model.getLineContent(lineNumber);\n            const newPosition = AtomicTabMoveOperations.atomicPosition(lineContent, column - 1, tabSize, 1 /* Direction.Right */);\n            if (newPosition !== -1) {\n                return new Position(lineNumber, newPosition + 1);\n            }\n        }\n        return this.rightPosition(model, lineNumber, column);\n    }\n    static right(config, model, position) {\n        const pos = config.stickyTabStops\n            ? MoveOperations.rightPositionAtomicSoftTabs(model, position.lineNumber, position.column, config.tabSize, config.indentSize)\n            : MoveOperations.rightPosition(model, position.lineNumber, position.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            const pos = cursor.position.delta(undefined, noOfColumns - 1);\n            const normalizedPos = model.normalizePosition(MoveOperations.clipPositionColumn(pos, model), 1 /* PositionAffinity.Right */);\n            const r = MoveOperations.right(config, model, normalizedPos);\n            lineNumber = r.lineNumber;\n            column = r.column;\n        }\n        return cursor.move(inSelectionMode, lineNumber, column, 0);\n    }\n    static vertical(config, model, lineNumber, column, leftoverVisibleColumns, newLineNumber, allowMoveOnEdgeLine, normalizationAffinity) {\n        const currentVisibleColumn = CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize) + leftoverVisibleColumns;\n        const lineCount = model.getLineCount();\n        const wasOnFirstPosition = (lineNumber === 1 && column === 1);\n        const wasOnLastPosition = (lineNumber === lineCount && column === model.getLineMaxColumn(lineNumber));\n        const wasAtEdgePosition = (newLineNumber < lineNumber ? wasOnFirstPosition : wasOnLastPosition);\n        lineNumber = newLineNumber;\n        if (lineNumber < 1) {\n            lineNumber = 1;\n            if (allowMoveOnEdgeLine) {\n                column = model.getLineMinColumn(lineNumber);\n            }\n            else {\n                column = Math.min(model.getLineMaxColumn(lineNumber), column);\n            }\n        }\n        else if (lineNumber > lineCount) {\n            lineNumber = lineCount;\n            if (allowMoveOnEdgeLine) {\n                column = model.getLineMaxColumn(lineNumber);\n            }\n            else {\n                column = Math.min(model.getLineMaxColumn(lineNumber), column);\n            }\n        }\n        else {\n            column = config.columnFromVisibleColumn(model, lineNumber, currentVisibleColumn);\n        }\n        if (wasAtEdgePosition) {\n            leftoverVisibleColumns = 0;\n        }\n        else {\n            leftoverVisibleColumns = currentVisibleColumn - CursorColumns.visibleColumnFromColumn(model.getLineContent(lineNumber), column, config.tabSize);\n        }\n        if (normalizationAffinity !== undefined) {\n            const position = new Position(lineNumber, column);\n            const newPosition = model.normalizePosition(position, normalizationAffinity);\n            leftoverVisibleColumns = leftoverVisibleColumns + (column - newPosition.column);\n            lineNumber = newPosition.lineNumber;\n            column = newPosition.column;\n        }\n        return new CursorPosition(lineNumber, column, leftoverVisibleColumns);\n    }\n    static down(config, model, lineNumber, column, leftoverVisibleColumns, count, allowMoveOnLastLine) {\n        return this.vertical(config, model, lineNumber, column, leftoverVisibleColumns, lineNumber + count, allowMoveOnLastLine, 4 /* PositionAffinity.RightOfInjectedText */);\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 i = 0;\n        let r;\n        do {\n            r = MoveOperations.down(config, model, lineNumber + i, column, cursor.leftoverVisibleColumns, linesCount, true);\n            const np = model.normalizePosition(new Position(r.lineNumber, r.column), 2 /* PositionAffinity.None */);\n            if (np.lineNumber > lineNumber) {\n                break;\n            }\n        } while (i++ < 10 && lineNumber + i < model.getLineCount());\n        return cursor.move(inSelectionMode, r.lineNumber, r.column, r.leftoverVisibleColumns);\n    }\n    static translateDown(config, model, cursor) {\n        const selection = cursor.selection;\n        const selectionStart = MoveOperations.down(config, model, selection.selectionStartLineNumber, selection.selectionStartColumn, cursor.selectionStartLeftoverVisibleColumns, 1, false);\n        const 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), 0 /* SelectionStartKind.Simple */, selectionStart.leftoverVisibleColumns, new Position(position.lineNumber, position.column), position.leftoverVisibleColumns);\n    }\n    static up(config, model, lineNumber, column, leftoverVisibleColumns, count, allowMoveOnFirstLine) {\n        return this.vertical(config, model, lineNumber, column, leftoverVisibleColumns, lineNumber - count, allowMoveOnFirstLine, 3 /* PositionAffinity.LeftOfInjectedText */);\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        const 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        const selection = cursor.selection;\n        const selectionStart = MoveOperations.up(config, model, selection.selectionStartLineNumber, selection.selectionStartColumn, cursor.selectionStartLeftoverVisibleColumns, 1, false);\n        const 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), 0 /* SelectionStartKind.Simple */, 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        const lineNumber = cursor.position.lineNumber;\n        const minColumn = model.getLineMinColumn(lineNumber);\n        const firstNonBlankColumn = model.getLineFirstNonWhitespaceColumn(lineNumber) || minColumn;\n        let column;\n        const 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        const lineNumber = cursor.position.lineNumber;\n        const maxColumn = model.getLineMaxColumn(lineNumber);\n        return cursor.move(inSelectionMode, lineNumber, maxColumn, sticky ? 1073741824 /* Constants.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        const lastLineNumber = model.getLineCount();\n        const 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 * as strings from '../../../base/common/strings.js';\nimport { ReplaceCommand } from '../commands/replaceCommand.js';\nimport { EditOperationResult, isQuote } from '../cursorCommon.js';\nimport { CursorColumns } from '../core/cursorColumns.js';\nimport { MoveOperations } from './cursorMoveOperations.js';\nimport { Range } from '../core/range.js';\nimport { Position } from '../core/position.js';\nexport class DeleteOperations {\n    static deleteRight(prevEditOperationType, config, model, selections) {\n        const commands = [];\n        let shouldPushStackElementBefore = (prevEditOperationType !== 3 /* EditOperationType.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                const position = selection.getPosition();\n                const rightOfPosition = MoveOperations.right(config, model, position);\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        const 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        const commands = [];\n        let shouldPushStackElementBefore = (prevEditOperationType !== 2 /* EditOperationType.DeletingLeft */);\n        for (let i = 0, len = selections.length; i < len; i++) {\n            const deleteRange = DeleteOperations.getDeleteRange(selections[i], model, config);\n            // Ignore empty delete ranges, as they have no effect\n            // They happen if the cursor is at the beginning of the file.\n            if (deleteRange.isEmpty()) {\n                commands[i] = null;\n                continue;\n            }\n            if (deleteRange.startLineNumber !== deleteRange.endLineNumber) {\n                shouldPushStackElementBefore = true;\n            }\n            commands[i] = new ReplaceCommand(deleteRange, '');\n        }\n        return [shouldPushStackElementBefore, commands];\n    }\n    static getDeleteRange(selection, model, config) {\n        if (!selection.isEmpty()) {\n            return selection;\n        }\n        const position = selection.getPosition();\n        // Unintend when using tab stops and cursor is within indentation\n        if (config.useTabStops && position.column > 1) {\n            const lineContent = model.getLineContent(position.lineNumber);\n            const firstNonWhitespaceIndex = strings.firstNonWhitespaceIndex(lineContent);\n            const lastIndentationColumn = (firstNonWhitespaceIndex === -1\n                ? /* entire string is whitespace */ lineContent.length + 1\n                : firstNonWhitespaceIndex + 1);\n            if (position.column <= lastIndentationColumn) {\n                const fromVisibleColumn = config.visibleColumnFromColumn(model, position);\n                const toVisibleColumn = CursorColumns.prevIndentTabStop(fromVisibleColumn, config.indentSize);\n                const toColumn = config.columnFromVisibleColumn(model, position.lineNumber, toVisibleColumn);\n                return new Range(position.lineNumber, toColumn, position.lineNumber, position.column);\n            }\n        }\n        return Range.fromPositions(DeleteOperations.getPositionAfterDeleteLeft(position, model), position);\n    }\n    static getPositionAfterDeleteLeft(position, model) {\n        if (position.column > 1) {\n            // Convert 1-based columns to 0-based offsets and back.\n            const idx = strings.getLeftDeleteOffset(position.column - 1, model.getLineContent(position.lineNumber));\n            return position.with(undefined, idx + 1);\n        }\n        else if (position.lineNumber > 1) {\n            const newLine = position.lineNumber - 1;\n            return new Position(newLine, model.getLineMaxColumn(newLine));\n        }\n        else {\n            return position;\n        }\n    }\n    static cut(config, model, selections) {\n        const commands = [];\n        let lastCutRange = null;\n        selections.sort((a, b) => Position.compare(a.getStartPosition(), b.getEndPosition()));\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                    const 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 && lastCutRange?.endLineNumber !== position.lineNumber) {\n                        // Cutting the last line & there are more than 1 lines in the model & a previous cut operation does not touch the current cut operation\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                    const deleteSelection = new Range(startLineNumber, startColumn, endLineNumber, endColumn);\n                    lastCutRange = deleteSelection;\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 /* EditOperationType.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 strings from '../../../base/common/strings.js';\nimport { SingleCursorState } from '../cursorCommon.js';\nimport { DeleteOperations } from './cursorDeleteOperations.js';\nimport { getMapForWordSeparators } from '../core/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 _createIntlWord(intlWord, nextCharClass) {\n        // console.log('INTL WORD ==> ' + intlWord.index + ' => ' + intlWord.index + intlWord.segment.length + ':::: <<<' + intlWord.segment + '>>>');\n        return { start: intlWord.index, end: intlWord.index + intlWord.segment.length, wordType: 1 /* WordType.Regular */, nextCharClass: nextCharClass };\n    }\n    static _findPreviousWordOnLine(wordSeparators, model, position) {\n        const lineContent = model.getLineContent(position.lineNumber);\n        return this._doFindPreviousWordOnLine(lineContent, wordSeparators, position);\n    }\n    static _doFindPreviousWordOnLine(lineContent, wordSeparators, position) {\n        let wordType = 0 /* WordType.None */;\n        const previousIntlWord = wordSeparators.findPrevIntlWordBeforeOrAtOffset(lineContent, position.column - 2);\n        for (let chIndex = position.column - 2; chIndex >= 0; chIndex--) {\n            const chCode = lineContent.charCodeAt(chIndex);\n            const chClass = wordSeparators.get(chCode);\n            if (previousIntlWord && chIndex === previousIntlWord.index) {\n                return this._createIntlWord(previousIntlWord, chClass);\n            }\n            if (chClass === 0 /* WordCharacterClass.Regular */) {\n                if (wordType === 2 /* WordType.Separator */) {\n                    return this._createWord(lineContent, wordType, chClass, chIndex + 1, this._findEndOfWord(lineContent, wordSeparators, wordType, chIndex + 1));\n                }\n                wordType = 1 /* WordType.Regular */;\n            }\n            else if (chClass === 2 /* WordCharacterClass.WordSeparator */) {\n                if (wordType === 1 /* WordType.Regular */) {\n                    return this._createWord(lineContent, wordType, chClass, chIndex + 1, this._findEndOfWord(lineContent, wordSeparators, wordType, chIndex + 1));\n                }\n                wordType = 2 /* WordType.Separator */;\n            }\n            else if (chClass === 1 /* WordCharacterClass.Whitespace */) {\n                if (wordType !== 0 /* WordType.None */) {\n                    return this._createWord(lineContent, wordType, chClass, chIndex + 1, this._findEndOfWord(lineContent, wordSeparators, wordType, chIndex + 1));\n                }\n            }\n        }\n        if (wordType !== 0 /* WordType.None */) {\n            return this._createWord(lineContent, wordType, 1 /* WordCharacterClass.Whitespace */, 0, this._findEndOfWord(lineContent, wordSeparators, wordType, 0));\n        }\n        return null;\n    }\n    static _findEndOfWord(lineContent, wordSeparators, wordType, startIndex) {\n        const nextIntlWord = wordSeparators.findNextIntlWordAtOrAfterOffset(lineContent, startIndex);\n        const len = lineContent.length;\n        for (let chIndex = startIndex; chIndex < len; chIndex++) {\n            const chCode = lineContent.charCodeAt(chIndex);\n            const chClass = wordSeparators.get(chCode);\n            if (nextIntlWord && chIndex === nextIntlWord.index + nextIntlWord.segment.length) {\n                return chIndex;\n            }\n            if (chClass === 1 /* WordCharacterClass.Whitespace */) {\n                return chIndex;\n            }\n            if (wordType === 1 /* WordType.Regular */ && chClass === 2 /* WordCharacterClass.WordSeparator */) {\n                return chIndex;\n            }\n            if (wordType === 2 /* WordType.Separator */ && chClass === 0 /* WordCharacterClass.Regular */) {\n                return chIndex;\n            }\n        }\n        return len;\n    }\n    static _findNextWordOnLine(wordSeparators, model, position) {\n        const lineContent = model.getLineContent(position.lineNumber);\n        return this._doFindNextWordOnLine(lineContent, wordSeparators, position);\n    }\n    static _doFindNextWordOnLine(lineContent, wordSeparators, position) {\n        let wordType = 0 /* WordType.None */;\n        const len = lineContent.length;\n        const nextIntlWord = wordSeparators.findNextIntlWordAtOrAfterOffset(lineContent, position.column - 1);\n        for (let chIndex = position.column - 1; chIndex < len; chIndex++) {\n            const chCode = lineContent.charCodeAt(chIndex);\n            const chClass = wordSeparators.get(chCode);\n            if (nextIntlWord && chIndex === nextIntlWord.index) {\n                return this._createIntlWord(nextIntlWord, chClass);\n            }\n            if (chClass === 0 /* WordCharacterClass.Regular */) {\n                if (wordType === 2 /* WordType.Separator */) {\n                    return this._createWord(lineContent, wordType, chClass, this._findStartOfWord(lineContent, wordSeparators, wordType, chIndex - 1), chIndex);\n                }\n                wordType = 1 /* WordType.Regular */;\n            }\n            else if (chClass === 2 /* WordCharacterClass.WordSeparator */) {\n                if (wordType === 1 /* WordType.Regular */) {\n                    return this._createWord(lineContent, wordType, chClass, this._findStartOfWord(lineContent, wordSeparators, wordType, chIndex - 1), chIndex);\n                }\n                wordType = 2 /* WordType.Separator */;\n            }\n            else if (chClass === 1 /* WordCharacterClass.Whitespace */) {\n                if (wordType !== 0 /* WordType.None */) {\n                    return this._createWord(lineContent, wordType, chClass, this._findStartOfWord(lineContent, wordSeparators, wordType, chIndex - 1), chIndex);\n                }\n            }\n        }\n        if (wordType !== 0 /* WordType.None */) {\n            return this._createWord(lineContent, wordType, 1 /* WordCharacterClass.Whitespace */, this._findStartOfWord(lineContent, wordSeparators, wordType, len - 1), len);\n        }\n        return null;\n    }\n    static _findStartOfWord(lineContent, wordSeparators, wordType, startIndex) {\n        const previousIntlWord = wordSeparators.findPrevIntlWordBeforeOrAtOffset(lineContent, startIndex);\n        for (let chIndex = startIndex; chIndex >= 0; chIndex--) {\n            const chCode = lineContent.charCodeAt(chIndex);\n            const chClass = wordSeparators.get(chCode);\n            if (previousIntlWord && chIndex === previousIntlWord.index) {\n                return chIndex;\n            }\n            if (chClass === 1 /* WordCharacterClass.Whitespace */) {\n                return chIndex + 1;\n            }\n            if (wordType === 1 /* WordType.Regular */ && chClass === 2 /* WordCharacterClass.WordSeparator */) {\n                return chIndex + 1;\n            }\n            if (wordType === 2 /* WordType.Separator */ && chClass === 0 /* WordCharacterClass.Regular */) {\n                return chIndex + 1;\n            }\n        }\n        return 0;\n    }\n    static moveWordLeft(wordSeparators, model, position, wordNavigationType, hasMulticursor) {\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 /* WordNavigationType.WordStart */) {\n            return new Position(lineNumber, prevWordOnLine ? prevWordOnLine.start + 1 : 1);\n        }\n        if (wordNavigationType === 1 /* WordNavigationType.WordStartFast */) {\n            if (!hasMulticursor // avoid having multiple cursors stop at different locations when doing word start\n                && prevWordOnLine\n                && prevWordOnLine.wordType === 2 /* WordType.Separator */\n                && prevWordOnLine.end - prevWordOnLine.start === 1\n                && prevWordOnLine.nextCharClass === 0 /* WordCharacterClass.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 /* WordNavigationType.WordAccessibility */) {\n            while (prevWordOnLine\n                && prevWordOnLine.wordType === 2 /* WordType.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 /* CharCode.Underline */ && right !== 95 /* CharCode.Underline */) {\n                // snake_case_variables\n                return new Position(lineNumber, column);\n            }\n            if (left === 45 /* CharCode.Dash */ && right !== 45 /* CharCode.Dash */) {\n                // kebab-case-variables\n                return new Position(lineNumber, column);\n            }\n            if ((strings.isLowerAsciiLetter(left) || strings.isAsciiDigit(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) || strings.isAsciiDigit(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 /* WordNavigationType.WordEnd */) {\n            if (nextWordOnLine && nextWordOnLine.wordType === 2 /* WordType.Separator */) {\n                if (nextWordOnLine.end - nextWordOnLine.start === 1 && nextWordOnLine.nextCharClass === 0 /* WordCharacterClass.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 /* WordNavigationType.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 /* WordType.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 /* CharCode.Underline */ && right === 95 /* CharCode.Underline */) {\n                // snake_case_variables\n                return new Position(lineNumber, column);\n            }\n            if (left !== 45 /* CharCode.Dash */ && right === 45 /* CharCode.Dash */) {\n                // kebab-case-variables\n                return new Position(lineNumber, column);\n            }\n            if ((strings.isLowerAsciiLetter(left) || strings.isAsciiDigit(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) || strings.isAsciiDigit(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            const 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 /* WordNavigationType.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        const 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 /* CharCode.Space */ || charCode === 9 /* CharCode.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        const len = str.length;\n        for (let chIndex = startIndex; chIndex < len; chIndex++) {\n            const 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            const 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 /* WordNavigationType.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, _intlSegmenterLocales, position) {\n        const wordSeparators = getMapForWordSeparators(_wordSeparators, _intlSegmenterLocales);\n        const prevWord = WordOperations._findPreviousWordOnLine(wordSeparators, model, position);\n        if (prevWord && prevWord.wordType === 1 /* WordType.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 /* WordType.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, config.wordSegmenterLocales);\n        const prevWord = WordOperations._findPreviousWordOnLine(wordSeparators, model, position);\n        const 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 /* WordType.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 /* WordType.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), 1 /* SelectionStartKind.Word */, 0, new Position(position.lineNumber, endColumn), 0);\n        }\n        let startColumn;\n        let endColumn;\n        if (prevWord && prevWord.wordType === 1 /* WordType.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 /* WordType.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        const 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            const possiblePosition = new Position(lineNumber, column);\n            if (cursor.selectionStart.containsPosition(possiblePosition)) {\n                column = cursor.selectionStart.endColumn;\n            }\n        }\n        else {\n            column = endColumn;\n            const 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 /* WordNavigationType.WordStart */),\n            WordOperations.deleteWordLeft(ctx, 2 /* WordNavigationType.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 /* WordNavigationType.WordStart */),\n            WordOperations.deleteWordRight(ctx, 2 /* WordNavigationType.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, hasMulticursor) {\n        const candidates = enforceDefined([\n            WordOperations.moveWordLeft(wordSeparators, model, position, 0 /* WordNavigationType.WordStart */, hasMulticursor),\n            WordOperations.moveWordLeft(wordSeparators, model, position, 2 /* WordNavigationType.WordEnd */, hasMulticursor),\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 /* WordNavigationType.WordStart */),\n            WordOperations.moveWordRight(wordSeparators, model, position, 2 /* WordNavigationType.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 * 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        const result = [];\n        let 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        const result = [];\n        let 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        const 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        const 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        const 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 /* SelectionStartKind.Simple */, 0, new Position(endLineNumber, endColumn), 0));\n        }\n        return result;\n    }\n    static moveToBeginningOfBuffer(viewModel, cursors, inSelectionMode) {\n        const 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        const 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 /* SelectionStartKind.Simple */, 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) {\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), 2 /* SelectionStartKind.Line */, 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(true, 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(true, selectToViewLineNumber, selectToViewColumn, 0));\n        }\n        else {\n            const endPositionOfSelectionStart = cursor.modelState.selectionStart.getEndPosition();\n            return CursorState.fromModelState(cursor.modelState.move(true, 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 /* SelectionStartKind.Simple */, 0, new Position(lineNumber, column), 0));\n    }\n    static moveTo(viewModel, cursor, inSelectionMode, _position, _viewPosition) {\n        if (inSelectionMode) {\n            if (cursor.modelState.selectionStartKind === 1 /* SelectionStartKind.Word */) {\n                return this.word(viewModel, cursor, inSelectionMode, _position);\n            }\n            if (cursor.modelState.selectionStartKind === 2 /* SelectionStartKind.Line */) {\n                return this.line(viewModel, cursor, inSelectionMode, _position, _viewPosition);\n            }\n        }\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 /* CursorMove.Direction.Left */: {\n                if (unit === 4 /* CursorMove.Unit.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 /* CursorMove.Direction.Right */: {\n                if (unit === 4 /* CursorMove.Unit.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 /* CursorMove.Direction.Up */: {\n                if (unit === 2 /* CursorMove.Unit.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 /* CursorMove.Direction.Down */: {\n                if (unit === 2 /* CursorMove.Unit.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 /* CursorMove.Direction.PrevBlankLine */: {\n                if (unit === 2 /* CursorMove.Unit.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 /* CursorMove.Direction.NextBlankLine */: {\n                if (unit === 2 /* CursorMove.Unit.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 /* CursorMove.Direction.WrappedLineStart */: {\n                // Move to the beginning of the current view line\n                return this._moveToViewMinColumn(viewModel, cursors, inSelectionMode);\n            }\n            case 7 /* CursorMove.Direction.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 /* CursorMove.Direction.WrappedLineColumnCenter */: {\n                // Move to the \"center\" of the current view line\n                return this._moveToViewCenterColumn(viewModel, cursors, inSelectionMode);\n            }\n            case 9 /* CursorMove.Direction.WrappedLineEnd */: {\n                // Move to the end of the current view line\n                return this._moveToViewMaxColumn(viewModel, cursors, inSelectionMode);\n            }\n            case 10 /* CursorMove.Direction.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 /* CursorMove.Direction.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 /* CursorMove.Direction.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 /* CursorMove.Direction.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 /* CursorMove.Direction.ViewPortIfOutside */: {\n                // Move to a position inside the viewport\n                const 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        const 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            let newViewLineNumber;\n            if (viewLineNumber > visibleViewRange.endLineNumber - 1) {\n                newViewLineNumber = visibleViewRange.endLineNumber - 1;\n            }\n            else if (viewLineNumber < visibleViewRange.startLineNumber) {\n                newViewLineNumber = visibleViewRange.startLineNumber;\n            }\n            else {\n                newViewLineNumber = viewLineNumber;\n            }\n            const position = MoveOperations.vertical(viewModel.cursorConfig, viewModel, viewLineNumber, cursor.viewState.position.column, cursor.viewState.leftoverVisibleColumns, newViewLineNumber, false);\n            return CursorState.fromViewState(cursor.viewState.move(inSelectionMode, position.lineNumber, position.column, position.leftoverVisibleColumns));\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        return cursors.map(cursor => CursorState.fromViewState(MoveOperations.moveLeft(viewModel.cursorConfig, viewModel, cursor.viewState, inSelectionMode, noOfColumns)));\n    }\n    static _moveHalfLineLeft(viewModel, cursors, inSelectionMode) {\n        const 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.getLineLength(viewLineNumber) / 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        return cursors.map(cursor => CursorState.fromViewState(MoveOperations.moveRight(viewModel.cursorConfig, viewModel, cursor.viewState, inSelectionMode, noOfColumns)));\n    }\n    static _moveHalfLineRight(viewModel, cursors, inSelectionMode) {\n        const 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.getLineLength(viewLineNumber) / 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        const 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        const 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        const 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        const 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        const 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        const 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        const 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        const 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        const 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        const 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.metadata = {\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 /* Direction.Left */;\n                break;\n            case CursorMove.RawDirection.Right:\n                direction = 1 /* Direction.Right */;\n                break;\n            case CursorMove.RawDirection.Up:\n                direction = 2 /* Direction.Up */;\n                break;\n            case CursorMove.RawDirection.Down:\n                direction = 3 /* Direction.Down */;\n                break;\n            case CursorMove.RawDirection.PrevBlankLine:\n                direction = 4 /* Direction.PrevBlankLine */;\n                break;\n            case CursorMove.RawDirection.NextBlankLine:\n                direction = 5 /* Direction.NextBlankLine */;\n                break;\n            case CursorMove.RawDirection.WrappedLineStart:\n                direction = 6 /* Direction.WrappedLineStart */;\n                break;\n            case CursorMove.RawDirection.WrappedLineFirstNonWhitespaceCharacter:\n                direction = 7 /* Direction.WrappedLineFirstNonWhitespaceCharacter */;\n                break;\n            case CursorMove.RawDirection.WrappedLineColumnCenter:\n                direction = 8 /* Direction.WrappedLineColumnCenter */;\n                break;\n            case CursorMove.RawDirection.WrappedLineEnd:\n                direction = 9 /* Direction.WrappedLineEnd */;\n                break;\n            case CursorMove.RawDirection.WrappedLineLastNonWhitespaceCharacter:\n                direction = 10 /* Direction.WrappedLineLastNonWhitespaceCharacter */;\n                break;\n            case CursorMove.RawDirection.ViewPortTop:\n                direction = 11 /* Direction.ViewPortTop */;\n                break;\n            case CursorMove.RawDirection.ViewPortBottom:\n                direction = 13 /* Direction.ViewPortBottom */;\n                break;\n            case CursorMove.RawDirection.ViewPortCenter:\n                direction = 12 /* Direction.ViewPortCenter */;\n                break;\n            case CursorMove.RawDirection.ViewPortIfOutside:\n                direction = 14 /* Direction.ViewPortIfOutside */;\n                break;\n            default:\n                // illegal arguments\n                return null;\n        }\n        let unit = 0 /* Unit.None */;\n        switch (args.by) {\n            case CursorMove.RawUnit.Line:\n                unit = 1 /* Unit.Line */;\n                break;\n            case CursorMove.RawUnit.WrappedLine:\n                unit = 2 /* Unit.WrappedLine */;\n                break;\n            case CursorMove.RawUnit.Character:\n                unit = 3 /* Unit.Character */;\n                break;\n            case CursorMove.RawUnit.HalfLine:\n                unit = 4 /* Unit.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 * as strings from '../../../../base/common/strings.js';\nimport { createScopedLineTokens } from '../supports.js';\nimport { LineTokens } from '../../tokens/lineTokens.js';\n/**\n * This class is a wrapper class around {@link IndentRulesSupport}.\n * It processes the lines by removing the language configuration brackets from the regex, string and comment tokens.\n * It then calls into the {@link IndentRulesSupport} to validate the indentation conditions.\n */\nexport class ProcessedIndentRulesSupport {\n    constructor(model, indentRulesSupport, languageConfigurationService) {\n        this._indentRulesSupport = indentRulesSupport;\n        this._indentationLineProcessor = new IndentationLineProcessor(model, languageConfigurationService);\n    }\n    /**\n     * Apply the new indentation and return whether the indentation level should be increased after the given line number\n     */\n    shouldIncrease(lineNumber, newIndentation) {\n        const processedLine = this._indentationLineProcessor.getProcessedLine(lineNumber, newIndentation);\n        return this._indentRulesSupport.shouldIncrease(processedLine);\n    }\n    /**\n     * Apply the new indentation and return whether the indentation level should be decreased after the given line number\n     */\n    shouldDecrease(lineNumber, newIndentation) {\n        const processedLine = this._indentationLineProcessor.getProcessedLine(lineNumber, newIndentation);\n        return this._indentRulesSupport.shouldDecrease(processedLine);\n    }\n    /**\n     * Apply the new indentation and return whether the indentation level should remain unchanged at the given line number\n     */\n    shouldIgnore(lineNumber, newIndentation) {\n        const processedLine = this._indentationLineProcessor.getProcessedLine(lineNumber, newIndentation);\n        return this._indentRulesSupport.shouldIgnore(processedLine);\n    }\n    /**\n     * Apply the new indentation and return whether the indentation level should increase on the line after the given line number\n     */\n    shouldIndentNextLine(lineNumber, newIndentation) {\n        const processedLine = this._indentationLineProcessor.getProcessedLine(lineNumber, newIndentation);\n        return this._indentRulesSupport.shouldIndentNextLine(processedLine);\n    }\n}\n/**\n * This class fetches the processed text around a range which can be used for indentation evaluation.\n * It returns:\n * - The processed text before the given range and on the same start line\n * - The processed text after the given range and on the same end line\n * - The processed text on the previous line\n */\nexport class IndentationContextProcessor {\n    constructor(model, languageConfigurationService) {\n        this.model = model;\n        this.indentationLineProcessor = new IndentationLineProcessor(model, languageConfigurationService);\n    }\n    /**\n     * Returns the processed text, stripped from the language configuration brackets within the string, comment and regex tokens, around the given range\n     */\n    getProcessedTokenContextAroundRange(range) {\n        const beforeRangeProcessedTokens = this._getProcessedTokensBeforeRange(range);\n        const afterRangeProcessedTokens = this._getProcessedTokensAfterRange(range);\n        const previousLineProcessedTokens = this._getProcessedPreviousLineTokens(range);\n        return { beforeRangeProcessedTokens, afterRangeProcessedTokens, previousLineProcessedTokens };\n    }\n    _getProcessedTokensBeforeRange(range) {\n        this.model.tokenization.forceTokenization(range.startLineNumber);\n        const lineTokens = this.model.tokenization.getLineTokens(range.startLineNumber);\n        const scopedLineTokens = createScopedLineTokens(lineTokens, range.startColumn - 1);\n        let slicedTokens;\n        if (isLanguageDifferentFromLineStart(this.model, range.getStartPosition())) {\n            const columnIndexWithinScope = (range.startColumn - 1) - scopedLineTokens.firstCharOffset;\n            const firstCharacterOffset = scopedLineTokens.firstCharOffset;\n            const lastCharacterOffset = firstCharacterOffset + columnIndexWithinScope;\n            slicedTokens = lineTokens.sliceAndInflate(firstCharacterOffset, lastCharacterOffset, 0);\n        }\n        else {\n            const columnWithinLine = range.startColumn - 1;\n            slicedTokens = lineTokens.sliceAndInflate(0, columnWithinLine, 0);\n        }\n        const processedTokens = this.indentationLineProcessor.getProcessedTokens(slicedTokens);\n        return processedTokens;\n    }\n    _getProcessedTokensAfterRange(range) {\n        const position = range.isEmpty() ? range.getStartPosition() : range.getEndPosition();\n        this.model.tokenization.forceTokenization(position.lineNumber);\n        const lineTokens = this.model.tokenization.getLineTokens(position.lineNumber);\n        const scopedLineTokens = createScopedLineTokens(lineTokens, position.column - 1);\n        const columnIndexWithinScope = position.column - 1 - scopedLineTokens.firstCharOffset;\n        const firstCharacterOffset = scopedLineTokens.firstCharOffset + columnIndexWithinScope;\n        const lastCharacterOffset = scopedLineTokens.firstCharOffset + scopedLineTokens.getLineLength();\n        const slicedTokens = lineTokens.sliceAndInflate(firstCharacterOffset, lastCharacterOffset, 0);\n        const processedTokens = this.indentationLineProcessor.getProcessedTokens(slicedTokens);\n        return processedTokens;\n    }\n    _getProcessedPreviousLineTokens(range) {\n        const getScopedLineTokensAtEndColumnOfLine = (lineNumber) => {\n            this.model.tokenization.forceTokenization(lineNumber);\n            const lineTokens = this.model.tokenization.getLineTokens(lineNumber);\n            const endColumnOfLine = this.model.getLineMaxColumn(lineNumber) - 1;\n            const scopedLineTokensAtEndColumn = createScopedLineTokens(lineTokens, endColumnOfLine);\n            return scopedLineTokensAtEndColumn;\n        };\n        this.model.tokenization.forceTokenization(range.startLineNumber);\n        const lineTokens = this.model.tokenization.getLineTokens(range.startLineNumber);\n        const scopedLineTokens = createScopedLineTokens(lineTokens, range.startColumn - 1);\n        const emptyTokens = LineTokens.createEmpty('', scopedLineTokens.languageIdCodec);\n        const previousLineNumber = range.startLineNumber - 1;\n        const isFirstLine = previousLineNumber === 0;\n        if (isFirstLine) {\n            return emptyTokens;\n        }\n        const canScopeExtendOnPreviousLine = scopedLineTokens.firstCharOffset === 0;\n        if (!canScopeExtendOnPreviousLine) {\n            return emptyTokens;\n        }\n        const scopedLineTokensAtEndColumnOfPreviousLine = getScopedLineTokensAtEndColumnOfLine(previousLineNumber);\n        const doesLanguageContinueOnPreviousLine = scopedLineTokens.languageId === scopedLineTokensAtEndColumnOfPreviousLine.languageId;\n        if (!doesLanguageContinueOnPreviousLine) {\n            return emptyTokens;\n        }\n        const previousSlicedLineTokens = scopedLineTokensAtEndColumnOfPreviousLine.toIViewLineTokens();\n        const processedTokens = this.indentationLineProcessor.getProcessedTokens(previousSlicedLineTokens);\n        return processedTokens;\n    }\n}\n/**\n * This class performs the actual processing of the indentation lines.\n * The brackets of the language configuration are removed from the regex, string and comment tokens.\n */\nclass IndentationLineProcessor {\n    constructor(model, languageConfigurationService) {\n        this.model = model;\n        this.languageConfigurationService = languageConfigurationService;\n    }\n    /**\n     * Get the processed line for the given line number and potentially adjust the indentation level.\n     * Remove the language configuration brackets from the regex, string and comment tokens.\n     */\n    getProcessedLine(lineNumber, newIndentation) {\n        const replaceIndentation = (line, newIndentation) => {\n            const currentIndentation = strings.getLeadingWhitespace(line);\n            const adjustedLine = newIndentation + line.substring(currentIndentation.length);\n            return adjustedLine;\n        };\n        this.model.tokenization.forceTokenization?.(lineNumber);\n        const tokens = this.model.tokenization.getLineTokens(lineNumber);\n        let processedLine = this.getProcessedTokens(tokens).getLineContent();\n        if (newIndentation !== undefined) {\n            processedLine = replaceIndentation(processedLine, newIndentation);\n        }\n        return processedLine;\n    }\n    /**\n     * Process the line with the given tokens, remove the language configuration brackets from the regex, string and comment tokens.\n     */\n    getProcessedTokens(tokens) {\n        const shouldRemoveBracketsFromTokenType = (tokenType) => {\n            return tokenType === 2 /* StandardTokenType.String */\n                || tokenType === 3 /* StandardTokenType.RegEx */\n                || tokenType === 1 /* StandardTokenType.Comment */;\n        };\n        const languageId = tokens.getLanguageId(0);\n        const bracketsConfiguration = this.languageConfigurationService.getLanguageConfiguration(languageId).bracketsNew;\n        const bracketsRegExp = bracketsConfiguration.getBracketRegExp({ global: true });\n        const textAndMetadata = [];\n        tokens.forEach((tokenIndex) => {\n            const tokenType = tokens.getStandardTokenType(tokenIndex);\n            let text = tokens.getTokenText(tokenIndex);\n            if (shouldRemoveBracketsFromTokenType(tokenType)) {\n                text = text.replace(bracketsRegExp, '');\n            }\n            const metadata = tokens.getMetadata(tokenIndex);\n            textAndMetadata.push({ text, metadata });\n        });\n        const processedLineTokens = LineTokens.createFromTextAndMetadata(textAndMetadata, tokens.languageIdCodec);\n        return processedLineTokens;\n    }\n}\nexport function isLanguageDifferentFromLineStart(model, position) {\n    model.tokenization.forceTokenization(position.lineNumber);\n    const lineTokens = model.tokenization.getLineTokens(position.lineNumber);\n    const scopedLineTokens = createScopedLineTokens(lineTokens, position.column - 1);\n    const doesScopeStartAtOffsetZero = scopedLineTokens.firstCharOffset === 0;\n    const isScopedLanguageEqualToFirstLanguageOnLine = lineTokens.getLanguageId(0) === scopedLineTokens.languageId;\n    const languageIsDifferentFromLineStart = !doesScopeStartAtOffsetZero && !isScopedLanguageEqualToFirstLanguageOnLine;\n    return languageIsDifferentFromLineStart;\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { IndentAction } from './languageConfiguration.js';\nimport { getIndentationAtPosition } from './languageConfigurationRegistry.js';\nimport { IndentationContextProcessor } from './supports/indentationLineProcessor.js';\nexport function getEnterAction(autoIndent, model, range, languageConfigurationService) {\n    model.tokenization.forceTokenization(range.startLineNumber);\n    const languageId = model.getLanguageIdAtPosition(range.startLineNumber, range.startColumn);\n    const richEditSupport = languageConfigurationService.getLanguageConfiguration(languageId);\n    if (!richEditSupport) {\n        return null;\n    }\n    const indentationContextProcessor = new IndentationContextProcessor(model, languageConfigurationService);\n    const processedContextTokens = indentationContextProcessor.getProcessedTokenContextAroundRange(range);\n    const previousLineText = processedContextTokens.previousLineProcessedTokens.getLineContent();\n    const beforeEnterText = processedContextTokens.beforeRangeProcessedTokens.getLineContent();\n    const afterEnterText = processedContextTokens.afterRangeProcessedTokens.getLineContent();\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 = 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","/*---------------------------------------------------------------------------------------------\n *  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 ShiftCommand_1;\nimport * as strings from '../../../base/common/strings.js';\nimport { CursorColumns } from '../core/cursorColumns.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nimport { getEnterAction } from '../languages/enterAction.js';\nimport { ILanguageConfigurationService } from '../languages/languageConfigurationRegistry.js';\nconst repeatCache = Object.create(null);\nfunction 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}\nlet ShiftCommand = ShiftCommand_1 = class ShiftCommand {\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    constructor(range, opts, _languageConfigurationService) {\n        this._languageConfigurationService = _languageConfigurationService;\n        this._opts = opts;\n        this._selection = range;\n        this._selectionId = null;\n        this._useLastEditRangeForCursorEndPosition = false;\n        this._selectionStartColumnStaysPut = false;\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                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 (lineNumber > 1) {\n                    const 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.tokenization.isCheapToTokenize(lineNumber - 1)) {\n                            const enterAction = getEnterAction(this._opts.autoIndent, model, new Range(lineNumber - 1, model.getLineMaxColumn(lineNumber - 1), lineNumber - 1, model.getLineMaxColumn(lineNumber - 1)), this._languageConfigurationService);\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 /* CharCode.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 /* CharCode.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_1.unshiftIndent(lineText, indentationEndIndex + 1, tabSize, indentSize, insertSpaces);\n                }\n                else {\n                    desiredIndent = ShiftCommand_1.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 /* CharCode.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            const 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            const initialStartColumn = this._selection.startColumn;\n            const resultStartColumn = result.startColumn;\n            if (resultStartColumn <= initialStartColumn) {\n                return result;\n            }\n            if (result.getDirection() === 0 /* SelectionDirection.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};\nShiftCommand = ShiftCommand_1 = __decorate([\n    __param(2, ILanguageConfigurationService)\n], ShiftCommand);\nexport { ShiftCommand };\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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        const inverseEditOperations = helper.getInverseEditOperations();\n        const firstOperationRange = inverseEditOperations[0].range;\n        const secondOperationRange = inverseEditOperations[1].range;\n        return new Selection(firstOperationRange.endLineNumber, firstOperationRange.endColumn, secondOperationRange.endLineNumber, secondOperationRange.endColumn - this._charAfterSelection.length);\n    }\n}\n/**\n * A surround selection command that runs after composition finished.\n */\nexport class CompositionSurroundSelectionCommand {\n    constructor(_position, _text, _charAfter) {\n        this._position = _position;\n        this._text = _text;\n        this._charAfter = _charAfter;\n    }\n    getEditOperations(model, builder) {\n        builder.addTrackedEditOperation(new Range(this._position.lineNumber, this._position.column, this._position.lineNumber, this._position.column), this._text + this._charAfter);\n    }\n    computeCursorState(model, helper) {\n        const inverseEditOperations = helper.getInverseEditOperations();\n        const opRange = inverseEditOperations[0].range;\n        return new Selection(opRange.endLineNumber, opRange.startColumn, opRange.endLineNumber, opRange.endColumn - this._charAfter.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 * as strings from '../../../base/common/strings.js';\nimport { IndentAction } from './languageConfiguration.js';\nimport { IndentationContextProcessor, isLanguageDifferentFromLineStart, ProcessedIndentRulesSupport } from './supports/indentationLineProcessor.js';\n/**\n * Get nearest preceding 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 */\nfunction getPrecedingValidLine(model, lineNumber, processedIndentRulesSupport) {\n    const languageId = model.tokenization.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.tokenization.getLanguageIdAtPosition(lastLineNumber, 0) !== languageId) {\n                return resultLineNumber;\n            }\n            const text = model.getLineContent(lastLineNumber);\n            if (processedIndentRulesSupport.shouldIgnore(lastLineNumber) || /^\\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 */\nexport function getInheritIndentForLine(autoIndent, model, lineNumber, honorIntentialIndent = true, languageConfigurationService) {\n    if (autoIndent < 4 /* EditorAutoIndentStrategy.Full */) {\n        return null;\n    }\n    const indentRulesSupport = languageConfigurationService.getLanguageConfiguration(model.tokenization.getLanguageId()).indentRulesSupport;\n    if (!indentRulesSupport) {\n        return null;\n    }\n    const processedIndentRulesSupport = new ProcessedIndentRulesSupport(model, indentRulesSupport, languageConfigurationService);\n    if (lineNumber <= 1) {\n        return {\n            indentation: '',\n            action: null\n        };\n    }\n    // Use no indent if this is the first non-blank line\n    for (let priorLineNumber = lineNumber - 1; priorLineNumber > 0; priorLineNumber--) {\n        if (model.getLineContent(priorLineNumber) !== '') {\n            break;\n        }\n        if (priorLineNumber === 1) {\n            return {\n                indentation: '',\n                action: null\n            };\n        }\n    }\n    const precedingUnIgnoredLine = getPrecedingValidLine(model, lineNumber, processedIndentRulesSupport);\n    if (precedingUnIgnoredLine < 0) {\n        return null;\n    }\n    else if (precedingUnIgnoredLine < 1) {\n        return {\n            indentation: '',\n            action: null\n        };\n    }\n    if (processedIndentRulesSupport.shouldIncrease(precedingUnIgnoredLine) || processedIndentRulesSupport.shouldIndentNextLine(precedingUnIgnoredLine)) {\n        const precedingUnIgnoredLineContent = model.getLineContent(precedingUnIgnoredLine);\n        return {\n            indentation: strings.getLeadingWhitespace(precedingUnIgnoredLineContent),\n            action: IndentAction.Indent,\n            line: precedingUnIgnoredLine\n        };\n    }\n    else if (processedIndentRulesSupport.shouldDecrease(precedingUnIgnoredLine)) {\n        const precedingUnIgnoredLineContent = model.getLineContent(precedingUnIgnoredLine);\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 /* IndentConsts.INCREASE_MASK */ | 2 /* IndentConsts.DECREASE_MASK */)) &&\n            (previousLineIndentMetadata & 4 /* IndentConsts.INDENT_NEXTLINE_MASK */)) {\n            let stopLine = 0;\n            for (let i = previousLine - 1; i > 0; i--) {\n                if (processedIndentRulesSupport.shouldIndentNextLine(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                if (processedIndentRulesSupport.shouldIncrease(i)) {\n                    return {\n                        indentation: strings.getLeadingWhitespace(model.getLineContent(i)),\n                        action: IndentAction.Indent,\n                        line: i\n                    };\n                }\n                else if (processedIndentRulesSupport.shouldIndentNextLine(i)) {\n                    let stopLine = 0;\n                    for (let j = i - 1; j > 0; j--) {\n                        if (processedIndentRulesSupport.shouldIndentNextLine(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 (processedIndentRulesSupport.shouldDecrease(i)) {\n                    return {\n                        indentation: strings.getLeadingWhitespace(model.getLineContent(i)),\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}\nexport function getGoodIndentForLine(autoIndent, virtualModel, languageId, lineNumber, indentConverter, languageConfigurationService) {\n    if (autoIndent < 4 /* EditorAutoIndentStrategy.Full */) {\n        return null;\n    }\n    const richEditSupport = languageConfigurationService.getLanguageConfiguration(languageId);\n    if (!richEditSupport) {\n        return null;\n    }\n    const indentRulesSupport = languageConfigurationService.getLanguageConfiguration(languageId).indentRulesSupport;\n    if (!indentRulesSupport) {\n        return null;\n    }\n    const processedIndentRulesSupport = new ProcessedIndentRulesSupport(virtualModel, indentRulesSupport, languageConfigurationService);\n    const indent = getInheritIndentForLine(autoIndent, virtualModel, lineNumber, undefined, languageConfigurationService);\n    if (indent) {\n        const inheritLine = indent.line;\n        if (inheritLine !== undefined) {\n            // Apply enter action as long as there are only whitespace lines between inherited line and this line.\n            let shouldApplyEnterRules = true;\n            for (let inBetweenLine = inheritLine; inBetweenLine < lineNumber - 1; inBetweenLine++) {\n                if (!/^\\s*$/.test(virtualModel.getLineContent(inBetweenLine))) {\n                    shouldApplyEnterRules = false;\n                    break;\n                }\n            }\n            if (shouldApplyEnterRules) {\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 (processedIndentRulesSupport.shouldDecrease(lineNumber)) {\n                        indentation = indentConverter.unshiftIndent(indentation);\n                    }\n                    if (enterResult.appendText) {\n                        indentation += enterResult.appendText;\n                    }\n                    return strings.getLeadingWhitespace(indentation);\n                }\n            }\n        }\n        if (processedIndentRulesSupport.shouldDecrease(lineNumber)) {\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}\nexport function getIndentForEnter(autoIndent, model, range, indentConverter, languageConfigurationService) {\n    if (autoIndent < 4 /* EditorAutoIndentStrategy.Full */) {\n        return null;\n    }\n    const languageId = model.getLanguageIdAtPosition(range.startLineNumber, range.startColumn);\n    const indentRulesSupport = languageConfigurationService.getLanguageConfiguration(languageId).indentRulesSupport;\n    if (!indentRulesSupport) {\n        return null;\n    }\n    model.tokenization.forceTokenization(range.startLineNumber);\n    const indentationContextProcessor = new IndentationContextProcessor(model, languageConfigurationService);\n    const processedContextTokens = indentationContextProcessor.getProcessedTokenContextAroundRange(range);\n    const afterEnterProcessedTokens = processedContextTokens.afterRangeProcessedTokens;\n    const beforeEnterProcessedTokens = processedContextTokens.beforeRangeProcessedTokens;\n    const beforeEnterIndent = strings.getLeadingWhitespace(beforeEnterProcessedTokens.getLineContent());\n    const virtualModel = createVirtualModelWithModifiedTokensAtLine(model, range.startLineNumber, beforeEnterProcessedTokens);\n    const languageIsDifferentFromLineStart = isLanguageDifferentFromLineStart(model, range.getStartPosition());\n    const currentLine = model.getLineContent(range.startLineNumber);\n    const currentLineIndent = strings.getLeadingWhitespace(currentLine);\n    const afterEnterAction = getInheritIndentForLine(autoIndent, virtualModel, range.startLineNumber + 1, undefined, languageConfigurationService);\n    if (!afterEnterAction) {\n        const beforeEnter = languageIsDifferentFromLineStart ? currentLineIndent : beforeEnterIndent;\n        return {\n            beforeEnter: beforeEnter,\n            afterEnter: beforeEnter\n        };\n    }\n    let afterEnterIndent = languageIsDifferentFromLineStart ? currentLineIndent : afterEnterAction.indentation;\n    if (afterEnterAction.action === IndentAction.Indent) {\n        afterEnterIndent = indentConverter.shiftIndent(afterEnterIndent);\n    }\n    if (indentRulesSupport.shouldDecrease(afterEnterProcessedTokens.getLineContent())) {\n        afterEnterIndent = indentConverter.unshiftIndent(afterEnterIndent);\n    }\n    return {\n        beforeEnter: languageIsDifferentFromLineStart ? 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 */\nexport function getIndentActionForType(cursorConfig, model, range, ch, indentConverter, languageConfigurationService) {\n    const autoIndent = cursorConfig.autoIndent;\n    if (autoIndent < 4 /* EditorAutoIndentStrategy.Full */) {\n        return null;\n    }\n    const languageIsDifferentFromLineStart = isLanguageDifferentFromLineStart(model, range.getStartPosition());\n    if (languageIsDifferentFromLineStart) {\n        // this line has mixed languages and indentation rules will not work\n        return null;\n    }\n    const languageId = model.getLanguageIdAtPosition(range.startLineNumber, range.startColumn);\n    const indentRulesSupport = languageConfigurationService.getLanguageConfiguration(languageId).indentRulesSupport;\n    if (!indentRulesSupport) {\n        return null;\n    }\n    const indentationContextProcessor = new IndentationContextProcessor(model, languageConfigurationService);\n    const processedContextTokens = indentationContextProcessor.getProcessedTokenContextAroundRange(range);\n    const beforeRangeText = processedContextTokens.beforeRangeProcessedTokens.getLineContent();\n    const afterRangeText = processedContextTokens.afterRangeProcessedTokens.getLineContent();\n    const textAroundRange = beforeRangeText + afterRangeText;\n    const textAroundRangeWithCharacter = beforeRangeText + ch + afterRangeText;\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(textAroundRange) && indentRulesSupport.shouldDecrease(textAroundRangeWithCharacter)) {\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 = getInheritIndentForLine(autoIndent, model, range.startLineNumber, false, languageConfigurationService);\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    const previousLineNumber = range.startLineNumber - 1;\n    if (previousLineNumber > 0) {\n        const previousLine = model.getLineContent(previousLineNumber);\n        if (indentRulesSupport.shouldIndentNextLine(previousLine) && indentRulesSupport.shouldIncrease(textAroundRangeWithCharacter)) {\n            const inheritedIndentationData = getInheritIndentForLine(autoIndent, model, range.startLineNumber, false, languageConfigurationService);\n            const inheritedIndentation = inheritedIndentationData?.indentation;\n            if (inheritedIndentation !== undefined) {\n                const currentLine = model.getLineContent(range.startLineNumber);\n                const actualCurrentIndentation = strings.getLeadingWhitespace(currentLine);\n                const inferredCurrentIndentation = indentConverter.shiftIndent(inheritedIndentation);\n                // If the inferred current indentation is not equal to the actual current indentation, then the indentation has been intentionally changed, in that case keep it\n                const inferredIndentationEqualsActual = inferredCurrentIndentation === actualCurrentIndentation;\n                const textAroundRangeContainsOnlyWhitespace = /^\\s*$/.test(textAroundRange);\n                const autoClosingPairs = cursorConfig.autoClosingPairs.autoClosingPairsOpenByEnd.get(ch);\n                const autoClosingPairExists = autoClosingPairs && autoClosingPairs.length > 0;\n                const isChFirstNonWhitespaceCharacterAndInAutoClosingPair = autoClosingPairExists && textAroundRangeContainsOnlyWhitespace;\n                if (inferredIndentationEqualsActual && isChFirstNonWhitespaceCharacterAndInAutoClosingPair) {\n                    return inheritedIndentation;\n                }\n            }\n        }\n    }\n    return null;\n}\nexport function getIndentMetadata(model, lineNumber, languageConfigurationService) {\n    const indentRulesSupport = languageConfigurationService.getLanguageConfiguration(model.getLanguageId()).indentRulesSupport;\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}\nfunction createVirtualModelWithModifiedTokensAtLine(model, modifiedLineNumber, modifiedTokens) {\n    const virtualModel = {\n        tokenization: {\n            getLineTokens: (lineNumber) => {\n                if (lineNumber === modifiedLineNumber) {\n                    return modifiedTokens;\n                }\n                else {\n                    return model.tokenization.getLineTokens(lineNumber);\n                }\n            },\n            getLanguageId: () => {\n                return model.getLanguageId();\n            },\n            getLanguageIdAtPosition: (lineNumber, column) => {\n                return model.getLanguageIdAtPosition(lineNumber, column);\n            },\n        },\n        getLineContent: (lineNumber) => {\n            if (lineNumber === modifiedLineNumber) {\n                return modifiedTokens.getLineContent();\n            }\n            else {\n                return model.getLineContent(lineNumber);\n            }\n        }\n    };\n    return virtualModel;\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { EditOperationResult, isQuote } from '../cursorCommon.js';\nimport { getMapForWordSeparators } from '../core/wordCharacterClassifier.js';\nimport { Range } from '../core/range.js';\nimport { Position } from '../core/position.js';\nimport { IndentAction } from '../languages/languageConfiguration.js';\nimport { getIndentationAtPosition } from '../languages/languageConfigurationRegistry.js';\nimport { createScopedLineTokens } from '../languages/supports.js';\nimport { getIndentActionForType, getIndentForEnter, getInheritIndentForLine } from '../languages/autoIndent.js';\nimport { getEnterAction } from '../languages/enterAction.js';\nexport class AutoIndentOperation {\n    static getEdits(config, model, selections, ch, isDoingComposition) {\n        if (!isDoingComposition && this._isAutoIndentType(config, model, selections)) {\n            const indentationForSelections = [];\n            for (const selection of selections) {\n                const indentation = this._findActualIndentationForSelection(config, model, selection, ch);\n                if (indentation === null) {\n                    // Auto indentation failed\n                    return;\n                }\n                indentationForSelections.push({ selection, indentation });\n            }\n            const autoClosingPairClose = AutoClosingOpenCharTypeOperation.getAutoClosingPairClose(config, model, selections, ch, false);\n            return this._getIndentationAndAutoClosingPairEdits(config, model, indentationForSelections, ch, autoClosingPairClose);\n        }\n        return;\n    }\n    static _isAutoIndentType(config, model, selections) {\n        if (config.autoIndent < 4 /* EditorAutoIndentStrategy.Full */) {\n            return false;\n        }\n        for (let i = 0, len = selections.length; i < len; i++) {\n            if (!model.tokenization.isCheapToTokenize(selections[i].getEndPosition().lineNumber)) {\n                return false;\n            }\n        }\n        return true;\n    }\n    static _findActualIndentationForSelection(config, model, selection, ch) {\n        const actualIndentation = getIndentActionForType(config, model, selection, ch, {\n            shiftIndent: (indentation) => {\n                return shiftIndent(config, indentation);\n            },\n            unshiftIndent: (indentation) => {\n                return unshiftIndent(config, indentation);\n            },\n        }, config.languageConfigurationService);\n        if (actualIndentation === null) {\n            return null;\n        }\n        const currentIndentation = getIndentationAtPosition(model, selection.startLineNumber, selection.startColumn);\n        if (actualIndentation === config.normalizeIndentation(currentIndentation)) {\n            return null;\n        }\n        return actualIndentation;\n    }\n    static _getIndentationAndAutoClosingPairEdits(config, model, indentationForSelections, ch, autoClosingPairClose) {\n        const commands = indentationForSelections.map(({ selection, indentation }) => {\n            if (autoClosingPairClose !== null) {\n                // Apply both auto closing pair edits and auto indentation edits\n                const indentationEdit = this._getEditFromIndentationAndSelection(config, model, indentation, selection, ch, false);\n                return new TypeWithIndentationAndAutoClosingCommand(indentationEdit, selection, ch, autoClosingPairClose);\n            }\n            else {\n                // Apply only auto indentation edits\n                const indentationEdit = this._getEditFromIndentationAndSelection(config, model, indentation, selection, ch, true);\n                return typeCommand(indentationEdit.range, indentationEdit.text, false);\n            }\n        });\n        const editOptions = { shouldPushStackElementBefore: true, shouldPushStackElementAfter: false };\n        return new EditOperationResult(4 /* EditOperationType.TypingOther */, commands, editOptions);\n    }\n    static _getEditFromIndentationAndSelection(config, model, indentation, selection, ch, includeChInEdit = true) {\n        const startLineNumber = selection.startLineNumber;\n        const firstNonWhitespaceColumn = model.getLineFirstNonWhitespaceColumn(startLineNumber);\n        let text = config.normalizeIndentation(indentation);\n        if (firstNonWhitespaceColumn !== 0) {\n            const startLine = model.getLineContent(startLineNumber);\n            text += startLine.substring(firstNonWhitespaceColumn - 1, selection.startColumn - 1);\n        }\n        text += includeChInEdit ? ch : '';\n        const range = new Range(startLineNumber, 1, selection.endLineNumber, selection.endColumn);\n        return { range, text };\n    }\n}\nexport class AutoClosingOvertypeOperation {\n    static getEdits(prevEditOperationType, config, model, selections, autoClosedCharacters, ch) {\n        if (isAutoClosingOvertype(config, model, selections, autoClosedCharacters, ch)) {\n            return this._runAutoClosingOvertype(prevEditOperationType, selections, ch);\n        }\n        return;\n    }\n    static _runAutoClosingOvertype(prevEditOperationType, selections, ch) {\n        const 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(4 /* EditOperationType.TypingOther */, commands, {\n            shouldPushStackElementBefore: shouldPushStackElementBetween(prevEditOperationType, 4 /* EditOperationType.TypingOther */),\n            shouldPushStackElementAfter: false\n        });\n    }\n}\nexport class AutoClosingOvertypeWithInterceptorsOperation {\n    static getEdits(config, model, selections, autoClosedCharacters, ch) {\n        if (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(4 /* EditOperationType.TypingOther */, commands, {\n                shouldPushStackElementBefore: true,\n                shouldPushStackElementAfter: false\n            });\n        }\n        return;\n    }\n}\nexport class AutoClosingOpenCharTypeOperation {\n    static getEdits(config, model, selections, ch, chIsAlreadyTyped, isDoingComposition) {\n        if (!isDoingComposition) {\n            const autoClosingPairClose = this.getAutoClosingPairClose(config, model, selections, ch, chIsAlreadyTyped);\n            if (autoClosingPairClose !== null) {\n                return this._runAutoClosingOpenCharType(selections, ch, chIsAlreadyTyped, autoClosingPairClose);\n            }\n        }\n        return;\n    }\n    static _runAutoClosingOpenCharType(selections, ch, chIsAlreadyTyped, autoClosingPairClose) {\n        const commands = [];\n        for (let i = 0, len = selections.length; i < len; i++) {\n            const selection = selections[i];\n            commands[i] = new TypeWithAutoClosingCommand(selection, ch, !chIsAlreadyTyped, autoClosingPairClose);\n        }\n        return new EditOperationResult(4 /* EditOperationType.TypingOther */, commands, {\n            shouldPushStackElementBefore: true,\n            shouldPushStackElementAfter: false\n        });\n    }\n    static getAutoClosingPairClose(config, model, selections, ch, chIsAlreadyTyped) {\n        for (const selection of selections) {\n            if (!selection.isEmpty()) {\n                return null;\n            }\n        }\n        // This method is called both when typing (regularly) and when composition ends\n        // This means that we need to work with a text buffer where sometimes `ch` is not\n        // there (it is being typed right now) or with a text buffer where `ch` has already been typed\n        //\n        // In order to avoid adding checks for `chIsAlreadyTyped` in all places, we will work\n        // with two conceptual positions, the position before `ch` and the position after `ch`\n        //\n        const positions = selections.map((s) => {\n            const position = s.getPosition();\n            if (chIsAlreadyTyped) {\n                return { lineNumber: position.lineNumber, beforeColumn: position.column - ch.length, afterColumn: position.column };\n            }\n            else {\n                return { lineNumber: position.lineNumber, beforeColumn: position.column, afterColumn: position.column };\n            }\n        });\n        // Find the longest auto-closing open pair in case of multiple ending in `ch`\n        // e.g. when having [f\",\"] and [\",\"], it picks [f\",\"] if the character before is f\n        const pair = this._findAutoClosingPairOpen(config, model, positions.map(p => new Position(p.lineNumber, p.beforeColumn)), ch);\n        if (!pair) {\n            return null;\n        }\n        let autoCloseConfig;\n        let shouldAutoCloseBefore;\n        const chIsQuote = isQuote(ch);\n        if (chIsQuote) {\n            autoCloseConfig = config.autoClosingQuotes;\n            shouldAutoCloseBefore = config.shouldAutoCloseBefore.quote;\n        }\n        else {\n            const pairIsForComments = config.blockCommentStartToken ? pair.open.includes(config.blockCommentStartToken) : false;\n            if (pairIsForComments) {\n                autoCloseConfig = config.autoClosingComments;\n                shouldAutoCloseBefore = config.shouldAutoCloseBefore.comment;\n            }\n            else {\n                autoCloseConfig = config.autoClosingBrackets;\n                shouldAutoCloseBefore = config.shouldAutoCloseBefore.bracket;\n            }\n        }\n        if (autoCloseConfig === 'never') {\n            return null;\n        }\n        // Sometimes, it is possible to have two auto-closing pairs that have a containment relationship\n        // e.g. when having [(,)] and [(*,*)]\n        // - when typing (, the resulting state is (|)\n        // - when typing *, the desired resulting state is (*|*), not (*|*))\n        const containedPair = this._findContainedAutoClosingPair(config, pair);\n        const containedPairClose = containedPair ? containedPair.close : '';\n        let isContainedPairPresent = true;\n        for (const position of positions) {\n            const { lineNumber, beforeColumn, afterColumn } = position;\n            const lineText = model.getLineContent(lineNumber);\n            const lineBefore = lineText.substring(0, beforeColumn - 1);\n            const lineAfter = lineText.substring(afterColumn - 1);\n            if (!lineAfter.startsWith(containedPairClose)) {\n                isContainedPairPresent = false;\n            }\n            // Only consider auto closing the pair if an allowed character follows or if another autoclosed pair closing brace follows\n            if (lineAfter.length > 0) {\n                const characterAfter = lineAfter.charAt(0);\n                const isBeforeCloseBrace = this._isBeforeClosingBrace(config, lineAfter);\n                if (!isBeforeCloseBrace && !shouldAutoCloseBefore(characterAfter)) {\n                    return null;\n                }\n            }\n            // Do not auto-close ' or \" after a word character\n            if (pair.open.length === 1 && (ch === '\\'' || ch === '\"') && autoCloseConfig !== 'always') {\n                const wordSeparators = getMapForWordSeparators(config.wordSeparators, []);\n                if (lineBefore.length > 0) {\n                    const characterBefore = lineBefore.charCodeAt(lineBefore.length - 1);\n                    if (wordSeparators.get(characterBefore) === 0 /* WordCharacterClass.Regular */) {\n                        return null;\n                    }\n                }\n            }\n            if (!model.tokenization.isCheapToTokenize(lineNumber)) {\n                // Do not force tokenization\n                return null;\n            }\n            model.tokenization.forceTokenization(lineNumber);\n            const lineTokens = model.tokenization.getLineTokens(lineNumber);\n            const scopedLineTokens = createScopedLineTokens(lineTokens, beforeColumn - 1);\n            if (!pair.shouldAutoClose(scopedLineTokens, beforeColumn - scopedLineTokens.firstCharOffset)) {\n                return null;\n            }\n            // Typing for example a quote could either start a new string, in which case auto-closing is desirable\n            // or it could end a previously started string, in which case auto-closing is not desirable\n            //\n            // In certain cases, it is really not possible to look at the previous token to determine\n            // what would happen. That's why we do something really unusual, we pretend to type a different\n            // character and ask the tokenizer what the outcome of doing that is: after typing a neutral\n            // character, are we in a string (i.e. the quote would most likely end a string) or not?\n            //\n            const neutralCharacter = pair.findNeutralCharacter();\n            if (neutralCharacter) {\n                const tokenType = model.tokenization.getTokenTypeIfInsertingCharacter(lineNumber, beforeColumn, neutralCharacter);\n                if (!pair.isOK(tokenType)) {\n                    return null;\n                }\n            }\n        }\n        if (isContainedPairPresent) {\n            return pair.close.substring(0, pair.close.length - containedPairClose.length);\n        }\n        else {\n            return pair.close;\n        }\n    }\n    /**\n     * Find another auto-closing pair that is contained by the one passed in.\n     *\n     * e.g. when having [(,)] and [(*,*)] as auto-closing pairs\n     * this method will find [(,)] as a containment pair for [(*,*)]\n     */\n    static _findContainedAutoClosingPair(config, pair) {\n        if (pair.open.length <= 1) {\n            return null;\n        }\n        const lastChar = pair.close.charAt(pair.close.length - 1);\n        // get candidates with the same last character as close\n        const candidates = config.autoClosingPairs.autoClosingPairsCloseByEnd.get(lastChar) || [];\n        let result = null;\n        for (const candidate of candidates) {\n            if (candidate.open !== pair.open && pair.open.includes(candidate.open) && pair.close.endsWith(candidate.close)) {\n                if (!result || candidate.open.length > result.open.length) {\n                    result = candidate;\n                }\n            }\n        }\n        return result;\n    }\n    /**\n     * Determine if typing `ch` at all `positions` in the `model` results in an\n     * auto closing open sequence being typed.\n     *\n     * Auto closing open sequences can consist of multiple characters, which\n     * can lead to ambiguities. In such a case, the longest auto-closing open\n     * sequence is returned.\n     */\n    static _findAutoClosingPairOpen(config, model, positions, ch) {\n        const candidates = config.autoClosingPairs.autoClosingPairsOpenByEnd.get(ch);\n        if (!candidates) {\n            return null;\n        }\n        // Determine which auto-closing pair it is\n        let result = null;\n        for (const candidate of candidates) {\n            if (result === null || candidate.open.length > result.open.length) {\n                let candidateIsMatch = true;\n                for (const position of positions) {\n                    const relevantText = model.getValueInRange(new Range(position.lineNumber, position.column - candidate.open.length + 1, position.lineNumber, position.column));\n                    if (relevantText + ch !== candidate.open) {\n                        candidateIsMatch = false;\n                        break;\n                    }\n                }\n                if (candidateIsMatch) {\n                    result = candidate;\n                }\n            }\n        }\n        return result;\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}\nexport class SurroundSelectionOperation {\n    static getEdits(config, model, selections, ch, isDoingComposition) {\n        if (!isDoingComposition && this._isSurroundSelectionType(config, model, selections, ch)) {\n            return this._runSurroundSelectionType(config, selections, ch);\n        }\n        return;\n    }\n    static _runSurroundSelectionType(config, selections, ch) {\n        const 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 /* EditOperationType.Other */, commands, {\n            shouldPushStackElementBefore: true,\n            shouldPushStackElementAfter: true\n        });\n    }\n    static _isSurroundSelectionType(config, model, selections, ch) {\n        if (!shouldSurroundChar(config, ch) || !config.surroundingPairs.hasOwnProperty(ch)) {\n            return false;\n        }\n        const isTypingAQuoteCharacter = isQuote(ch);\n        for (const selection of selections) {\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}\nexport class InterceptorElectricCharOperation {\n    static getEdits(prevEditOperationType, config, model, selections, ch, isDoingComposition) {\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        return;\n    }\n    static _isTypeInterceptorElectricChar(config, model, selections) {\n        if (selections.length === 1 && model.tokenization.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        const position = selection.getPosition();\n        model.tokenization.forceTokenization(position.lineNumber);\n        const lineTokens = model.tokenization.getLineTokens(position.lineNumber);\n        let electricAction;\n        try {\n            electricAction = config.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            const endColumn = (lineTokens.getLineContent() + ch).lastIndexOf(electricAction.matchOpenBracket) + 1;\n            const match = model.bracketPairs.findMatchingBracketUp(electricAction.matchOpenBracket, {\n                lineNumber: position.lineNumber,\n                column: endColumn\n            }, 500 /* give at most 500ms to compute */);\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                const matchLine = model.getLineContent(match.startLineNumber);\n                const matchLineIndentation = strings.getLeadingWhitespace(matchLine);\n                const newIndentation = config.normalizeIndentation(matchLineIndentation);\n                const lineText = model.getLineContent(position.lineNumber);\n                const lineFirstNonBlankColumn = model.getLineFirstNonWhitespaceColumn(position.lineNumber) || position.column;\n                const prefix = lineText.substring(lineFirstNonBlankColumn - 1, position.column - 1);\n                const typeText = newIndentation + prefix + ch;\n                const typeSelection = new Range(position.lineNumber, 1, position.lineNumber, position.column);\n                const command = new ReplaceCommand(typeSelection, typeText);\n                return new EditOperationResult(getTypingOperation(typeText, prevEditOperationType), [command], {\n                    shouldPushStackElementBefore: false,\n                    shouldPushStackElementAfter: true\n                });\n            }\n        }\n        return null;\n    }\n}\nexport class SimpleCharacterTypeOperation {\n    static getEdits(prevEditOperationType, selections, ch) {\n        // A simple character type\n        const commands = [];\n        for (let i = 0, len = selections.length; i < len; i++) {\n            commands[i] = new ReplaceCommand(selections[i], ch);\n        }\n        const opType = getTypingOperation(ch, prevEditOperationType);\n        return new EditOperationResult(opType, commands, {\n            shouldPushStackElementBefore: shouldPushStackElementBetween(prevEditOperationType, opType),\n            shouldPushStackElementAfter: false\n        });\n    }\n}\nexport class EnterOperation {\n    static getEdits(config, model, selections, ch, isDoingComposition) {\n        if (!isDoingComposition && ch === '\\n') {\n            const commands = [];\n            for (let i = 0, len = selections.length; i < len; i++) {\n                commands[i] = this._enter(config, model, false, selections[i]);\n            }\n            return new EditOperationResult(4 /* EditOperationType.TypingOther */, commands, {\n                shouldPushStackElementBefore: true,\n                shouldPushStackElementAfter: false,\n            });\n        }\n        return;\n    }\n    static _enter(config, model, keepPosition, range) {\n        if (config.autoIndent === 0 /* EditorAutoIndentStrategy.None */) {\n            return typeCommand(range, '\\n', keepPosition);\n        }\n        if (!model.tokenization.isCheapToTokenize(range.getStartPosition().lineNumber) || config.autoIndent === 1 /* EditorAutoIndentStrategy.Keep */) {\n            const lineText = model.getLineContent(range.startLineNumber);\n            const indentation = strings.getLeadingWhitespace(lineText).substring(0, range.startColumn - 1);\n            return typeCommand(range, '\\n' + config.normalizeIndentation(indentation), keepPosition);\n        }\n        const r = getEnterAction(config.autoIndent, model, range, config.languageConfigurationService);\n        if (r) {\n            if (r.indentAction === IndentAction.None) {\n                // Nothing special\n                return typeCommand(range, '\\n' + config.normalizeIndentation(r.indentation + r.appendText), keepPosition);\n            }\n            else if (r.indentAction === IndentAction.Indent) {\n                // Indent once\n                return 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 = unshiftIndent(config, r.indentation);\n                return 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 /* EditorAutoIndentStrategy.Full */) {\n            const ir = getIndentForEnter(config.autoIndent, model, range, {\n                unshiftIndent: (indent) => {\n                    return unshiftIndent(config, indent);\n                },\n                shiftIndent: (indent) => {\n                    return shiftIndent(config, indent);\n                },\n                normalizeIndentation: (indent) => {\n                    return config.normalizeIndentation(indent);\n                }\n            }, config.languageConfigurationService);\n            if (ir) {\n                let oldEndViewColumn = config.visibleColumnFromColumn(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 typeCommand(range, '\\n' + config.normalizeIndentation(indentation), keepPosition);\n    }\n    static lineInsertBefore(config, model, selections) {\n        if (model === null || selections === null) {\n            return [];\n        }\n        const 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                const 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        const commands = [];\n        for (let i = 0, len = selections.length; i < len; i++) {\n            const lineNumber = selections[i].positionLineNumber;\n            const 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        const 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 PasteOperation {\n    static getEdits(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 _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 /* CharCode.LineFeed */) {\n                text = text.substring(0, text.length - 1);\n            }\n            // Remove trailing \\r if present\n            if (text.charCodeAt(text.length - 1) === 13 /* CharCode.CarriageReturn */) {\n                text = text.substring(0, text.length - 1);\n            }\n            const lines = strings.splitLines(text);\n            if (lines.length === selections.length) {\n                return lines;\n            }\n        }\n        return null;\n    }\n    static _distributedPaste(config, model, selections, text) {\n        const 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 /* EditOperationType.Other */, commands, {\n            shouldPushStackElementBefore: true,\n            shouldPushStackElementAfter: true\n        });\n    }\n    static _simplePaste(config, model, selections, text, pasteOnNewLine) {\n        const commands = [];\n        for (let i = 0, len = selections.length; i < len; i++) {\n            const selection = selections[i];\n            const 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                const 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 /* EditOperationType.Other */, commands, {\n            shouldPushStackElementBefore: true,\n            shouldPushStackElementAfter: true\n        });\n    }\n}\nexport class CompositionOperation {\n    static getEdits(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(4 /* EditOperationType.TypingOther */, commands, {\n            shouldPushStackElementBefore: shouldPushStackElementBetween(prevEditOperationType, 4 /* EditOperationType.TypingOther */),\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}\nexport class TypeWithoutInterceptorsOperation {\n    static getEdits(prevEditOperationType, selections, str) {\n        const commands = [];\n        for (let i = 0, len = selections.length; i < len; i++) {\n            commands[i] = new ReplaceCommand(selections[i], str);\n        }\n        const opType = getTypingOperation(str, prevEditOperationType);\n        return new EditOperationResult(opType, commands, {\n            shouldPushStackElementBefore: shouldPushStackElementBetween(prevEditOperationType, opType),\n            shouldPushStackElementAfter: false\n        });\n    }\n}\nexport class TabOperation {\n    static getCommands(config, model, selections) {\n        const commands = [];\n        for (let i = 0, len = selections.length; i < len; i++) {\n            const selection = selections[i];\n            if (selection.isEmpty()) {\n                const lineText = model.getLineContent(selection.startLineNumber);\n                if (/^\\s*$/.test(lineText) && model.tokenization.isCheapToTokenize(selection.startLineNumber)) {\n                    let goodIndent = this._goodIndentForLine(config, model, selection.startLineNumber);\n                    goodIndent = goodIndent || '\\t';\n                    const 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                    const 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                }, config.languageConfigurationService);\n            }\n        }\n        return commands;\n    }\n    static _goodIndentForLine(config, model, lineNumber) {\n        let action = null;\n        let indentation = '';\n        const expectedIndentAction = getInheritIndentForLine(config.autoIndent, model, lineNumber, false, config.languageConfigurationService);\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 = getEnterAction(config.autoIndent, model, new Range(lastLineNumber, maxColumn, lastLineNumber, maxColumn), config.languageConfigurationService);\n            if (expectedEnterAction) {\n                indentation = expectedEnterAction.indentation + expectedEnterAction.appendText;\n            }\n        }\n        if (action) {\n            if (action === IndentAction.Indent) {\n                indentation = shiftIndent(config, indentation);\n            }\n            if (action === IndentAction.Outdent) {\n                indentation = 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        const position = selection.getStartPosition();\n        if (config.insertSpaces) {\n            const visibleColumnFromColumn = config.visibleColumnFromColumn(model, position);\n            const indentSize = config.indentSize;\n            const 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}\nexport class BaseTypeWithAutoClosingCommand extends ReplaceCommandWithOffsetCursorState {\n    constructor(selection, text, lineNumberDeltaOffset, columnDeltaOffset, openCharacter, closeCharacter) {\n        super(selection, text, lineNumberDeltaOffset, columnDeltaOffset);\n        this._openCharacter = openCharacter;\n        this._closeCharacter = closeCharacter;\n        this.closeCharacterRange = null;\n        this.enclosingRange = null;\n    }\n    _computeCursorStateWithRange(model, range, helper) {\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}\nclass TypeWithAutoClosingCommand extends BaseTypeWithAutoClosingCommand {\n    constructor(selection, openCharacter, insertOpenCharacter, closeCharacter) {\n        const text = (insertOpenCharacter ? openCharacter : '') + closeCharacter;\n        const lineNumberDeltaOffset = 0;\n        const columnDeltaOffset = -closeCharacter.length;\n        super(selection, text, lineNumberDeltaOffset, columnDeltaOffset, openCharacter, closeCharacter);\n    }\n    computeCursorState(model, helper) {\n        const inverseEditOperations = helper.getInverseEditOperations();\n        const range = inverseEditOperations[0].range;\n        return this._computeCursorStateWithRange(model, range, helper);\n    }\n}\nclass TypeWithIndentationAndAutoClosingCommand extends BaseTypeWithAutoClosingCommand {\n    constructor(autoIndentationEdit, selection, openCharacter, closeCharacter) {\n        const text = openCharacter + closeCharacter;\n        const lineNumberDeltaOffset = 0;\n        const columnDeltaOffset = openCharacter.length;\n        super(selection, text, lineNumberDeltaOffset, columnDeltaOffset, openCharacter, closeCharacter);\n        this._autoIndentationEdit = autoIndentationEdit;\n        this._autoClosingEdit = { range: selection, text };\n    }\n    getEditOperations(model, builder) {\n        builder.addTrackedEditOperation(this._autoIndentationEdit.range, this._autoIndentationEdit.text);\n        builder.addTrackedEditOperation(this._autoClosingEdit.range, this._autoClosingEdit.text);\n    }\n    computeCursorState(model, helper) {\n        const inverseEditOperations = helper.getInverseEditOperations();\n        if (inverseEditOperations.length !== 2) {\n            throw new Error('There should be two inverse edit operations!');\n        }\n        const range1 = inverseEditOperations[0].range;\n        const range2 = inverseEditOperations[1].range;\n        const range = range1.plusRange(range2);\n        return this._computeCursorStateWithRange(model, range, helper);\n    }\n}\nfunction getTypingOperation(typedText, previousTypingOperation) {\n    if (typedText === ' ') {\n        return previousTypingOperation === 5 /* EditOperationType.TypingFirstSpace */\n            || previousTypingOperation === 6 /* EditOperationType.TypingConsecutiveSpace */\n            ? 6 /* EditOperationType.TypingConsecutiveSpace */\n            : 5 /* EditOperationType.TypingFirstSpace */;\n    }\n    return 4 /* EditOperationType.TypingOther */;\n}\nfunction shouldPushStackElementBetween(previousTypingOperation, typingOperation) {\n    if (isTypingOperation(previousTypingOperation) && !isTypingOperation(typingOperation)) {\n        // Always set an undo stop before non-type operations\n        return true;\n    }\n    if (previousTypingOperation === 5 /* EditOperationType.TypingFirstSpace */) {\n        // `abc |d`: No undo stop\n        // `abc  |d`: Undo stop\n        return false;\n    }\n    // Insert undo stop between different operation types\n    return normalizeOperationType(previousTypingOperation) !== normalizeOperationType(typingOperation);\n}\nfunction normalizeOperationType(type) {\n    return (type === 6 /* EditOperationType.TypingConsecutiveSpace */ || type === 5 /* EditOperationType.TypingFirstSpace */)\n        ? 'space'\n        : type;\n}\nfunction isTypingOperation(type) {\n    return type === 4 /* EditOperationType.TypingOther */\n        || type === 5 /* EditOperationType.TypingFirstSpace */\n        || type === 6 /* EditOperationType.TypingConsecutiveSpace */;\n}\nfunction 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 /* CharCode.Null */;\n        if (beforeCharacter === 92 /* CharCode.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}\nfunction 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}\nexport function shiftIndent(config, indentation, count) {\n    count = count || 1;\n    return ShiftCommand.shiftIndent(indentation, indentation.length + count, config.tabSize, config.indentSize, config.insertSpaces);\n}\nexport function unshiftIndent(config, indentation, count) {\n    count = count || 1;\n    return ShiftCommand.unshiftIndent(indentation, indentation.length + count, config.tabSize, config.indentSize, config.insertSpaces);\n}\nexport function 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","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { ShiftCommand } from '../commands/shiftCommand.js';\nimport { CompositionSurroundSelectionCommand } from '../commands/surroundSelectionCommand.js';\nimport { EditOperationResult, isQuote } from '../cursorCommon.js';\nimport { AutoClosingOpenCharTypeOperation, AutoClosingOvertypeOperation, AutoClosingOvertypeWithInterceptorsOperation, AutoIndentOperation, CompositionOperation, EnterOperation, InterceptorElectricCharOperation, PasteOperation, shouldSurroundChar, SimpleCharacterTypeOperation, SurroundSelectionOperation, TabOperation, TypeWithoutInterceptorsOperation } from './cursorTypeEditOperations.js';\nexport class TypeOperations {\n    static indent(config, model, selections) {\n        if (model === null || selections === null) {\n            return [];\n        }\n        const 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            }, config.languageConfigurationService);\n        }\n        return commands;\n    }\n    static outdent(config, model, selections) {\n        const 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            }, config.languageConfigurationService);\n        }\n        return commands;\n    }\n    static paste(config, model, selections, text, pasteOnNewLine, multicursorText) {\n        return PasteOperation.getEdits(config, model, selections, text, pasteOnNewLine, multicursorText);\n    }\n    static tab(config, model, selections) {\n        return TabOperation.getCommands(config, model, selections);\n    }\n    static compositionType(prevEditOperationType, config, model, selections, text, replacePrevCharCnt, replaceNextCharCnt, positionDelta) {\n        return CompositionOperation.getEdits(prevEditOperationType, config, model, selections, text, replacePrevCharCnt, replaceNextCharCnt, positionDelta);\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, compositions, selections, autoClosedCharacters) {\n        if (!compositions) {\n            // could not deduce what the composition did\n            return null;\n        }\n        let insertedText = null;\n        for (const composition of compositions) {\n            if (insertedText === null) {\n                insertedText = composition.insertedText;\n            }\n            else if (insertedText !== composition.insertedText) {\n                // not all selections agree on what was typed\n                return null;\n            }\n        }\n        if (!insertedText || insertedText.length !== 1) {\n            // we're only interested in the case where a single character was inserted\n            return null;\n        }\n        const ch = insertedText;\n        let hasDeletion = false;\n        for (const composition of compositions) {\n            if (composition.deletedText.length !== 0) {\n                hasDeletion = true;\n                break;\n            }\n        }\n        if (hasDeletion) {\n            // Check if this could have been a surround selection\n            if (!shouldSurroundChar(config, ch) || !config.surroundingPairs.hasOwnProperty(ch)) {\n                return null;\n            }\n            const isTypingAQuoteCharacter = isQuote(ch);\n            for (const composition of compositions) {\n                if (composition.deletedSelectionStart !== 0 || composition.deletedSelectionEnd !== composition.deletedText.length) {\n                    // more text was deleted than was selected, so this could not have been a surround selection\n                    return null;\n                }\n                if (/^[ \\t]+$/.test(composition.deletedText)) {\n                    // deleted text was only whitespace\n                    return null;\n                }\n                if (isTypingAQuoteCharacter && isQuote(composition.deletedText)) {\n                    // deleted text was a quote\n                    return null;\n                }\n            }\n            const positions = [];\n            for (const selection of selections) {\n                if (!selection.isEmpty()) {\n                    return null;\n                }\n                positions.push(selection.getPosition());\n            }\n            if (positions.length !== compositions.length) {\n                return null;\n            }\n            const commands = [];\n            for (let i = 0, len = positions.length; i < len; i++) {\n                commands.push(new CompositionSurroundSelectionCommand(positions[i], compositions[i].deletedText, config.surroundingPairs[ch]));\n            }\n            return new EditOperationResult(4 /* EditOperationType.TypingOther */, commands, {\n                shouldPushStackElementBefore: true,\n                shouldPushStackElementAfter: false\n            });\n        }\n        const autoClosingOvertypeEdits = AutoClosingOvertypeWithInterceptorsOperation.getEdits(config, model, selections, autoClosedCharacters, ch);\n        if (autoClosingOvertypeEdits !== undefined) {\n            return autoClosingOvertypeEdits;\n        }\n        const autoClosingOpenCharEdits = AutoClosingOpenCharTypeOperation.getEdits(config, model, selections, ch, true, false);\n        if (autoClosingOpenCharEdits !== undefined) {\n            return autoClosingOpenCharEdits;\n        }\n        return null;\n    }\n    static typeWithInterceptors(isDoingComposition, prevEditOperationType, config, model, selections, autoClosedCharacters, ch) {\n        const enterEdits = EnterOperation.getEdits(config, model, selections, ch, isDoingComposition);\n        if (enterEdits !== undefined) {\n            return enterEdits;\n        }\n        const autoIndentEdits = AutoIndentOperation.getEdits(config, model, selections, ch, isDoingComposition);\n        if (autoIndentEdits !== undefined) {\n            return autoIndentEdits;\n        }\n        const autoClosingOverTypeEdits = AutoClosingOvertypeOperation.getEdits(prevEditOperationType, config, model, selections, autoClosedCharacters, ch);\n        if (autoClosingOverTypeEdits !== undefined) {\n            return autoClosingOverTypeEdits;\n        }\n        const autoClosingOpenCharEdits = AutoClosingOpenCharTypeOperation.getEdits(config, model, selections, ch, false, isDoingComposition);\n        if (autoClosingOpenCharEdits !== undefined) {\n            return autoClosingOpenCharEdits;\n        }\n        const surroundSelectionEdits = SurroundSelectionOperation.getEdits(config, model, selections, ch, isDoingComposition);\n        if (surroundSelectionEdits !== undefined) {\n            return surroundSelectionEdits;\n        }\n        const interceptorElectricCharOperation = InterceptorElectricCharOperation.getEdits(prevEditOperationType, config, model, selections, ch, isDoingComposition);\n        if (interceptorElectricCharOperation !== undefined) {\n            return interceptorElectricCharOperation;\n        }\n        return SimpleCharacterTypeOperation.getEdits(prevEditOperationType, selections, ch);\n    }\n    static typeWithoutInterceptors(prevEditOperationType, config, model, selections, str) {\n        return TypeWithoutInterceptorsOperation.getEdits(prevEditOperationType, selections, str);\n    }\n}\nexport class CompositionOutcome {\n    constructor(deletedText, deletedSelectionStart, deletedSelectionEnd, insertedText, insertedSelectionStart, insertedSelectionEnd) {\n        this.deletedText = deletedText;\n        this.deletedSelectionStart = deletedSelectionStart;\n        this.deletedSelectionEnd = deletedSelectionEnd;\n        this.insertedText = insertedText;\n        this.insertedSelectionStart = insertedSelectionStart;\n        this.insertedSelectionEnd = insertedSelectionEnd;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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.isEmbeddedDiffEditor = new RawContextKey('isEmbeddedDiffEditor', false, nls.localize('isEmbeddedDiffEditor', \"Whether the context is an embedded diff editor\"));\n    EditorContextKeys.inMultiDiffEditor = new RawContextKey('inMultiDiffEditor', false, nls.localize('inMultiDiffEditor', \"Whether the context is a multi diff editor\"));\n    EditorContextKeys.multiDiffEditorAllCollapsed = new RawContextKey('multiDiffEditorAllCollapsed', undefined, nls.localize('multiDiffEditorAllCollapsed', \"Whether all files in multi diff editor are collapsed\"));\n    EditorContextKeys.hasChanges = new RawContextKey('diffEditorHasChanges', false, nls.localize('diffEditorHasChanges', \"Whether the diff editor has changes\"));\n    EditorContextKeys.comparingMovedCode = new RawContextKey('comparingMovedCode', false, nls.localize('comparingMovedCode', \"Whether a moved code block is selected for comparison\"));\n    EditorContextKeys.accessibleDiffViewerVisible = new RawContextKey('accessibleDiffViewerVisible', false, nls.localize('accessibleDiffViewerVisible', \"Whether the accessible diff viewer is visible\"));\n    EditorContextKeys.diffEditorRenderSideBySideInlineBreakpointReached = new RawContextKey('diffEditorRenderSideBySideInlineBreakpointReached', false, nls.localize('diffEditorRenderSideBySideInlineBreakpointReached', \"Whether the diff editor render side by side inline breakpoint is reached\"));\n    EditorContextKeys.diffEditorInlineMode = new RawContextKey('diffEditorInlineMode', false, nls.localize('diffEditorInlineMode', \"Whether inline mode is active\"));\n    EditorContextKeys.diffEditorOriginalWritable = new RawContextKey('diffEditorOriginalWritable', false, nls.localize('diffEditorOriginalWritable', \"Whether modified is writable in the diff editor\"));\n    EditorContextKeys.diffEditorModifiedWritable = new RawContextKey('diffEditorModifiedWritable', false, nls.localize('diffEditorModifiedWritable', \"Whether modified is writable in the diff editor\"));\n    EditorContextKeys.diffEditorOriginalUri = new RawContextKey('diffEditorOriginalUri', '', nls.localize('diffEditorOriginalUri', \"The uri of the original document\"));\n    EditorContextKeys.diffEditorModifiedUri = new RawContextKey('diffEditorModifiedUri', '', nls.localize('diffEditorModifiedUri', \"The uri of the modified document\"));\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.isInEmbeddedEditor = 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    EditorContextKeys.hoverFocused = new RawContextKey('editorHoverFocused', false, nls.localize('editorHoverFocused', \"Whether the editor hover is focused\"));\n    EditorContextKeys.stickyScrollFocused = new RawContextKey('stickyScrollFocused', false, nls.localize('stickyScrollFocused', \"Whether the sticky scroll is focused\"));\n    EditorContextKeys.stickyScrollVisible = new RawContextKey('stickyScrollVisible', false, nls.localize('stickyScrollVisible', \"Whether the sticky scroll is visible\"));\n    EditorContextKeys.standaloneColorPickerVisible = new RawContextKey('standaloneColorPickerVisible', false, nls.localize('standaloneColorPickerVisible', \"Whether the standalone color picker is visible\"));\n    EditorContextKeys.standaloneColorPickerFocused = new RawContextKey('standaloneColorPickerFocused', false, nls.localize('standaloneColorPickerFocused', \"Whether the standalone color picker is focused\"));\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.hasInlayHintsProvider = new RawContextKey('editorHasInlayHintsProvider', false, nls.localize('editorHasInlayHintsProvider', \"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 *  Copyright (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/cursor/cursorColumnSelection.js';\nimport { CursorState } from '../common/cursorCommon.js';\nimport { DeleteOperations } from '../common/cursor/cursorDeleteOperations.js';\nimport { CursorMove as CursorMove_, CursorMoveCommands } from '../common/cursor/cursorMoveCommands.js';\nimport { TypeOperations } from '../common/cursor/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';\nimport { getActiveElement } from '../../base/browser/dom.js';\nimport { EnterOperation } from '../common/cursor/cursorTypeEditOperations.js';\nconst CORE_WEIGHT = 0 /* KeybindingWeight.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_.metadata = {\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', 'editor'\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', 'editor']\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        Right: 'right',\n        Down: 'down',\n        Left: 'left'\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        Editor: 'editor',\n        Column: 'column'\n    };\n    function parse(args) {\n        let direction;\n        switch (args.to) {\n            case EditorScroll_.RawDirection.Up:\n                direction = 1 /* Direction.Up */;\n                break;\n            case EditorScroll_.RawDirection.Right:\n                direction = 2 /* Direction.Right */;\n                break;\n            case EditorScroll_.RawDirection.Down:\n                direction = 3 /* Direction.Down */;\n                break;\n            case EditorScroll_.RawDirection.Left:\n                direction = 4 /* Direction.Left */;\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 /* Unit.Line */;\n                break;\n            case EditorScroll_.RawUnit.WrappedLine:\n                unit = 2 /* Unit.WrappedLine */;\n                break;\n            case EditorScroll_.RawUnit.Page:\n                unit = 3 /* Unit.Page */;\n                break;\n            case EditorScroll_.RawUnit.HalfPage:\n                unit = 4 /* Unit.HalfPage */;\n                break;\n            case EditorScroll_.RawUnit.Editor:\n                unit = 5 /* Unit.Editor */;\n                break;\n            case EditorScroll_.RawUnit.Column:\n                unit = 6 /* Unit.Column */;\n                break;\n            default:\n                unit = 2 /* Unit.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_.metadata = {\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 = getActiveElement();\n            if (activeElement && ['input', 'textarea'].indexOf(activeElement.tagName.toLowerCase()) >= 0) {\n                this.runDOMCommand(activeElement);\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            if (!args.position) {\n                return;\n            }\n            viewModel.model.pushStackElement();\n            const cursorStateChanged = viewModel.setCursorStates(args.source, 3 /* CursorChangeReason.Explicit */, [\n                CursorMoveCommands.moveTo(viewModel, viewModel.getPrimaryCursorState(), this._inSelectionMode, args.position, args.viewPosition)\n            ]);\n            if (cursorStateChanged && args.revealType !== 2 /* NavigationCommandRevealType.None */) {\n                viewModel.revealAllCursors(args.source, true, true);\n            }\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            if (result === null) {\n                // invalid arguments\n                return;\n            }\n            viewModel.setCursorStates(args.source, 3 /* CursorChangeReason.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            if (typeof args.position === 'undefined' || typeof args.viewPosition === 'undefined' || typeof args.mouseColumn === 'undefined') {\n                return null;\n            }\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            const fromViewLineNumber = args.doColumnSelect ? prevColumnSelectData.fromViewLineNumber : validatedViewPosition.lineNumber;\n            const 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 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 512 /* KeyMod.Alt */ | 15 /* KeyCode.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 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 512 /* KeyMod.Alt */ | 17 /* KeyCode.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 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 512 /* KeyMod.Alt */ | 16 /* KeyCode.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 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 512 /* KeyMod.Alt */ | 11 /* KeyCode.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 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 512 /* KeyMod.Alt */ | 18 /* KeyCode.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 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 512 /* KeyMod.Alt */ | 12 /* KeyCode.PageDown */,\n            linux: { primary: 0 }\n        }\n    }));\n    class CursorMoveImpl extends CoreEditorCommand {\n        constructor() {\n            super({\n                id: 'cursorMove',\n                precondition: undefined,\n                metadata: CursorMove_.metadata\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 /* CursorChangeReason.Explicit */, CursorMoveImpl._move(viewModel, viewModel.getCursorStates(), args));\n            viewModel.revealAllCursors(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 /* CursorMove_.Direction.Left */:\n                case 1 /* CursorMove_.Direction.Right */:\n                case 2 /* CursorMove_.Direction.Up */:\n                case 3 /* CursorMove_.Direction.Down */:\n                case 4 /* CursorMove_.Direction.PrevBlankLine */:\n                case 5 /* CursorMove_.Direction.NextBlankLine */:\n                case 6 /* CursorMove_.Direction.WrappedLineStart */:\n                case 7 /* CursorMove_.Direction.WrappedLineFirstNonWhitespaceCharacter */:\n                case 8 /* CursorMove_.Direction.WrappedLineColumnCenter */:\n                case 9 /* CursorMove_.Direction.WrappedLineEnd */:\n                case 10 /* CursorMove_.Direction.WrappedLineLastNonWhitespaceCharacter */:\n                    return CursorMoveCommands.simpleMove(viewModel, cursors, args.direction, inSelectionMode, value, args.unit);\n                case 11 /* CursorMove_.Direction.ViewPortTop */:\n                case 13 /* CursorMove_.Direction.ViewPortBottom */:\n                case 12 /* CursorMove_.Direction.ViewPortCenter */:\n                case 14 /* CursorMove_.Direction.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 /* Constants.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: dynamicArgs.pageSize || viewModel.cursorConfig.pageSize\n                };\n            }\n            viewModel.model.pushStackElement();\n            viewModel.setCursorStates(dynamicArgs.source, 3 /* CursorChangeReason.Explicit */, CursorMoveCommands.simpleMove(viewModel, viewModel.getCursorStates(), args.direction, args.select, args.value, args.unit));\n            viewModel.revealAllCursors(dynamicArgs.source, true);\n        }\n    }\n    CoreNavigationCommands.CursorLeft = registerEditorCommand(new CursorMoveBasedCommand({\n        args: {\n            direction: 0 /* CursorMove_.Direction.Left */,\n            unit: 0 /* CursorMove_.Unit.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 /* KeyCode.LeftArrow */,\n            mac: { primary: 15 /* KeyCode.LeftArrow */, secondary: [256 /* KeyMod.WinCtrl */ | 32 /* KeyCode.KeyB */] }\n        }\n    }));\n    CoreNavigationCommands.CursorLeftSelect = registerEditorCommand(new CursorMoveBasedCommand({\n        args: {\n            direction: 0 /* CursorMove_.Direction.Left */,\n            unit: 0 /* CursorMove_.Unit.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 /* KeyMod.Shift */ | 15 /* KeyCode.LeftArrow */\n        }\n    }));\n    CoreNavigationCommands.CursorRight = registerEditorCommand(new CursorMoveBasedCommand({\n        args: {\n            direction: 1 /* CursorMove_.Direction.Right */,\n            unit: 0 /* CursorMove_.Unit.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 /* KeyCode.RightArrow */,\n            mac: { primary: 17 /* KeyCode.RightArrow */, secondary: [256 /* KeyMod.WinCtrl */ | 36 /* KeyCode.KeyF */] }\n        }\n    }));\n    CoreNavigationCommands.CursorRightSelect = registerEditorCommand(new CursorMoveBasedCommand({\n        args: {\n            direction: 1 /* CursorMove_.Direction.Right */,\n            unit: 0 /* CursorMove_.Unit.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 /* KeyMod.Shift */ | 17 /* KeyCode.RightArrow */\n        }\n    }));\n    CoreNavigationCommands.CursorUp = registerEditorCommand(new CursorMoveBasedCommand({\n        args: {\n            direction: 2 /* CursorMove_.Direction.Up */,\n            unit: 2 /* CursorMove_.Unit.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 /* KeyCode.UpArrow */,\n            mac: { primary: 16 /* KeyCode.UpArrow */, secondary: [256 /* KeyMod.WinCtrl */ | 46 /* KeyCode.KeyP */] }\n        }\n    }));\n    CoreNavigationCommands.CursorUpSelect = registerEditorCommand(new CursorMoveBasedCommand({\n        args: {\n            direction: 2 /* CursorMove_.Direction.Up */,\n            unit: 2 /* CursorMove_.Unit.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 /* KeyMod.Shift */ | 16 /* KeyCode.UpArrow */,\n            secondary: [2048 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 16 /* KeyCode.UpArrow */],\n            mac: { primary: 1024 /* KeyMod.Shift */ | 16 /* KeyCode.UpArrow */ },\n            linux: { primary: 1024 /* KeyMod.Shift */ | 16 /* KeyCode.UpArrow */ }\n        }\n    }));\n    CoreNavigationCommands.CursorPageUp = registerEditorCommand(new CursorMoveBasedCommand({\n        args: {\n            direction: 2 /* CursorMove_.Direction.Up */,\n            unit: 2 /* CursorMove_.Unit.WrappedLine */,\n            select: false,\n            value: -1 /* Constants.PAGE_SIZE_MARKER */\n        },\n        id: 'cursorPageUp',\n        precondition: undefined,\n        kbOpts: {\n            weight: CORE_WEIGHT,\n            kbExpr: EditorContextKeys.textInputFocus,\n            primary: 11 /* KeyCode.PageUp */\n        }\n    }));\n    CoreNavigationCommands.CursorPageUpSelect = registerEditorCommand(new CursorMoveBasedCommand({\n        args: {\n            direction: 2 /* CursorMove_.Direction.Up */,\n            unit: 2 /* CursorMove_.Unit.WrappedLine */,\n            select: true,\n            value: -1 /* Constants.PAGE_SIZE_MARKER */\n        },\n        id: 'cursorPageUpSelect',\n        precondition: undefined,\n        kbOpts: {\n            weight: CORE_WEIGHT,\n            kbExpr: EditorContextKeys.textInputFocus,\n            primary: 1024 /* KeyMod.Shift */ | 11 /* KeyCode.PageUp */\n        }\n    }));\n    CoreNavigationCommands.CursorDown = registerEditorCommand(new CursorMoveBasedCommand({\n        args: {\n            direction: 3 /* CursorMove_.Direction.Down */,\n            unit: 2 /* CursorMove_.Unit.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 /* KeyCode.DownArrow */,\n            mac: { primary: 18 /* KeyCode.DownArrow */, secondary: [256 /* KeyMod.WinCtrl */ | 44 /* KeyCode.KeyN */] }\n        }\n    }));\n    CoreNavigationCommands.CursorDownSelect = registerEditorCommand(new CursorMoveBasedCommand({\n        args: {\n            direction: 3 /* CursorMove_.Direction.Down */,\n            unit: 2 /* CursorMove_.Unit.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 /* KeyMod.Shift */ | 18 /* KeyCode.DownArrow */,\n            secondary: [2048 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 18 /* KeyCode.DownArrow */],\n            mac: { primary: 1024 /* KeyMod.Shift */ | 18 /* KeyCode.DownArrow */ },\n            linux: { primary: 1024 /* KeyMod.Shift */ | 18 /* KeyCode.DownArrow */ }\n        }\n    }));\n    CoreNavigationCommands.CursorPageDown = registerEditorCommand(new CursorMoveBasedCommand({\n        args: {\n            direction: 3 /* CursorMove_.Direction.Down */,\n            unit: 2 /* CursorMove_.Unit.WrappedLine */,\n            select: false,\n            value: -1 /* Constants.PAGE_SIZE_MARKER */\n        },\n        id: 'cursorPageDown',\n        precondition: undefined,\n        kbOpts: {\n            weight: CORE_WEIGHT,\n            kbExpr: EditorContextKeys.textInputFocus,\n            primary: 12 /* KeyCode.PageDown */\n        }\n    }));\n    CoreNavigationCommands.CursorPageDownSelect = registerEditorCommand(new CursorMoveBasedCommand({\n        args: {\n            direction: 3 /* CursorMove_.Direction.Down */,\n            unit: 2 /* CursorMove_.Unit.WrappedLine */,\n            select: true,\n            value: -1 /* Constants.PAGE_SIZE_MARKER */\n        },\n        id: 'cursorPageDownSelect',\n        precondition: undefined,\n        kbOpts: {\n            weight: CORE_WEIGHT,\n            kbExpr: EditorContextKeys.textInputFocus,\n            primary: 1024 /* KeyMod.Shift */ | 12 /* KeyCode.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            if (!args.position) {\n                return;\n            }\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 /* CursorChangeReason.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 /* CursorChangeReason.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            if (!args.position) {\n                return;\n            }\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 /* CursorChangeReason.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 /* CursorChangeReason.Explicit */, CursorMoveCommands.moveToBeginningOfLine(viewModel, viewModel.getCursorStates(), this._inSelectionMode));\n            viewModel.revealAllCursors(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 /* KeyCode.Home */,\n            mac: { primary: 14 /* KeyCode.Home */, secondary: [2048 /* KeyMod.CtrlCmd */ | 15 /* KeyCode.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 /* KeyMod.Shift */ | 14 /* KeyCode.Home */,\n            mac: { primary: 1024 /* KeyMod.Shift */ | 14 /* KeyCode.Home */, secondary: [2048 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 15 /* KeyCode.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 /* CursorChangeReason.Explicit */, this._exec(viewModel.getCursorStates()));\n            viewModel.revealAllCursors(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 /* KeyMod.WinCtrl */ | 31 /* KeyCode.KeyA */ }\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 /* KeyMod.WinCtrl */ | 1024 /* KeyMod.Shift */ | 31 /* KeyCode.KeyA */ }\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 /* CursorChangeReason.Explicit */, CursorMoveCommands.moveToEndOfLine(viewModel, viewModel.getCursorStates(), this._inSelectionMode, args.sticky || false));\n            viewModel.revealAllCursors(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 /* KeyCode.End */,\n            mac: { primary: 13 /* KeyCode.End */, secondary: [2048 /* KeyMod.CtrlCmd */ | 17 /* KeyCode.RightArrow */] }\n        },\n        metadata: {\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 /* KeyMod.Shift */ | 13 /* KeyCode.End */,\n            mac: { primary: 1024 /* KeyMod.Shift */ | 13 /* KeyCode.End */, secondary: [2048 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 17 /* KeyCode.RightArrow */] }\n        },\n        metadata: {\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 /* CursorChangeReason.Explicit */, this._exec(viewModel, viewModel.getCursorStates()));\n            viewModel.revealAllCursors(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 /* KeyMod.WinCtrl */ | 35 /* KeyCode.KeyE */ }\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 /* KeyMod.WinCtrl */ | 1024 /* KeyMod.Shift */ | 35 /* KeyCode.KeyE */ }\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 /* CursorChangeReason.Explicit */, CursorMoveCommands.moveToBeginningOfBuffer(viewModel, viewModel.getCursorStates(), this._inSelectionMode));\n            viewModel.revealAllCursors(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 /* KeyMod.CtrlCmd */ | 14 /* KeyCode.Home */,\n            mac: { primary: 2048 /* KeyMod.CtrlCmd */ | 16 /* KeyCode.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 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 14 /* KeyCode.Home */,\n            mac: { primary: 2048 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 16 /* KeyCode.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 /* CursorChangeReason.Explicit */, CursorMoveCommands.moveToEndOfBuffer(viewModel, viewModel.getCursorStates(), this._inSelectionMode));\n            viewModel.revealAllCursors(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 /* KeyMod.CtrlCmd */ | 13 /* KeyCode.End */,\n            mac: { primary: 2048 /* KeyMod.CtrlCmd */ | 18 /* KeyCode.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 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 13 /* KeyCode.End */,\n            mac: { primary: 2048 /* KeyMod.CtrlCmd */ | 1024 /* KeyMod.Shift */ | 18 /* KeyCode.DownArrow */ }\n        }\n    }));\n    class EditorScrollImpl extends CoreEditorCommand {\n        constructor() {\n            super({\n                id: 'editorScroll',\n                precondition: undefined,\n                metadata: EditorScroll_.metadata\n            });\n        }\n        determineScrollMethod(args) {\n            const horizontalUnits = [6 /* EditorScroll_.Unit.Column */];\n            const verticalUnits = [\n                1 /* EditorScroll_.Unit.Line */,\n                2 /* EditorScroll_.Unit.WrappedLine */,\n                3 /* EditorScroll_.Unit.Page */,\n                4 /* EditorScroll_.Unit.HalfPage */,\n                5 /* EditorScroll_.Unit.Editor */,\n                6 /* EditorScroll_.Unit.Column */\n            ];\n            const horizontalDirections = [4 /* EditorScroll_.Direction.Left */, 2 /* EditorScroll_.Direction.Right */];\n            const verticalDirections = [1 /* EditorScroll_.Direction.Up */, 3 /* EditorScroll_.Direction.Down */];\n            if (horizontalUnits.includes(args.unit) && horizontalDirections.includes(args.direction)) {\n                return this._runHorizontalEditorScroll.bind(this);\n            }\n            if (verticalUnits.includes(args.unit) && verticalDirections.includes(args.direction)) {\n                return this._runVerticalEditorScroll.bind(this);\n            }\n            return null;\n        }\n        runCoreEditorCommand(viewModel, args) {\n            const parsed = EditorScroll_.parse(args);\n            if (!parsed) {\n                // illegal arguments\n                return;\n            }\n            const runEditorScroll = this.determineScrollMethod(parsed);\n            if (!runEditorScroll) {\n                // Incompatible unit and direction\n                return;\n            }\n            runEditorScroll(viewModel, args.source, parsed);\n        }\n        _runVerticalEditorScroll(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 /* CursorChangeReason.Explicit */, [\n                    CursorMoveCommands.findPositionInViewportIfOutside(viewModel, viewModel.getPrimaryCursorState(), desiredVisibleViewRange, args.select)\n                ]);\n            }\n            viewModel.viewLayout.setScrollPosition({ scrollTop: desiredScrollTop }, 0 /* ScrollType.Smooth */);\n        }\n        _computeDesiredScrollTop(viewModel, args) {\n            if (args.unit === 1 /* EditorScroll_.Unit.Line */) {\n                // scrolling by model lines\n                const futureViewport = viewModel.viewLayout.getFutureViewport();\n                const visibleViewRange = viewModel.getCompletelyVisibleViewRangeAtScrollTop(futureViewport.top);\n                const visibleModelRange = viewModel.coordinatesConverter.convertViewRangeToModelRange(visibleViewRange);\n                let desiredTopModelLineNumber;\n                if (args.direction === 1 /* EditorScroll_.Direction.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.viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber);\n            }\n            if (args.unit === 5 /* EditorScroll_.Unit.Editor */) {\n                let desiredTopModelLineNumber = 0;\n                if (args.direction === 3 /* EditorScroll_.Direction.Down */) {\n                    desiredTopModelLineNumber = viewModel.model.getLineCount() - viewModel.cursorConfig.pageSize;\n                }\n                return viewModel.viewLayout.getVerticalOffsetForLineNumber(desiredTopModelLineNumber);\n            }\n            let noOfLines;\n            if (args.unit === 3 /* EditorScroll_.Unit.Page */) {\n                noOfLines = viewModel.cursorConfig.pageSize * args.value;\n            }\n            else if (args.unit === 4 /* EditorScroll_.Unit.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 /* EditorScroll_.Direction.Up */ ? -1 : 1) * noOfLines;\n            return viewModel.viewLayout.getCurrentScrollTop() + deltaLines * viewModel.cursorConfig.lineHeight;\n        }\n        _runHorizontalEditorScroll(viewModel, source, args) {\n            const desiredScrollLeft = this._computeDesiredScrollLeft(viewModel, args);\n            viewModel.viewLayout.setScrollPosition({ scrollLeft: desiredScrollLeft }, 0 /* ScrollType.Smooth */);\n        }\n        _computeDesiredScrollLeft(viewModel, args) {\n            const deltaColumns = (args.direction === 4 /* EditorScroll_.Direction.Left */ ? -1 : 1) * args.value;\n            return viewModel.viewLayout.getCurrentScrollLeft() + deltaColumns * viewModel.cursorConfig.typicalHalfwidthCharacterWidth;\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 /* KeyMod.CtrlCmd */ | 16 /* KeyCode.UpArrow */,\n                    mac: { primary: 256 /* KeyMod.WinCtrl */ | 11 /* KeyCode.PageUp */ }\n                }\n            });\n        }\n        runCoreEditorCommand(viewModel, args) {\n            CoreNavigationCommands.EditorScroll.runCoreEditorCommand(viewModel, {\n                to: EditorScroll_.RawDirection.Up,\n                by: EditorScroll_.RawUnit.WrappedLine,\n                value: 1,\n                revealCursor: false,\n                select: false,\n                source: args.source\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 /* KeyMod.CtrlCmd */ | 11 /* KeyCode.PageUp */,\n                    win: { primary: 512 /* KeyMod.Alt */ | 11 /* KeyCode.PageUp */ },\n                    linux: { primary: 512 /* KeyMod.Alt */ | 11 /* KeyCode.PageUp */ }\n                }\n            });\n        }\n        runCoreEditorCommand(viewModel, args) {\n            CoreNavigationCommands.EditorScroll.runCoreEditorCommand(viewModel, {\n                to: EditorScroll_.RawDirection.Up,\n                by: EditorScroll_.RawUnit.Page,\n                value: 1,\n                revealCursor: false,\n                select: false,\n                source: args.source\n            });\n        }\n    });\n    CoreNavigationCommands.ScrollEditorTop = registerEditorCommand(new class extends CoreEditorCommand {\n        constructor() {\n            super({\n                id: 'scrollEditorTop',\n                precondition: undefined,\n                kbOpts: {\n                    weight: CORE_WEIGHT,\n                    kbExpr: EditorContextKeys.textInputFocus,\n                }\n            });\n        }\n        runCoreEditorCommand(viewModel, args) {\n            CoreNavigationCommands.EditorScroll.runCoreEditorCommand(viewModel, {\n                to: EditorScroll_.RawDirection.Up,\n                by: EditorScroll_.RawUnit.Editor,\n                value: 1,\n                revealCursor: false,\n                select: false,\n                source: args.source\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 /* KeyMod.CtrlCmd */ | 18 /* KeyCode.DownArrow */,\n                    mac: { primary: 256 /* KeyMod.WinCtrl */ | 12 /* KeyCode.PageDown */ }\n                }\n            });\n        }\n        runCoreEditorCommand(viewModel, args) {\n            CoreNavigationCommands.EditorScroll.runCoreEditorCommand(viewModel, {\n                to: EditorScroll_.RawDirection.Down,\n                by: EditorScroll_.RawUnit.WrappedLine,\n                value: 1,\n                revealCursor: false,\n                select: false,\n                source: args.source\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 /* KeyMod.CtrlCmd */ | 12 /* KeyCode.PageDown */,\n                    win: { primary: 512 /* KeyMod.Alt */ | 12 /* KeyCode.PageDown */ },\n                    linux: { primary: 512 /* KeyMod.Alt */ | 12 /* KeyCode.PageDown */ }\n                }\n            });\n        }\n        runCoreEditorCommand(viewModel, args) {\n            CoreNavigationCommands.EditorScroll.runCoreEditorCommand(viewModel, {\n                to: EditorScroll_.RawDirection.Down,\n                by: EditorScroll_.RawUnit.Page,\n                value: 1,\n                revealCursor: false,\n                select: false,\n                source: args.source\n            });\n        }\n    });\n    CoreNavigationCommands.ScrollEditorBottom = registerEditorCommand(new class extends CoreEditorCommand {\n        constructor() {\n            super({\n                id: 'scrollEditorBottom',\n                precondition: undefined,\n                kbOpts: {\n                    weight: CORE_WEIGHT,\n                    kbExpr: EditorContextKeys.textInputFocus,\n                }\n            });\n        }\n        runCoreEditorCommand(viewModel, args) {\n            CoreNavigationCommands.EditorScroll.runCoreEditorCommand(viewModel, {\n                to: EditorScroll_.RawDirection.Down,\n                by: EditorScroll_.RawUnit.Editor,\n                value: 1,\n                revealCursor: false,\n                select: false,\n                source: args.source\n            });\n        }\n    });\n    CoreNavigationCommands.ScrollLeft = registerEditorCommand(new class extends CoreEditorCommand {\n        constructor() {\n            super({\n                id: 'scrollLeft',\n                precondition: undefined,\n                kbOpts: {\n                    weight: CORE_WEIGHT,\n                    kbExpr: EditorContextKeys.textInputFocus,\n                }\n            });\n        }\n        runCoreEditorCommand(viewModel, args) {\n            CoreNavigationCommands.EditorScroll.runCoreEditorCommand(viewModel, {\n                to: EditorScroll_.RawDirection.Left,\n                by: EditorScroll_.RawUnit.Column,\n                value: 2,\n                revealCursor: false,\n                select: false,\n                source: args.source\n            });\n        }\n    });\n    CoreNavigationCommands.ScrollRight = registerEditorCommand(new class extends CoreEditorCommand {\n        constructor() {\n            super({\n                id: 'scrollRight',\n                precondition: undefined,\n                kbOpts: {\n                    weight: CORE_WEIGHT,\n                    kbExpr: EditorContextKeys.textInputFocus,\n                }\n            });\n        }\n        runCoreEditorCommand(viewModel, args) {\n            CoreNavigationCommands.EditorScroll.runCoreEditorCommand(viewModel, {\n                to: EditorScroll_.RawDirection.Right,\n                by: EditorScroll_.RawUnit.Column,\n                value: 2,\n                revealCursor: false,\n                select: false,\n                source: args.source\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            if (!args.position) {\n                return;\n            }\n            viewModel.model.pushStackElement();\n            viewModel.setCursorStates(args.source, 3 /* CursorChangeReason.Explicit */, [\n                CursorMoveCommands.word(viewModel, viewModel.getPrimaryCursorState(), this._inSelectionMode, args.position)\n            ]);\n            if (args.revealType !== 2 /* NavigationCommandRevealType.None */) {\n                viewModel.revealAllCursors(args.source, true, true);\n            }\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            if (!args.position) {\n                return;\n            }\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 /* CursorChangeReason.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            if (!args.position) {\n                return;\n            }\n            viewModel.model.pushStackElement();\n            viewModel.setCursorStates(args.source, 3 /* CursorChangeReason.Explicit */, [\n                CursorMoveCommands.line(viewModel, viewModel.getPrimaryCursorState(), this._inSelectionMode, args.position, args.viewPosition)\n            ]);\n            if (args.revealType !== 2 /* NavigationCommandRevealType.None */) {\n                viewModel.revealAllCursors(args.source, false, true);\n            }\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            if (!args.position) {\n                return;\n            }\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 /* CursorChangeReason.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.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 /* KeyCode.Escape */,\n                    secondary: [1024 /* KeyMod.Shift */ | 9 /* KeyCode.Escape */]\n                }\n            });\n        }\n        runCoreEditorCommand(viewModel, args) {\n            viewModel.model.pushStackElement();\n            viewModel.setCursorStates(args.source, 3 /* CursorChangeReason.Explicit */, [\n                CursorMoveCommands.cancelSelection(viewModel, viewModel.getPrimaryCursorState())\n            ]);\n            viewModel.revealAllCursors(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 /* KeyCode.Escape */,\n                    secondary: [1024 /* KeyMod.Shift */ | 9 /* KeyCode.Escape */]\n                }\n            });\n        }\n        runCoreEditorCommand(viewModel, args) {\n            viewModel.model.pushStackElement();\n            viewModel.setCursorStates(args.source, 3 /* CursorChangeReason.Explicit */, [\n                viewModel.getPrimaryCursorState()\n            ]);\n            viewModel.revealAllCursors(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                metadata: RevealLine_.metadata\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 /* VerticalRevealType.Simple */;\n            if (revealLineArg.at) {\n                switch (revealLineArg.at) {\n                    case RevealLine_.RawAtArgument.Top:\n                        revealAt = 3 /* VerticalRevealType.Top */;\n                        break;\n                    case RevealLine_.RawAtArgument.Center:\n                        revealAt = 1 /* VerticalRevealType.Center */;\n                        break;\n                    case RevealLine_.RawAtArgument.Bottom:\n                        revealAt = 4 /* VerticalRevealType.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 /* ScrollType.Smooth */);\n        }\n    });\n    CoreNavigationCommands.SelectAll = new class extends EditorOrNativeTextInputCommand {\n        constructor() {\n            super(SelectAllCommand);\n        }\n        runDOMCommand(activeElement) {\n            if (isFirefox) {\n                activeElement.focus();\n                activeElement.select();\n            }\n            activeElement.ownerDocument.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 /* CursorChangeReason.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            if (!args.selection) {\n                return;\n            }\n            viewModel.model.pushStackElement();\n            viewModel.setCursorStates(args.source, 3 /* CursorChangeReason.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 /* KeyMod.Shift */ | 15 /* KeyCode.LeftArrow */);\nregisterColumnSelection(CoreNavigationCommands.CursorColumnSelectRight.id, 1024 /* KeyMod.Shift */ | 17 /* KeyCode.RightArrow */);\nregisterColumnSelection(CoreNavigationCommands.CursorColumnSelectUp.id, 1024 /* KeyMod.Shift */ | 16 /* KeyCode.UpArrow */);\nregisterColumnSelection(CoreNavigationCommands.CursorColumnSelectPageUp.id, 1024 /* KeyMod.Shift */ | 11 /* KeyCode.PageUp */);\nregisterColumnSelection(CoreNavigationCommands.CursorColumnSelectDown.id, 1024 /* KeyMod.Shift */ | 18 /* KeyCode.DownArrow */);\nregisterColumnSelection(CoreNavigationCommands.CursorColumnSelectPageDown.id, 1024 /* KeyMod.Shift */ | 12 /* KeyCode.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 /* KeyMod.WinCtrl */ | 45 /* KeyCode.KeyO */ }\n                }\n            });\n        }\n        runCoreEditingCommand(editor, viewModel, args) {\n            editor.pushUndoStop();\n            editor.executeCommands(this.id, EnterOperation.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 /* KeyMod.Shift */ | 2 /* KeyCode.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 /* KeyCode.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 /* KeyCode.Backspace */,\n                    secondary: [1024 /* KeyMod.Shift */ | 1 /* KeyCode.Backspace */],\n                    mac: { primary: 1 /* KeyCode.Backspace */, secondary: [1024 /* KeyMod.Shift */ | 1 /* KeyCode.Backspace */, 256 /* KeyMod.WinCtrl */ | 38 /* KeyCode.KeyH */, 256 /* KeyMod.WinCtrl */ | 1 /* KeyCode.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 /* EditOperationType.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 /* KeyCode.Delete */,\n                    mac: { primary: 20 /* KeyCode.Delete */, secondary: [256 /* KeyMod.WinCtrl */ | 34 /* KeyCode.KeyD */, 256 /* KeyMod.WinCtrl */ | 20 /* KeyCode.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 /* EditOperationType.DeletingRight */);\n        }\n    });\n    CoreEditingCommands.Undo = new class extends EditorOrNativeTextInputCommand {\n        constructor() {\n            super(UndoCommand);\n        }\n        runDOMCommand(activeElement) {\n            activeElement.ownerDocument.execCommand('undo');\n        }\n        runEditorCommand(accessor, editor, args) {\n            if (!editor.hasModel() || editor.getOption(92 /* EditorOption.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(activeElement) {\n            activeElement.ownerDocument.execCommand('redo');\n        }\n        runEditorCommand(accessor, editor, args) {\n            if (!editor.hasModel() || editor.getOption(92 /* EditorOption.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, metadata) {\n        super({\n            id: id,\n            precondition: undefined,\n            metadata\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, metadata) {\n    registerCommand(new EditorHandlerCommand('default:' + handlerId, handlerId));\n    registerCommand(new EditorHandlerCommand(handlerId, handlerId, metadata));\n}\nregisterOverwritableCommand(\"type\" /* Handler.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\" /* Handler.ReplacePreviousChar */);\nregisterOverwritableCommand(\"compositionType\" /* Handler.CompositionType */);\nregisterOverwritableCommand(\"compositionStart\" /* Handler.CompositionStart */);\nregisterOverwritableCommand(\"compositionEnd\" /* Handler.CompositionEnd */);\nregisterOverwritableCommand(\"paste\" /* Handler.Paste */);\nregisterOverwritableCommand(\"cut\" /* Handler.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 { CoreNavigationCommands } from '../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(78 /* EditorOption.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(78 /* EditorOption.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(108 /* EditorOption.selectionClipboard */));\n        const columnSelection = options.get(22 /* EditorOption.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, data.revealType);\n                }\n                else {\n                    this._createCursor(data.position, true);\n                }\n            }\n            else {\n                if (data.inSelectionMode) {\n                    this._lineSelectDrag(data.position, data.revealType);\n                }\n                else {\n                    this._lineSelect(data.position, data.revealType);\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, data.revealType);\n                }\n                else {\n                    this._lastCursorLineSelect(data.position, data.revealType);\n                }\n            }\n            else {\n                if (data.inSelectionMode) {\n                    this._lineSelectDrag(data.position, data.revealType);\n                }\n                else {\n                    this._lineSelect(data.position, data.revealType);\n                }\n            }\n        }\n        else if (data.mouseDownCount === 2) {\n            if (!data.onInjectedText) {\n                if (this._hasMulticursorModifier(data)) {\n                    this._lastCursorWordSelect(data.position, data.revealType);\n                }\n                else {\n                    if (data.inSelectionMode) {\n                        this._wordSelectDrag(data.position, data.revealType);\n                    }\n                    else {\n                        this._wordSelect(data.position, data.revealType);\n                    }\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, data.revealType);\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, data.revealType);\n                        }\n                    }\n                }\n                else {\n                    this.moveTo(data.position, data.revealType);\n                }\n            }\n        }\n    }\n    _usualArgs(viewPosition, revealType) {\n        viewPosition = this._validateViewColumn(viewPosition);\n        return {\n            source: 'mouse',\n            position: this._convertViewToModelPosition(viewPosition),\n            viewPosition,\n            revealType\n        };\n    }\n    moveTo(viewPosition, revealType) {\n        CoreNavigationCommands.MoveTo.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition, revealType));\n    }\n    _moveToSelect(viewPosition, revealType) {\n        CoreNavigationCommands.MoveToSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition, revealType));\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, revealType) {\n        CoreNavigationCommands.LastCursorMoveToSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition, revealType));\n    }\n    _wordSelect(viewPosition, revealType) {\n        CoreNavigationCommands.WordSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition, revealType));\n    }\n    _wordSelectDrag(viewPosition, revealType) {\n        CoreNavigationCommands.WordSelectDrag.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition, revealType));\n    }\n    _lastCursorWordSelect(viewPosition, revealType) {\n        CoreNavigationCommands.LastCursorWordSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition, revealType));\n    }\n    _lineSelect(viewPosition, revealType) {\n        CoreNavigationCommands.LineSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition, revealType));\n    }\n    _lineSelectDrag(viewPosition, revealType) {\n        CoreNavigationCommands.LineSelectDrag.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition, revealType));\n    }\n    _lastCursorLineSelect(viewPosition, revealType) {\n        CoreNavigationCommands.LastCursorLineSelect.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition, revealType));\n    }\n    _lastCursorLineSelectDrag(viewPosition, revealType) {\n        CoreNavigationCommands.LastCursorLineSelectDrag.runCoreEditorCommand(this.viewModel, this._usualArgs(viewPosition, revealType));\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 { createFastDomNode } from '../../../base/browser/fastDomNode.js';\nimport { createTrustedTypesPolicy } from '../../../base/browser/trustedTypes.js';\nimport { BugIndicatingError } from '../../../base/common/errors.js';\nimport { StringBuilder } from '../../common/core/stringBuilder.js';\nexport class RenderedLinesCollection {\n    constructor(_lineFactory) {\n        this._lineFactory = _lineFactory;\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 BugIndicatingError('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, changeCount) {\n        const changeToLineNumber = changeFromLineNumber + changeCount - 1;\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._lineFactory.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(_lineFactory) {\n        this._lineFactory = _lineFactory;\n        this.domNode = this._createDomNode();\n        this._linesCollection = new RenderedLinesCollection(this._lineFactory);\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(146 /* EditorOption.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.count);\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                lineDomNode?.remove();\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                lineDomNode?.remove();\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._lineFactory, 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    static { this._ttPolicy = createTrustedTypesPolicy('editorViewLayer', { createHTML: value => value }); }\n    constructor(_domNode, _lineFactory, _viewportData) {\n        this._domNode = _domNode;\n        this._lineFactory = _lineFactory;\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._lineFactory.createLine();\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], this._viewportData.lineHeight);\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._lineFactory.createLine();\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            lineDomNode?.remove();\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._lineFactory.createLine();\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            lineDomNode?.remove();\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    static { this._sb = new StringBuilder(100000); }\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.lineHeight, 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.lineHeight, 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}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { applyFontInfo } from '../config/domFontInfo.js';\nimport { VisibleLinesCollection } from './viewLayer.js';\nimport { ViewPart } from './viewPart.js';\nexport class ViewOverlays extends ViewPart {\n    constructor(context) {\n        super(context);\n        this._dynamicOverlays = [];\n        this._isFocused = false;\n        this._visibleLines = new VisibleLinesCollection({\n            createLine: () => new ViewOverlayLine(this._dynamicOverlays)\n        });\n        this.domNode = this._visibleLines.domNode;\n        const options = this._context.configuration.options;\n        const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n        applyFontInfo(this.domNode, fontInfo);\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    addDynamicOverlay(overlay) {\n        this._dynamicOverlays.push(overlay);\n    }\n    // ----- event handlers\n    onConfigurationChanged(e) {\n        this._visibleLines.onConfigurationChanged(e);\n        const options = this._context.configuration.options;\n        const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n        applyFontInfo(this.domNode, fontInfo);\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(dynamicOverlays) {\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    renderLine(lineNumber, deltaTop, lineHeight, 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.appendString('<div style=\"top:');\n        sb.appendString(String(deltaTop));\n        sb.appendString('px;height:');\n        sb.appendString(String(lineHeight));\n        sb.appendString('px;\">');\n        sb.appendString(result);\n        sb.appendString('</div>');\n        return true;\n    }\n    layoutLine(lineNumber, deltaTop, lineHeight) {\n        if (this._domNode) {\n            this._domNode.setTop(deltaTop);\n            this._domNode.setHeight(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(146 /* EditorOption.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(146 /* EditorOption.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(146 /* EditorOption.layoutInfo */);\n        this._contentLeft = layoutInfo.contentLeft;\n        this.domNode.setClassName('margin-view-overlays');\n        this.domNode.setWidth(1);\n        applyFontInfo(this.domNode, options.get(50 /* EditorOption.fontInfo */));\n    }\n    onConfigurationChanged(e) {\n        const options = this._context.configuration.options;\n        applyFontInfo(this.domNode, options.get(50 /* EditorOption.fontInfo */));\n        const layoutInfo = options.get(146 /* EditorOption.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 { Position } from '../../common/core/position.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        this.onKeyDown?.(e);\n    }\n    emitKeyUp(e) {\n        this.onKeyUp?.(e);\n    }\n    emitContextMenu(e) {\n        this.onContextMenu?.(this._convertViewToModelMouseEvent(e));\n    }\n    emitMouseMove(e) {\n        this.onMouseMove?.(this._convertViewToModelMouseEvent(e));\n    }\n    emitMouseLeave(e) {\n        this.onMouseLeave?.(this._convertViewToModelMouseEvent(e));\n    }\n    emitMouseDown(e) {\n        this.onMouseDown?.(this._convertViewToModelMouseEvent(e));\n    }\n    emitMouseUp(e) {\n        this.onMouseUp?.(this._convertViewToModelMouseEvent(e));\n    }\n    emitMouseDrag(e) {\n        this.onMouseDrag?.(this._convertViewToModelMouseEvent(e));\n    }\n    emitMouseDrop(e) {\n        this.onMouseDrop?.(this._convertViewToModelMouseEvent(e));\n    }\n    emitMouseDropCanceled() {\n        this.onMouseDropCanceled?.();\n    }\n    emitMouseWheel(e) {\n        this.onMouseWheel?.(e);\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        const result = { ...target };\n        if (result.position) {\n            result.position = coordinatesConverter.convertViewPositionToModelPosition(result.position);\n        }\n        if (result.range) {\n            result.range = coordinatesConverter.convertViewRangeToModelRange(result.range);\n        }\n        if (result.type === 5 /* MouseTargetType.GUTTER_VIEW_ZONE */ || result.type === 8 /* MouseTargetType.CONTENT_VIEW_ZONE */) {\n            result.detail = this.convertViewToModelViewZoneData(result.detail, coordinatesConverter);\n        }\n        return result;\n    }\n    static convertViewToModelViewZoneData(data, coordinatesConverter) {\n        return {\n            viewZoneId: data.viewZoneId,\n            positionBefore: data.positionBefore ? coordinatesConverter.convertViewPositionToModelPosition(data.positionBefore) : data.positionBefore,\n            positionAfter: data.positionAfter ? coordinatesConverter.convertViewPositionToModelPosition(data.positionAfter) : data.positionAfter,\n            position: coordinatesConverter.convertViewPositionToModelPosition(data.position),\n            afterLineNumber: coordinatesConverter.convertViewPositionToModelPosition(new Position(data.afterLineNumber, 1)).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 *--------------------------------------------------------------------------------------------*/\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport './blockDecorations.css';\nimport { ViewPart } from '../../view/viewPart.js';\nexport class BlockDecorations extends ViewPart {\n    constructor(context) {\n        super(context);\n        this.blocks = [];\n        this.contentWidth = -1;\n        this.contentLeft = 0;\n        this.domNode = createFastDomNode(document.createElement('div'));\n        this.domNode.setAttribute('role', 'presentation');\n        this.domNode.setAttribute('aria-hidden', 'true');\n        this.domNode.setClassName('blockDecorations-container');\n        this.update();\n    }\n    update() {\n        let didChange = false;\n        const options = this._context.configuration.options;\n        const layoutInfo = options.get(146 /* EditorOption.layoutInfo */);\n        const newContentWidth = layoutInfo.contentWidth - layoutInfo.verticalScrollbarWidth;\n        if (this.contentWidth !== newContentWidth) {\n            this.contentWidth = newContentWidth;\n            didChange = true;\n        }\n        const newContentLeft = layoutInfo.contentLeft;\n        if (this.contentLeft !== newContentLeft) {\n            this.contentLeft = newContentLeft;\n            didChange = true;\n        }\n        return didChange;\n    }\n    dispose() {\n        super.dispose();\n    }\n    // --- begin event handlers\n    onConfigurationChanged(e) {\n        return this.update();\n    }\n    onScrollChanged(e) {\n        return e.scrollTopChanged || e.scrollLeftChanged;\n    }\n    onDecorationsChanged(e) {\n        return true;\n    }\n    onZonesChanged(e) {\n        return true;\n    }\n    // --- end event handlers\n    prepareRender(ctx) {\n        // Nothing to read\n    }\n    render(ctx) {\n        let count = 0;\n        const decorations = ctx.getDecorationsInViewport();\n        for (const decoration of decorations) {\n            if (!decoration.options.blockClassName) {\n                continue;\n            }\n            let block = this.blocks[count];\n            if (!block) {\n                block = this.blocks[count] = createFastDomNode(document.createElement('div'));\n                this.domNode.appendChild(block);\n            }\n            let top;\n            let bottom;\n            if (decoration.options.blockIsAfterEnd) {\n                // range must be empty\n                top = ctx.getVerticalOffsetAfterLineNumber(decoration.range.endLineNumber, false);\n                bottom = ctx.getVerticalOffsetAfterLineNumber(decoration.range.endLineNumber, true);\n            }\n            else {\n                top = ctx.getVerticalOffsetForLineNumber(decoration.range.startLineNumber, true);\n                bottom = decoration.range.isEmpty() && !decoration.options.blockDoesNotCollapse\n                    ? ctx.getVerticalOffsetForLineNumber(decoration.range.startLineNumber, false)\n                    : ctx.getVerticalOffsetAfterLineNumber(decoration.range.endLineNumber, true);\n            }\n            const [paddingTop, paddingRight, paddingBottom, paddingLeft] = decoration.options.blockPadding ?? [0, 0, 0, 0];\n            block.setClassName('blockDecorations-block ' + decoration.options.blockClassName);\n            block.setLeft(this.contentLeft - paddingLeft);\n            block.setWidth(this.contentWidth + paddingLeft + paddingRight);\n            block.setTop(top - ctx.scrollTop - paddingTop);\n            block.setHeight(bottom - top + paddingTop + paddingBottom);\n            count++;\n        }\n        for (let i = count; i < this.blocks.length; i++) {\n            this.blocks[i].domNode.remove();\n        }\n        this.blocks.length = count;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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';\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 /* PartFingerprint.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 /* PartFingerprint.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        this._updateAnchorsViewPositions();\n        return true;\n    }\n    onLinesChanged(e) {\n        this._updateAnchorsViewPositions();\n        return true;\n    }\n    onLinesDeleted(e) {\n        this._updateAnchorsViewPositions();\n        return true;\n    }\n    onLinesInserted(e) {\n        this._updateAnchorsViewPositions();\n        return true;\n    }\n    onScrollChanged(e) {\n        return true;\n    }\n    onZonesChanged(e) {\n        return true;\n    }\n    // ---- end view event handlers\n    _updateAnchorsViewPositions() {\n        const keys = Object.keys(this._widgets);\n        for (const widgetId of keys) {\n            this._widgets[widgetId].updateAnchorViewPosition();\n        }\n    }\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, primaryAnchor, secondaryAnchor, preference, affinity) {\n        const myWidget = this._widgets[widget.getId()];\n        myWidget.setPosition(primaryAnchor, secondaryAnchor, preference, affinity);\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.remove();\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._primaryAnchor = new PositionPair(null, null);\n        this._secondaryAnchor = new PositionPair(null, null);\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(146 /* EditorOption.layoutInfo */);\n        this._fixedOverflowWidgets = options.get(42 /* EditorOption.fixedOverflowWidgets */);\n        this._contentWidth = layoutInfo.contentWidth;\n        this._contentLeft = layoutInfo.contentLeft;\n        this._lineHeight = options.get(67 /* EditorOption.lineHeight */);\n        this._affinity = null;\n        this._preference = [];\n        this._cachedDomNodeOffsetWidth = -1;\n        this._cachedDomNodeOffsetHeight = -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.setDisplay('none');\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(67 /* EditorOption.lineHeight */);\n        if (e.hasChanged(146 /* EditorOption.layoutInfo */)) {\n            const layoutInfo = options.get(146 /* EditorOption.layoutInfo */);\n            this._contentLeft = layoutInfo.contentLeft;\n            this._contentWidth = layoutInfo.contentWidth;\n            this._maxWidth = this._getMaxWidth();\n        }\n    }\n    updateAnchorViewPosition() {\n        this._setPosition(this._affinity, this._primaryAnchor.modelPosition, this._secondaryAnchor.modelPosition);\n    }\n    _setPosition(affinity, primaryAnchor, secondaryAnchor) {\n        this._affinity = affinity;\n        this._primaryAnchor = getValidPositionPair(primaryAnchor, this._context.viewModel, this._affinity);\n        this._secondaryAnchor = getValidPositionPair(secondaryAnchor, this._context.viewModel, this._affinity);\n        function getValidPositionPair(position, viewModel, affinity) {\n            if (!position) {\n                return new PositionPair(null, null);\n            }\n            // Do not trust that widgets give a valid position\n            const validModelPosition = viewModel.model.validatePosition(position);\n            if (viewModel.coordinatesConverter.modelPositionIsVisible(validModelPosition)) {\n                const viewPosition = viewModel.coordinatesConverter.convertModelPositionToViewPosition(validModelPosition, affinity ?? undefined);\n                return new PositionPair(position, viewPosition);\n            }\n            return new PositionPair(position, null);\n        }\n    }\n    _getMaxWidth() {\n        const elDocument = this.domNode.domNode.ownerDocument;\n        const elWindow = elDocument.defaultView;\n        return (this.allowEditorOverflow\n            ? elWindow?.innerWidth || elDocument.documentElement.offsetWidth || elDocument.body.offsetWidth\n            : this._contentWidth);\n    }\n    setPosition(primaryAnchor, secondaryAnchor, preference, affinity) {\n        this._setPosition(affinity, primaryAnchor, secondaryAnchor);\n        this._preference = preference;\n        if (this._primaryAnchor.viewPosition && this._preference && this._preference.length > 0) {\n            // this content widget would like to be visible if possible\n            // we change it from `display:none` to `display:block` even if it\n            // might be outside the viewport such that we can measure its size\n            // in `prepareRender`\n            this.domNode.setDisplay('block');\n        }\n        else {\n            this.domNode.setDisplay('none');\n        }\n        this._cachedDomNodeOffsetWidth = -1;\n        this._cachedDomNodeOffsetHeight = -1;\n    }\n    _layoutBoxInViewport(anchor, 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 = anchor.top;\n        const heightAvailableAboveLine = aboveLineTop;\n        // b) the box under the line\n        const underLineTop = anchor.top + anchor.height;\n        const heightAvailableUnderLine = ctx.viewportHeight - underLineTop;\n        const aboveTop = aboveLineTop - height;\n        const fitsAbove = (heightAvailableAboveLine >= height);\n        const belowTop = underLineTop;\n        const fitsBelow = (heightAvailableUnderLine >= height);\n        // And its left\n        let left = anchor.left;\n        if (left + width > ctx.scrollLeft + ctx.viewportWidth) {\n            left = ctx.scrollLeft + ctx.viewportWidth - width;\n        }\n        if (left < ctx.scrollLeft) {\n            left = ctx.scrollLeft;\n        }\n        return { fitsAbove, aboveTop, fitsBelow, belowTop, left };\n    }\n    _layoutHorizontalSegmentInPage(windowSize, domNodePosition, left, width) {\n        // Leave some clearance to the left/right\n        const LEFT_PADDING = 15;\n        const RIGHT_PADDING = 15;\n        // Initially, the limits are defined as the dom node limits\n        const MIN_LIMIT = Math.max(LEFT_PADDING, domNodePosition.left - width);\n        const MAX_LIMIT = Math.min(domNodePosition.left + domNodePosition.width + width, windowSize.width - RIGHT_PADDING);\n        const elDocument = this._viewDomNode.domNode.ownerDocument;\n        const elWindow = elDocument.defaultView;\n        let absoluteLeft = domNodePosition.left + left - (elWindow?.scrollX ?? 0);\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(anchor, width, height, ctx) {\n        const aboveTop = anchor.top - height;\n        const belowTop = anchor.top + anchor.height;\n        const domNodePosition = dom.getDomNodePagePosition(this._viewDomNode.domNode);\n        const elDocument = this._viewDomNode.domNode.ownerDocument;\n        const elWindow = elDocument.defaultView;\n        const absoluteAboveTop = domNodePosition.top + aboveTop - (elWindow?.scrollY ?? 0);\n        const absoluteBelowTop = domNodePosition.top + belowTop - (elWindow?.scrollY ?? 0);\n        const windowSize = dom.getClientArea(elDocument.body);\n        const [left, absoluteAboveLeft] = this._layoutHorizontalSegmentInPage(windowSize, domNodePosition, anchor.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                fitsBelow,\n                belowTop: absoluteBelowTop,\n                left: absoluteAboveLeft\n            };\n        }\n        return { fitsAbove, aboveTop, fitsBelow, belowTop, left };\n    }\n    _prepareRenderWidgetAtExactPositionOverflowing(topLeft) {\n        return new Coordinate(topLeft.top, topLeft.left + this._contentLeft);\n    }\n    /**\n     * Compute the coordinates above and below the primary and secondary anchors.\n     * The content widget *must* touch the primary anchor.\n     * The content widget should touch if possible the secondary anchor.\n     */\n    _getAnchorsCoordinates(ctx) {\n        const primary = getCoordinates(this._primaryAnchor.viewPosition, this._affinity, this._lineHeight);\n        const secondaryViewPosition = (this._secondaryAnchor.viewPosition?.lineNumber === this._primaryAnchor.viewPosition?.lineNumber ? this._secondaryAnchor.viewPosition : null);\n        const secondary = getCoordinates(secondaryViewPosition, this._affinity, this._lineHeight);\n        return { primary, secondary };\n        function getCoordinates(position, affinity, lineHeight) {\n            if (!position) {\n                return null;\n            }\n            const horizontalPosition = ctx.visibleRangeForPosition(position);\n            if (!horizontalPosition) {\n                return null;\n            }\n            // Left-align widgets that should appear :before content\n            const left = (position.column === 1 && affinity === 3 /* PositionAffinity.LeftOfInjectedText */ ? 0 : horizontalPosition.left);\n            const top = ctx.getVerticalOffsetForLineNumber(position.lineNumber) - ctx.scrollTop;\n            return new AnchorCoordinate(top, left, lineHeight);\n        }\n    }\n    _reduceAnchorCoordinates(primary, secondary, width) {\n        if (!secondary) {\n            return primary;\n        }\n        const fontInfo = this._context.configuration.options.get(50 /* EditorOption.fontInfo */);\n        let left = secondary.left;\n        if (left < primary.left) {\n            left = Math.max(left, primary.left - width + fontInfo.typicalFullwidthCharacterWidth);\n        }\n        else {\n            left = Math.min(left, primary.left + width - fontInfo.typicalFullwidthCharacterWidth);\n        }\n        return new AnchorCoordinate(primary.top, left, primary.height);\n    }\n    _prepareRenderWidget(ctx) {\n        if (!this._preference || this._preference.length === 0) {\n            return null;\n        }\n        const { primary, secondary } = this._getAnchorsCoordinates(ctx);\n        if (!primary) {\n            return {\n                kind: 'offViewport',\n                preserveFocus: this.domNode.domNode.contains(this.domNode.domNode.ownerDocument.activeElement)\n            };\n            // return null;\n        }\n        if (this._cachedDomNodeOffsetWidth === -1 || this._cachedDomNodeOffsetHeight === -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._cachedDomNodeOffsetWidth = preferredDimensions.width;\n                this._cachedDomNodeOffsetHeight = preferredDimensions.height;\n            }\n            else {\n                const domNode = this.domNode.domNode;\n                const clientRect = domNode.getBoundingClientRect();\n                this._cachedDomNodeOffsetWidth = Math.round(clientRect.width);\n                this._cachedDomNodeOffsetHeight = Math.round(clientRect.height);\n            }\n        }\n        const anchor = this._reduceAnchorCoordinates(primary, secondary, this._cachedDomNodeOffsetWidth);\n        let placement;\n        if (this.allowEditorOverflow) {\n            placement = this._layoutBoxInPage(anchor, this._cachedDomNodeOffsetWidth, this._cachedDomNodeOffsetHeight, ctx);\n        }\n        else {\n            placement = this._layoutBoxInViewport(anchor, this._cachedDomNodeOffsetWidth, this._cachedDomNodeOffsetHeight, ctx);\n        }\n        // Do two passes, first for perfect fit, second picks first option\n        for (let pass = 1; pass <= 2; pass++) {\n            for (const pref of this._preference) {\n                // placement\n                if (pref === 1 /* ContentWidgetPositionPreference.ABOVE */) {\n                    if (!placement) {\n                        // Widget outside of viewport\n                        return null;\n                    }\n                    if (pass === 2 || placement.fitsAbove) {\n                        return {\n                            kind: 'inViewport',\n                            coordinate: new Coordinate(placement.aboveTop, placement.left),\n                            position: 1 /* ContentWidgetPositionPreference.ABOVE */\n                        };\n                    }\n                }\n                else if (pref === 2 /* ContentWidgetPositionPreference.BELOW */) {\n                    if (!placement) {\n                        // Widget outside of viewport\n                        return null;\n                    }\n                    if (pass === 2 || placement.fitsBelow) {\n                        return {\n                            kind: 'inViewport',\n                            coordinate: new Coordinate(placement.belowTop, placement.left),\n                            position: 2 /* ContentWidgetPositionPreference.BELOW */\n                        };\n                    }\n                }\n                else {\n                    if (this.allowEditorOverflow) {\n                        return {\n                            kind: 'inViewport',\n                            coordinate: this._prepareRenderWidgetAtExactPositionOverflowing(new Coordinate(anchor.top, anchor.left)),\n                            position: 0 /* ContentWidgetPositionPreference.EXACT */\n                        };\n                    }\n                    else {\n                        return {\n                            kind: 'inViewport',\n                            coordinate: new Coordinate(anchor.top, anchor.left),\n                            position: 0 /* ContentWidgetPositionPreference.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._primaryAnchor.viewPosition || !this._preference) {\n            return;\n        }\n        if (this._primaryAnchor.viewPosition.lineNumber < viewportData.startLineNumber || this._primaryAnchor.viewPosition.lineNumber > 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 || this._renderData.kind === 'offViewport') {\n            // This widget should be invisible\n            if (this._isVisible) {\n                this.domNode.removeAttribute('monaco-visible-content-widget');\n                this._isVisible = false;\n                if (this._renderData?.kind === 'offViewport' && this._renderData.preserveFocus) {\n                    // widget wants to be shown, but it is outside of the viewport and it\n                    // has focus which we need to preserve\n                    this.domNode.setTop(-1000);\n                }\n                else {\n                    this.domNode.setVisibility('hidden');\n                }\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}\nclass PositionPair {\n    constructor(modelPosition, viewPosition) {\n        this.modelPosition = modelPosition;\n        this.viewPosition = viewPosition;\n    }\n}\nclass Coordinate {\n    constructor(top, left) {\n        this.top = top;\n        this.left = left;\n        this._coordinateBrand = undefined;\n    }\n}\nclass AnchorCoordinate {\n    constructor(top, left, height) {\n        this.top = top;\n        this.left = left;\n        this.height = height;\n        this._anchorCoordinateBrand = undefined;\n    }\n}\nfunction safeInvoke(fn, thisArg, ...args) {\n    try {\n        return fn.call(thisArg, ...args);\n    }\n    catch {\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/core/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';\nimport { isHighContrast } from '../../../../platform/theme/common/theme.js';\nimport { Position } from '../../../common/core/position.js';\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(146 /* EditorOption.layoutInfo */);\n        this._renderLineHighlight = options.get(97 /* EditorOption.renderLineHighlight */);\n        this._renderLineHighlightOnlyWhenFocus = options.get(98 /* EditorOption.renderLineHighlightOnlyWhenFocus */);\n        this._wordWrap = layoutInfo.isViewportWrapping;\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        const lineNumbers = new Set();\n        for (const selection of this._selections) {\n            lineNumbers.add(selection.positionLineNumber);\n        }\n        const cursorsLineNumbers = Array.from(lineNumbers);\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 = this._selections.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(146 /* EditorOption.layoutInfo */);\n        this._renderLineHighlight = options.get(97 /* EditorOption.renderLineHighlight */);\n        this._renderLineHighlightOnlyWhenFocus = options.get(98 /* EditorOption.renderLineHighlightOnlyWhenFocus */);\n        this._wordWrap = layoutInfo.isViewportWrapping;\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 visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n        const visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n        // initialize renderData\n        const renderData = [];\n        for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n            const lineIndex = lineNumber - visibleStartLineNumber;\n            renderData[lineIndex] = '';\n        }\n        if (this._wordWrap) {\n            // do a first pass to render wrapped lines\n            const renderedLineWrapped = this._renderOne(ctx, false);\n            for (const cursorLineNumber of this._cursorLineNumbers) {\n                const coordinatesConverter = this._context.viewModel.coordinatesConverter;\n                const modelLineNumber = coordinatesConverter.convertViewPositionToModelPosition(new Position(cursorLineNumber, 1)).lineNumber;\n                const firstViewLineNumber = coordinatesConverter.convertModelPositionToViewPosition(new Position(modelLineNumber, 1)).lineNumber;\n                const lastViewLineNumber = coordinatesConverter.convertModelPositionToViewPosition(new Position(modelLineNumber, this._context.viewModel.model.getLineMaxColumn(modelLineNumber))).lineNumber;\n                const firstLine = Math.max(firstViewLineNumber, visibleStartLineNumber);\n                const lastLine = Math.min(lastViewLineNumber, visibleEndLineNumber);\n                for (let lineNumber = firstLine; lineNumber <= lastLine; lineNumber++) {\n                    const lineIndex = lineNumber - visibleStartLineNumber;\n                    renderData[lineIndex] = renderedLineWrapped;\n                }\n            }\n        }\n        // do a second pass to render exact lines\n        const renderedLineExact = this._renderOne(ctx, true);\n        for (const cursorLineNumber of this._cursorLineNumbers) {\n            if (cursorLineNumber < visibleStartLineNumber || cursorLineNumber > visibleEndLineNumber) {\n                continue;\n            }\n            const lineIndex = cursorLineNumber - visibleStartLineNumber;\n            renderData[lineIndex] = renderedLineExact;\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    _shouldRenderInMargin() {\n        return ((this._renderLineHighlight === 'gutter' || this._renderLineHighlight === 'all')\n            && (!this._renderLineHighlightOnlyWhenFocus || this._focused));\n    }\n    _shouldRenderInContent() {\n        return ((this._renderLineHighlight === 'line' || this._renderLineHighlight === 'all')\n            && this._selectionIsEmpty\n            && (!this._renderLineHighlightOnlyWhenFocus || this._focused));\n    }\n}\nexport class CurrentLineHighlightOverlay extends AbstractLineHighlightOverlay {\n    _renderOne(ctx, exact) {\n        const className = 'current-line' + (this._shouldRenderInMargin() ? ' current-line-both' : '') + (exact ? ' current-line-exact' : '');\n        return `<div class=\"${className}\" style=\"width:${Math.max(ctx.scrollWidth, this._contentWidth)}px;\"></div>`;\n    }\n    _shouldRenderThis() {\n        return this._shouldRenderInContent();\n    }\n    _shouldRenderOther() {\n        return this._shouldRenderInMargin();\n    }\n}\nexport class CurrentLineMarginHighlightOverlay extends AbstractLineHighlightOverlay {\n    _renderOne(ctx, exact) {\n        const className = 'current-line' + (this._shouldRenderInMargin() ? ' current-line-margin' : '') + (this._shouldRenderOther() ? ' current-line-margin-both' : '') + (this._shouldRenderInMargin() && exact ? ' current-line-exact-margin' : '');\n        return `<div class=\"${className}\" style=\"width:${this._contentLeft}px\"></div>`;\n    }\n    _shouldRenderThis() {\n        return true;\n    }\n    _shouldRenderOther() {\n        return this._shouldRenderInContent();\n    }\n}\nregisterThemingParticipant((theme, collector) => {\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            collector.addRule(`.monaco-editor .view-overlays .current-line-exact { border: 2px solid ${lineHighlightBorder}; }`);\n            collector.addRule(`.monaco-editor .margin-view-overlays .current-line-exact-margin { border: 2px solid ${lineHighlightBorder}; }`);\n            if (isHighContrast(theme.type)) {\n                collector.addRule(`.monaco-editor .view-overlays .current-line-exact { border-width: 1px; }`);\n                collector.addRule(`.monaco-editor .margin-view-overlays .current-line-exact-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 { HorizontalRange } from '../../view/renderingContext.js';\nimport { Range } from '../../../common/core/range.js';\nexport class DecorationsOverlay extends DynamicViewOverlay {\n    constructor(context) {\n        super();\n        this._context = context;\n        const options = this._context.configuration.options;\n        this._typicalHalfwidthCharacterWidth = options.get(50 /* EditorOption.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._typicalHalfwidthCharacterWidth = options.get(50 /* EditorOption.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 = [];\n        let 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 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%;\"></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 visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n        let prevClassName = null;\n        let prevShowIfCollapsed = false;\n        let prevRange = null;\n        let prevShouldFillLineOnLineBreak = false;\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.viewModel.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, prevShouldFillLineOnLineBreak, prevShowIfCollapsed, visibleStartLineNumber, output);\n            }\n            prevClassName = className;\n            prevShowIfCollapsed = showIfCollapsed;\n            prevRange = range;\n            prevShouldFillLineOnLineBreak = d.options.shouldFillLineOnLineBreak ?? false;\n        }\n        if (prevClassName !== null) {\n            this._renderNormalDecoration(ctx, prevRange, prevClassName, prevShouldFillLineOnLineBreak, prevShowIfCollapsed, visibleStartLineNumber, output);\n        }\n    }\n    _renderNormalDecoration(ctx, range, className, shouldFillLineOnLineBreak, showIfCollapsed, 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 < this._typicalHalfwidthCharacterWidth) {\n                    // collapsed/very small range case => make the decoration visible by expanding its width\n                    // expand its size on both sides (both to the left and to the right, keeping it centered)\n                    const center = Math.round(singleVisibleRange.left + singleVisibleRange.width / 2);\n                    const left = Math.max(0, Math.round(center - this._typicalHalfwidthCharacterWidth / 2));\n                    lineVisibleRanges.ranges[0] = new HorizontalRange(left, this._typicalHalfwidthCharacterWidth);\n                }\n            }\n            for (let k = 0, lenK = lineVisibleRanges.ranges.length; k < lenK; k++) {\n                const expandToLeft = shouldFillLineOnLineBreak && lineVisibleRanges.continuesOnNextLine && lenK === 1;\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                    + (expandToLeft ?\n                        '100%;' :\n                        (String(visibleRange.width) + 'px;'))\n                    + '\"></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(104 /* EditorOption.scrollbar */);\n        const mouseWheelScrollSensitivity = options.get(75 /* EditorOption.mouseWheelScrollSensitivity */);\n        const fastScrollSensitivity = options.get(40 /* EditorOption.fastScrollSensitivity */);\n        const scrollPredominantAxis = options.get(107 /* EditorOption.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(), 6 /* PartFingerprint.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.viewModel.viewLayout.setScrollPosition(newScrollPosition, 1 /* ScrollType.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(146 /* EditorOption.layoutInfo */);\n        this.scrollbarDomNode.setLeft(layoutInfo.contentLeft);\n        const minimap = options.get(73 /* EditorOption.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    delegateVerticalScrollbarPointerDown(browserEvent) {\n        this.scrollbar.delegateVerticalScrollbarPointerDown(browserEvent);\n    }\n    delegateScrollFromMouseWheelEvent(browserEvent) {\n        this.scrollbar.delegateScrollFromMouseWheelEvent(browserEvent);\n    }\n    // --- begin event handlers\n    onConfigurationChanged(e) {\n        if (e.hasChanged(104 /* EditorOption.scrollbar */)\n            || e.hasChanged(75 /* EditorOption.mouseWheelScrollSensitivity */)\n            || e.hasChanged(40 /* EditorOption.fastScrollSensitivity */)) {\n            const options = this._context.configuration.options;\n            const scrollbar = options.get(104 /* EditorOption.scrollbar */);\n            const mouseWheelScrollSensitivity = options.get(75 /* EditorOption.mouseWheelScrollSensitivity */);\n            const fastScrollSensitivity = options.get(40 /* EditorOption.fastScrollSensitivity */);\n            const scrollPredominantAxis = options.get(107 /* EditorOption.scrollPredominantAxis */);\n            const newOpts = {\n                vertical: scrollbar.vertical,\n                horizontal: scrollbar.horizontal,\n                verticalScrollbarSize: scrollbar.verticalScrollbarSize,\n                horizontalScrollbarSize: scrollbar.horizontalScrollbarSize,\n                scrollByPage: scrollbar.scrollByPage,\n                handleMouseWheel: scrollbar.handleMouseWheel,\n                mouseWheelScrollSensitivity: mouseWheelScrollSensitivity,\n                fastScrollSensitivity: fastScrollSensitivity,\n                scrollPredominantAxis: scrollPredominantAxis\n            };\n            this.scrollbar.updateOptions(newOpts);\n        }\n        if (e.hasChanged(146 /* EditorOption.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 { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { ArrayQueue } from '../../../../base/common/arrays.js';\nimport './glyphMargin.css';\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\nimport { ViewPart } from '../../view/viewPart.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { GlyphMarginLane } from '../../../common/model.js';\n/**\n * Represents a decoration that should be shown along the lines from `startLineNumber` to `endLineNumber`.\n * This can end up producing multiple `LineDecorationToRender`.\n */\nexport class DecorationToRender {\n    constructor(startLineNumber, endLineNumber, className, tooltip, zIndex) {\n        this.startLineNumber = startLineNumber;\n        this.endLineNumber = endLineNumber;\n        this.className = className;\n        this.tooltip = tooltip;\n        this._decorationToRenderBrand = undefined;\n        this.zIndex = zIndex ?? 0;\n    }\n}\n/**\n * A decoration that should be shown along a line.\n */\nexport class LineDecorationToRender {\n    constructor(className, zIndex, tooltip) {\n        this.className = className;\n        this.zIndex = zIndex;\n        this.tooltip = tooltip;\n    }\n}\n/**\n * Decorations to render on a visible line.\n */\nexport class VisibleLineDecorationsToRender {\n    constructor() {\n        this.decorations = [];\n    }\n    add(decoration) {\n        this.decorations.push(decoration);\n    }\n    getDecorations() {\n        return this.decorations;\n    }\n}\nexport class DedupOverlay extends DynamicViewOverlay {\n    /**\n     * Returns an array with an element for each visible line number.\n     */\n    _render(visibleStartLineNumber, visibleEndLineNumber, decorations) {\n        const output = [];\n        for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n            const lineIndex = lineNumber - visibleStartLineNumber;\n            output[lineIndex] = new VisibleLineDecorationsToRender();\n        }\n        if (decorations.length === 0) {\n            return output;\n        }\n        // Sort decorations by className, then by startLineNumber and then by endLineNumber\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            const zIndex = d.zIndex;\n            let startLineIndex = Math.max(d.startLineNumber, visibleStartLineNumber) - visibleStartLineNumber;\n            const endLineIndex = Math.min(d.endLineNumber, visibleEndLineNumber) - visibleStartLineNumber;\n            if (prevClassName === className) {\n                // Here we avoid rendering the same className multiple times on the same line\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].add(new LineDecorationToRender(className, zIndex, d.tooltip));\n            }\n        }\n        return output;\n    }\n}\nexport class GlyphMarginWidgets extends ViewPart {\n    constructor(context) {\n        super(context);\n        this._widgets = {};\n        this._context = context;\n        const options = this._context.configuration.options;\n        const layoutInfo = options.get(146 /* EditorOption.layoutInfo */);\n        this.domNode = createFastDomNode(document.createElement('div'));\n        this.domNode.setClassName('glyph-margin-widgets');\n        this.domNode.setPosition('absolute');\n        this.domNode.setTop(0);\n        this._lineHeight = options.get(67 /* EditorOption.lineHeight */);\n        this._glyphMargin = options.get(57 /* EditorOption.glyphMargin */);\n        this._glyphMarginLeft = layoutInfo.glyphMarginLeft;\n        this._glyphMarginWidth = layoutInfo.glyphMarginWidth;\n        this._glyphMarginDecorationLaneCount = layoutInfo.glyphMarginDecorationLaneCount;\n        this._managedDomNodes = [];\n        this._decorationGlyphsToRender = [];\n    }\n    dispose() {\n        this._managedDomNodes = [];\n        this._decorationGlyphsToRender = [];\n        this._widgets = {};\n        super.dispose();\n    }\n    getWidgets() {\n        return Object.values(this._widgets);\n    }\n    // --- begin event handlers\n    onConfigurationChanged(e) {\n        const options = this._context.configuration.options;\n        const layoutInfo = options.get(146 /* EditorOption.layoutInfo */);\n        this._lineHeight = options.get(67 /* EditorOption.lineHeight */);\n        this._glyphMargin = options.get(57 /* EditorOption.glyphMargin */);\n        this._glyphMarginLeft = layoutInfo.glyphMarginLeft;\n        this._glyphMarginWidth = layoutInfo.glyphMarginWidth;\n        this._glyphMarginDecorationLaneCount = layoutInfo.glyphMarginDecorationLaneCount;\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    // --- begin widget management\n    addWidget(widget) {\n        const domNode = createFastDomNode(widget.getDomNode());\n        this._widgets[widget.getId()] = {\n            widget: widget,\n            preference: widget.getPosition(),\n            domNode: domNode,\n            renderInfo: null\n        };\n        domNode.setPosition('absolute');\n        domNode.setDisplay('none');\n        domNode.setAttribute('widgetId', widget.getId());\n        this.domNode.appendChild(domNode);\n        this.setShouldRender();\n    }\n    setWidgetPosition(widget, preference) {\n        const myWidget = this._widgets[widget.getId()];\n        if (myWidget.preference.lane === preference.lane\n            && myWidget.preference.zIndex === preference.zIndex\n            && Range.equalsRange(myWidget.preference.range, preference.range)) {\n            return false;\n        }\n        myWidget.preference = preference;\n        this.setShouldRender();\n        return true;\n    }\n    removeWidget(widget) {\n        const widgetId = widget.getId();\n        if (this._widgets[widgetId]) {\n            const widgetData = this._widgets[widgetId];\n            const domNode = widgetData.domNode.domNode;\n            delete this._widgets[widgetId];\n            domNode.remove();\n            this.setShouldRender();\n        }\n    }\n    // --- end widget management\n    _collectDecorationBasedGlyphRenderRequest(ctx, requests) {\n        const visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n        const visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n        const decorations = ctx.getDecorationsInViewport();\n        for (const d of decorations) {\n            const glyphMarginClassName = d.options.glyphMarginClassName;\n            if (!glyphMarginClassName) {\n                continue;\n            }\n            const startLineNumber = Math.max(d.range.startLineNumber, visibleStartLineNumber);\n            const endLineNumber = Math.min(d.range.endLineNumber, visibleEndLineNumber);\n            const lane = d.options.glyphMargin?.position ?? GlyphMarginLane.Center;\n            const zIndex = d.options.zIndex ?? 0;\n            for (let lineNumber = startLineNumber; lineNumber <= endLineNumber; lineNumber++) {\n                const modelPosition = this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new Position(lineNumber, 0));\n                const laneIndex = this._context.viewModel.glyphLanes.getLanesAtLine(modelPosition.lineNumber).indexOf(lane);\n                requests.push(new DecorationBasedGlyphRenderRequest(lineNumber, laneIndex, zIndex, glyphMarginClassName));\n            }\n        }\n    }\n    _collectWidgetBasedGlyphRenderRequest(ctx, requests) {\n        const visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n        const visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n        for (const widget of Object.values(this._widgets)) {\n            const range = widget.preference.range;\n            const { startLineNumber, endLineNumber } = this._context.viewModel.coordinatesConverter.convertModelRangeToViewRange(Range.lift(range));\n            if (!startLineNumber || !endLineNumber || endLineNumber < visibleStartLineNumber || startLineNumber > visibleEndLineNumber) {\n                // The widget is not in the viewport\n                continue;\n            }\n            // The widget is in the viewport, find a good line for it\n            const widgetLineNumber = Math.max(startLineNumber, visibleStartLineNumber);\n            const modelPosition = this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new Position(widgetLineNumber, 0));\n            const laneIndex = this._context.viewModel.glyphLanes.getLanesAtLine(modelPosition.lineNumber).indexOf(widget.preference.lane);\n            requests.push(new WidgetBasedGlyphRenderRequest(widgetLineNumber, laneIndex, widget.preference.zIndex, widget));\n        }\n    }\n    _collectSortedGlyphRenderRequests(ctx) {\n        const requests = [];\n        this._collectDecorationBasedGlyphRenderRequest(ctx, requests);\n        this._collectWidgetBasedGlyphRenderRequest(ctx, requests);\n        // sort requests by lineNumber ASC, lane  ASC, zIndex DESC, type DESC (widgets first), className ASC\n        // don't change this sort unless you understand `prepareRender` below.\n        requests.sort((a, b) => {\n            if (a.lineNumber === b.lineNumber) {\n                if (a.laneIndex === b.laneIndex) {\n                    if (a.zIndex === b.zIndex) {\n                        if (b.type === a.type) {\n                            if (a.type === 0 /* GlyphRenderRequestType.Decoration */ && b.type === 0 /* GlyphRenderRequestType.Decoration */) {\n                                return (a.className < b.className ? -1 : 1);\n                            }\n                            return 0;\n                        }\n                        return b.type - a.type;\n                    }\n                    return b.zIndex - a.zIndex;\n                }\n                return a.laneIndex - b.laneIndex;\n            }\n            return a.lineNumber - b.lineNumber;\n        });\n        return requests;\n    }\n    /**\n     * Will store render information in each widget's renderInfo and in `_decorationGlyphsToRender`.\n     */\n    prepareRender(ctx) {\n        if (!this._glyphMargin) {\n            this._decorationGlyphsToRender = [];\n            return;\n        }\n        for (const widget of Object.values(this._widgets)) {\n            widget.renderInfo = null;\n        }\n        const requests = new ArrayQueue(this._collectSortedGlyphRenderRequests(ctx));\n        const decorationGlyphsToRender = [];\n        while (requests.length > 0) {\n            const first = requests.peek();\n            if (!first) {\n                // not possible\n                break;\n            }\n            // Requests are sorted by lineNumber and lane, so we read all requests for this particular location\n            const requestsAtLocation = requests.takeWhile((el) => el.lineNumber === first.lineNumber && el.laneIndex === first.laneIndex);\n            if (!requestsAtLocation || requestsAtLocation.length === 0) {\n                // not possible\n                break;\n            }\n            const winner = requestsAtLocation[0];\n            if (winner.type === 0 /* GlyphRenderRequestType.Decoration */) {\n                // combine all decorations with the same z-index\n                const classNames = [];\n                // requests are sorted by zIndex, type, and className so we can dedup className by looking at the previous one\n                for (const request of requestsAtLocation) {\n                    if (request.zIndex !== winner.zIndex || request.type !== winner.type) {\n                        break;\n                    }\n                    if (classNames.length === 0 || classNames[classNames.length - 1] !== request.className) {\n                        classNames.push(request.className);\n                    }\n                }\n                decorationGlyphsToRender.push(winner.accept(classNames.join(' '))); // TODO@joyceerhl Implement overflow for remaining decorations\n            }\n            else {\n                // widgets cannot be combined\n                winner.widget.renderInfo = {\n                    lineNumber: winner.lineNumber,\n                    laneIndex: winner.laneIndex,\n                };\n            }\n        }\n        this._decorationGlyphsToRender = decorationGlyphsToRender;\n    }\n    render(ctx) {\n        if (!this._glyphMargin) {\n            for (const widget of Object.values(this._widgets)) {\n                widget.domNode.setDisplay('none');\n            }\n            while (this._managedDomNodes.length > 0) {\n                const domNode = this._managedDomNodes.pop();\n                domNode?.domNode.remove();\n            }\n            return;\n        }\n        const width = (Math.round(this._glyphMarginWidth / this._glyphMarginDecorationLaneCount));\n        // Render widgets\n        for (const widget of Object.values(this._widgets)) {\n            if (!widget.renderInfo) {\n                // this widget is not visible\n                widget.domNode.setDisplay('none');\n            }\n            else {\n                const top = ctx.viewportData.relativeVerticalOffset[widget.renderInfo.lineNumber - ctx.viewportData.startLineNumber];\n                const left = this._glyphMarginLeft + widget.renderInfo.laneIndex * this._lineHeight;\n                widget.domNode.setDisplay('block');\n                widget.domNode.setTop(top);\n                widget.domNode.setLeft(left);\n                widget.domNode.setWidth(width);\n                widget.domNode.setHeight(this._lineHeight);\n            }\n        }\n        // Render decorations, reusing previous dom nodes as possible\n        for (let i = 0; i < this._decorationGlyphsToRender.length; i++) {\n            const dec = this._decorationGlyphsToRender[i];\n            const top = ctx.viewportData.relativeVerticalOffset[dec.lineNumber - ctx.viewportData.startLineNumber];\n            const left = this._glyphMarginLeft + dec.laneIndex * this._lineHeight;\n            let domNode;\n            if (i < this._managedDomNodes.length) {\n                domNode = this._managedDomNodes[i];\n            }\n            else {\n                domNode = createFastDomNode(document.createElement('div'));\n                this._managedDomNodes.push(domNode);\n                this.domNode.appendChild(domNode);\n            }\n            domNode.setClassName(`cgmr codicon ` + dec.combinedClassName);\n            domNode.setPosition(`absolute`);\n            domNode.setTop(top);\n            domNode.setLeft(left);\n            domNode.setWidth(width);\n            domNode.setHeight(this._lineHeight);\n        }\n        // remove extra dom nodes\n        while (this._managedDomNodes.length > this._decorationGlyphsToRender.length) {\n            const domNode = this._managedDomNodes.pop();\n            domNode?.domNode.remove();\n        }\n    }\n}\n/**\n * A request to render a decoration in the glyph margin at a certain location.\n */\nclass DecorationBasedGlyphRenderRequest {\n    constructor(lineNumber, laneIndex, zIndex, className) {\n        this.lineNumber = lineNumber;\n        this.laneIndex = laneIndex;\n        this.zIndex = zIndex;\n        this.className = className;\n        this.type = 0 /* GlyphRenderRequestType.Decoration */;\n    }\n    accept(combinedClassName) {\n        return new DecorationBasedGlyph(this.lineNumber, this.laneIndex, combinedClassName);\n    }\n}\n/**\n * A request to render a widget in the glyph margin at a certain location.\n */\nclass WidgetBasedGlyphRenderRequest {\n    constructor(lineNumber, laneIndex, zIndex, widget) {\n        this.lineNumber = lineNumber;\n        this.laneIndex = laneIndex;\n        this.zIndex = zIndex;\n        this.widget = widget;\n        this.type = 1 /* GlyphRenderRequestType.Widget */;\n    }\n}\nclass DecorationBasedGlyph {\n    constructor(lineNumber, laneIndex, combinedClassName) {\n        this.lineNumber = lineNumber;\n        this.laneIndex = laneIndex;\n        this.combinedClassName = combinedClassName;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { editorBracketHighlightingForeground1, editorBracketHighlightingForeground2, editorBracketHighlightingForeground3, editorBracketHighlightingForeground4, editorBracketHighlightingForeground5, editorBracketHighlightingForeground6, editorBracketPairGuideActiveBackground1, editorBracketPairGuideActiveBackground2, editorBracketPairGuideActiveBackground3, editorBracketPairGuideActiveBackground4, editorBracketPairGuideActiveBackground5, editorBracketPairGuideActiveBackground6, editorBracketPairGuideBackground1, editorBracketPairGuideBackground2, editorBracketPairGuideBackground3, editorBracketPairGuideBackground4, editorBracketPairGuideBackground5, editorBracketPairGuideBackground6, editorIndentGuide1, editorIndentGuide2, editorIndentGuide3, editorIndentGuide4, editorIndentGuide5, editorIndentGuide6, editorActiveIndentGuide1, editorActiveIndentGuide2, editorActiveIndentGuide3, editorActiveIndentGuide4, editorActiveIndentGuide5, editorActiveIndentGuide6 } from '../../../common/core/editorColorRegistry.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { Position } from '../../../common/core/position.js';\nimport { ArrayQueue } from '../../../../base/common/arrays.js';\nimport { isDefined } from '../../../../base/common/types.js';\nimport { BracketPairGuidesClassNames } from '../../../common/model/guidesTextModelPart.js';\nimport { IndentGuide, HorizontalGuidesState } from '../../../common/textModelGuides.js';\nexport class IndentGuidesOverlay extends DynamicViewOverlay {\n    constructor(context) {\n        super();\n        this._context = context;\n        this._primaryPosition = null;\n        const options = this._context.configuration.options;\n        const wrappingInfo = options.get(147 /* EditorOption.wrappingInfo */);\n        const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n        this._spaceWidth = fontInfo.spaceWidth;\n        this._maxIndentLeft = wrappingInfo.wrappingColumn === -1 ? -1 : (wrappingInfo.wrappingColumn * fontInfo.typicalHalfwidthCharacterWidth);\n        this._bracketPairGuideOptions = options.get(16 /* EditorOption.guides */);\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(147 /* EditorOption.wrappingInfo */);\n        const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n        this._spaceWidth = fontInfo.spaceWidth;\n        this._maxIndentLeft = wrappingInfo.wrappingColumn === -1 ? -1 : (wrappingInfo.wrappingColumn * fontInfo.typicalHalfwidthCharacterWidth);\n        this._bracketPairGuideOptions = options.get(16 /* EditorOption.guides */);\n        return true;\n    }\n    onCursorStateChanged(e) {\n        const selection = e.selections[0];\n        const newPosition = selection.getPosition();\n        if (!this._primaryPosition?.equals(newPosition)) {\n            this._primaryPosition = newPosition;\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._bracketPairGuideOptions.indentation && this._bracketPairGuideOptions.bracketPairs === false) {\n            this._renderResult = null;\n            return;\n        }\n        const visibleStartLineNumber = ctx.visibleRange.startLineNumber;\n        const visibleEndLineNumber = ctx.visibleRange.endLineNumber;\n        const scrollWidth = ctx.scrollWidth;\n        const activeCursorPosition = this._primaryPosition;\n        const indents = this.getGuidesByLine(visibleStartLineNumber, Math.min(visibleEndLineNumber + 1, this._context.viewModel.getLineCount()), activeCursorPosition);\n        const output = [];\n        for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n            const lineIndex = lineNumber - visibleStartLineNumber;\n            const indent = indents[lineIndex];\n            let result = '';\n            const leftOffset = ctx.visibleRangeForPosition(new Position(lineNumber, 1))?.left ?? 0;\n            for (const guide of indent) {\n                const left = guide.column === -1\n                    ? leftOffset + (guide.visibleColumn - 1) * this._spaceWidth\n                    : ctx.visibleRangeForPosition(new Position(lineNumber, guide.column)).left;\n                if (left > scrollWidth || (this._maxIndentLeft > 0 && left > this._maxIndentLeft)) {\n                    break;\n                }\n                const className = guide.horizontalLine ? (guide.horizontalLine.top ? 'horizontal-top' : 'horizontal-bottom') : 'vertical';\n                const width = guide.horizontalLine\n                    ? (ctx.visibleRangeForPosition(new Position(lineNumber, guide.horizontalLine.endColumn))?.left ?? (left + this._spaceWidth)) - left\n                    : this._spaceWidth;\n                result += `<div class=\"core-guide ${guide.className} ${className}\" style=\"left:${left}px;width:${width}px\"></div>`;\n            }\n            output[lineIndex] = result;\n        }\n        this._renderResult = output;\n    }\n    getGuidesByLine(visibleStartLineNumber, visibleEndLineNumber, activeCursorPosition) {\n        const bracketGuides = this._bracketPairGuideOptions.bracketPairs !== false\n            ? this._context.viewModel.getBracketGuidesInRangeByLine(visibleStartLineNumber, visibleEndLineNumber, activeCursorPosition, {\n                highlightActive: this._bracketPairGuideOptions.highlightActiveBracketPair,\n                horizontalGuides: this._bracketPairGuideOptions.bracketPairsHorizontal === true\n                    ? HorizontalGuidesState.Enabled\n                    : this._bracketPairGuideOptions.bracketPairsHorizontal === 'active'\n                        ? HorizontalGuidesState.EnabledForActive\n                        : HorizontalGuidesState.Disabled,\n                includeInactive: this._bracketPairGuideOptions.bracketPairs === true,\n            })\n            : null;\n        const indentGuides = this._bracketPairGuideOptions.indentation\n            ? this._context.viewModel.getLinesIndentGuides(visibleStartLineNumber, visibleEndLineNumber)\n            : null;\n        let activeIndentStartLineNumber = 0;\n        let activeIndentEndLineNumber = 0;\n        let activeIndentLevel = 0;\n        if (this._bracketPairGuideOptions.highlightActiveIndentation !== false && activeCursorPosition) {\n            const activeIndentInfo = this._context.viewModel.getActiveIndentGuide(activeCursorPosition.lineNumber, visibleStartLineNumber, visibleEndLineNumber);\n            activeIndentStartLineNumber = activeIndentInfo.startLineNumber;\n            activeIndentEndLineNumber = activeIndentInfo.endLineNumber;\n            activeIndentLevel = activeIndentInfo.indent;\n        }\n        const { indentSize } = this._context.viewModel.model.getOptions();\n        const result = [];\n        for (let lineNumber = visibleStartLineNumber; lineNumber <= visibleEndLineNumber; lineNumber++) {\n            const lineGuides = new Array();\n            result.push(lineGuides);\n            const bracketGuidesInLine = bracketGuides ? bracketGuides[lineNumber - visibleStartLineNumber] : [];\n            const bracketGuidesInLineQueue = new ArrayQueue(bracketGuidesInLine);\n            const indentGuidesInLine = indentGuides ? indentGuides[lineNumber - visibleStartLineNumber] : 0;\n            for (let indentLvl = 1; indentLvl <= indentGuidesInLine; indentLvl++) {\n                const indentGuide = (indentLvl - 1) * indentSize + 1;\n                const isActive = \n                // Disable active indent guide if there are bracket guides.\n                (this._bracketPairGuideOptions.highlightActiveIndentation === 'always' || bracketGuidesInLine.length === 0) &&\n                    activeIndentStartLineNumber <= lineNumber &&\n                    lineNumber <= activeIndentEndLineNumber &&\n                    indentLvl === activeIndentLevel;\n                lineGuides.push(...bracketGuidesInLineQueue.takeWhile(g => g.visibleColumn < indentGuide) || []);\n                const peeked = bracketGuidesInLineQueue.peek();\n                if (!peeked || peeked.visibleColumn !== indentGuide || peeked.horizontalLine) {\n                    lineGuides.push(new IndentGuide(indentGuide, -1, `core-guide-indent lvl-${(indentLvl - 1) % 30}` + (isActive ? ' indent-active' : ''), null, -1, -1));\n                }\n            }\n            lineGuides.push(...bracketGuidesInLineQueue.takeWhile(g => true) || []);\n        }\n        return result;\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}\nfunction transparentToUndefined(color) {\n    if (color && color.isTransparent()) {\n        return undefined;\n    }\n    return color;\n}\nregisterThemingParticipant((theme, collector) => {\n    const colors = [\n        { bracketColor: editorBracketHighlightingForeground1, guideColor: editorBracketPairGuideBackground1, guideColorActive: editorBracketPairGuideActiveBackground1 },\n        { bracketColor: editorBracketHighlightingForeground2, guideColor: editorBracketPairGuideBackground2, guideColorActive: editorBracketPairGuideActiveBackground2 },\n        { bracketColor: editorBracketHighlightingForeground3, guideColor: editorBracketPairGuideBackground3, guideColorActive: editorBracketPairGuideActiveBackground3 },\n        { bracketColor: editorBracketHighlightingForeground4, guideColor: editorBracketPairGuideBackground4, guideColorActive: editorBracketPairGuideActiveBackground4 },\n        { bracketColor: editorBracketHighlightingForeground5, guideColor: editorBracketPairGuideBackground5, guideColorActive: editorBracketPairGuideActiveBackground5 },\n        { bracketColor: editorBracketHighlightingForeground6, guideColor: editorBracketPairGuideBackground6, guideColorActive: editorBracketPairGuideActiveBackground6 }\n    ];\n    const colorProvider = new BracketPairGuidesClassNames();\n    const indentColors = [\n        { indentColor: editorIndentGuide1, indentColorActive: editorActiveIndentGuide1 },\n        { indentColor: editorIndentGuide2, indentColorActive: editorActiveIndentGuide2 },\n        { indentColor: editorIndentGuide3, indentColorActive: editorActiveIndentGuide3 },\n        { indentColor: editorIndentGuide4, indentColorActive: editorActiveIndentGuide4 },\n        { indentColor: editorIndentGuide5, indentColorActive: editorActiveIndentGuide5 },\n        { indentColor: editorIndentGuide6, indentColorActive: editorActiveIndentGuide6 },\n    ];\n    const colorValues = colors\n        .map(c => {\n        const bracketColor = theme.getColor(c.bracketColor);\n        const guideColor = theme.getColor(c.guideColor);\n        const guideColorActive = theme.getColor(c.guideColorActive);\n        const effectiveGuideColor = transparentToUndefined(transparentToUndefined(guideColor) ?? bracketColor?.transparent(0.3));\n        const effectiveGuideColorActive = transparentToUndefined(transparentToUndefined(guideColorActive) ?? bracketColor);\n        if (!effectiveGuideColor || !effectiveGuideColorActive) {\n            return undefined;\n        }\n        return {\n            guideColor: effectiveGuideColor,\n            guideColorActive: effectiveGuideColorActive,\n        };\n    })\n        .filter(isDefined);\n    const indentColorValues = indentColors\n        .map(c => {\n        const indentColor = theme.getColor(c.indentColor);\n        const indentColorActive = theme.getColor(c.indentColorActive);\n        const effectiveIndentColor = transparentToUndefined(indentColor);\n        const effectiveIndentColorActive = transparentToUndefined(indentColorActive);\n        if (!effectiveIndentColor || !effectiveIndentColorActive) {\n            return undefined;\n        }\n        return {\n            indentColor: effectiveIndentColor,\n            indentColorActive: effectiveIndentColorActive,\n        };\n    })\n        .filter(isDefined);\n    if (colorValues.length > 0) {\n        for (let level = 0; level < 30; level++) {\n            const colors = colorValues[level % colorValues.length];\n            collector.addRule(`.monaco-editor .${colorProvider.getInlineClassNameOfLevel(level).replace(/ /g, '.')} { --guide-color: ${colors.guideColor}; --guide-color-active: ${colors.guideColorActive}; }`);\n        }\n        collector.addRule(`.monaco-editor .vertical { box-shadow: 1px 0 0 0 var(--guide-color) inset; }`);\n        collector.addRule(`.monaco-editor .horizontal-top { border-top: 1px solid var(--guide-color); }`);\n        collector.addRule(`.monaco-editor .horizontal-bottom { border-bottom: 1px solid var(--guide-color); }`);\n        collector.addRule(`.monaco-editor .vertical.${colorProvider.activeClassName} { box-shadow: 1px 0 0 0 var(--guide-color-active) inset; }`);\n        collector.addRule(`.monaco-editor .horizontal-top.${colorProvider.activeClassName} { border-top: 1px solid var(--guide-color-active); }`);\n        collector.addRule(`.monaco-editor .horizontal-bottom.${colorProvider.activeClassName} { border-bottom: 1px solid var(--guide-color-active); }`);\n    }\n    if (indentColorValues.length > 0) {\n        for (let level = 0; level < 30; level++) {\n            const colors = indentColorValues[level % indentColorValues.length];\n            collector.addRule(`.monaco-editor .lines-content .core-guide-indent.lvl-${level} { --indent-color: ${colors.indentColor}; --indent-color-active: ${colors.indentColorActive}; }`);\n        }\n        collector.addRule(`.monaco-editor .lines-content .core-guide-indent { box-shadow: 1px 0 0 0 var(--indent-color) inset; }`);\n        collector.addRule(`.monaco-editor .lines-content .core-guide-indent.indent-active { box-shadow: 1px 0 0 0 var(--indent-color-active) 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 *--------------------------------------------------------------------------------------------*/\nexport class DomReadingContext {\n    get didDomLayout() {\n        return this._didDomLayout;\n    }\n    readClientRect() {\n        if (!this._clientRectRead) {\n            this._clientRectRead = true;\n            const rect = this._domNode.getBoundingClientRect();\n            this.markDidDomLayout();\n            this._clientRectDeltaLeft = rect.left;\n            this._clientRectScale = rect.width / this._domNode.offsetWidth;\n        }\n    }\n    get clientRectDeltaLeft() {\n        if (!this._clientRectRead) {\n            this.readClientRect();\n        }\n        return this._clientRectDeltaLeft;\n    }\n    get clientRectScale() {\n        if (!this._clientRectRead) {\n            this.readClientRect();\n        }\n        return this._clientRectScale;\n    }\n    constructor(_domNode, endNode) {\n        this._domNode = _domNode;\n        this.endNode = endNode;\n        this._didDomLayout = false;\n        this._clientRectDeltaLeft = 0;\n        this._clientRectScale = 1;\n        this._clientRectRead = false;\n    }\n    markDidDomLayout() {\n        this._didDomLayout = 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 { MOUSE_CURSOR_TEXT_CSS_CLASS_NAME } from '../../../../base/browser/ui/mouseCursor/mouseCursor.js';\nimport { RunOnceScheduler } from '../../../../base/common/async.js';\nimport * as platform from '../../../../base/common/platform.js';\nimport './viewLines.css';\nimport { applyFontInfo } from '../../config/domFontInfo.js';\nimport { HorizontalPosition, HorizontalRange, LineVisibleRanges } from '../../view/renderingContext.js';\nimport { VisibleLinesCollection } from '../../view/viewLayer.js';\nimport { PartFingerprints, ViewPart } from '../../view/viewPart.js';\nimport { DomReadingContext } from './domReadingContext.js';\nimport { ViewLine, ViewLineOptions } from './viewLine.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.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(minimalReveal, lineNumber, startColumn, endColumn, startScrollTop, stopScrollTop, scrollType) {\n        this.minimalReveal = minimalReveal;\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(minimalReveal, selections, startScrollTop, stopScrollTop, scrollType) {\n        this.minimalReveal = minimalReveal;\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    /**\n     * Adds this amount of pixels to the right of lines (no-one wants to type near the edge of the viewport)\n     */\n    static { this.HORIZONTAL_EXTRA_PX = 30; }\n    constructor(context, linesContent) {\n        super(context);\n        const conf = this._context.configuration;\n        const options = this._context.configuration.options;\n        const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n        const wrappingInfo = options.get(147 /* EditorOption.wrappingInfo */);\n        this._lineHeight = options.get(67 /* EditorOption.lineHeight */);\n        this._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n        this._isViewportWrapping = wrappingInfo.isViewportWrapping;\n        this._revealHorizontalRightPadding = options.get(101 /* EditorOption.revealHorizontalRightPadding */);\n        this._cursorSurroundingLines = options.get(29 /* EditorOption.cursorSurroundingLines */);\n        this._cursorSurroundingLinesStyle = options.get(30 /* EditorOption.cursorSurroundingLinesStyle */);\n        this._canUseLayerHinting = !options.get(32 /* EditorOption.disableLayerHinting */);\n        this._viewLineOptions = new ViewLineOptions(conf, this._context.theme.type);\n        this._linesContent = linesContent;\n        this._textRangeRestingSpot = document.createElement('div');\n        this._visibleLines = new VisibleLinesCollection({\n            createLine: () => new ViewLine(this._viewLineOptions),\n        });\n        this.domNode = this._visibleLines.domNode;\n        PartFingerprints.write(this.domNode, 8 /* PartFingerprint.ViewLines */);\n        this.domNode.setClassName(`view-lines ${MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`);\n        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        // sticky scroll widget\n        this._stickyScrollEnabled = options.get(116 /* EditorOption.stickyScroll */).enabled;\n        this._maxNumberStickyLines = options.get(116 /* EditorOption.stickyScroll */).maxLineCount;\n    }\n    dispose() {\n        this._asyncUpdateLineWidths.dispose();\n        this._asyncCheckMonospaceFontAssumptions.dispose();\n        super.dispose();\n    }\n    getDomNode() {\n        return this.domNode;\n    }\n    // ---- begin view event handlers\n    onConfigurationChanged(e) {\n        this._visibleLines.onConfigurationChanged(e);\n        if (e.hasChanged(147 /* EditorOption.wrappingInfo */)) {\n            this._maxLineWidth = 0;\n        }\n        const options = this._context.configuration.options;\n        const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n        const wrappingInfo = options.get(147 /* EditorOption.wrappingInfo */);\n        this._lineHeight = options.get(67 /* EditorOption.lineHeight */);\n        this._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n        this._isViewportWrapping = wrappingInfo.isViewportWrapping;\n        this._revealHorizontalRightPadding = options.get(101 /* EditorOption.revealHorizontalRightPadding */);\n        this._cursorSurroundingLines = options.get(29 /* EditorOption.cursorSurroundingLines */);\n        this._cursorSurroundingLinesStyle = options.get(30 /* EditorOption.cursorSurroundingLinesStyle */);\n        this._canUseLayerHinting = !options.get(32 /* EditorOption.disableLayerHinting */);\n        // sticky scroll\n        this._stickyScrollEnabled = options.get(116 /* EditorOption.stickyScroll */).enabled;\n        this._maxNumberStickyLines = options.get(116 /* EditorOption.stickyScroll */).maxLineCount;\n        applyFontInfo(this.domNode, fontInfo);\n        this._onOptionsMaybeChanged();\n        if (e.hasChanged(146 /* EditorOption.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.minimalReveal, 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.minimalReveal, 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.minimalReveal, 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 /* ScrollType.Immediate */ : e.scrollType);\n        this._context.viewModel.viewLayout.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.viewModel.viewLayout.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.viewModel.getLineCount()) {\n            // lineNumber is outside range\n            return null;\n        }\n        if (this._context.viewModel.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(spanNode, offset);\n        const minColumn = this._context.viewModel.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        const context = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n        const result = this._visibleLines.getVisibleLine(lineNumber).getWidth(context);\n        this._updateLineWidthsSlowIfDomDidLayout(context);\n        return result;\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        const visibleRanges = [];\n        let visibleRangesLen = 0;\n        const domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n        let nextLineModelLineNumber = 0;\n        if (includeNewLines) {\n            nextLineModelLineNumber = this._context.viewModel.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 continuesInNextLine = lineNumber !== range.endLineNumber;\n            const endColumn = continuesInNextLine ? this._context.viewModel.getLineMaxColumn(lineNumber) : range.endColumn;\n            const visibleRangesForLine = this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(lineNumber, startColumn, endColumn, domReadingContext);\n            if (!visibleRangesForLine) {\n                continue;\n            }\n            if (includeNewLines && lineNumber < originalEndLineNumber) {\n                const currentLineModelLineNumber = nextLineModelLineNumber;\n                nextLineModelLineNumber = this._context.viewModel.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, HorizontalRange.from(visibleRangesForLine.ranges), continuesInNextLine);\n        }\n        this._updateLineWidthsSlowIfDomDidLayout(domReadingContext);\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        const domReadingContext = new DomReadingContext(this.domNode.domNode, this._textRangeRestingSpot);\n        const result = this._visibleLines.getVisibleLine(lineNumber).getVisibleRangesForRange(lineNumber, startColumn, endColumn, domReadingContext);\n        this._updateLineWidthsSlowIfDomDidLayout(domReadingContext);\n        return result;\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    /**\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    /**\n     * Update the line widths using DOM layout information after someone else\n     * has caused a synchronous layout.\n     */\n    _updateLineWidthsSlowIfDomDidLayout(domReadingContext) {\n        if (!domReadingContext.didDomLayout) {\n            // only proceed if we just did a layout\n            return;\n        }\n        if (this._asyncUpdateLineWidths.isScheduled()) {\n            // reading widths is not scheduled => widths are up-to-date\n            return;\n        }\n        this._asyncUpdateLineWidths.cancel();\n        this._updateLineWidthsSlow();\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(null));\n        }\n        if (allWidthsComputed && rendStartLineNumber === 1 && rendEndLineNumber === this._context.viewModel.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(null);\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.viewModel.viewLayout.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        else {\n            this._asyncUpdateLineWidths.cancel();\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.viewModel.viewLayout.setMaxLineWidth(this._maxLineWidth);\n        }\n    }\n    _computeScrollTopToRevealRange(viewport, source, minimalReveal, 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        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' || minimalReveal) && this._cursorSurroundingLinesStyle === 'default';\n        let paddingTop = 0;\n        let paddingBottom = 0;\n        if (!shouldIgnoreScrollOff) {\n            const maxLinesInViewport = (viewportHeight / this._lineHeight);\n            const surroundingLines = Math.max(this._cursorSurroundingLines, this._stickyScrollEnabled ? this._maxNumberStickyLines : 0);\n            const context = Math.min(maxLinesInViewport / 2, surroundingLines);\n            paddingTop = context * this._lineHeight;\n            paddingBottom = Math.max(0, (context - 1)) * this._lineHeight;\n        }\n        else {\n            if (!minimalReveal) {\n                // Reveal one more line above (this case is hit when dragging)\n                paddingTop = this._lineHeight;\n            }\n        }\n        if (!minimalReveal) {\n            if (verticalType === 0 /* viewEvents.VerticalRevealType.Simple */ || verticalType === 4 /* viewEvents.VerticalRevealType.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                paddingBottom += this._lineHeight;\n            }\n        }\n        boxStartY -= paddingTop;\n        boxEndY += paddingBottom;\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 /* viewEvents.VerticalRevealType.NearTop */ || verticalType === 6 /* viewEvents.VerticalRevealType.NearTopIfOutsideViewport */) {\n            if (verticalType === 6 /* viewEvents.VerticalRevealType.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 /* viewEvents.VerticalRevealType.Center */ || verticalType === 2 /* viewEvents.VerticalRevealType.CenterIfOutsideViewport */) {\n            if (verticalType === 2 /* viewEvents.VerticalRevealType.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 /* viewEvents.VerticalRevealType.Top */, verticalType === 4 /* viewEvents.VerticalRevealType.Bottom */);\n        }\n        return newScrollTop;\n    }\n    _computeScrollLeftToReveal(horizontalRevealRequest) {\n        const viewport = this._context.viewLayout.getCurrentViewport();\n        const layoutInfo = this._context.configuration.options.get(146 /* EditorOption.layoutInfo */);\n        const viewportStartX = viewport.left;\n        const viewportEndX = viewportStartX + viewport.width - layoutInfo.verticalScrollbarWidth;\n        let boxStartX = 1073741824 /* Constants.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, Math.round(visibleRange.left));\n                boxEndX = Math.max(boxEndX, Math.round(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, Math.round(visibleRange.left));\n                    boxEndX = Math.max(boxEndX, Math.round(visibleRange.left + visibleRange.width));\n                }\n            }\n        }\n        if (!horizontalRevealRequest.minimalReveal) {\n            boxStartX = Math.max(0, boxStartX - ViewLines.HORIZONTAL_EXTRA_PX);\n            boxEndX += this._revealHorizontalRightPadding;\n        }\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 *  Copyright (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(146 /* EditorOption.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(146 /* EditorOption.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        const r = [];\n        let 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            const zIndex = d.options.zIndex;\n            if (linesDecorationsClassName) {\n                r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, linesDecorationsClassName, d.options.linesDecorationsTooltip ?? null, zIndex);\n            }\n            const firstLineDecorationClassName = d.options.firstLineDecorationClassName;\n            if (firstLineDecorationClassName) {\n                r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.startLineNumber, firstLineDecorationClassName, d.options.linesDecorationsTooltip ?? null, zIndex);\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 decorations = toRender[lineIndex].getDecorations();\n            let lineOutput = '';\n            for (const decoration of decorations) {\n                let addition = '<div class=\"cldr ' + decoration.className;\n                if (decoration.tooltip !== null) {\n                    addition += '\" title=\"' + decoration.tooltip; // The tooltip is already escaped.\n                }\n                addition += common;\n                lineOutput += addition;\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        const r = [];\n        let 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            const zIndex = d.options.zIndex;\n            if (marginClassName) {\n                r[rLen++] = new DecorationToRender(d.range.startLineNumber, d.range.endLineNumber, marginClassName, null, zIndex);\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 decorations = toRender[lineIndex].getDecorations();\n            let lineOutput = '';\n            for (const decoration of decorations) {\n                lineOutput += '<div class=\"cmdr ' + decoration.className + '\" 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    static { this.Empty = new RGBA8(0, 0, 0, 0); }\n    constructor(r, g, b, a) {\n        this._rgba8Brand = undefined;\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}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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, markAsSingleton } from '../../../base/common/lifecycle.js';\nimport { RGBA8 } from '../core/rgba.js';\nimport { TokenizationRegistry } from '../languages.js';\nexport class MinimapTokensColorTracker extends Disposable {\n    static { this._INSTANCE = null; }\n    static getInstance() {\n        if (!this._INSTANCE) {\n            this._INSTANCE = markAsSingleton(new MinimapTokensColorTracker());\n        }\n        return this._INSTANCE;\n    }\n    constructor() {\n        super();\n        this._onDidChange = new Emitter();\n        this.onDidChange = this._onDidChange.event;\n        this._updateColorMap();\n        this._register(TokenizationRegistry.onDidChange(e => {\n            if (e.changedColorMap) {\n                this._updateColorMap();\n            }\n        }));\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        const backgroundLuminosity = colorMap[2 /* ColorId.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 /* ColorId.DefaultBackground */;\n        }\n        return this._colors[colorId];\n    }\n    backgroundIsLight() {\n        return this._backgroundIsLight;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 /* Constants.START_CH_CODE */; i <= 126 /* Constants.END_CH_CODE */; i++) {\n        v.push(i);\n    }\n    v.push(65533 /* Constants.UNKNOWN_CODE */);\n    return v;\n})();\nexport const getCharIndex = (chCode, fontScale) => {\n    chCode -= 32 /* Constants.START_CH_CODE */;\n    if (chCode < 0 || chCode > 96 /* Constants.CHAR_COUNT */) {\n        if (fontScale <= 2) {\n            // for smaller scales, we can get away with using any ASCII character...\n            return (chCode + 96 /* Constants.CHAR_COUNT */) % 96 /* Constants.CHAR_COUNT */;\n        }\n        return 96 /* Constants.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._minimapCharRendererBrand = undefined;\n        this.charDataNormal = MinimapCharRenderer.soften(charData, 12 / 15);\n        this.charDataLight = MinimapCharRenderer.soften(charData, 50 / 60);\n    }\n    static soften(input, ratio) {\n        const 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, foregroundAlpha, backgroundColor, backgroundAlpha, fontScale, useLighterFont, force1pxHeight) {\n        const charWidth = 1 /* Constants.BASE_CHAR_WIDTH */ * this.scale;\n        const charHeight = 2 /* Constants.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 /* Constants.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 destAlpha = Math.max(foregroundAlpha, backgroundAlpha);\n        const dest = target.data;\n        let sourceOffset = charIndex * charWidth * charHeight;\n        let row = dy * destWidth + dx * 4 /* Constants.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) * (foregroundAlpha / 255);\n                dest[column++] = backgroundR + deltaR * c;\n                dest[column++] = backgroundG + deltaG * c;\n                dest[column++] = backgroundB + deltaB * c;\n                dest[column++] = destAlpha;\n            }\n            row += destWidth;\n        }\n    }\n    blockRenderChar(target, dx, dy, color, foregroundAlpha, backgroundColor, backgroundAlpha, force1pxHeight) {\n        const charWidth = 1 /* Constants.BASE_CHAR_WIDTH */ * this.scale;\n        const charHeight = 2 /* Constants.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 /* Constants.RGBA_CHANNELS_CNT */;\n        const c = 0.5 * (foregroundAlpha / 255);\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 destAlpha = Math.max(foregroundAlpha, backgroundAlpha);\n        const dest = target.data;\n        let row = dy * destWidth + dx * 4 /* Constants.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                dest[column++] = destAlpha;\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 { createSingleCallFunction } 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: createSingleCallFunction(() => decodeData('0000511D6300CF609C709645A78432005642574171487021003C451900274D35D762755E8B629C5BA856AF57BA649530C167D1512A272A3F6038604460398526BCA2A968DB6F8957C768BE5FBE2FB467CF5D8D5B795DC7625B5DFF50DE64C466DB2FC47CD860A65E9A2EB96CB54CE06DA763AB2EA26860524D3763536601005116008177A8705E53AB738E6A982F88BAA35B5F5B626D9C636B449B737E5B7B678598869A662F6B5B8542706C704C80736A607578685B70594A49715A4522E792')),\n    2: createSingleCallFunction(() => 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 /* Constants.SAMPLED_CHAR_HEIGHT */}px`;\n        canvas.height = 16 /* Constants.SAMPLED_CHAR_HEIGHT */;\n        canvas.width = 96 /* Constants.CHAR_COUNT */ * 10 /* Constants.SAMPLED_CHAR_WIDTH */;\n        canvas.style.width = 96 /* Constants.CHAR_COUNT */ * 10 /* Constants.SAMPLED_CHAR_WIDTH */ + 'px';\n        ctx.fillStyle = '#ffffff';\n        ctx.font = `bold ${16 /* Constants.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 /* Constants.SAMPLED_CHAR_HEIGHT */ / 2);\n            x += 10 /* Constants.SAMPLED_CHAR_WIDTH */;\n        }\n        return ctx.getImageData(0, 0, 96 /* Constants.CHAR_COUNT */ * 10 /* Constants.SAMPLED_CHAR_WIDTH */, 16 /* Constants.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 /* Constants.SAMPLED_CHAR_HEIGHT */ * 10 /* Constants.SAMPLED_CHAR_WIDTH */ * 4 /* Constants.RGBA_CHANNELS_CNT */ * 96 /* Constants.CHAR_COUNT */;\n        if (source.length !== expectedLength) {\n            throw new Error('Unexpected source in MinimapCharRenderer');\n        }\n        const charData = MinimapCharRendererFactory._downsample(source, scale);\n        return new MinimapCharRenderer(charData, scale);\n    }\n    static _downsampleChar(source, sourceOffset, dest, destOffset, scale) {\n        const width = 1 /* Constants.BASE_CHAR_WIDTH */ * scale;\n        const height = 2 /* Constants.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 /* Constants.SAMPLED_CHAR_HEIGHT */;\n            const sourceY2 = ((y + 1) / height) * 16 /* Constants.SAMPLED_CHAR_HEIGHT */;\n            for (let x = 0; x < width; x++) {\n                const sourceX1 = (x / width) * 10 /* Constants.SAMPLED_CHAR_WIDTH */;\n                const sourceX2 = ((x + 1) / width) * 10 /* Constants.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 /* Constants.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 /* Constants.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 /* Constants.BASE_CHAR_HEIGHT */ * scale * 1 /* Constants.BASE_CHAR_WIDTH */ * scale;\n        const resultLen = pixelsPerCharacter * 96 /* Constants.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 /* Constants.CHAR_COUNT */; charIndex++) {\n            brightest = Math.max(brightest, this._downsampleChar(data, sourceOffset, result, resultOffset, scale));\n            resultOffset += pixelsPerCharacter;\n            sourceOffset += 10 /* Constants.SAMPLED_CHAR_WIDTH */ * 4 /* Constants.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 { isMacintosh, isWindows } from '../common/platform.js';\n/**\n * The best font-family to be used in CSS based on the platform:\n * - Windows: Segoe preferred, fallback to sans-serif\n * - macOS: standard system font, fallback to sans-serif\n * - Linux: standard system font preferred, fallback to Ubuntu fonts\n *\n * Note: this currently does not adjust for different locales.\n */\nexport const DEFAULT_FONT_FAMILY = isWindows ? '\"Segoe WPC\", \"Segoe UI\", sans-serif' : isMacintosh ? '-apple-system, BlinkMacSystemFont, sans-serif' : 'system-ui, \"Ubuntu\", \"Droid Sans\", sans-serif';\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { GlobalPointerMoveMonitor } from '../../../../base/browser/globalPointerMoveMonitor.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.js';\nimport { minimapSelection, minimapBackground, minimapForegroundOpacity, editorForeground } from '../../../../platform/theme/common/colorRegistry.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { EventType, Gesture } from '../../../../base/browser/touch.js';\nimport { MinimapCharRendererFactory } from './minimapCharRendererFactory.js';\nimport { createSingleCallFunction } from '../../../../base/common/functional.js';\nimport { LRUCache } from '../../../../base/common/map.js';\nimport { DEFAULT_FONT_FAMILY } from '../../../../base/browser/fonts.js';\n/**\n * The orthogonal distance to the slider at which dragging \"resets\". This implements \"snapping\"\n */\nconst POINTER_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(144 /* EditorOption.pixelRatio */);\n        const layoutInfo = options.get(146 /* EditorOption.layoutInfo */);\n        const minimapLayout = layoutInfo.minimap;\n        const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n        const minimapOpts = options.get(73 /* EditorOption.minimap */);\n        this.renderMinimap = minimapLayout.renderMinimap;\n        this.size = minimapOpts.size;\n        this.minimapHeightIsEditorHeight = minimapLayout.minimapHeightIsEditorHeight;\n        this.scrollBeyondLastLine = options.get(106 /* EditorOption.scrollBeyondLastLine */);\n        this.paddingTop = options.get(84 /* EditorOption.padding */).top;\n        this.paddingBottom = options.get(84 /* EditorOption.padding */).bottom;\n        this.showSlider = minimapOpts.showSlider;\n        this.autohide = minimapOpts.autohide;\n        this.pixelRatio = pixelRatio;\n        this.typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n        this.lineHeight = options.get(67 /* EditorOption.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 /* Constants.BASE_CHAR_WIDTH */ * this.fontScale;\n        this.sectionHeaderFontFamily = DEFAULT_FONT_FAMILY;\n        this.sectionHeaderFontSize = minimapOpts.sectionHeaderFontSize * pixelRatio;\n        this.sectionHeaderLetterSpacing = minimapOpts.sectionHeaderLetterSpacing; // intentionally not multiplying by pixelRatio\n        this.sectionHeaderFontColor = MinimapOptions._getSectionHeaderColor(theme, tokensColorTracker.getColor(1 /* ColorId.DefaultForeground */));\n        this.charRenderer = createSingleCallFunction(() => MinimapCharRendererFactory.create(this.fontScale, fontInfo.fontFamily));\n        this.defaultBackgroundColor = tokensColorTracker.getColor(2 /* ColorId.DefaultBackground */);\n        this.backgroundColor = MinimapOptions._getMinimapBackground(theme, this.defaultBackgroundColor);\n        this.foregroundAlpha = MinimapOptions._getMinimapForegroundOpacity(theme);\n    }\n    static _getMinimapBackground(theme, defaultBackgroundColor) {\n        const themeColor = theme.getColor(minimapBackground);\n        if (themeColor) {\n            return new RGBA8(themeColor.rgba.r, themeColor.rgba.g, themeColor.rgba.b, Math.round(255 * themeColor.rgba.a));\n        }\n        return defaultBackgroundColor;\n    }\n    static _getMinimapForegroundOpacity(theme) {\n        const themeColor = theme.getColor(minimapForegroundOpacity);\n        if (themeColor) {\n            return RGBA8._clamp(Math.round(255 * themeColor.rgba.a));\n        }\n        return 255;\n    }\n    static _getSectionHeaderColor(theme, defaultForegroundColor) {\n        const themeColor = theme.getColor(editorForeground);\n        if (themeColor) {\n            return new RGBA8(themeColor.rgba.r, themeColor.rgba.g, themeColor.rgba.b, Math.round(255 * themeColor.rgba.a));\n        }\n        return defaultForegroundColor;\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.paddingTop === other.paddingTop\n            && this.paddingBottom === other.paddingBottom\n            && this.showSlider === other.showSlider\n            && this.autohide === other.autohide\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.sectionHeaderFontSize === other.sectionHeaderFontSize\n            && this.sectionHeaderLetterSpacing === other.sectionHeaderLetterSpacing\n            && this.defaultBackgroundColor && this.defaultBackgroundColor.equals(other.defaultBackgroundColor)\n            && this.backgroundColor && this.backgroundColor.equals(other.backgroundColor)\n            && this.foregroundAlpha === other.foregroundAlpha);\n    }\n}\nclass MinimapLayout {\n    constructor(\n    /**\n     * The given editor scrollTop (input).\n     */\n    scrollTop, \n    /**\n     * The given editor scrollHeight (input).\n     */\n    scrollHeight, sliderNeeded, _computedSliderRatio, \n    /**\n     * slider dom node top (in CSS px)\n     */\n    sliderTop, \n    /**\n     * slider dom node height (in CSS px)\n     */\n    sliderHeight, \n    /**\n     * empty lines to reserve at the top of the minimap.\n     */\n    topPaddingLineCount, \n    /**\n     * minimap render start line number.\n     */\n    startLineNumber, \n    /**\n     * minimap render end line number.\n     */\n    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.topPaddingLineCount = topPaddingLineCount;\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    /**\n     * Intersect a line range with `this.startLineNumber` and `this.endLineNumber`.\n     */\n    intersectWithViewport(range) {\n        const startLineNumber = Math.max(this.startLineNumber, range.startLineNumber);\n        const endLineNumber = Math.min(this.endLineNumber, range.endLineNumber);\n        if (startLineNumber > endLineNumber) {\n            // entirely outside minimap's viewport\n            return null;\n        }\n        return [startLineNumber, endLineNumber];\n    }\n    /**\n     * Get the inner minimap y coordinate for a line number.\n     */\n    getYForLineNumber(lineNumber, minimapLineHeight) {\n        return +(lineNumber - this.startLineNumber + this.topPaddingLineCount) * minimapLineHeight;\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            let logicalScrollHeight = (realLineCount * options.lineHeight\n                + options.paddingTop\n                + options.paddingBottom);\n            if (options.scrollBeyondLastLine) {\n                logicalScrollHeight += Math.max(0, viewportHeight - options.lineHeight - options.paddingBottom);\n            }\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            const topPaddingLineCount = Math.floor(options.paddingTop / options.lineHeight);\n            return new MinimapLayout(scrollTop, scrollHeight, sliderNeeded, computedSliderRatio, sliderTop, sliderHeight, topPaddingLineCount, 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        const extraLinesAtTheTop = Math.floor(options.paddingTop / lineHeight);\n        let extraLinesAtTheBottom = Math.floor(options.paddingBottom / lineHeight);\n        if (options.scrollBeyondLastLine) {\n            const expectedViewportLineCount = viewportHeight / lineHeight;\n            extraLinesAtTheBottom = Math.max(extraLinesAtTheBottom, expectedViewportLineCount - 1);\n        }\n        let maxMinimapSliderTop;\n        if (extraLinesAtTheBottom > 0) {\n            const expectedViewportLineCount = viewportHeight / lineHeight;\n            // The minimap slider, when dragged all the way down, will contain the last line at its top\n            maxMinimapSliderTop = (extraLinesAtTheTop + lineCount + extraLinesAtTheBottom - expectedViewportLineCount - 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, (extraLinesAtTheTop + 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        if (minimapLinesFitting >= extraLinesAtTheTop + lineCount + extraLinesAtTheBottom) {\n            // All lines fit in the minimap\n            const sliderNeeded = (maxMinimapSliderTop > 0);\n            return new MinimapLayout(scrollTop, scrollHeight, sliderNeeded, computedSliderRatio, sliderTop, sliderHeight, extraLinesAtTheTop, 1, lineCount);\n        }\n        else {\n            let consideringStartLineNumber;\n            if (viewportStartLineNumber > 1) {\n                consideringStartLineNumber = viewportStartLineNumber + extraLinesAtTheTop;\n            }\n            else {\n                consideringStartLineNumber = Math.max(1, scrollTop / lineHeight);\n            }\n            let topPaddingLineCount;\n            let startLineNumber = Math.max(1, Math.floor(consideringStartLineNumber - sliderTop * pixelRatio / minimapLineHeight));\n            if (startLineNumber < extraLinesAtTheTop) {\n                topPaddingLineCount = extraLinesAtTheTop - startLineNumber + 1;\n                startLineNumber = 1;\n            }\n            else {\n                topPaddingLineCount = 0;\n                startLineNumber = Math.max(1, startLineNumber - extraLinesAtTheTop);\n            }\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                    topPaddingLineCount = Math.max(topPaddingLineCount, previousLayout.topPaddingLineCount);\n                }\n                if (previousLayout.scrollTop < scrollTop) {\n                    // Scrolling down => never decrease `startLineNumber`\n                    startLineNumber = Math.max(startLineNumber, previousLayout.startLineNumber);\n                    topPaddingLineCount = Math.min(topPaddingLineCount, previousLayout.topPaddingLineCount);\n                }\n            }\n            const endLineNumber = Math.min(lineCount, startLineNumber - topPaddingLineCount + minimapLinesFitting - 1);\n            const partialLine = (scrollTop - viewportStartLineNumberVerticalOffset) / lineHeight;\n            let sliderTopAligned;\n            if (scrollTop >= options.paddingTop) {\n                sliderTopAligned = (viewportStartLineNumber - startLineNumber + topPaddingLineCount + partialLine) * minimapLineHeight / pixelRatio;\n            }\n            else {\n                sliderTopAligned = (scrollTop / options.paddingTop) * (topPaddingLineCount + partialLine) * minimapLineHeight / pixelRatio;\n            }\n            return new MinimapLayout(scrollTop, scrollHeight, true, computedSliderRatio, sliderTopAligned, sliderHeight, topPaddingLineCount, startLineNumber, endLineNumber);\n        }\n    }\n}\nclass MinimapLine {\n    static { this.INVALID = new MinimapLine(-1); }\n    constructor(dy) {\n        this.dy = dy;\n    }\n    onContentChanged() {\n        this.dy = -1;\n    }\n    onTokensChanged() {\n        this.dy = -1;\n    }\n}\nclass RenderData {\n    constructor(renderedLayout, imageData, lines) {\n        this.renderedLayout = renderedLayout;\n        this._imageData = imageData;\n        this._renderedLines = new RenderedLinesCollection({\n            createLine: () => MinimapLine.INVALID\n        });\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, changeCount) {\n        return this._renderedLines.onLinesChanged(changeFromLineNumber, changeCount);\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 backgroundA = background.a;\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] = backgroundA;\n                offset += 4;\n            }\n        }\n        return result;\n    }\n}\nclass MinimapSamplingState {\n    static compute(options, viewLineCount, oldSamplingState) {\n        if (options.renderMinimap === 0 /* RenderMinimap.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 { minimapLineCount } = EditorLayoutInfoComputer.computeContainedMinimapLineCount({\n            viewLineCount: viewLineCount,\n            scrollBeyondLastLine: options.scrollBeyondLastLine,\n            paddingTop: options.paddingTop,\n            paddingBottom: options.paddingBottom,\n            height: options.editorHeight,\n            lineHeight: options.lineHeight,\n            pixelRatio: options.pixelRatio\n        });\n        const ratio = viewLineCount / minimapLineCount;\n        const halfRatio = ratio / 2;\n        if (!oldSamplingState || oldSamplingState.minimapLines.length === 0) {\n            const 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        const 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    constructor(samplingRatio, minimapLines // a map of 0-based minimap line indexes to 1-based view line numbers\n    ) {\n        this.samplingRatio = samplingRatio;\n        this.minimapLines = minimapLines;\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._sectionHeaderCache = new LRUCache(10, 1.5);\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.viewModel.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.fromLineNumber + e.count - 1);\n            if (minimapLineRange) {\n                return this._actual.onLinesChanged(minimapLineRange[0], minimapLineRange[1] - minimapLineRange[0] + 1);\n            }\n            else {\n                return false;\n            }\n        }\n        else {\n            return this._actual.onLinesChanged(e.fromLineNumber, e.count);\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 - changeStartIndex + 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._actual.onThemeChanged();\n        this._onOptionsMaybeChanged();\n        return true;\n    }\n    onTokensChanged(e) {\n        if (this._samplingState) {\n            const 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.viewModel.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.viewModel.getLineCount();\n    }\n    getRealLineCount() {\n        return this._context.viewModel.getLineCount();\n    }\n    getLineContent(lineNumber) {\n        if (this._samplingState) {\n            return this._context.viewModel.getLineContent(this._samplingState.minimapLines[lineNumber - 1]);\n        }\n        return this._context.viewModel.getLineContent(lineNumber);\n    }\n    getLineMaxColumn(lineNumber) {\n        if (this._samplingState) {\n            return this._context.viewModel.getLineMaxColumn(this._samplingState.minimapLines[lineNumber - 1]);\n        }\n        return this._context.viewModel.getLineMaxColumn(lineNumber);\n    }\n    getMinimapLinesRenderingData(startLineNumber, endLineNumber, needed) {\n        if (this._samplingState) {\n            const result = [];\n            for (let lineIndex = 0, lineCount = endLineNumber - startLineNumber + 1; lineIndex < lineCount; lineIndex++) {\n                if (needed[lineIndex]) {\n                    result[lineIndex] = this._context.viewModel.getViewLineData(this._samplingState.minimapLines[startLineNumber + lineIndex - 1]);\n                }\n                else {\n                    result[lineIndex] = null;\n                }\n            }\n            return result;\n        }\n        return this._context.viewModel.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        const decorations = this._getMinimapDecorationsInViewport(startLineNumber, endLineNumber)\n            .filter(decoration => !decoration.options.minimap?.sectionHeaderStyle);\n        if (this._samplingState) {\n            const 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    getSectionHeaderDecorationsInViewport(startLineNumber, endLineNumber) {\n        const minimapLineHeight = this.options.minimapLineHeight;\n        const sectionHeaderFontSize = this.options.sectionHeaderFontSize;\n        const headerHeightInMinimapLines = sectionHeaderFontSize / minimapLineHeight;\n        startLineNumber = Math.floor(Math.max(1, startLineNumber - headerHeightInMinimapLines));\n        return this._getMinimapDecorationsInViewport(startLineNumber, endLineNumber)\n            .filter(decoration => !!decoration.options.minimap?.sectionHeaderStyle);\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.viewModel.getLineMaxColumn(modelEndLineNumber));\n        }\n        else {\n            visibleRange = new Range(startLineNumber, 1, endLineNumber, this._context.viewModel.getLineMaxColumn(endLineNumber));\n        }\n        return this._context.viewModel.getMinimapDecorationsInRange(visibleRange);\n    }\n    getSectionHeaderText(decoration, fitWidth) {\n        const headerText = decoration.options.minimap?.sectionHeaderText;\n        if (!headerText) {\n            return null;\n        }\n        const cachedText = this._sectionHeaderCache.get(headerText);\n        if (cachedText) {\n            return cachedText;\n        }\n        const fittedText = fitWidth(headerText);\n        this._sectionHeaderCache.set(headerText, fittedText);\n        return fittedText;\n    }\n    getOptions() {\n        return this._context.viewModel.model.getOptions();\n    }\n    revealLineNumber(lineNumber) {\n        if (this._samplingState) {\n            lineNumber = this._samplingState.minimapLines[lineNumber - 1];\n        }\n        this._context.viewModel.revealRange('mouse', false, new Range(lineNumber, 1, lineNumber, 1), 1 /* viewEvents.VerticalRevealType.Center */, 0 /* ScrollType.Smooth */);\n    }\n    setScrollTop(scrollTop) {\n        this._context.viewModel.viewLayout.setScrollPosition({\n            scrollTop: scrollTop\n        }, 1 /* ScrollType.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, 9 /* PartFingerprint.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._pointerDownListener = dom.addStandardDisposableListener(this._domNode.domNode, dom.EventType.POINTER_DOWN, (e) => {\n            e.preventDefault();\n            const renderMinimap = this._model.options.renderMinimap;\n            if (renderMinimap === 0 /* RenderMinimap.None */) {\n                return;\n            }\n            if (!this._lastRenderData) {\n                return;\n            }\n            if (this._model.options.size !== 'proportional') {\n                if (e.button === 0 && this._lastRenderData) {\n                    // pretend the click occurred 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, initialPosY, 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.offsetY;\n            const lineIndex = Math.floor(internalOffsetY / minimapLineHeight);\n            let lineNumber = lineIndex + this._lastRenderData.renderedLayout.startLineNumber - this._lastRenderData.renderedLayout.topPaddingLineCount;\n            lineNumber = Math.min(lineNumber, this._model.getLineCount());\n            this._model.revealLineNumber(lineNumber);\n        });\n        this._sliderPointerMoveMonitor = new GlobalPointerMoveMonitor();\n        this._sliderPointerDownListener = dom.addStandardDisposableListener(this._slider.domNode, dom.EventType.POINTER_DOWN, (e) => {\n            e.preventDefault();\n            e.stopPropagation();\n            if (e.button === 0 && this._lastRenderData) {\n                this._startSliderDragging(e, e.pageY, 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(e, initialPosY, initialSliderState) {\n        if (!e.target || !(e.target instanceof Element)) {\n            return;\n        }\n        const initialPosX = e.pageX;\n        this._slider.toggleClassName('active', true);\n        const handlePointerMove = (posy, posx) => {\n            const minimapPosition = dom.getDomNodePagePosition(this._domNode.domNode);\n            const pointerOrthogonalDelta = Math.min(Math.abs(posx - initialPosX), Math.abs(posx - minimapPosition.left), Math.abs(posx - minimapPosition.left - minimapPosition.width));\n            if (platform.isWindows && pointerOrthogonalDelta > POINTER_DRAG_RESET_DISTANCE) {\n                // The pointer has wondered away from the scrollbar => reset dragging\n                this._model.setScrollTop(initialSliderState.scrollTop);\n                return;\n            }\n            const pointerDelta = posy - initialPosY;\n            this._model.setScrollTop(initialSliderState.getDesiredScrollTopFromDelta(pointerDelta));\n        };\n        if (e.pageY !== initialPosY) {\n            handlePointerMove(e.pageY, initialPosX);\n        }\n        this._sliderPointerMoveMonitor.startMonitoring(e.target, e.pointerId, e.buttons, pointerMoveData => handlePointerMove(pointerMoveData.pageY, pointerMoveData.pageX), () => {\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._pointerDownListener.dispose();\n        this._sliderPointerMoveMonitor.dispose();\n        this._sliderPointerDownListener.dispose();\n        this._gestureDisposable.dispose();\n        this._sliderTouchStartListener.dispose();\n        this._sliderTouchMoveListener.dispose();\n        this._sliderTouchEndListener.dispose();\n        super.dispose();\n    }\n    _getMinimapDomNodeClassName() {\n        const class_ = ['minimap'];\n        if (this._model.options.showSlider === 'always') {\n            class_.push('slider-always');\n        }\n        else {\n            class_.push('slider-mouseover');\n        }\n        if (this._model.options.autohide) {\n            class_.push('autohide');\n        }\n        return class_.join(' ');\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, changeCount) {\n        if (this._lastRenderData) {\n            return this._lastRenderData.onLinesChanged(changeFromLineNumber, changeCount);\n        }\n        return false;\n    }\n    onLinesDeleted(deleteFromLineNumber, deleteToLineNumber) {\n        this._lastRenderData?.onLinesDeleted(deleteFromLineNumber, deleteToLineNumber);\n        return true;\n    }\n    onLinesInserted(insertFromLineNumber, insertToLineNumber) {\n        this._lastRenderData?.onLinesInserted(insertFromLineNumber, insertToLineNumber);\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 /* RenderMinimap.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        this._sliderHorizontal.setLeft(0);\n        this._sliderHorizontal.setWidth(this._model.options.minimapWidth);\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            selections.sort(Range.compareRangesUsingStarts);\n            const decorations = this._model.getMinimapDecorationsInViewport(layout.startLineNumber, layout.endLineNumber);\n            decorations.sort((a, b) => (a.options.zIndex || 0) - (b.options.zIndex || 0));\n            const { canvasInnerWidth, canvasInnerHeight } = this._model.options;\n            const minimapLineHeight = this._model.options.minimapLineHeight;\n            const minimapCharWidth = 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            // We first need to render line highlights and then render decorations on top of those.\n            // But we need to pick a single color for each line, and use that as a line highlight.\n            // This needs to be the color of the decoration with the highest `zIndex`, but priority\n            // is given to the selection.\n            const highlightedLines = new ContiguousLineMap(layout.startLineNumber, layout.endLineNumber, false);\n            this._renderSelectionLineHighlights(canvasContext, selections, highlightedLines, layout, minimapLineHeight);\n            this._renderDecorationsLineHighlights(canvasContext, decorations, highlightedLines, layout, minimapLineHeight);\n            const lineOffsetMap = new ContiguousLineMap(layout.startLineNumber, layout.endLineNumber, null);\n            this._renderSelectionsHighlights(canvasContext, selections, lineOffsetMap, layout, minimapLineHeight, tabSize, minimapCharWidth, canvasInnerWidth);\n            this._renderDecorationsHighlights(canvasContext, decorations, lineOffsetMap, layout, minimapLineHeight, tabSize, minimapCharWidth, canvasInnerWidth);\n            this._renderSectionHeaders(layout);\n        }\n    }\n    _renderSelectionLineHighlights(canvasContext, selections, highlightedLines, layout, minimapLineHeight) {\n        if (!this._selectionColor || this._selectionColor.isTransparent()) {\n            return;\n        }\n        canvasContext.fillStyle = this._selectionColor.transparent(0.5).toString();\n        let y1 = 0;\n        let y2 = 0;\n        for (const selection of selections) {\n            const intersection = layout.intersectWithViewport(selection);\n            if (!intersection) {\n                // entirely outside minimap's viewport\n                continue;\n            }\n            const [startLineNumber, endLineNumber] = intersection;\n            for (let line = startLineNumber; line <= endLineNumber; line++) {\n                highlightedLines.set(line, true);\n            }\n            const yy1 = layout.getYForLineNumber(startLineNumber, minimapLineHeight);\n            const yy2 = layout.getYForLineNumber(endLineNumber, minimapLineHeight);\n            if (y2 >= yy1) {\n                // merge into previous\n                y2 = yy2;\n            }\n            else {\n                if (y2 > y1) {\n                    // flush\n                    canvasContext.fillRect(MINIMAP_GUTTER_WIDTH, y1, canvasContext.canvas.width, y2 - y1);\n                }\n                y1 = yy1;\n                y2 = yy2;\n            }\n        }\n        if (y2 > y1) {\n            // flush\n            canvasContext.fillRect(MINIMAP_GUTTER_WIDTH, y1, canvasContext.canvas.width, y2 - y1);\n        }\n    }\n    _renderDecorationsLineHighlights(canvasContext, decorations, highlightedLines, layout, minimapLineHeight) {\n        const highlightColors = new Map();\n        // Loop backwards to hit first decorations with higher `zIndex`\n        for (let i = decorations.length - 1; i >= 0; i--) {\n            const decoration = decorations[i];\n            const minimapOptions = decoration.options.minimap;\n            if (!minimapOptions || minimapOptions.position !== 1 /* MinimapPosition.Inline */) {\n                continue;\n            }\n            const intersection = layout.intersectWithViewport(decoration.range);\n            if (!intersection) {\n                // entirely outside minimap's viewport\n                continue;\n            }\n            const [startLineNumber, endLineNumber] = intersection;\n            const decorationColor = minimapOptions.getColor(this._theme.value);\n            if (!decorationColor || decorationColor.isTransparent()) {\n                continue;\n            }\n            let highlightColor = highlightColors.get(decorationColor.toString());\n            if (!highlightColor) {\n                highlightColor = decorationColor.transparent(0.5).toString();\n                highlightColors.set(decorationColor.toString(), highlightColor);\n            }\n            canvasContext.fillStyle = highlightColor;\n            for (let line = startLineNumber; line <= endLineNumber; line++) {\n                if (highlightedLines.has(line)) {\n                    continue;\n                }\n                highlightedLines.set(line, true);\n                const y = layout.getYForLineNumber(startLineNumber, minimapLineHeight);\n                canvasContext.fillRect(MINIMAP_GUTTER_WIDTH, y, canvasContext.canvas.width, minimapLineHeight);\n            }\n        }\n    }\n    _renderSelectionsHighlights(canvasContext, selections, lineOffsetMap, layout, lineHeight, tabSize, characterWidth, canvasInnerWidth) {\n        if (!this._selectionColor || this._selectionColor.isTransparent()) {\n            return;\n        }\n        for (const selection of selections) {\n            const intersection = layout.intersectWithViewport(selection);\n            if (!intersection) {\n                // entirely outside minimap's viewport\n                continue;\n            }\n            const [startLineNumber, endLineNumber] = intersection;\n            for (let line = startLineNumber; line <= endLineNumber; line++) {\n                this.renderDecorationOnLine(canvasContext, lineOffsetMap, selection, this._selectionColor, layout, line, lineHeight, lineHeight, tabSize, characterWidth, canvasInnerWidth);\n            }\n        }\n    }\n    _renderDecorationsHighlights(canvasContext, decorations, lineOffsetMap, layout, minimapLineHeight, tabSize, characterWidth, canvasInnerWidth) {\n        // Loop forwards to hit first decorations with lower `zIndex`\n        for (const decoration of decorations) {\n            const minimapOptions = decoration.options.minimap;\n            if (!minimapOptions) {\n                continue;\n            }\n            const intersection = layout.intersectWithViewport(decoration.range);\n            if (!intersection) {\n                // entirely outside minimap's viewport\n                continue;\n            }\n            const [startLineNumber, endLineNumber] = intersection;\n            const decorationColor = minimapOptions.getColor(this._theme.value);\n            if (!decorationColor || decorationColor.isTransparent()) {\n                continue;\n            }\n            for (let line = startLineNumber; line <= endLineNumber; line++) {\n                switch (minimapOptions.position) {\n                    case 1 /* MinimapPosition.Inline */:\n                        this.renderDecorationOnLine(canvasContext, lineOffsetMap, decoration.range, decorationColor, layout, line, minimapLineHeight, minimapLineHeight, tabSize, characterWidth, canvasInnerWidth);\n                        continue;\n                    case 2 /* MinimapPosition.Gutter */: {\n                        const y = layout.getYForLineNumber(line, minimapLineHeight);\n                        const x = 2;\n                        this.renderDecoration(canvasContext, decorationColor, x, y, GUTTER_DECORATION_WIDTH, minimapLineHeight);\n                        continue;\n                    }\n                }\n            }\n        }\n    }\n    renderDecorationOnLine(canvasContext, lineOffsetMap, decorationRange, decorationColor, layout, lineNumber, height, minimapLineHeight, tabSize, charWidth, canvasInnerWidth) {\n        const y = layout.getYForLineNumber(lineNumber, minimapLineHeight);\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        const { startLineNumber, endLineNumber } = decorationRange;\n        const startColumn = (startLineNumber === lineNumber ? decorationRange.startColumn : 1);\n        const endColumn = (endLineNumber === lineNumber ? decorationRange.endColumn : this._model.getLineMaxColumn(lineNumber));\n        const x1 = this.getXOffsetForPosition(lineOffsetMap, lineNumber, startColumn, tabSize, charWidth, canvasInnerWidth);\n        const x2 = this.getXOffsetForPosition(lineOffsetMap, lineNumber, endColumn, tabSize, charWidth, canvasInnerWidth);\n        this.renderDecoration(canvasContext, decorationColor, x1, y, x2 - x1, height);\n    }\n    getXOffsetForPosition(lineOffsetMap, lineNumber, column, tabSize, charWidth, canvasInnerWidth) {\n        if (column === 1) {\n            return MINIMAP_GUTTER_WIDTH;\n        }\n        const minimumXOffset = (column - 1) * charWidth;\n        if (minimumXOffset >= canvasInnerWidth) {\n            // there is no need to look at actual characters,\n            // as this column is certainly after the minimap width\n            return canvasInnerWidth;\n        }\n        // Cache line offset data so that it is only read once per line\n        let lineIndexToXOffset = lineOffsetMap.get(lineNumber);\n        if (!lineIndexToXOffset) {\n            const lineData = this._model.getLineContent(lineNumber);\n            lineIndexToXOffset = [MINIMAP_GUTTER_WIDTH];\n            let prevx = 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 /* CharCode.Tab */\n                    ? tabSize * charWidth\n                    : strings.isFullWidthCharacter(charCode)\n                        ? 2 * charWidth\n                        : charWidth;\n                const x = prevx + dx;\n                if (x >= canvasInnerWidth) {\n                    // no need to keep on going, as we've hit the canvas width\n                    lineIndexToXOffset[i] = canvasInnerWidth;\n                    break;\n                }\n                lineIndexToXOffset[i] = x;\n                prevx = x;\n            }\n            lineOffsetMap.set(lineNumber, lineIndexToXOffset);\n        }\n        if (column - 1 < lineIndexToXOffset.length) {\n            return lineIndexToXOffset[column - 1];\n        }\n        // goes over the canvas width\n        return canvasInnerWidth;\n    }\n    renderDecoration(canvasContext, decorationColor, x, y, width, height) {\n        canvasContext.fillStyle = decorationColor && decorationColor.toString() || '';\n        canvasContext.fillRect(x, y, width, height);\n    }\n    _renderSectionHeaders(layout) {\n        const minimapLineHeight = this._model.options.minimapLineHeight;\n        const sectionHeaderFontSize = this._model.options.sectionHeaderFontSize;\n        const sectionHeaderLetterSpacing = this._model.options.sectionHeaderLetterSpacing;\n        const backgroundFillHeight = sectionHeaderFontSize * 1.5;\n        const { canvasInnerWidth } = this._model.options;\n        const backgroundColor = this._model.options.backgroundColor;\n        const backgroundFill = `rgb(${backgroundColor.r} ${backgroundColor.g} ${backgroundColor.b} / .7)`;\n        const foregroundColor = this._model.options.sectionHeaderFontColor;\n        const foregroundFill = `rgb(${foregroundColor.r} ${foregroundColor.g} ${foregroundColor.b})`;\n        const separatorStroke = foregroundFill;\n        const canvasContext = this._decorationsCanvas.domNode.getContext('2d');\n        canvasContext.letterSpacing = sectionHeaderLetterSpacing + 'px';\n        canvasContext.font = '500 ' + sectionHeaderFontSize + 'px ' + this._model.options.sectionHeaderFontFamily;\n        canvasContext.strokeStyle = separatorStroke;\n        canvasContext.lineWidth = 0.2;\n        const decorations = this._model.getSectionHeaderDecorationsInViewport(layout.startLineNumber, layout.endLineNumber);\n        decorations.sort((a, b) => a.range.startLineNumber - b.range.startLineNumber);\n        const fitWidth = InnerMinimap._fitSectionHeader.bind(null, canvasContext, canvasInnerWidth - MINIMAP_GUTTER_WIDTH);\n        for (const decoration of decorations) {\n            const y = layout.getYForLineNumber(decoration.range.startLineNumber, minimapLineHeight) + sectionHeaderFontSize;\n            const backgroundFillY = y - sectionHeaderFontSize;\n            const separatorY = backgroundFillY + 2;\n            const headerText = this._model.getSectionHeaderText(decoration, fitWidth);\n            InnerMinimap._renderSectionLabel(canvasContext, headerText, decoration.options.minimap?.sectionHeaderStyle === 2 /* MinimapSectionHeaderStyle.Underlined */, backgroundFill, foregroundFill, canvasInnerWidth, backgroundFillY, backgroundFillHeight, y, separatorY);\n        }\n    }\n    static _fitSectionHeader(target, maxWidth, headerText) {\n        if (!headerText) {\n            return headerText;\n        }\n        const ellipsis = '…';\n        const width = target.measureText(headerText).width;\n        const ellipsisWidth = target.measureText(ellipsis).width;\n        if (width <= maxWidth || width <= ellipsisWidth) {\n            return headerText;\n        }\n        const len = headerText.length;\n        const averageCharWidth = width / headerText.length;\n        const maxCharCount = Math.floor((maxWidth - ellipsisWidth) / averageCharWidth) - 1;\n        // Find a halfway point that isn't after whitespace\n        let halfCharCount = Math.ceil(maxCharCount / 2);\n        while (halfCharCount > 0 && /\\s/.test(headerText[halfCharCount - 1])) {\n            --halfCharCount;\n        }\n        // Split with ellipsis\n        return headerText.substring(0, halfCharCount)\n            + ellipsis + headerText.substring(len - (maxCharCount - halfCharCount));\n    }\n    static _renderSectionLabel(target, headerText, hasSeparatorLine, backgroundFill, foregroundFill, minimapWidth, backgroundFillY, backgroundFillHeight, textY, separatorY) {\n        if (headerText) {\n            target.fillStyle = backgroundFill;\n            target.fillRect(0, backgroundFillY, minimapWidth, backgroundFillHeight);\n            target.fillStyle = foregroundFill;\n            target.fillText(headerText, MINIMAP_GUTTER_WIDTH, textY);\n        }\n        if (hasSeparatorLine) {\n            target.beginPath();\n            target.moveTo(0, separatorY);\n            target.lineTo(minimapWidth, separatorY);\n            target.closePath();\n            target.stroke();\n        }\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        const [_dirtyY1, _dirtyY2, needed] = InnerMinimap._renderUntouchedLines(imageData, layout.topPaddingLineCount, 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 defaultBackground = this._model.options.defaultBackgroundColor;\n        const background = this._model.options.backgroundColor;\n        const foregroundAlpha = this._model.options.foregroundAlpha;\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 /* RenderMinimap.Text */ ? 2 /* Constants.BASE_CHAR_HEIGHT */ : 2 /* Constants.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        const backgroundA = background.a / 255;\n        const renderBackground = new RGBA8(Math.round((background.r - defaultBackground.r) * backgroundA + defaultBackground.r), Math.round((background.g - defaultBackground.g) * backgroundA + defaultBackground.g), Math.round((background.b - defaultBackground.b) * backgroundA + defaultBackground.b), 255);\n        let dy = layout.topPaddingLineCount * minimapLineHeight;\n        const renderedLines = [];\n        for (let lineIndex = 0, lineCount = endLineNumber - startLineNumber + 1; lineIndex < lineCount; lineIndex++) {\n            if (needed[lineIndex]) {\n                InnerMinimap._renderLine(imageData, renderBackground, background.a, useLighterFont, renderMinimap, minimapCharWidth, tokensColorTracker, foregroundAlpha, 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, topPaddingLineCount, 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 = topPaddingLineCount * minimapLineHeight;\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, backgroundAlpha, useLighterFont, renderMinimap, charWidth, colorTracker, foregroundAlpha, 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 /* CharCode.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 /* CharCode.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 /* RenderMinimap.Blocks */) {\n                            minimapCharRenderer.blockRenderChar(target, dx, dy + innerLinePadding, tokenColor, foregroundAlpha, backgroundColor, backgroundAlpha, force1pxHeight);\n                        }\n                        else { // RenderMinimap.Text\n                            minimapCharRenderer.renderChar(target, dx, dy + innerLinePadding, charCode, tokenColor, foregroundAlpha, backgroundColor, backgroundAlpha, 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}\nclass ContiguousLineMap {\n    constructor(startLineNumber, endLineNumber, defaultValue) {\n        this._startLineNumber = startLineNumber;\n        this._endLineNumber = endLineNumber;\n        this._defaultValue = defaultValue;\n        this._values = [];\n        for (let i = 0, count = this._endLineNumber - this._startLineNumber + 1; i < count; i++) {\n            this._values[i] = defaultValue;\n        }\n    }\n    has(lineNumber) {\n        return (this.get(lineNumber) !== this._defaultValue);\n    }\n    set(lineNumber, value) {\n        if (lineNumber < this._startLineNumber || lineNumber > this._endLineNumber) {\n            return;\n        }\n        this._values[lineNumber - this._startLineNumber] = value;\n    }\n    get(lineNumber) {\n        if (lineNumber < this._startLineNumber || lineNumber > this._endLineNumber) {\n            return this._defaultValue;\n        }\n        return this._values[lineNumber - this._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 './overlayWidgets.css';\nimport { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { PartFingerprints, ViewPart } from '../../view/viewPart.js';\nimport * as dom from '../../../../base/browser/dom.js';\nexport class ViewOverlayWidgets extends ViewPart {\n    constructor(context, viewDomNode) {\n        super(context);\n        this._viewDomNode = viewDomNode;\n        const options = this._context.configuration.options;\n        const layoutInfo = options.get(146 /* EditorOption.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._viewDomNodeRect = { top: 0, left: 0, width: 0, height: 0 };\n        this._domNode = createFastDomNode(document.createElement('div'));\n        PartFingerprints.write(this._domNode, 4 /* PartFingerprint.OverlayWidgets */);\n        this._domNode.setClassName('overlayWidgets');\n        this.overflowingOverlayWidgetsDomNode = createFastDomNode(document.createElement('div'));\n        PartFingerprints.write(this.overflowingOverlayWidgetsDomNode, 5 /* PartFingerprint.OverflowingOverlayWidgets */);\n        this.overflowingOverlayWidgetsDomNode.setClassName('overflowingOverlayWidgets');\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(146 /* EditorOption.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        if (widget.allowEditorOverflow) {\n            this.overflowingOverlayWidgetsDomNode.appendChild(domNode);\n        }\n        else {\n            this._domNode.appendChild(domNode);\n        }\n        this.setShouldRender();\n        this._updateMaxMinWidth();\n    }\n    setWidgetPosition(widget, position) {\n        const widgetData = this._widgets[widget.getId()];\n        const preference = position ? position.preference : null;\n        const stack = position?.stackOridinal;\n        if (widgetData.preference === preference && widgetData.stack === stack) {\n            this._updateMaxMinWidth();\n            return false;\n        }\n        widgetData.preference = preference;\n        widgetData.stack = stack;\n        this.setShouldRender();\n        this._updateMaxMinWidth();\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.remove();\n            this.setShouldRender();\n            this._updateMaxMinWidth();\n        }\n    }\n    _updateMaxMinWidth() {\n        let maxMinWidth = 0;\n        const keys = Object.keys(this._widgets);\n        for (let i = 0, len = keys.length; i < len; i++) {\n            const widgetId = keys[i];\n            const widget = this._widgets[widgetId];\n            const widgetMinWidthInPx = widget.widget.getMinContentWidthInPx?.();\n            if (typeof widgetMinWidthInPx !== 'undefined') {\n                maxMinWidth = Math.max(maxMinWidth, widgetMinWidthInPx);\n            }\n        }\n        this._context.viewLayout.setOverlayWidgetsMinWidth(maxMinWidth);\n    }\n    _renderWidget(widgetData, stackCoordinates) {\n        const domNode = widgetData.domNode;\n        if (widgetData.preference === null) {\n            domNode.setTop('');\n            return;\n        }\n        const maxRight = (2 * this._verticalScrollbarWidth) + this._minimapWidth;\n        if (widgetData.preference === 0 /* OverlayWidgetPositionPreference.TOP_RIGHT_CORNER */ || widgetData.preference === 1 /* OverlayWidgetPositionPreference.BOTTOM_RIGHT_CORNER */) {\n            if (widgetData.preference === 1 /* OverlayWidgetPositionPreference.BOTTOM_RIGHT_CORNER */) {\n                const widgetHeight = domNode.domNode.clientHeight;\n                domNode.setTop((this._editorHeight - widgetHeight - 2 * this._horizontalScrollbarHeight));\n            }\n            else {\n                domNode.setTop(0);\n            }\n            if (widgetData.stack !== undefined) {\n                domNode.setTop(stackCoordinates[widgetData.preference]);\n                stackCoordinates[widgetData.preference] += domNode.domNode.clientWidth;\n            }\n            else {\n                domNode.setRight(maxRight);\n            }\n        }\n        else if (widgetData.preference === 2 /* OverlayWidgetPositionPreference.TOP_CENTER */) {\n            domNode.domNode.style.right = '50%';\n            if (widgetData.stack !== undefined) {\n                domNode.setTop(stackCoordinates[2 /* OverlayWidgetPositionPreference.TOP_CENTER */]);\n                stackCoordinates[2 /* OverlayWidgetPositionPreference.TOP_CENTER */] += domNode.domNode.clientHeight;\n            }\n            else {\n                domNode.setTop(0);\n            }\n        }\n        else {\n            const { top, left } = widgetData.preference;\n            const fixedOverflowWidgets = this._context.configuration.options.get(42 /* EditorOption.fixedOverflowWidgets */);\n            if (fixedOverflowWidgets && widgetData.widget.allowEditorOverflow) {\n                // top, left are computed relative to the editor and we need them relative to the page\n                const editorBoundingBox = this._viewDomNodeRect;\n                domNode.setTop(top + editorBoundingBox.top);\n                domNode.setLeft(left + editorBoundingBox.left);\n                domNode.setPosition('fixed');\n            }\n            else {\n                domNode.setTop(top);\n                domNode.setLeft(left);\n                domNode.setPosition('absolute');\n            }\n        }\n    }\n    prepareRender(ctx) {\n        this._viewDomNodeRect = dom.getDomNodePagePosition(this._viewDomNode.domNode);\n    }\n    render(ctx) {\n        this._domNode.setWidth(this._editorWidth);\n        const keys = Object.keys(this._widgets);\n        const stackCoordinates = Array.from({ length: 2 /* OverlayWidgetPositionPreference.TOP_CENTER */ + 1 }, () => 0);\n        keys.sort((a, b) => (this._widgets[a].stack || 0) - (this._widgets[b].stack || 0));\n        for (let i = 0, len = keys.length; i < len; i++) {\n            const widgetId = keys[i];\n            this._renderWidget(this._widgets[widgetId], stackCoordinates);\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/languages.js';\nimport { editorCursorForeground, editorOverviewRulerBorder, editorOverviewRulerBackground, editorMultiCursorSecondaryForeground, editorMultiCursorPrimaryForeground } from '../../../common/core/editorColorRegistry.js';\nimport { OverviewRulerDecorationsGroup } from '../../../common/viewModel.js';\nimport { equals } from '../../../../base/common/arrays.js';\nclass Settings {\n    constructor(config, theme) {\n        const options = config.options;\n        this.lineHeight = options.get(67 /* EditorOption.lineHeight */);\n        this.pixelRatio = options.get(144 /* EditorOption.pixelRatio */);\n        this.overviewRulerLanes = options.get(83 /* EditorOption.overviewRulerLanes */);\n        this.renderBorder = options.get(82 /* EditorOption.overviewRulerBorder */);\n        const borderColor = theme.getColor(editorOverviewRulerBorder);\n        this.borderColor = borderColor ? borderColor.toString() : null;\n        this.hideCursor = options.get(59 /* EditorOption.hideCursorInOverviewRuler */);\n        const cursorColorSingle = theme.getColor(editorCursorForeground);\n        this.cursorColorSingle = cursorColorSingle ? cursorColorSingle.transparent(0.7).toString() : null;\n        const cursorColorPrimary = theme.getColor(editorMultiCursorPrimaryForeground);\n        this.cursorColorPrimary = cursorColorPrimary ? cursorColorPrimary.transparent(0.7).toString() : null;\n        const cursorColorSecondary = theme.getColor(editorMultiCursorSecondaryForeground);\n        this.cursorColorSecondary = cursorColorSecondary ? cursorColorSecondary.transparent(0.7).toString() : null;\n        this.themeType = theme.type;\n        const minimapOpts = options.get(73 /* EditorOption.minimap */);\n        const minimapEnabled = minimapOpts.enabled;\n        const minimapSide = minimapOpts.side;\n        const themeColor = theme.getColor(editorOverviewRulerBackground);\n        const defaultBackground = TokenizationRegistry.getDefaultBackground();\n        if (themeColor) {\n            this.backgroundColor = themeColor;\n        }\n        else if (minimapEnabled && minimapSide === 'right') {\n            this.backgroundColor = defaultBackground;\n        }\n        else {\n            this.backgroundColor = null;\n        }\n        const layoutInfo = options.get(146 /* EditorOption.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, // Left\n                    centerOffset, // Center\n                    leftOffset, // Left | Center\n                    rightOffset, // Right\n                    leftOffset, // Left | Right\n                    centerOffset, // Center | Right\n                    leftOffset, // Left | Center | Right\n                ], [\n                    0,\n                    leftWidth, // Left\n                    centerWidth, // Center\n                    leftWidth + centerWidth, // Left | Center\n                    rightWidth, // Right\n                    leftWidth + centerWidth + rightWidth, // Left | Right\n                    centerWidth + rightWidth, // Center | Right\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, // Left\n                    leftOffset, // Center\n                    leftOffset, // Left | Center\n                    rightOffset, // Right\n                    leftOffset, // Left | Right\n                    leftOffset, // Center | Right\n                    leftOffset, // Left | Center | Right\n                ], [\n                    0,\n                    leftWidth, // Left\n                    leftWidth, // Center\n                    leftWidth, // Left | Center\n                    rightWidth, // Right\n                    leftWidth + rightWidth, // Left | Right\n                    leftWidth + rightWidth, // Center | Right\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, // Left\n                    offset, // Center\n                    offset, // Left | Center\n                    offset, // Right\n                    offset, // Left | Right\n                    offset, // Center | Right\n                    offset, // Left | Center | Right\n                ], [\n                    0,\n                    width, // Left\n                    width, // Center\n                    width, // Left | Center\n                    width, // Right\n                    width, // Left | Right\n                    width, // Center | Right\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.cursorColorSingle === other.cursorColorSingle\n            && this.cursorColorPrimary === other.cursorColorPrimary\n            && this.cursorColorSecondary === other.cursorColorSecondary\n            && this.themeType === other.themeType\n            && Color.equals(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._actualShouldRender = 0 /* ShouldRenderValue.NotNeeded */;\n        this._renderedDecorations = [];\n        this._renderedCursorPositions = [];\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 = [{ position: new Position(1, 1), color: this._settings.cursorColorSingle }];\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    _markRenderingIsNeeded() {\n        this._actualShouldRender = 2 /* ShouldRenderValue.Needed */;\n        return true;\n    }\n    _markRenderingIsMaybeNeeded() {\n        this._actualShouldRender = 1 /* ShouldRenderValue.Maybe */;\n        return true;\n    }\n    onConfigurationChanged(e) {\n        return this._updateSettings(false) ? this._markRenderingIsNeeded() : false;\n    }\n    onCursorStateChanged(e) {\n        this._cursorPositions = [];\n        for (let i = 0, len = e.selections.length; i < len; i++) {\n            let color = this._settings.cursorColorSingle;\n            if (len > 1) {\n                color = i === 0 ? this._settings.cursorColorPrimary : this._settings.cursorColorSecondary;\n            }\n            this._cursorPositions.push({ position: e.selections[i].getPosition(), color });\n        }\n        this._cursorPositions.sort((a, b) => Position.compare(a.position, b.position));\n        return this._markRenderingIsMaybeNeeded();\n    }\n    onDecorationsChanged(e) {\n        if (e.affectsOverviewRuler) {\n            return this._markRenderingIsMaybeNeeded();\n        }\n        return false;\n    }\n    onFlushed(e) {\n        return this._markRenderingIsNeeded();\n    }\n    onScrollChanged(e) {\n        return e.scrollHeightChanged ? this._markRenderingIsNeeded() : false;\n    }\n    onZonesChanged(e) {\n        return this._markRenderingIsNeeded();\n    }\n    onThemeChanged(e) {\n        return this._updateSettings(false) ? this._markRenderingIsNeeded() : 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        this._actualShouldRender = 0 /* ShouldRenderValue.NotNeeded */;\n    }\n    _render() {\n        const backgroundColor = this._settings.backgroundColor;\n        if (this._settings.overviewRulerLanes === 0) {\n            // overview ruler is off\n            this._domNode.setBackgroundColor(backgroundColor ? Color.Format.CSS.formatHexA(backgroundColor) : '');\n            this._domNode.setDisplay('none');\n            return;\n        }\n        const decorations = this._context.viewModel.getAllOverviewRulerDecorations(this._context.theme);\n        decorations.sort(OverviewRulerDecorationsGroup.compareByRenderingProps);\n        if (this._actualShouldRender === 1 /* ShouldRenderValue.Maybe */ && !OverviewRulerDecorationsGroup.equalsArr(this._renderedDecorations, decorations)) {\n            this._actualShouldRender = 2 /* ShouldRenderValue.Needed */;\n        }\n        if (this._actualShouldRender === 1 /* ShouldRenderValue.Maybe */ && !equals(this._renderedCursorPositions, this._cursorPositions, (a, b) => a.position.lineNumber === b.position.lineNumber && a.color === b.color)) {\n            this._actualShouldRender = 2 /* ShouldRenderValue.Needed */;\n        }\n        if (this._actualShouldRender === 1 /* ShouldRenderValue.Maybe */) {\n            // both decorations and cursor positions are unchanged, nothing to do\n            return;\n        }\n        this._renderedDecorations = decorations;\n        this._renderedCursorPositions = this._cursorPositions;\n        this._domNode.setDisplay('block');\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 minDecorationHeight = (6 /* Constants.MIN_DECORATION_HEIGHT */ * this._settings.pixelRatio) | 0;\n        const halfMinDecorationHeight = (minDecorationHeight / 2) | 0;\n        const canvasCtx = this._domNode.domNode.getContext('2d');\n        if (backgroundColor) {\n            if (backgroundColor.isOpaque()) {\n                // We have a background color which is opaque, we can just paint the entire surface with it\n                canvasCtx.fillStyle = Color.Format.CSS.formatHexA(backgroundColor);\n                canvasCtx.fillRect(0, 0, canvasWidth, canvasHeight);\n            }\n            else {\n                // We have a background color which is transparent, we need to first clear the surface and\n                // then fill it\n                canvasCtx.clearRect(0, 0, canvasWidth, canvasHeight);\n                canvasCtx.fillStyle = Color.Format.CSS.formatHexA(backgroundColor);\n                canvasCtx.fillRect(0, 0, canvasWidth, canvasHeight);\n            }\n        }\n        else {\n            // We don't have a background color\n            canvasCtx.clearRect(0, 0, canvasWidth, canvasHeight);\n        }\n        const x = this._settings.x;\n        const w = this._settings.w;\n        for (const decorationGroup of decorations) {\n            const color = decorationGroup.color;\n            const decorationGroupData = decorationGroup.data;\n            canvasCtx.fillStyle = color;\n            let prevLane = 0;\n            let prevY1 = 0;\n            let prevY2 = 0;\n            for (let i = 0, len = decorationGroupData.length / 3; i < len; i++) {\n                const lane = decorationGroupData[3 * i];\n                const startLineNumber = decorationGroupData[3 * i + 1];\n                const endLineNumber = decorationGroupData[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) {\n            const cursorHeight = (2 * this._settings.pixelRatio) | 0;\n            const halfCursorHeight = (cursorHeight / 2) | 0;\n            const cursorX = this._settings.x[7 /* OverviewRulerLane.Full */];\n            const cursorW = this._settings.w[7 /* OverviewRulerLane.Full */];\n            let prevY1 = -100;\n            let prevY2 = -100;\n            let prevColor = null;\n            for (let i = 0, len = this._cursorPositions.length; i < len; i++) {\n                const color = this._cursorPositions[i].color;\n                if (!color) {\n                    continue;\n                }\n                const cursor = this._cursorPositions[i].position;\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 || color !== prevColor) {\n                    // flush prev\n                    if (i !== 0 && prevColor) {\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                prevColor = color;\n                canvasCtx.fillStyle = color;\n            }\n            if (prevColor) {\n                canvasCtx.fillRect(cursorX, prevY1, cursorW, prevY2 - prevY1);\n            }\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.moveTo(1, 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 *--------------------------------------------------------------------------------------------*/\nexport class ColorZone {\n    constructor(from, to, colorId) {\n        this._colorZoneBrand = undefined;\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, heightInLines, color) {\n        this._overviewRulerZoneBrand = undefined;\n        this.startLineNumber = startLineNumber;\n        this.endLineNumber = endLineNumber;\n        this.heightInLines = heightInLines;\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                if (a.heightInLines === b.heightInLines) {\n                    return a.endLineNumber - b.endLineNumber;\n                }\n                return a.heightInLines - b.heightInLines;\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);\n        const totalHeight = Math.floor(this.getCanvasHeight());\n        const outerHeight = Math.floor(this._outerHeight);\n        const heightRatio = totalHeight / outerHeight;\n        const halfMinimumHeight = Math.floor(4 /* Constants.MINIMUM_HEIGHT */ * this._pixelRatio / 2);\n        const 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 offset1 = this._getVerticalOffsetForLine(zone.startLineNumber);\n            const offset2 = (zone.heightInLines === 0\n                ? this._getVerticalOffsetForLine(zone.endLineNumber) + lineHeight\n                : offset1 + zone.heightInLines * lineHeight);\n            const y1 = Math.floor(heightRatio * offset1);\n            const y2 = Math.floor(heightRatio * offset2);\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 { createFastDomNode } from '../../../../base/browser/fastDomNode.js';\nimport { OverviewZoneManager } from '../../../common/viewModel/overviewZoneManager.js';\nimport { ViewEventHandler } from '../../../common/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(67 /* EditorOption.lineHeight */));\n        this._zoneManager.setPixelRatio(options.get(144 /* EditorOption.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(67 /* EditorOption.lineHeight */)) {\n            this._zoneManager.setLineHeight(options.get(67 /* EditorOption.lineHeight */));\n            this._render();\n        }\n        if (e.hasChanged(144 /* EditorOption.pixelRatio */)) {\n            this._zoneManager.setPixelRatio(options.get(144 /* EditorOption.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';\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(103 /* EditorOption.rulers */);\n        this._typicalHalfwidthCharacterWidth = options.get(50 /* EditorOption.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(103 /* EditorOption.rulers */);\n        this._typicalHalfwidthCharacterWidth = options.get(50 /* EditorOption.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.viewModel.model.getOptions();\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}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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';\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(104 /* EditorOption.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(146 /* EditorOption.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.verticalScrollbarWidth;\n        }\n    }\n    // --- begin event handlers\n    onConfigurationChanged(e) {\n        const options = this._context.configuration.options;\n        const scrollbar = options.get(104 /* EditorOption.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}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { 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    static { this.SELECTION_CLASS_NAME = 'selected-text'; }\n    static { this.SELECTION_TOP_LEFT = 'top-left-radius'; }\n    static { this.SELECTION_BOTTOM_LEFT = 'bottom-left-radius'; }\n    static { this.SELECTION_TOP_RIGHT = 'top-right-radius'; }\n    static { this.SELECTION_BOTTOM_RIGHT = 'bottom-right-radius'; }\n    static { this.EDITOR_BACKGROUND_CLASS_NAME = 'monaco-editor-background'; }\n    static { this.ROUNDED_PIECE_WIDTH = 10; }\n    constructor(context) {\n        super();\n        this._previousFrameVisibleRangesWithStyle = [];\n        this._context = context;\n        const options = this._context.configuration.options;\n        this._roundedSelection = options.get(102 /* EditorOption.roundedSelection */);\n        this._typicalHalfwidthCharacterWidth = options.get(50 /* EditorOption.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._roundedSelection = options.get(102 /* EditorOption.roundedSelection */);\n        this._typicalHalfwidthCharacterWidth = options.get(50 /* EditorOption.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 /* CornerStyle.EXTERN */,\n                bottom: 0 /* CornerStyle.EXTERN */\n            };\n            const endStyle = {\n                top: 0 /* CornerStyle.EXTERN */,\n                bottom: 0 /* CornerStyle.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 /* CornerStyle.FLAT */;\n                }\n                else if (curLeft > prevLeft) {\n                    startStyle.top = 1 /* CornerStyle.INTERN */;\n                }\n                if (abs(curRight - prevRight) < epsilon) {\n                    endStyle.top = 2 /* CornerStyle.FLAT */;\n                }\n                else if (prevLeft < curRight && curRight < prevRight) {\n                    endStyle.top = 1 /* CornerStyle.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 /* CornerStyle.FLAT */;\n                }\n                else if (nextLeft < curLeft && curLeft < nextRight) {\n                    startStyle.bottom = 1 /* CornerStyle.INTERN */;\n                }\n                if (abs(curRight - nextRight) < epsilon) {\n                    endStyle.bottom = 2 /* CornerStyle.FLAT */;\n                }\n                else if (curRight < nextRight) {\n                    endStyle.bottom = 1 /* CornerStyle.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, bottom, className, left, width) {\n        return ('<div class=\"cslr '\n            + className\n            + '\" style=\"'\n            + 'top:' + top.toString() + 'px;'\n            + 'bottom:' + bottom.toString() + 'px;'\n            + 'left:' + left.toString() + 'px;'\n            + 'width:' + width.toString() + 'px;'\n            + '\"></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 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 top = hasMultipleSelections ? (lineNumber === firstLineNumber ? 1 : 0) : 0;\n            const bottom = hasMultipleSelections ? (lineNumber !== firstLineNumber && lineNumber === lastLineNumber ? 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 /* CornerStyle.INTERN */ || startStyle.bottom === 1 /* CornerStyle.INTERN */) {\n                        // Reverse rounded corner to the left\n                        // First comes the selection (blue layer)\n                        innerCornerOutput += this._createSelectionPiece(top, bottom, 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 /* CornerStyle.INTERN */) {\n                            className += ' ' + SelectionsOverlay.SELECTION_TOP_RIGHT;\n                        }\n                        if (startStyle.bottom === 1 /* CornerStyle.INTERN */) {\n                            className += ' ' + SelectionsOverlay.SELECTION_BOTTOM_RIGHT;\n                        }\n                        innerCornerOutput += this._createSelectionPiece(top, bottom, className, visibleRange.left - SelectionsOverlay.ROUNDED_PIECE_WIDTH, SelectionsOverlay.ROUNDED_PIECE_WIDTH);\n                    }\n                    if (endStyle.top === 1 /* CornerStyle.INTERN */ || endStyle.bottom === 1 /* CornerStyle.INTERN */) {\n                        // Reverse rounded corner to the right\n                        // First comes the selection (blue layer)\n                        innerCornerOutput += this._createSelectionPiece(top, bottom, 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 /* CornerStyle.INTERN */) {\n                            className += ' ' + SelectionsOverlay.SELECTION_TOP_LEFT;\n                        }\n                        if (endStyle.bottom === 1 /* CornerStyle.INTERN */) {\n                            className += ' ' + SelectionsOverlay.SELECTION_BOTTOM_LEFT;\n                        }\n                        innerCornerOutput += this._createSelectionPiece(top, bottom, 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 /* CornerStyle.EXTERN */) {\n                        className += ' ' + SelectionsOverlay.SELECTION_TOP_LEFT;\n                    }\n                    if (startStyle.bottom === 0 /* CornerStyle.EXTERN */) {\n                        className += ' ' + SelectionsOverlay.SELECTION_BOTTOM_LEFT;\n                    }\n                    if (endStyle.top === 0 /* CornerStyle.EXTERN */) {\n                        className += ' ' + SelectionsOverlay.SELECTION_TOP_RIGHT;\n                    }\n                    if (endStyle.bottom === 0 /* CornerStyle.EXTERN */) {\n                        className += ' ' + SelectionsOverlay.SELECTION_BOTTOM_RIGHT;\n                    }\n                }\n                restOfSelectionOutput += this._createSelectionPiece(top, bottom, 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}\nregisterThemingParticipant((theme, collector) => {\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 { applyFontInfo } from '../../config/domFontInfo.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, paddingLeft, width, height, textContent, textContentClassName) {\n        this.top = top;\n        this.left = left;\n        this.paddingLeft = paddingLeft;\n        this.width = width;\n        this.height = height;\n        this.textContent = textContent;\n        this.textContentClassName = textContentClassName;\n    }\n}\nexport var CursorPlurality;\n(function (CursorPlurality) {\n    CursorPlurality[CursorPlurality[\"Single\"] = 0] = \"Single\";\n    CursorPlurality[CursorPlurality[\"MultiPrimary\"] = 1] = \"MultiPrimary\";\n    CursorPlurality[CursorPlurality[\"MultiSecondary\"] = 2] = \"MultiSecondary\";\n})(CursorPlurality || (CursorPlurality = {}));\nexport class ViewCursor {\n    constructor(context, plurality) {\n        this._context = context;\n        const options = this._context.configuration.options;\n        const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n        this._cursorStyle = options.get(28 /* EditorOption.cursorStyle */);\n        this._lineHeight = options.get(67 /* EditorOption.lineHeight */);\n        this._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n        this._lineCursorWidth = Math.min(options.get(31 /* EditorOption.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        applyFontInfo(this._domNode, fontInfo);\n        this._domNode.setDisplay('none');\n        this._position = new Position(1, 1);\n        this._pluralityClass = '';\n        this.setPlurality(plurality);\n        this._lastRenderedContent = '';\n        this._renderData = null;\n    }\n    getDomNode() {\n        return this._domNode;\n    }\n    getPosition() {\n        return this._position;\n    }\n    setPlurality(plurality) {\n        switch (plurality) {\n            default:\n            case CursorPlurality.Single:\n                this._pluralityClass = '';\n                break;\n            case CursorPlurality.MultiPrimary:\n                this._pluralityClass = 'cursor-primary';\n                break;\n            case CursorPlurality.MultiSecondary:\n                this._pluralityClass = 'cursor-secondary';\n                break;\n        }\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(50 /* EditorOption.fontInfo */);\n        this._cursorStyle = options.get(28 /* EditorOption.cursorStyle */);\n        this._lineHeight = options.get(67 /* EditorOption.lineHeight */);\n        this._typicalHalfwidthCharacterWidth = fontInfo.typicalHalfwidthCharacterWidth;\n        this._lineCursorWidth = Math.min(options.get(31 /* EditorOption.cursorWidth */), this._typicalHalfwidthCharacterWidth);\n        applyFontInfo(this._domNode, fontInfo);\n        return true;\n    }\n    onCursorPositionChanged(position, pauseAnimation) {\n        if (pauseAnimation) {\n            this._domNode.domNode.style.transitionProperty = 'none';\n        }\n        else {\n            this._domNode.domNode.style.transitionProperty = '';\n        }\n        this._position = position;\n        return true;\n    }\n    /**\n     * If `this._position` is inside a grapheme, returns the position where the grapheme starts.\n     * Also returns the next grapheme.\n     */\n    _getGraphemeAwarePosition() {\n        const { lineNumber, column } = this._position;\n        const lineContent = this._context.viewModel.getLineContent(lineNumber);\n        const [startOffset, endOffset] = strings.getCharContainingOffset(lineContent, column - 1);\n        return [new Position(lineNumber, startOffset + 1), lineContent.substring(startOffset, endOffset)];\n    }\n    _prepareRender(ctx) {\n        let textContent = '';\n        let textContentClassName = '';\n        const [position, nextGrapheme] = this._getGraphemeAwarePosition();\n        if (this._cursorStyle === TextEditorCursorStyle.Line || this._cursorStyle === TextEditorCursorStyle.LineThin) {\n            const visibleRange = ctx.visibleRangeForPosition(position);\n            if (!visibleRange || visibleRange.outsideRenderedLine) {\n                // Outside viewport\n                return null;\n            }\n            const window = dom.getWindow(this._domNode.domNode);\n            let width;\n            if (this._cursorStyle === TextEditorCursorStyle.Line) {\n                width = dom.computeScreenAwareSize(window, this._lineCursorWidth > 0 ? this._lineCursorWidth : 2);\n                if (width > 2) {\n                    textContent = nextGrapheme;\n                    textContentClassName = this._getTokenClassName(position);\n                }\n            }\n            else {\n                width = dom.computeScreenAwareSize(window, 1);\n            }\n            let left = visibleRange.left;\n            let paddingLeft = 0;\n            if (width >= 2 && left >= 1) {\n                // shift the cursor a bit between the characters\n                paddingLeft = 1;\n                left -= paddingLeft;\n            }\n            const top = ctx.getVerticalOffsetForLineNumber(position.lineNumber) - ctx.bigNumbersDelta;\n            return new ViewCursorRenderData(top, left, paddingLeft, width, this._lineHeight, textContent, textContentClassName);\n        }\n        const visibleRangeForCharacter = ctx.linesVisibleRangesForRange(new Range(position.lineNumber, position.column, position.lineNumber, position.column + nextGrapheme.length), 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 = (nextGrapheme === '\\t'\n            ? this._typicalHalfwidthCharacterWidth\n            : (range.width < 1\n                ? this._typicalHalfwidthCharacterWidth\n                : range.width));\n        if (this._cursorStyle === TextEditorCursorStyle.Block) {\n            textContent = nextGrapheme;\n            textContentClassName = this._getTokenClassName(position);\n        }\n        let top = ctx.getVerticalOffsetForLineNumber(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, 0, width, height, textContent, textContentClassName);\n    }\n    _getTokenClassName(position) {\n        const lineData = this._context.viewModel.getViewLineData(position.lineNumber);\n        const tokenIndex = lineData.tokens.findTokenIndexAtOffset(position.column - 1);\n        return lineData.tokens.getClassName(tokenIndex);\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 ${this._pluralityClass} ${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.setPaddingLeft(this._renderData.paddingLeft);\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 { TimeoutTimer } from '../../../../base/common/async.js';\nimport { ViewPart } from '../../view/viewPart.js';\nimport { ViewCursor, CursorPlurality } from './viewCursor.js';\nimport { TextEditorCursorStyle } from '../../../common/config/editorOptions.js';\nimport { editorCursorBackground, editorCursorForeground, editorMultiCursorPrimaryForeground, editorMultiCursorPrimaryBackground, editorMultiCursorSecondaryForeground, editorMultiCursorSecondaryBackground } from '../../../common/core/editorColorRegistry.js';\nimport { registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { isHighContrast } from '../../../../platform/theme/common/theme.js';\nimport { WindowIntervalTimer, getWindow } from '../../../../base/browser/dom.js';\nexport class ViewCursors extends ViewPart {\n    static { this.BLINK_INTERVAL = 500; }\n    constructor(context) {\n        super(context);\n        const options = this._context.configuration.options;\n        this._readOnly = options.get(92 /* EditorOption.readOnly */);\n        this._cursorBlinking = options.get(26 /* EditorOption.cursorBlinking */);\n        this._cursorStyle = options.get(28 /* EditorOption.cursorStyle */);\n        this._cursorSmoothCaretAnimation = options.get(27 /* EditorOption.cursorSmoothCaretAnimation */);\n        this._selectionIsEmpty = true;\n        this._isComposingInput = false;\n        this._isVisible = false;\n        this._primaryCursor = new ViewCursor(this._context, CursorPlurality.Single);\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 WindowIntervalTimer();\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(92 /* EditorOption.readOnly */);\n        this._cursorBlinking = options.get(26 /* EditorOption.cursorBlinking */);\n        this._cursorStyle = options.get(28 /* EditorOption.cursorStyle */);\n        this._cursorSmoothCaretAnimation = options.get(27 /* EditorOption.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, reason) {\n        const pauseAnimation = (this._secondaryCursors.length !== secondaryPositions.length\n            || (this._cursorSmoothCaretAnimation === 'explicit' && reason !== 3 /* CursorChangeReason.Explicit */));\n        this._primaryCursor.setPlurality(secondaryPositions.length ? CursorPlurality.MultiPrimary : CursorPlurality.Single);\n        this._primaryCursor.onCursorPositionChanged(position, pauseAnimation);\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, CursorPlurality.MultiSecondary);\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], pauseAnimation);\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), e.reason);\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 /* TextEditorCursorBlinkingStyle.Hidden */;\n        }\n        if (!this._editorHasFocus) {\n            return 0 /* TextEditorCursorBlinkingStyle.Hidden */;\n        }\n        if (this._readOnly) {\n            return 5 /* TextEditorCursorBlinkingStyle.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 /* TextEditorCursorBlinkingStyle.Hidden */);\n        const isSolid = (blinkingStyle === 5 /* TextEditorCursorBlinkingStyle.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 /* TextEditorCursorBlinkingStyle.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, getWindow(this._domNode.domNode));\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 /* TextEditorCursorBlinkingStyle.Blink */:\n                    result += ' cursor-blink';\n                    break;\n                case 2 /* TextEditorCursorBlinkingStyle.Smooth */:\n                    result += ' cursor-smooth';\n                    break;\n                case 3 /* TextEditorCursorBlinkingStyle.Phase */:\n                    result += ' cursor-phase';\n                    break;\n                case 4 /* TextEditorCursorBlinkingStyle.Expand */:\n                    result += ' cursor-expand';\n                    break;\n                case 5 /* TextEditorCursorBlinkingStyle.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 === 'on' || this._cursorSmoothCaretAnimation === 'explicit') {\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        const renderData = [];\n        let 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}\nregisterThemingParticipant((theme, collector) => {\n    const cursorThemes = [\n        { class: '.cursor', foreground: editorCursorForeground, background: editorCursorBackground },\n        { class: '.cursor-primary', foreground: editorMultiCursorPrimaryForeground, background: editorMultiCursorPrimaryBackground },\n        { class: '.cursor-secondary', foreground: editorMultiCursorSecondaryForeground, background: editorMultiCursorSecondaryBackground },\n    ];\n    for (const cursorTheme of cursorThemes) {\n        const caret = theme.getColor(cursorTheme.foreground);\n        if (caret) {\n            let caretBackground = theme.getColor(cursorTheme.background);\n            if (!caretBackground) {\n                caretBackground = caret.opposite();\n            }\n            collector.addRule(`.monaco-editor .cursors-layer ${cursorTheme.class} { background-color: ${caret}; border-color: ${caret}; color: ${caretBackground}; }`);\n            if (isHighContrast(theme.type)) {\n                collector.addRule(`.monaco-editor .cursors-layer.has-selection ${cursorTheme.class} { border-left: 1px solid ${caretBackground}; border-right: 1px solid ${caretBackground}; }`);\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 { 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(146 /* EditorOption.layoutInfo */);\n        this._lineHeight = options.get(67 /* EditorOption.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.viewModel.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                zone.isInHiddenArea = props.isInHiddenArea;\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(146 /* EditorOption.layoutInfo */);\n        this._lineHeight = options.get(67 /* EditorOption.lineHeight */);\n        this._contentWidth = layoutInfo.contentWidth;\n        this._contentLeft = layoutInfo.contentLeft;\n        if (e.hasChanged(67 /* EditorOption.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        return zone.ordinal ?? zone.afterColumn ?? 10000;\n    }\n    _computeWhitespaceProps(zone) {\n        if (zone.afterLineNumber === 0) {\n            return {\n                isInHiddenArea: false,\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.viewModel.model.validatePosition({\n                lineNumber: zone.afterLineNumber,\n                column: zone.afterColumn\n            });\n        }\n        else {\n            const validAfterLineNumber = this._context.viewModel.model.validatePosition({\n                lineNumber: zone.afterLineNumber,\n                column: 1\n            }).lineNumber;\n            zoneAfterModelPosition = new Position(validAfterLineNumber, this._context.viewModel.model.getLineMaxColumn(validAfterLineNumber));\n        }\n        let zoneBeforeModelPosition;\n        if (zoneAfterModelPosition.column === this._context.viewModel.model.getLineMaxColumn(zoneAfterModelPosition.lineNumber)) {\n            zoneBeforeModelPosition = this._context.viewModel.model.validatePosition({\n                lineNumber: zoneAfterModelPosition.lineNumber + 1,\n                column: 1\n            });\n        }\n        else {\n            zoneBeforeModelPosition = this._context.viewModel.model.validatePosition({\n                lineNumber: zoneAfterModelPosition.lineNumber,\n                column: zoneAfterModelPosition.column + 1\n            });\n        }\n        const viewPosition = this._context.viewModel.coordinatesConverter.convertModelPositionToViewPosition(zoneAfterModelPosition, zone.afterColumnAffinity, true);\n        const isVisible = zone.showInHiddenAreas || this._context.viewModel.coordinatesConverter.modelPositionIsVisible(zoneBeforeModelPosition);\n        return {\n            isInHiddenArea: !isVisible,\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.viewModel.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            isInHiddenArea: props.isInHiddenArea,\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.remove();\n            if (zone.marginDomNode) {\n                zone.marginDomNode.removeAttribute('monaco-visible-view-zone');\n                zone.marginDomNode.removeAttribute('monaco-view-zone');\n                zone.marginDomNode.domNode.remove();\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            zone.isInHiddenArea = props.isInHiddenArea;\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 (const visibleWhitespace of visibleWhitespaces) {\n            if (this._zones[visibleWhitespace.id].isInHiddenArea) {\n                continue;\n            }\n            visibleZones[visibleWhitespace.id] = visibleWhitespace;\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 *--------------------------------------------------------------------------------------------*/\nimport './whitespace.css';\nimport { DynamicViewOverlay } from '../../view/dynamicViewOverlay.js';\nimport * as strings from '../../../../base/common/strings.js';\nimport { LineRange } from '../../../common/viewLayout/viewLineRenderer.js';\nimport { Position } from '../../../common/core/position.js';\nimport { editorWhitespaces } from '../../../common/core/editorColorRegistry.js';\nexport class WhitespaceOverlay extends DynamicViewOverlay {\n    constructor(context) {\n        super();\n        this._context = context;\n        this._options = new WhitespaceOptions(this._context.configuration);\n        this._selection = [];\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 newOptions = new WhitespaceOptions(this._context.configuration);\n        if (this._options.equals(newOptions)) {\n            return e.hasChanged(146 /* EditorOption.layoutInfo */);\n        }\n        this._options = newOptions;\n        return true;\n    }\n    onCursorStateChanged(e) {\n        this._selection = e.selections;\n        if (this._options.renderWhitespace === 'selection') {\n            return true;\n        }\n        return false;\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    prepareRender(ctx) {\n        if (this._options.renderWhitespace === 'none') {\n            this._renderResult = null;\n            return;\n        }\n        const startLineNumber = ctx.visibleRange.startLineNumber;\n        const endLineNumber = ctx.visibleRange.endLineNumber;\n        const lineCount = endLineNumber - startLineNumber + 1;\n        const needed = new Array(lineCount);\n        for (let i = 0; i < lineCount; i++) {\n            needed[i] = true;\n        }\n        const viewportData = this._context.viewModel.getMinimapLinesRenderingData(ctx.viewportData.startLineNumber, ctx.viewportData.endLineNumber, needed);\n        this._renderResult = [];\n        for (let lineNumber = ctx.viewportData.startLineNumber; lineNumber <= ctx.viewportData.endLineNumber; lineNumber++) {\n            const lineIndex = lineNumber - ctx.viewportData.startLineNumber;\n            const lineData = viewportData.data[lineIndex];\n            let selectionsOnLine = null;\n            if (this._options.renderWhitespace === 'selection') {\n                const selections = this._selection;\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 (!selectionsOnLine) {\n                            selectionsOnLine = [];\n                        }\n                        selectionsOnLine.push(new LineRange(startColumn - 1, endColumn - 1));\n                    }\n                }\n            }\n            this._renderResult[lineIndex] = this._applyRenderWhitespace(ctx, lineNumber, selectionsOnLine, lineData);\n        }\n    }\n    _applyRenderWhitespace(ctx, lineNumber, selections, lineData) {\n        if (this._options.renderWhitespace === 'selection' && !selections) {\n            return '';\n        }\n        if (this._options.renderWhitespace === 'trailing' && lineData.continuesWithWrappedLine) {\n            return '';\n        }\n        const color = this._context.theme.getColor(editorWhitespaces);\n        const USE_SVG = this._options.renderWithSVG;\n        const lineContent = lineData.content;\n        const len = (this._options.stopRenderingLineAfter === -1 ? lineContent.length : Math.min(this._options.stopRenderingLineAfter, lineContent.length));\n        const continuesWithWrappedLine = lineData.continuesWithWrappedLine;\n        const fauxIndentLength = lineData.minColumn - 1;\n        const onlyBoundary = (this._options.renderWhitespace === 'boundary');\n        const onlyTrailing = (this._options.renderWhitespace === 'trailing');\n        const lineHeight = this._options.lineHeight;\n        const middotWidth = this._options.middotWidth;\n        const wsmiddotWidth = this._options.wsmiddotWidth;\n        const spaceWidth = this._options.spaceWidth;\n        const wsmiddotDiff = Math.abs(wsmiddotWidth - spaceWidth);\n        const middotDiff = Math.abs(middotWidth - spaceWidth);\n        // U+2E31 - WORD SEPARATOR MIDDLE DOT\n        // U+00B7 - MIDDLE DOT\n        const renderSpaceCharCode = (wsmiddotDiff < middotDiff ? 0x2E31 : 0xB7);\n        const canUseHalfwidthRightwardsArrow = this._options.canUseHalfwidthRightwardsArrow;\n        let result = '';\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 currentSelectionIndex = 0;\n        let currentSelection = selections && selections[currentSelectionIndex];\n        let maxLeft = 0;\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            if (chCode !== 9 /* CharCode.Tab */ && chCode !== 32 /* CharCode.Space */) {\n                continue;\n            }\n            if (onlyTrailing && !lineIsEmptyOrWhitespace && charIndex <= lastNonWhitespaceIndex) {\n                // If rendering only trailing whitespace, check that the charIndex points to trailing whitespace.\n                continue;\n            }\n            if (onlyBoundary && charIndex >= firstNonWhitespaceIndex && charIndex <= lastNonWhitespaceIndex && chCode === 32 /* CharCode.Space */) {\n                // rendering only boundary whitespace\n                const prevChCode = (charIndex - 1 >= 0 ? lineContent.charCodeAt(charIndex - 1) : 0 /* CharCode.Null */);\n                const nextChCode = (charIndex + 1 < len ? lineContent.charCodeAt(charIndex + 1) : 0 /* CharCode.Null */);\n                if (prevChCode !== 32 /* CharCode.Space */ && nextChCode !== 32 /* CharCode.Space */) {\n                    continue;\n                }\n            }\n            if (onlyBoundary && continuesWithWrappedLine && charIndex === len - 1) {\n                const prevCharCode = (charIndex - 1 >= 0 ? lineContent.charCodeAt(charIndex - 1) : 0 /* CharCode.Null */);\n                const isSingleTrailingSpace = (chCode === 32 /* CharCode.Space */ && (prevCharCode !== 32 /* CharCode.Space */ && prevCharCode !== 9 /* CharCode.Tab */));\n                if (isSingleTrailingSpace) {\n                    continue;\n                }\n            }\n            if (selections && (!currentSelection || currentSelection.startOffset > charIndex || currentSelection.endOffset <= charIndex)) {\n                // If rendering whitespace on selection, check that the charIndex falls within a selection\n                continue;\n            }\n            const visibleRange = ctx.visibleRangeForPosition(new Position(lineNumber, charIndex + 1));\n            if (!visibleRange) {\n                continue;\n            }\n            if (USE_SVG) {\n                maxLeft = Math.max(maxLeft, visibleRange.left);\n                if (chCode === 9 /* CharCode.Tab */) {\n                    result += this._renderArrow(lineHeight, spaceWidth, visibleRange.left);\n                }\n                else {\n                    result += `<circle cx=\"${(visibleRange.left + spaceWidth / 2).toFixed(2)}\" cy=\"${(lineHeight / 2).toFixed(2)}\" r=\"${(spaceWidth / 7).toFixed(2)}\" />`;\n                }\n            }\n            else {\n                if (chCode === 9 /* CharCode.Tab */) {\n                    result += `<div class=\"mwh\" style=\"left:${visibleRange.left}px;height:${lineHeight}px;\">${canUseHalfwidthRightwardsArrow ? String.fromCharCode(0xFFEB) : String.fromCharCode(0x2192)}</div>`;\n                }\n                else {\n                    result += `<div class=\"mwh\" style=\"left:${visibleRange.left}px;height:${lineHeight}px;\">${String.fromCharCode(renderSpaceCharCode)}</div>`;\n                }\n            }\n        }\n        if (USE_SVG) {\n            maxLeft = Math.round(maxLeft + spaceWidth);\n            return (`<svg style=\"bottom:0;position:absolute;width:${maxLeft}px;height:${lineHeight}px\" viewBox=\"0 0 ${maxLeft} ${lineHeight}\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"${color}\">`\n                + result\n                + `</svg>`);\n        }\n        return result;\n    }\n    _renderArrow(lineHeight, spaceWidth, left) {\n        const strokeWidth = spaceWidth / 7;\n        const width = spaceWidth;\n        const dy = lineHeight / 2;\n        const dx = left;\n        const p1 = { x: 0, y: strokeWidth / 2 };\n        const p2 = { x: 100 / 125 * width, y: p1.y };\n        const p3 = { x: p2.x - 0.2 * p2.x, y: p2.y + 0.2 * p2.x };\n        const p4 = { x: p3.x + 0.1 * p2.x, y: p3.y + 0.1 * p2.x };\n        const p5 = { x: p4.x + 0.35 * p2.x, y: p4.y - 0.35 * p2.x };\n        const p6 = { x: p5.x, y: -p5.y };\n        const p7 = { x: p4.x, y: -p4.y };\n        const p8 = { x: p3.x, y: -p3.y };\n        const p9 = { x: p2.x, y: -p2.y };\n        const p10 = { x: p1.x, y: -p1.y };\n        const p = [p1, p2, p3, p4, p5, p6, p7, p8, p9, p10];\n        const parts = p.map((p) => `${(dx + p.x).toFixed(2)} ${(dy + p.y).toFixed(2)}`).join(' L ');\n        return `<path d=\"M ${parts}\" />`;\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}\nclass WhitespaceOptions {\n    constructor(config) {\n        const options = config.options;\n        const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n        const experimentalWhitespaceRendering = options.get(38 /* EditorOption.experimentalWhitespaceRendering */);\n        if (experimentalWhitespaceRendering === 'off') {\n            // whitespace is rendered in the view line\n            this.renderWhitespace = 'none';\n            this.renderWithSVG = false;\n        }\n        else if (experimentalWhitespaceRendering === 'svg') {\n            this.renderWhitespace = options.get(100 /* EditorOption.renderWhitespace */);\n            this.renderWithSVG = true;\n        }\n        else {\n            this.renderWhitespace = options.get(100 /* EditorOption.renderWhitespace */);\n            this.renderWithSVG = false;\n        }\n        this.spaceWidth = fontInfo.spaceWidth;\n        this.middotWidth = fontInfo.middotWidth;\n        this.wsmiddotWidth = fontInfo.wsmiddotWidth;\n        this.canUseHalfwidthRightwardsArrow = fontInfo.canUseHalfwidthRightwardsArrow;\n        this.lineHeight = options.get(67 /* EditorOption.lineHeight */);\n        this.stopRenderingLineAfter = options.get(118 /* EditorOption.stopRenderingLineAfter */);\n    }\n    equals(other) {\n        return (this.renderWhitespace === other.renderWhitespace\n            && this.renderWithSVG === other.renderWithSVG\n            && this.spaceWidth === other.spaceWidth\n            && this.middotWidth === other.middotWidth\n            && this.wsmiddotWidth === other.wsmiddotWidth\n            && this.canUseHalfwidthRightwardsArrow === other.canUseHalfwidthRightwardsArrow\n            && this.lineHeight === other.lineHeight\n            && this.stopRenderingLineAfter === other.stopRenderingLineAfter);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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.lineHeight = partialData.lineHeight | 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.getViewportViewLineRenderingData(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 *--------------------------------------------------------------------------------------------*/\nexport class EditorTheme {\n    get type() {\n        return this._theme.type;\n    }\n    get value() {\n        return this._theme;\n    }\n    constructor(theme) {\n        this._theme = theme;\n    }\n    update(theme) {\n        this._theme = theme;\n    }\n    getColor(color) {\n        return this._theme.getColor(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 { EditorTheme } from '../editorTheme.js';\nexport class ViewContext {\n    constructor(configuration, theme, model) {\n        this.configuration = configuration;\n        this.theme = new EditorTheme(theme);\n        this.viewModel = model;\n        this.viewLayout = model.viewLayout;\n    }\n    addEventHandler(eventHandler) {\n        this.viewModel.addViewEventHandler(eventHandler);\n    }\n    removeEventHandler(eventHandler) {\n        this.viewModel.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 *--------------------------------------------------------------------------------------------*/\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 { createFastDomNode } from '../../base/browser/fastDomNode.js';\nimport { inputLatency } from '../../base/browser/performance.js';\nimport { BugIndicatingError, onUnexpectedError } from '../../base/common/errors.js';\nimport { PointerHandlerLastRenderData } from './controller/mouseTarget.js';\nimport { PointerHandler } from './controller/pointerHandler.js';\nimport { TextAreaHandler } from './controller/textAreaHandler.js';\nimport { RenderingContext } from './view/renderingContext.js';\nimport { ViewController } from './view/viewController.js';\nimport { ContentViewOverlays, MarginViewOverlays } from './view/viewOverlays.js';\nimport { PartFingerprints } from './view/viewPart.js';\nimport { ViewUserInputEvents } from './view/viewUserInputEvents.js';\nimport { BlockDecorations } from './viewParts/blockDecorations/blockDecorations.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 { GlyphMarginWidgets } 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 { WhitespaceOverlay } from './viewParts/whitespace/whitespace.js';\nimport { Position } from '../common/core/position.js';\nimport { Range } from '../common/core/range.js';\nimport { Selection } from '../common/core/selection.js';\nimport { GlyphMarginLane } from '../common/model.js';\nimport { ViewEventHandler } from '../common/viewEventHandler.js';\nimport { ViewportData } from '../common/viewLayout/viewLinesViewportData.js';\nimport { ViewContext } from '../common/viewModel/viewContext.js';\nimport { IInstantiationService } from '../../platform/instantiation/common/instantiation.js';\nimport { getThemeTypeSelector } from '../../platform/theme/common/themeService.js';\nlet View = class View extends ViewEventHandler {\n    constructor(commandDelegate, configuration, colorTheme, model, userInputEvents, overflowWidgetsDomNode, _instantiationService) {\n        super();\n        this._instantiationService = _instantiationService;\n        // Actual mutable state\n        this._shouldRecomputeGlyphMarginLanes = false;\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, colorTheme, model);\n        // Ensure the view is the first event handler in order to update the layout\n        this._context.addEventHandler(this);\n        this._viewParts = [];\n        // Keyboard handler\n        this._textAreaHandler = this._instantiationService.createInstance(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 /* PartFingerprint.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        contentViewOverlays.addDynamicOverlay(new WhitespaceOverlay(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 MarginViewLineDecorationsOverlay(this._context));\n        marginViewOverlays.addDynamicOverlay(new LinesDecorationsOverlay(this._context));\n        marginViewOverlays.addDynamicOverlay(new LineNumbersOverlay(this._context));\n        // Glyph margin widgets\n        this._glyphMarginWidgets = new GlyphMarginWidgets(this._context);\n        this._viewParts.push(this._glyphMarginWidgets);\n        const margin = new Margin(this._context);\n        margin.getDomNode().appendChild(this._viewZones.marginDomNode);\n        margin.getDomNode().appendChild(marginViewOverlays.getDomNode());\n        margin.getDomNode().appendChild(this._glyphMarginWidgets.domNode);\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, this.domNode);\n        this._viewParts.push(this._overlayWidgets);\n        const rulers = new Rulers(this._context);\n        this._viewParts.push(rulers);\n        const blockOutline = new BlockDecorations(this._context);\n        this._viewParts.push(blockOutline);\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._overflowGuardContainer.appendChild(blockOutline.domNode);\n        this.domNode.appendChild(this._overflowGuardContainer);\n        if (overflowWidgetsDomNode) {\n            overflowWidgetsDomNode.appendChild(this._contentWidgets.overflowingContentWidgetsDomNode.domNode);\n            overflowWidgetsDomNode.appendChild(this._overlayWidgets.overflowingOverlayWidgetsDomNode.domNode);\n        }\n        else {\n            this.domNode.appendChild(this._contentWidgets.overflowingContentWidgetsDomNode);\n            this.domNode.appendChild(this._overlayWidgets.overflowingOverlayWidgetsDomNode);\n        }\n        this._applyLayout();\n        // Pointer handler\n        this._pointerHandler = this._register(new PointerHandler(this._context, viewController, this._createPointerHandlerHelper()));\n    }\n    _computeGlyphMarginLanes() {\n        const model = this._context.viewModel.model;\n        const laneModel = this._context.viewModel.glyphLanes;\n        let glyphs = [];\n        let maxLineNumber = 0;\n        // Add all margin decorations\n        glyphs = glyphs.concat(model.getAllMarginDecorations().map((decoration) => {\n            const lane = decoration.options.glyphMargin?.position ?? GlyphMarginLane.Center;\n            maxLineNumber = Math.max(maxLineNumber, decoration.range.endLineNumber);\n            return { range: decoration.range, lane, persist: decoration.options.glyphMargin?.persistLane };\n        }));\n        // Add all glyph margin widgets\n        glyphs = glyphs.concat(this._glyphMarginWidgets.getWidgets().map((widget) => {\n            const range = model.validateRange(widget.preference.range);\n            maxLineNumber = Math.max(maxLineNumber, range.endLineNumber);\n            return { range, lane: widget.preference.lane };\n        }));\n        // Sorted by their start position\n        glyphs.sort((a, b) => Range.compareRangesUsingStarts(a.range, b.range));\n        laneModel.reset(maxLineNumber);\n        for (const glyph of glyphs) {\n            laneModel.push(glyph.lane, glyph.range, glyph.persist);\n        }\n        return laneModel;\n    }\n    _createPointerHandlerHelper() {\n        return {\n            viewDomNode: this.domNode.domNode,\n            linesContentDomNode: this._linesContent.domNode,\n            viewLinesDomNode: this._viewLines.getDomNode().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            renderNow: () => {\n                this.render(true, false);\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            visibleRangeForPosition: (position) => {\n                this._flushAccumulatedAndRenderNow();\n                return this._viewLines.visibleRangeForPosition(position);\n            }\n        };\n    }\n    _applyLayout() {\n        const options = this._context.configuration.options;\n        const layoutInfo = options.get(146 /* EditorOption.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        // https://stackoverflow.com/questions/38905916/content-in-google-chrome-larger-than-16777216-px-not-being-rendered\n        this._linesContent.setWidth(16777216);\n        this._linesContent.setHeight(16777216);\n    }\n    _getEditorClassName() {\n        const focused = this._textAreaHandler.isFocused() ? ' focused' : '';\n        return this._context.configuration.options.get(143 /* EditorOption.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.domNode.setClassName(this._getEditorClassName());\n        this._applyLayout();\n        return false;\n    }\n    onCursorStateChanged(e) {\n        this._selections = e.selections;\n        return false;\n    }\n    onDecorationsChanged(e) {\n        if (e.affectsGlyphMargin) {\n            this._shouldRecomputeGlyphMarginLanes = true;\n        }\n        return false;\n    }\n    onFocusChanged(e) {\n        this.domNode.setClassName(this._getEditorClassName());\n        return false;\n    }\n    onThemeChanged(e) {\n        this._context.theme.update(e.theme);\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._store.isDisposed) {\n            throw new BugIndicatingError();\n        }\n        if (this._renderAnimationFrame === null) {\n            const rendering = this._createCoordinatedRendering();\n            this._renderAnimationFrame = EditorRenderingCoordinator.INSTANCE.scheduleCoordinatedRendering({\n                window: dom.getWindow(this.domNode?.domNode),\n                prepareRenderText: () => {\n                    if (this._store.isDisposed) {\n                        throw new BugIndicatingError();\n                    }\n                    try {\n                        return rendering.prepareRenderText();\n                    }\n                    finally {\n                        this._renderAnimationFrame = null;\n                    }\n                },\n                renderText: () => {\n                    if (this._store.isDisposed) {\n                        throw new BugIndicatingError();\n                    }\n                    return rendering.renderText();\n                },\n                prepareRender: (viewParts, ctx) => {\n                    if (this._store.isDisposed) {\n                        throw new BugIndicatingError();\n                    }\n                    return rendering.prepareRender(viewParts, ctx);\n                },\n                render: (viewParts, ctx) => {\n                    if (this._store.isDisposed) {\n                        throw new BugIndicatingError();\n                    }\n                    return rendering.render(viewParts, ctx);\n                }\n            });\n        }\n    }\n    _flushAccumulatedAndRenderNow() {\n        const rendering = this._createCoordinatedRendering();\n        safeInvokeNoArg(() => rendering.prepareRenderText());\n        const data = safeInvokeNoArg(() => rendering.renderText());\n        if (data) {\n            const [viewParts, ctx] = data;\n            safeInvokeNoArg(() => rendering.prepareRender(viewParts, ctx));\n            safeInvokeNoArg(() => rendering.render(viewParts, ctx));\n        }\n    }\n    _getViewPartsToRender() {\n        const result = [];\n        let resultLen = 0;\n        for (const viewPart of this._viewParts) {\n            if (viewPart.shouldRender()) {\n                result[resultLen++] = viewPart;\n            }\n        }\n        return result;\n    }\n    _createCoordinatedRendering() {\n        return {\n            prepareRenderText: () => {\n                if (this._shouldRecomputeGlyphMarginLanes) {\n                    this._shouldRecomputeGlyphMarginLanes = false;\n                    const model = this._computeGlyphMarginLanes();\n                    this._context.configuration.setGlyphMarginDecorationLaneCount(model.requiredLanes);\n                }\n                inputLatency.onRenderStart();\n            },\n            renderText: () => {\n                if (!this.domNode.domNode.isConnected) {\n                    return null;\n                }\n                let viewPartsToRender = this._getViewPartsToRender();\n                if (!this._viewLines.shouldRender() && viewPartsToRender.length === 0) {\n                    // Nothing to render\n                    return null;\n                }\n                const partialViewportData = this._context.viewLayout.getLinesViewportData();\n                this._context.viewModel.setViewport(partialViewportData.startLineNumber, partialViewportData.endLineNumber, partialViewportData.centeredLineNumber);\n                const viewportData = new ViewportData(this._selections, partialViewportData, this._context.viewLayout.getWhitespaceViewportData(), this._context.viewModel);\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                return [viewPartsToRender, new RenderingContext(this._context.viewLayout, viewportData, this._viewLines)];\n            },\n            prepareRender: (viewPartsToRender, ctx) => {\n                for (const viewPart of viewPartsToRender) {\n                    viewPart.prepareRender(ctx);\n                }\n            },\n            render: (viewPartsToRender, ctx) => {\n                for (const viewPart of viewPartsToRender) {\n                    viewPart.render(ctx);\n                    viewPart.onDidRender();\n                }\n            }\n        };\n    }\n    // --- BEGIN CodeEditor helpers\n    delegateVerticalScrollbarPointerDown(browserEvent) {\n        this._scrollbar.delegateVerticalScrollbarPointerDown(browserEvent);\n    }\n    delegateScrollFromMouseWheelEvent(browserEvent) {\n        this._scrollbar.delegateScrollFromMouseWheelEvent(browserEvent);\n    }\n    restoreState(scrollPosition) {\n        this._context.viewModel.viewLayout.setScrollPosition({\n            scrollTop: scrollPosition.scrollTop,\n            scrollLeft: scrollPosition.scrollLeft\n        }, 1 /* ScrollType.Immediate */);\n        this._context.viewModel.visibleLinesStabilized();\n    }\n    getOffsetForColumn(modelLineNumber, modelColumn) {\n        const modelPosition = this._context.viewModel.model.validatePosition({\n            lineNumber: modelLineNumber,\n            column: modelColumn\n        });\n        const viewPosition = this._context.viewModel.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.viewModel.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    writeScreenReaderContent(reason) {\n        this._textAreaHandler.writeScreenReaderContent(reason);\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        this._contentWidgets.setWidgetPosition(widgetData.widget, widgetData.position?.position ?? null, widgetData.position?.secondaryPosition ?? null, widgetData.position?.preference ?? null, widgetData.position?.positionAffinity ?? null);\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 shouldRender = this._overlayWidgets.setWidgetPosition(widgetData.widget, widgetData.position);\n        if (shouldRender) {\n            this._scheduleRender();\n        }\n    }\n    removeOverlayWidget(widgetData) {\n        this._overlayWidgets.removeWidget(widgetData.widget);\n        this._scheduleRender();\n    }\n    addGlyphMarginWidget(widgetData) {\n        this._glyphMarginWidgets.addWidget(widgetData.widget);\n        this._shouldRecomputeGlyphMarginLanes = true;\n        this._scheduleRender();\n    }\n    layoutGlyphMarginWidget(widgetData) {\n        const newPreference = widgetData.position;\n        const shouldRender = this._glyphMarginWidgets.setWidgetPosition(widgetData.widget, newPreference);\n        if (shouldRender) {\n            this._shouldRecomputeGlyphMarginLanes = true;\n            this._scheduleRender();\n        }\n    }\n    removeGlyphMarginWidget(widgetData) {\n        this._glyphMarginWidgets.removeWidget(widgetData.widget);\n        this._shouldRecomputeGlyphMarginLanes = true;\n        this._scheduleRender();\n    }\n};\nView = __decorate([\n    __param(6, IInstantiationService)\n], View);\nexport { View };\nfunction safeInvokeNoArg(func) {\n    try {\n        return func();\n    }\n    catch (e) {\n        onUnexpectedError(e);\n        return null;\n    }\n}\nclass EditorRenderingCoordinator {\n    static { this.INSTANCE = new EditorRenderingCoordinator(); }\n    constructor() {\n        this._coordinatedRenderings = [];\n        this._animationFrameRunners = new Map();\n    }\n    scheduleCoordinatedRendering(rendering) {\n        this._coordinatedRenderings.push(rendering);\n        this._scheduleRender(rendering.window);\n        return {\n            dispose: () => {\n                const renderingIndex = this._coordinatedRenderings.indexOf(rendering);\n                if (renderingIndex === -1) {\n                    return;\n                }\n                this._coordinatedRenderings.splice(renderingIndex, 1);\n                if (this._coordinatedRenderings.length === 0) {\n                    // There are no more renderings to coordinate => cancel animation frames\n                    for (const [_, disposable] of this._animationFrameRunners) {\n                        disposable.dispose();\n                    }\n                    this._animationFrameRunners.clear();\n                }\n            }\n        };\n    }\n    _scheduleRender(window) {\n        if (!this._animationFrameRunners.has(window)) {\n            const runner = () => {\n                this._animationFrameRunners.delete(window);\n                this._onRenderScheduled();\n            };\n            this._animationFrameRunners.set(window, dom.runAtThisOrScheduleAtNextAnimationFrame(window, runner, 100));\n        }\n    }\n    _onRenderScheduled() {\n        const coordinatedRenderings = this._coordinatedRenderings.slice(0);\n        this._coordinatedRenderings = [];\n        for (const rendering of coordinatedRenderings) {\n            safeInvokeNoArg(() => rendering.prepareRenderText());\n        }\n        const datas = [];\n        for (let i = 0, len = coordinatedRenderings.length; i < len; i++) {\n            const rendering = coordinatedRenderings[i];\n            datas[i] = safeInvokeNoArg(() => rendering.renderText());\n        }\n        for (let i = 0, len = coordinatedRenderings.length; i < len; i++) {\n            const rendering = coordinatedRenderings[i];\n            const data = datas[i];\n            if (!data) {\n                continue;\n            }\n            const [viewParts, ctx] = data;\n            safeInvokeNoArg(() => rendering.prepareRender(viewParts, ctx));\n        }\n        for (let i = 0, len = coordinatedRenderings.length; i < len; i++) {\n            const rendering = coordinatedRenderings[i];\n            const data = datas[i];\n            if (!data) {\n                continue;\n            }\n            const [viewParts, ctx] = data;\n            safeInvokeNoArg(() => rendering.render(viewParts, ctx));\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 { assertNever } from '../../base/common/assert.js';\nimport { Position } from './core/position.js';\nimport { InjectedTextCursorStops } from './model.js';\n/**\n * *input*:\n * ```\n * xxxxxxxxxxxxxxxxxxxxxxxxxxx\n * ```\n *\n * -> Applying injections `[i...i]`, *inputWithInjections*:\n * ```\n * xxxxxx[iiiiiiiiii]xxxxxxxxxxxxxxxxx[ii]xxxx\n * ```\n *\n * -> breaking at offsets `|` in `xxxxxx[iiiiiii|iii]xxxxxxxxxxx|xxxxxx[ii]xxxx|`:\n * ```\n * xxxxxx[iiiiiii\n * iii]xxxxxxxxxxx\n * xxxxxx[ii]xxxx\n * ```\n *\n * -> applying wrappedTextIndentLength, *output*:\n * ```\n * xxxxxx[iiiiiii\n *    iii]xxxxxxxxxxx\n *    xxxxxx[ii]xxxx\n * ```\n */\nexport class ModelLineProjectionData {\n    constructor(injectionOffsets, \n    /**\n     * `injectionOptions.length` must equal `injectionOffsets.length`\n     */\n    injectionOptions, \n    /**\n     * Refers to offsets after applying injections to the source.\n     * The last break offset indicates the length of the source after applying injections.\n     */\n    breakOffsets, \n    /**\n     * Refers to offsets after applying injections\n     */\n    breakOffsetsVisibleColumn, wrappedTextIndentLength) {\n        this.injectionOffsets = injectionOffsets;\n        this.injectionOptions = injectionOptions;\n        this.breakOffsets = breakOffsets;\n        this.breakOffsetsVisibleColumn = breakOffsetsVisibleColumn;\n        this.wrappedTextIndentLength = wrappedTextIndentLength;\n    }\n    getOutputLineCount() {\n        return this.breakOffsets.length;\n    }\n    getMinOutputOffset(outputLineIndex) {\n        if (outputLineIndex > 0) {\n            return this.wrappedTextIndentLength;\n        }\n        return 0;\n    }\n    getLineLength(outputLineIndex) {\n        // These offsets refer to model text with injected text.\n        const startOffset = outputLineIndex > 0 ? this.breakOffsets[outputLineIndex - 1] : 0;\n        const endOffset = this.breakOffsets[outputLineIndex];\n        let lineLength = endOffset - startOffset;\n        if (outputLineIndex > 0) {\n            lineLength += this.wrappedTextIndentLength;\n        }\n        return lineLength;\n    }\n    getMaxOutputOffset(outputLineIndex) {\n        return this.getLineLength(outputLineIndex);\n    }\n    translateToInputOffset(outputLineIndex, outputOffset) {\n        if (outputLineIndex > 0) {\n            outputOffset = Math.max(0, outputOffset - this.wrappedTextIndentLength);\n        }\n        const offsetInInputWithInjection = outputLineIndex === 0 ? outputOffset : this.breakOffsets[outputLineIndex - 1] + outputOffset;\n        let offsetInInput = offsetInInputWithInjection;\n        if (this.injectionOffsets !== null) {\n            for (let i = 0; i < this.injectionOffsets.length; i++) {\n                if (offsetInInput > this.injectionOffsets[i]) {\n                    if (offsetInInput < this.injectionOffsets[i] + this.injectionOptions[i].content.length) {\n                        // `inputOffset` is within injected text\n                        offsetInInput = this.injectionOffsets[i];\n                    }\n                    else {\n                        offsetInInput -= this.injectionOptions[i].content.length;\n                    }\n                }\n                else {\n                    break;\n                }\n            }\n        }\n        return offsetInInput;\n    }\n    translateToOutputPosition(inputOffset, affinity = 2 /* PositionAffinity.None */) {\n        let inputOffsetInInputWithInjection = inputOffset;\n        if (this.injectionOffsets !== null) {\n            for (let i = 0; i < this.injectionOffsets.length; i++) {\n                if (inputOffset < this.injectionOffsets[i]) {\n                    break;\n                }\n                if (affinity !== 1 /* PositionAffinity.Right */ && inputOffset === this.injectionOffsets[i]) {\n                    break;\n                }\n                inputOffsetInInputWithInjection += this.injectionOptions[i].content.length;\n            }\n        }\n        return this.offsetInInputWithInjectionsToOutputPosition(inputOffsetInInputWithInjection, affinity);\n    }\n    offsetInInputWithInjectionsToOutputPosition(offsetInInputWithInjections, affinity = 2 /* PositionAffinity.None */) {\n        let low = 0;\n        let high = this.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 = this.breakOffsets[mid];\n            midStart = mid > 0 ? this.breakOffsets[mid - 1] : 0;\n            if (affinity === 0 /* PositionAffinity.Left */) {\n                if (offsetInInputWithInjections <= midStart) {\n                    high = mid - 1;\n                }\n                else if (offsetInInputWithInjections > midStop) {\n                    low = mid + 1;\n                }\n                else {\n                    break;\n                }\n            }\n            else {\n                if (offsetInInputWithInjections < midStart) {\n                    high = mid - 1;\n                }\n                else if (offsetInInputWithInjections >= midStop) {\n                    low = mid + 1;\n                }\n                else {\n                    break;\n                }\n            }\n        }\n        let outputOffset = offsetInInputWithInjections - midStart;\n        if (mid > 0) {\n            outputOffset += this.wrappedTextIndentLength;\n        }\n        return new OutputPosition(mid, outputOffset);\n    }\n    normalizeOutputPosition(outputLineIndex, outputOffset, affinity) {\n        if (this.injectionOffsets !== null) {\n            const offsetInInputWithInjections = this.outputPositionToOffsetInInputWithInjections(outputLineIndex, outputOffset);\n            const normalizedOffsetInUnwrappedLine = this.normalizeOffsetInInputWithInjectionsAroundInjections(offsetInInputWithInjections, affinity);\n            if (normalizedOffsetInUnwrappedLine !== offsetInInputWithInjections) {\n                // injected text caused a change\n                return this.offsetInInputWithInjectionsToOutputPosition(normalizedOffsetInUnwrappedLine, affinity);\n            }\n        }\n        if (affinity === 0 /* PositionAffinity.Left */) {\n            if (outputLineIndex > 0 && outputOffset === this.getMinOutputOffset(outputLineIndex)) {\n                return new OutputPosition(outputLineIndex - 1, this.getMaxOutputOffset(outputLineIndex - 1));\n            }\n        }\n        else if (affinity === 1 /* PositionAffinity.Right */) {\n            const maxOutputLineIndex = this.getOutputLineCount() - 1;\n            if (outputLineIndex < maxOutputLineIndex && outputOffset === this.getMaxOutputOffset(outputLineIndex)) {\n                return new OutputPosition(outputLineIndex + 1, this.getMinOutputOffset(outputLineIndex + 1));\n            }\n        }\n        return new OutputPosition(outputLineIndex, outputOffset);\n    }\n    outputPositionToOffsetInInputWithInjections(outputLineIndex, outputOffset) {\n        if (outputLineIndex > 0) {\n            outputOffset = Math.max(0, outputOffset - this.wrappedTextIndentLength);\n        }\n        const result = (outputLineIndex > 0 ? this.breakOffsets[outputLineIndex - 1] : 0) + outputOffset;\n        return result;\n    }\n    normalizeOffsetInInputWithInjectionsAroundInjections(offsetInInputWithInjections, affinity) {\n        const injectedText = this.getInjectedTextAtOffset(offsetInInputWithInjections);\n        if (!injectedText) {\n            return offsetInInputWithInjections;\n        }\n        if (affinity === 2 /* PositionAffinity.None */) {\n            if (offsetInInputWithInjections === injectedText.offsetInInputWithInjections + injectedText.length\n                && hasRightCursorStop(this.injectionOptions[injectedText.injectedTextIndex].cursorStops)) {\n                return injectedText.offsetInInputWithInjections + injectedText.length;\n            }\n            else {\n                let result = injectedText.offsetInInputWithInjections;\n                if (hasLeftCursorStop(this.injectionOptions[injectedText.injectedTextIndex].cursorStops)) {\n                    return result;\n                }\n                let index = injectedText.injectedTextIndex - 1;\n                while (index >= 0 && this.injectionOffsets[index] === this.injectionOffsets[injectedText.injectedTextIndex]) {\n                    if (hasRightCursorStop(this.injectionOptions[index].cursorStops)) {\n                        break;\n                    }\n                    result -= this.injectionOptions[index].content.length;\n                    if (hasLeftCursorStop(this.injectionOptions[index].cursorStops)) {\n                        break;\n                    }\n                    index--;\n                }\n                return result;\n            }\n        }\n        else if (affinity === 1 /* PositionAffinity.Right */ || affinity === 4 /* PositionAffinity.RightOfInjectedText */) {\n            let result = injectedText.offsetInInputWithInjections + injectedText.length;\n            let index = injectedText.injectedTextIndex;\n            // traverse all injected text that touch each other\n            while (index + 1 < this.injectionOffsets.length && this.injectionOffsets[index + 1] === this.injectionOffsets[index]) {\n                result += this.injectionOptions[index + 1].content.length;\n                index++;\n            }\n            return result;\n        }\n        else if (affinity === 0 /* PositionAffinity.Left */ || affinity === 3 /* PositionAffinity.LeftOfInjectedText */) {\n            // affinity is left\n            let result = injectedText.offsetInInputWithInjections;\n            let index = injectedText.injectedTextIndex;\n            // traverse all injected text that touch each other\n            while (index - 1 >= 0 && this.injectionOffsets[index - 1] === this.injectionOffsets[index]) {\n                result -= this.injectionOptions[index - 1].content.length;\n                index--;\n            }\n            return result;\n        }\n        assertNever(affinity);\n    }\n    getInjectedText(outputLineIndex, outputOffset) {\n        const offset = this.outputPositionToOffsetInInputWithInjections(outputLineIndex, outputOffset);\n        const injectedText = this.getInjectedTextAtOffset(offset);\n        if (!injectedText) {\n            return null;\n        }\n        return {\n            options: this.injectionOptions[injectedText.injectedTextIndex]\n        };\n    }\n    getInjectedTextAtOffset(offsetInInputWithInjections) {\n        const injectionOffsets = this.injectionOffsets;\n        const injectionOptions = this.injectionOptions;\n        if (injectionOffsets !== null) {\n            let totalInjectedTextLengthBefore = 0;\n            for (let i = 0; i < injectionOffsets.length; i++) {\n                const length = injectionOptions[i].content.length;\n                const injectedTextStartOffsetInInputWithInjections = injectionOffsets[i] + totalInjectedTextLengthBefore;\n                const injectedTextEndOffsetInInputWithInjections = injectionOffsets[i] + totalInjectedTextLengthBefore + length;\n                if (injectedTextStartOffsetInInputWithInjections > offsetInInputWithInjections) {\n                    // Injected text starts later.\n                    break; // All later injected texts have an even larger offset.\n                }\n                if (offsetInInputWithInjections <= injectedTextEndOffsetInInputWithInjections) {\n                    // Injected text ends after or with the given position (but also starts with or before it).\n                    return {\n                        injectedTextIndex: i,\n                        offsetInInputWithInjections: injectedTextStartOffsetInInputWithInjections,\n                        length\n                    };\n                }\n                totalInjectedTextLengthBefore += length;\n            }\n        }\n        return undefined;\n    }\n}\nfunction hasRightCursorStop(cursorStop) {\n    if (cursorStop === null || cursorStop === undefined) {\n        return true;\n    }\n    return cursorStop === InjectedTextCursorStops.Right || cursorStop === InjectedTextCursorStops.Both;\n}\nfunction hasLeftCursorStop(cursorStop) {\n    if (cursorStop === null || cursorStop === undefined) {\n        return true;\n    }\n    return cursorStop === InjectedTextCursorStops.Left || cursorStop === InjectedTextCursorStops.Both;\n}\nexport class InjectedText {\n    constructor(options) {\n        this.options = options;\n    }\n}\nexport class OutputPosition {\n    constructor(outputLineIndex, outputOffset) {\n        this.outputLineIndex = outputLineIndex;\n        this.outputOffset = outputOffset;\n    }\n    toString() {\n        return `${this.outputLineIndex}:${this.outputOffset}`;\n    }\n    toPosition(baseLineNumber) {\n        return new Position(baseLineNumber + this.outputLineIndex, this.outputOffset + 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 { createTrustedTypesPolicy } from '../../../base/browser/trustedTypes.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { assertIsDefined } from '../../../base/common/types.js';\nimport { applyFontInfo } from '../config/domFontInfo.js';\nimport { StringBuilder } from '../../common/core/stringBuilder.js';\nimport { ModelLineProjectionData } from '../../common/modelLineProjectionData.js';\nimport { LineInjectedText } from '../../common/textModelEvents.js';\nconst ttPolicy = createTrustedTypesPolicy('domLineBreaksComputer', { createHTML: value => value });\nexport class DOMLineBreaksComputerFactory {\n    static create(targetWindow) {\n        return new DOMLineBreaksComputerFactory(new WeakRef(targetWindow));\n    }\n    constructor(targetWindow) {\n        this.targetWindow = targetWindow;\n    }\n    createLineBreaksComputer(fontInfo, tabSize, wrappingColumn, wrappingIndent, wordBreak) {\n        const requests = [];\n        const injectedTexts = [];\n        return {\n            addRequest: (lineText, injectedText, previousLineBreakData) => {\n                requests.push(lineText);\n                injectedTexts.push(injectedText);\n            },\n            finalize: () => {\n                return createLineBreaks(assertIsDefined(this.targetWindow.deref()), requests, fontInfo, tabSize, wrappingColumn, wrappingIndent, wordBreak, injectedTexts);\n            }\n        };\n    }\n}\nfunction createLineBreaks(targetWindow, requests, fontInfo, tabSize, firstLineBreakColumn, wrappingIndent, wordBreak, injectedTextsPerLine) {\n    function createEmptyLineBreakWithPossiblyInjectedText(requestIdx) {\n        const injectedTexts = injectedTextsPerLine[requestIdx];\n        if (injectedTexts) {\n            const lineText = LineInjectedText.applyInjectedText(requests[requestIdx], injectedTexts);\n            const injectionOptions = injectedTexts.map(t => t.options);\n            const injectionOffsets = injectedTexts.map(text => text.column - 1);\n            // creating a `LineBreakData` with an invalid `breakOffsetsVisibleColumn` is OK\n            // because `breakOffsetsVisibleColumn` will never be used because it contains injected text\n            return new ModelLineProjectionData(injectionOffsets, injectionOptions, [lineText.length], [], 0);\n        }\n        else {\n            return null;\n        }\n    }\n    if (firstLineBreakColumn === -1) {\n        const result = [];\n        for (let i = 0, len = requests.length; i < len; i++) {\n            result[i] = createEmptyLineBreakWithPossiblyInjectedText(i);\n        }\n        return result;\n    }\n    const overallWidth = Math.round(firstLineBreakColumn * fontInfo.typicalHalfwidthCharacterWidth);\n    const additionalIndent = (wrappingIndent === 3 /* WrappingIndent.DeepIndent */ ? 2 : wrappingIndent === 2 /* WrappingIndent.Indent */ ? 1 : 0);\n    const additionalIndentSize = Math.round(tabSize * additionalIndent);\n    const additionalIndentLength = Math.ceil(fontInfo.spaceWidth * additionalIndentSize);\n    const containerDomNode = document.createElement('div');\n    applyFontInfo(containerDomNode, fontInfo);\n    const sb = new StringBuilder(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 = LineInjectedText.applyInjectedText(requests[i], injectedTextsPerLine[i]);\n        let firstNonWhitespaceIndex = 0;\n        let wrappedTextIndentLength = 0;\n        let width = overallWidth;\n        if (wrappingIndent !== 0 /* WrappingIndent.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 /* CharCode.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, additionalIndentLength);\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 = ttPolicy?.createHTML(html) ?? html;\n    containerDomNode.innerHTML = trustedhtml;\n    containerDomNode.style.position = 'absolute';\n    containerDomNode.style.top = '10000';\n    if (wordBreak === 'keepAll') {\n        // word-break: keep-all; overflow-wrap: anywhere\n        containerDomNode.style.wordBreak = 'keep-all';\n        containerDomNode.style.overflowWrap = 'anywhere';\n    }\n    else {\n        // overflow-wrap: break-word\n        containerDomNode.style.wordBreak = 'inherit';\n        containerDomNode.style.overflowWrap = 'break-word';\n    }\n    targetWindow.document.body.appendChild(containerDomNode);\n    const range = document.createRange();\n    const lineDomNodes = Array.prototype.slice.call(containerDomNode.children, 0);\n    const 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] = createEmptyLineBreakWithPossiblyInjectedText(i);\n            continue;\n        }\n        const firstNonWhitespaceIndex = firstNonWhitespaceIndices[i];\n        const wrappedTextIndentLength = wrappedTextIndentLengths[i] + additionalIndentSize;\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        let injectionOptions;\n        let injectionOffsets;\n        const curInjectedTexts = injectedTextsPerLine[i];\n        if (curInjectedTexts) {\n            injectionOptions = curInjectedTexts.map(t => t.options);\n            injectionOffsets = curInjectedTexts.map(text => text.column - 1);\n        }\n        else {\n            injectionOptions = null;\n            injectionOffsets = null;\n        }\n        result[i] = new ModelLineProjectionData(injectionOffsets, injectionOptions, breakOffsets, breakOffsetsVisibleColumn, wrappedTextIndentLength);\n    }\n    containerDomNode.remove();\n    return result;\n}\nfunction renderLine(lineContent, initialVisibleColumn, tabSize, width, sb, wrappingIndentLength) {\n    if (wrappingIndentLength !== 0) {\n        const hangingOffset = String(wrappingIndentLength);\n        sb.appendString('<div style=\"text-indent: -');\n        sb.appendString(hangingOffset);\n        sb.appendString('px; padding-left: ');\n        sb.appendString(hangingOffset);\n        sb.appendString('px; box-sizing: border-box; width:');\n    }\n    else {\n        sb.appendString('<div style=\"width:');\n    }\n    sb.appendString(String(width));\n    sb.appendString('px;\">');\n    // if (containsRTL) {\n    // \tsb.appendASCIIString('\" dir=\"ltr');\n    // }\n    const len = lineContent.length;\n    let visibleColumn = initialVisibleColumn;\n    let charOffset = 0;\n    const charOffsets = [];\n    const visibleColumns = [];\n    let nextCharCode = (0 < len ? lineContent.charCodeAt(0) : 0 /* CharCode.Null */);\n    sb.appendString('<span>');\n    for (let charIndex = 0; charIndex < len; charIndex++) {\n        if (charIndex !== 0 && charIndex % 16384 /* Constants.SPAN_MODULO_LIMIT */ === 0) {\n            sb.appendString('</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 /* CharCode.Null */);\n        let producedCharacters = 1;\n        let charWidth = 1;\n        switch (charCode) {\n            case 9 /* CharCode.Tab */:\n                producedCharacters = (tabSize - (visibleColumn % tabSize));\n                charWidth = producedCharacters;\n                for (let space = 1; space <= producedCharacters; space++) {\n                    if (space < producedCharacters) {\n                        sb.appendCharCode(0xA0); // &nbsp;\n                    }\n                    else {\n                        sb.appendASCIICharCode(32 /* CharCode.Space */);\n                    }\n                }\n                break;\n            case 32 /* CharCode.Space */:\n                if (nextCharCode === 32 /* CharCode.Space */) {\n                    sb.appendCharCode(0xA0); // &nbsp;\n                }\n                else {\n                    sb.appendASCIICharCode(32 /* CharCode.Space */);\n                }\n                break;\n            case 60 /* CharCode.LessThan */:\n                sb.appendString('&lt;');\n                break;\n            case 62 /* CharCode.GreaterThan */:\n                sb.appendString('&gt;');\n                break;\n            case 38 /* CharCode.Ampersand */:\n                sb.appendString('&amp;');\n                break;\n            case 0 /* CharCode.Null */:\n                sb.appendString('&#00;');\n                break;\n            case 65279 /* CharCode.UTF8_BOM */:\n            case 8232 /* CharCode.LINE_SEPARATOR */:\n            case 8233 /* CharCode.PARAGRAPH_SEPARATOR */:\n            case 133 /* CharCode.NEXT_LINE */:\n                sb.appendCharCode(0xFFFD);\n                break;\n            default:\n                if (strings.isFullWidthCharacter(charCode)) {\n                    charWidth++;\n                }\n                if (charCode < 32) {\n                    sb.appendCharCode(9216 + charCode);\n                }\n                else {\n                    sb.appendCharCode(charCode);\n                }\n        }\n        charOffset += producedCharacters;\n        visibleColumn += charWidth;\n    }\n    sb.appendString('</span>');\n    charOffsets[lineContent.length] = charOffset;\n    visibleColumns[lineContent.length] = visibleColumn;\n    sb.appendString('</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 /* Constants.SPAN_MODULO_LIMIT */) | 0].firstChild, startOffset % 16384 /* Constants.SPAN_MODULO_LIMIT */);\n    range.setEnd(spans[(endOffset / 16384 /* Constants.SPAN_MODULO_LIMIT */) | 0].firstChild, endOffset % 16384 /* Constants.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 *--------------------------------------------------------------------------------------------*/\nimport { getWindow, runWhenWindowIdle } from '../../../../base/browser/dom.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { Disposable, DisposableMap } from '../../../../base/common/lifecycle.js';\nexport class CodeEditorContributions extends Disposable {\n    constructor() {\n        super();\n        this._editor = null;\n        this._instantiationService = null;\n        /**\n         * Contains all instantiated contributions.\n         */\n        this._instances = this._register(new DisposableMap());\n        /**\n         * Contains contributions which are not yet instantiated.\n         */\n        this._pending = new Map();\n        /**\n         * Tracks which instantiation kinds are still left in `_pending`.\n         */\n        this._finishedInstantiation = [];\n        this._finishedInstantiation[0 /* EditorContributionInstantiation.Eager */] = false;\n        this._finishedInstantiation[1 /* EditorContributionInstantiation.AfterFirstRender */] = false;\n        this._finishedInstantiation[2 /* EditorContributionInstantiation.BeforeFirstInteraction */] = false;\n        this._finishedInstantiation[3 /* EditorContributionInstantiation.Eventually */] = false;\n    }\n    initialize(editor, contributions, instantiationService) {\n        this._editor = editor;\n        this._instantiationService = instantiationService;\n        for (const desc of contributions) {\n            if (this._pending.has(desc.id)) {\n                onUnexpectedError(new Error(`Cannot have two contributions with the same id ${desc.id}`));\n                continue;\n            }\n            this._pending.set(desc.id, desc);\n        }\n        this._instantiateSome(0 /* EditorContributionInstantiation.Eager */);\n        // AfterFirstRender\n        // - these extensions will be instantiated at the latest 50ms after the first render.\n        // - but if there is idle time, we will instantiate them sooner.\n        this._register(runWhenWindowIdle(getWindow(this._editor.getDomNode()), () => {\n            this._instantiateSome(1 /* EditorContributionInstantiation.AfterFirstRender */);\n        }));\n        // BeforeFirstInteraction\n        // - these extensions will be instantiated at the latest before a mouse or a keyboard event.\n        // - but if there is idle time, we will instantiate them sooner.\n        this._register(runWhenWindowIdle(getWindow(this._editor.getDomNode()), () => {\n            this._instantiateSome(2 /* EditorContributionInstantiation.BeforeFirstInteraction */);\n        }));\n        // Eventually\n        // - these extensions will only be instantiated when there is idle time.\n        // - since there is no guarantee that there will ever be idle time, we set a timeout of 5s here.\n        this._register(runWhenWindowIdle(getWindow(this._editor.getDomNode()), () => {\n            this._instantiateSome(3 /* EditorContributionInstantiation.Eventually */);\n        }, 5000));\n    }\n    saveViewState() {\n        const contributionsState = {};\n        for (const [id, contribution] of this._instances) {\n            if (typeof contribution.saveViewState === 'function') {\n                contributionsState[id] = contribution.saveViewState();\n            }\n        }\n        return contributionsState;\n    }\n    restoreViewState(contributionsState) {\n        for (const [id, contribution] of this._instances) {\n            if (typeof contribution.restoreViewState === 'function') {\n                contribution.restoreViewState(contributionsState[id]);\n            }\n        }\n    }\n    get(id) {\n        this._instantiateById(id);\n        return this._instances.get(id) || null;\n    }\n    onBeforeInteractionEvent() {\n        // this method is called very often by the editor!\n        this._instantiateSome(2 /* EditorContributionInstantiation.BeforeFirstInteraction */);\n    }\n    onAfterModelAttached() {\n        return runWhenWindowIdle(getWindow(this._editor?.getDomNode()), () => {\n            this._instantiateSome(1 /* EditorContributionInstantiation.AfterFirstRender */);\n        }, 50);\n    }\n    _instantiateSome(instantiation) {\n        if (this._finishedInstantiation[instantiation]) {\n            // already done with this instantiation!\n            return;\n        }\n        this._finishedInstantiation[instantiation] = true;\n        const contribs = this._findPendingContributionsByInstantiation(instantiation);\n        for (const contrib of contribs) {\n            this._instantiateById(contrib.id);\n        }\n    }\n    _findPendingContributionsByInstantiation(instantiation) {\n        const result = [];\n        for (const [, desc] of this._pending) {\n            if (desc.instantiation === instantiation) {\n                result.push(desc);\n            }\n        }\n        return result;\n    }\n    _instantiateById(id) {\n        const desc = this._pending.get(id);\n        if (!desc) {\n            return;\n        }\n        this._pending.delete(id);\n        if (!this._instantiationService || !this._editor) {\n            throw new Error(`Cannot instantiate contributions before being initialized!`);\n        }\n        try {\n            const instance = this._instantiationService.createInstance(desc.ctor, this._editor);\n            this._instances.set(desc.id, instance);\n            if (typeof instance.restoreViewState === 'function' && desc.instantiation !== 0 /* EditorContributionInstantiation.Eager */) {\n                console.warn(`Editor contribution '${desc.id}' should be eager instantiated because it uses saveViewState / restoreViewState.`);\n            }\n        }\n        catch (err) {\n            onUnexpectedError(err);\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 InternalEditorAction {\n    constructor(id, label, alias, metadata, _precondition, _run, _contextKeyService) {\n        this.id = id;\n        this.label = label;\n        this.alias = alias;\n        this.metadata = metadata;\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(args) {\n        if (!this.isSupported()) {\n            return Promise.resolve(undefined);\n        }\n        return this._run(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 * as strings from '../../../base/common/strings.js';\nimport { CharacterClassifier } from '../core/characterClassifier.js';\nimport { LineInjectedText } from '../textModelEvents.js';\nimport { ModelLineProjectionData } from '../modelLineProjectionData.js';\nexport class MonospaceLineBreaksComputerFactory {\n    static create(options) {\n        return new MonospaceLineBreaksComputerFactory(options.get(135 /* EditorOption.wordWrapBreakBeforeCharacters */), options.get(134 /* EditorOption.wordWrapBreakAfterCharacters */));\n    }\n    constructor(breakBeforeChars, breakAfterChars) {\n        this.classifier = new WrappingCharacterClassifier(breakBeforeChars, breakAfterChars);\n    }\n    createLineBreaksComputer(fontInfo, tabSize, wrappingColumn, wrappingIndent, wordBreak) {\n        const requests = [];\n        const injectedTexts = [];\n        const previousBreakingData = [];\n        return {\n            addRequest: (lineText, injectedText, previousLineBreakData) => {\n                requests.push(lineText);\n                injectedTexts.push(injectedText);\n                previousBreakingData.push(previousLineBreakData);\n            },\n            finalize: () => {\n                const columnsForFullWidthChar = fontInfo.typicalFullwidthCharacterWidth / fontInfo.typicalHalfwidthCharacterWidth;\n                const result = [];\n                for (let i = 0, len = requests.length; i < len; i++) {\n                    const injectedText = injectedTexts[i];\n                    const previousLineBreakData = previousBreakingData[i];\n                    if (previousLineBreakData && !previousLineBreakData.injectionOptions && !injectedText) {\n                        result[i] = createLineBreaksFromPreviousLineBreaks(this.classifier, previousLineBreakData, requests[i], tabSize, wrappingColumn, columnsForFullWidthChar, wrappingIndent, wordBreak);\n                    }\n                    else {\n                        result[i] = createLineBreaks(this.classifier, requests[i], injectedText, tabSize, wrappingColumn, columnsForFullWidthChar, wrappingIndent, wordBreak);\n                    }\n                }\n                arrPool1.length = 0;\n                arrPool2.length = 0;\n                return result;\n            }\n        };\n    }\n}\nclass WrappingCharacterClassifier extends CharacterClassifier {\n    constructor(BREAK_BEFORE, BREAK_AFTER) {\n        super(0 /* CharacterClass.NONE */);\n        for (let i = 0; i < BREAK_BEFORE.length; i++) {\n            this.set(BREAK_BEFORE.charCodeAt(i), 1 /* CharacterClass.BREAK_BEFORE */);\n        }\n        for (let i = 0; i < BREAK_AFTER.length; i++) {\n            this.set(BREAK_AFTER.charCodeAt(i), 2 /* CharacterClass.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 /* CharacterClass.BREAK_IDEOGRAPHIC */;\n            }\n            return (this._map.get(charCode) || this._defaultValue);\n        }\n    }\n}\nlet arrPool1 = [];\nlet arrPool2 = [];\nfunction createLineBreaksFromPreviousLineBreaks(classifier, previousBreakingData, lineText, tabSize, firstLineBreakColumn, columnsForFullWidthChar, wrappingIndent, wordBreak) {\n    if (firstLineBreakColumn === -1) {\n        return null;\n    }\n    const len = lineText.length;\n    if (len <= 1) {\n        return null;\n    }\n    const isKeepAll = (wordBreak === 'keepAll');\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    const breakingOffsets = arrPool1;\n    const 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 /* CharCode.Null */ : lineText.charCodeAt(prevBreakOffset - 1);\n            let prevCharCodeClass = prevBreakOffset === 0 ? 0 /* CharacterClass.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 /* CharacterClass.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, isKeepAll)) {\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 /* CharCode.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 /* CharacterClass.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, isKeepAll)) {\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, injectedTexts, tabSize, firstLineBreakColumn, columnsForFullWidthChar, wrappingIndent, wordBreak) {\n    const lineText = LineInjectedText.applyInjectedText(_lineText, injectedTexts);\n    let injectionOptions;\n    let injectionOffsets;\n    if (injectedTexts && injectedTexts.length > 0) {\n        injectionOptions = injectedTexts.map(t => t.options);\n        injectionOffsets = injectedTexts.map(text => text.column - 1);\n    }\n    else {\n        injectionOptions = null;\n        injectionOffsets = null;\n    }\n    if (firstLineBreakColumn === -1) {\n        if (!injectionOptions) {\n            return null;\n        }\n        // creating a `LineBreakData` with an invalid `breakOffsetsVisibleColumn` is OK\n        // because `breakOffsetsVisibleColumn` will never be used because it contains injected text\n        return new ModelLineProjectionData(injectionOffsets, injectionOptions, [lineText.length], [], 0);\n    }\n    const len = lineText.length;\n    if (len <= 1) {\n        if (!injectionOptions) {\n            return null;\n        }\n        // creating a `LineBreakData` with an invalid `breakOffsetsVisibleColumn` is OK\n        // because `breakOffsetsVisibleColumn` will never be used because it contains injected text\n        return new ModelLineProjectionData(injectionOffsets, injectionOptions, [lineText.length], [], 0);\n    }\n    const isKeepAll = (wordBreak === 'keepAll');\n    const wrappedTextIndentLength = computeWrappedTextIndentLength(lineText, tabSize, firstLineBreakColumn, columnsForFullWidthChar, wrappingIndent);\n    const wrappedLineBreakColumn = firstLineBreakColumn - wrappedTextIndentLength;\n    const breakingOffsets = [];\n    const 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 /* CharacterClass.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, isKeepAll)) {\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 && (!injectedTexts || injectedTexts.length === 0)) {\n        return null;\n    }\n    // Add last segment\n    breakingOffsets[breakingOffsetsCount] = len;\n    breakingOffsetsVisibleColumn[breakingOffsetsCount] = visibleColumn;\n    return new ModelLineProjectionData(injectionOffsets, injectionOptions, breakingOffsets, breakingOffsetsVisibleColumn, wrappedTextIndentLength);\n}\nfunction computeCharWidth(charCode, visibleColumn, tabSize, columnsForFullWidthChar) {\n    if (charCode === 9 /* CharCode.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, isKeepAll) {\n    return (charCode !== 32 /* CharCode.Space */\n        && ((prevCharCodeClass === 2 /* CharacterClass.BREAK_AFTER */ && charCodeClass !== 2 /* CharacterClass.BREAK_AFTER */) // break at the end of multiple BREAK_AFTER\n            || (prevCharCodeClass !== 1 /* CharacterClass.BREAK_BEFORE */ && charCodeClass === 1 /* CharacterClass.BREAK_BEFORE */) // break at the start of multiple BREAK_BEFORE\n            || (!isKeepAll && prevCharCodeClass === 3 /* CharacterClass.BREAK_IDEOGRAPHIC */ && charCodeClass !== 2 /* CharacterClass.BREAK_AFTER */)\n            || (!isKeepAll && charCodeClass === 3 /* CharacterClass.BREAK_IDEOGRAPHIC */ && prevCharCodeClass !== 1 /* CharacterClass.BREAK_BEFORE */)));\n}\nfunction computeWrappedTextIndentLength(lineText, tabSize, firstLineBreakColumn, columnsForFullWidthChar, wrappingIndent) {\n    let wrappedTextIndentLength = 0;\n    if (wrappingIndent !== 0 /* WrappingIndent.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 /* CharCode.Tab */ ? tabCharacterWidth(wrappedTextIndentLength, tabSize) : 1);\n                wrappedTextIndentLength += charWidth;\n            }\n            // Increase indent of continuation lines, if desired\n            const numberOfAdditionalTabs = (wrappingIndent === 3 /* WrappingIndent.DeepIndent */ ? 2 : wrappingIndent === 2 /* WrappingIndent.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 *--------------------------------------------------------------------------------------------*/\nimport { CursorState, SingleCursorState } from '../cursorCommon.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\n/**\n * Represents a single cursor.\n*/\nexport class Cursor {\n    constructor(context) {\n        this._selTrackedRange = null;\n        this._trackSelection = true;\n        this._setState(context, new SingleCursorState(new Range(1, 1, 1, 1), 0 /* SelectionStartKind.Simple */, 0, new Position(1, 1), 0), new SingleCursorState(new Range(1, 1, 1, 1), 0 /* SelectionStartKind.Simple */, 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 /* TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges */);\n    }\n    _removeTrackedRange(context) {\n        this._selTrackedRange = context.model._setTrackedRange(this._selTrackedRange, null, 0 /* TrackedRangeStickiness.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.isEmpty() && !range.isEmpty()) {\n            // Avoid selecting text when recovering from markers\n            return Selection.fromRange(range.collapseToEnd(), this.modelState.selection.getDirection());\n        }\n        return Selection.fromRange(range, this.modelState.selection.getDirection());\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    static _validatePositionWithCache(viewModel, position, cacheInput, cacheOutput) {\n        if (position.equals(cacheInput)) {\n            return cacheOutput;\n        }\n        return viewModel.normalizePosition(position, 2 /* PositionAffinity.None */);\n    }\n    static _validateViewState(viewModel, viewState) {\n        const position = viewState.position;\n        const sStartPosition = viewState.selectionStart.getStartPosition();\n        const sEndPosition = viewState.selectionStart.getEndPosition();\n        const validPosition = viewModel.normalizePosition(position, 2 /* PositionAffinity.None */);\n        const validSStartPosition = this._validatePositionWithCache(viewModel, sStartPosition, position, validPosition);\n        const validSEndPosition = this._validatePositionWithCache(viewModel, sEndPosition, sStartPosition, validSStartPosition);\n        if (position.equals(validPosition) && sStartPosition.equals(validSStartPosition) && sEndPosition.equals(validSEndPosition)) {\n            // fast path: the state is valid\n            return viewState;\n        }\n        return new SingleCursorState(Range.fromPositions(validSStartPosition, validSEndPosition), viewState.selectionStartKind, viewState.selectionStartLeftoverVisibleColumns + sStartPosition.column - validSStartPosition.column, validPosition, viewState.leftoverVisibleColumns + position.column - validPosition.column);\n    }\n    _setState(context, modelState, viewState) {\n        if (viewState) {\n            viewState = Cursor._validateViewState(context.viewModel, viewState);\n        }\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.selectionStartKind, 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, modelState.selectionStartKind, 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.selectionStartKind, 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.selectionStartKind, 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 { compareBy } from '../../../base/common/arrays.js';\nimport { findLastMax, findFirstMin } from '../../../base/common/arraysFind.js';\nimport { CursorState } from '../cursorCommon.js';\nimport { Cursor } from './oneCursor.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nexport class CursorCollection {\n    constructor(context) {\n        this.context = context;\n        this.cursors = [new Cursor(context)];\n        this.lastAddedCursorIndex = 0;\n    }\n    dispose() {\n        for (const cursor of this.cursors) {\n            cursor.dispose(this.context);\n        }\n    }\n    startTrackingSelections() {\n        for (const cursor of this.cursors) {\n            cursor.startTrackingSelection(this.context);\n        }\n    }\n    stopTrackingSelections() {\n        for (const cursor of this.cursors) {\n            cursor.stopTrackingSelection(this.context);\n        }\n    }\n    updateContext(context) {\n        this.context = context;\n    }\n    ensureValidState() {\n        for (const cursor of this.cursors) {\n            cursor.ensureValidState(this.context);\n        }\n    }\n    readSelectionFromMarkers() {\n        return this.cursors.map(c => c.readSelectionFromMarkers(this.context));\n    }\n    getAll() {\n        return this.cursors.map(c => c.asCursorState());\n    }\n    getViewPositions() {\n        return this.cursors.map(c => c.viewState.position);\n    }\n    getTopMostViewPosition() {\n        return findFirstMin(this.cursors, compareBy(c => c.viewState.position, Position.compare)).viewState.position;\n    }\n    getBottomMostViewPosition() {\n        return findLastMax(this.cursors, compareBy(c => c.viewState.position, Position.compare)).viewState.position;\n    }\n    getSelections() {\n        return this.cursors.map(c => c.modelState.selection);\n    }\n    getViewSelections() {\n        return this.cursors.map(c => c.viewState.selection);\n    }\n    setSelections(selections) {\n        this.setStates(CursorState.fromModelSelections(selections));\n    }\n    getPrimaryCursor() {\n        return this.cursors[0].asCursorState();\n    }\n    setStates(states) {\n        if (states === null) {\n            return;\n        }\n        this.cursors[0].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.cursors.length - 1;\n        const secondaryStatesLength = secondaryStates.length;\n        if (secondaryCursorsLength < secondaryStatesLength) {\n            const createCnt = secondaryStatesLength - secondaryCursorsLength;\n            for (let i = 0; i < createCnt; i++) {\n                this._addSecondaryCursor();\n            }\n        }\n        else if (secondaryCursorsLength > secondaryStatesLength) {\n            const removeCnt = secondaryCursorsLength - secondaryStatesLength;\n            for (let i = 0; i < removeCnt; i++) {\n                this._removeSecondaryCursor(this.cursors.length - 2);\n            }\n        }\n        for (let i = 0; i < secondaryStatesLength; i++) {\n            this.cursors[i + 1].setState(this.context, secondaryStates[i].modelState, secondaryStates[i].viewState);\n        }\n    }\n    killSecondaryCursors() {\n        this._setSecondaryStates([]);\n    }\n    _addSecondaryCursor() {\n        this.cursors.push(new Cursor(this.context));\n        this.lastAddedCursorIndex = this.cursors.length - 1;\n    }\n    getLastAddedCursorIndex() {\n        if (this.cursors.length === 1 || 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.cursors[removeIndex + 1].dispose(this.context);\n        this.cursors.splice(removeIndex + 1, 1);\n    }\n    normalize() {\n        if (this.cursors.length === 1) {\n            return;\n        }\n        const cursors = this.cursors.slice(0);\n        const 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(compareBy(s => s.selection, Range.compareRangesUsingStarts));\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 CursorContext {\n    constructor(model, viewModel, coordinatesConverter, cursorConfig) {\n        this._cursorContextBrand = undefined;\n        this.model = model;\n        this.viewModel = viewModel;\n        this.coordinatesConverter = coordinatesConverter;\n        this.cursorConfig = cursorConfig;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 /* ViewEventType.ViewCompositionStart */;\n    }\n}\nexport class ViewCompositionEndEvent {\n    constructor() {\n        this.type = 1 /* ViewEventType.ViewCompositionEnd */;\n    }\n}\nexport class ViewConfigurationChangedEvent {\n    constructor(source) {\n        this.type = 2 /* ViewEventType.ViewConfigurationChanged */;\n        this._source = source;\n    }\n    hasChanged(id) {\n        return this._source.hasChanged(id);\n    }\n}\nexport class ViewCursorStateChangedEvent {\n    constructor(selections, modelSelections, reason) {\n        this.selections = selections;\n        this.modelSelections = modelSelections;\n        this.reason = reason;\n        this.type = 3 /* ViewEventType.ViewCursorStateChanged */;\n    }\n}\nexport class ViewDecorationsChangedEvent {\n    constructor(source) {\n        this.type = 4 /* ViewEventType.ViewDecorationsChanged */;\n        if (source) {\n            this.affectsMinimap = source.affectsMinimap;\n            this.affectsOverviewRuler = source.affectsOverviewRuler;\n            this.affectsGlyphMargin = source.affectsGlyphMargin;\n            this.affectsLineNumber = source.affectsLineNumber;\n        }\n        else {\n            this.affectsMinimap = true;\n            this.affectsOverviewRuler = true;\n            this.affectsGlyphMargin = true;\n            this.affectsLineNumber = true;\n        }\n    }\n}\nexport class ViewFlushedEvent {\n    constructor() {\n        this.type = 5 /* ViewEventType.ViewFlushed */;\n        // Nothing to do\n    }\n}\nexport class ViewFocusChangedEvent {\n    constructor(isFocused) {\n        this.type = 6 /* ViewEventType.ViewFocusChanged */;\n        this.isFocused = isFocused;\n    }\n}\nexport class ViewLanguageConfigurationEvent {\n    constructor() {\n        this.type = 7 /* ViewEventType.ViewLanguageConfigurationChanged */;\n    }\n}\nexport class ViewLineMappingChangedEvent {\n    constructor() {\n        this.type = 8 /* ViewEventType.ViewLineMappingChanged */;\n        // Nothing to do\n    }\n}\nexport class ViewLinesChangedEvent {\n    constructor(\n    /**\n     * The first line that has changed.\n     */\n    fromLineNumber, \n    /**\n     * The number of lines that have changed.\n     */\n    count) {\n        this.fromLineNumber = fromLineNumber;\n        this.count = count;\n        this.type = 9 /* ViewEventType.ViewLinesChanged */;\n    }\n}\nexport class ViewLinesDeletedEvent {\n    constructor(fromLineNumber, toLineNumber) {\n        this.type = 10 /* ViewEventType.ViewLinesDeleted */;\n        this.fromLineNumber = fromLineNumber;\n        this.toLineNumber = toLineNumber;\n    }\n}\nexport class ViewLinesInsertedEvent {\n    constructor(fromLineNumber, toLineNumber) {\n        this.type = 11 /* ViewEventType.ViewLinesInserted */;\n        this.fromLineNumber = fromLineNumber;\n        this.toLineNumber = toLineNumber;\n    }\n}\nexport class ViewRevealRangeRequestEvent {\n    constructor(\n    /**\n     * Source of the call that caused the event.\n     */\n    source, \n    /**\n     * Reduce the revealing to a minimum (e.g. avoid scrolling if the bounding box is visible and near the viewport edge).\n     */\n    minimalReveal, \n    /**\n     * Range to be reavealed.\n     */\n    range, \n    /**\n     * Selections to be revealed.\n     */\n    selections, \n    /**\n     * The vertical reveal strategy.\n     */\n    verticalType, \n    /**\n     * If true: there should be a horizontal & vertical revealing.\n     * If false: there should be just a vertical revealing.\n     */\n    revealHorizontal, \n    /**\n     * The scroll type.\n     */\n    scrollType) {\n        this.source = source;\n        this.minimalReveal = minimalReveal;\n        this.range = range;\n        this.selections = selections;\n        this.verticalType = verticalType;\n        this.revealHorizontal = revealHorizontal;\n        this.scrollType = scrollType;\n        this.type = 12 /* ViewEventType.ViewRevealRangeRequest */;\n    }\n}\nexport class ViewScrollChangedEvent {\n    constructor(source) {\n        this.type = 13 /* ViewEventType.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(theme) {\n        this.theme = theme;\n        this.type = 14 /* ViewEventType.ViewThemeChanged */;\n    }\n}\nexport class ViewTokensChangedEvent {\n    constructor(ranges) {\n        this.type = 15 /* ViewEventType.ViewTokensChanged */;\n        this.ranges = ranges;\n    }\n}\nexport class ViewTokensColorsChangedEvent {\n    constructor() {\n        this.type = 16 /* ViewEventType.ViewTokensColorsChanged */;\n        // Nothing to do\n    }\n}\nexport class ViewZonesChangedEvent {\n    constructor() {\n        this.type = 17 /* ViewEventType.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._emitOutgoingEvents();\n    }\n    _addOutgoingEvent(e) {\n        for (let i = 0, len = this._outgoingEvents.length; i < len; i++) {\n            const mergeResult = (this._outgoingEvents[i].kind === e.kind ? this._outgoingEvents[i].attemptToMerge(e) : null);\n            if (mergeResult) {\n                this._outgoingEvents[i] = mergeResult;\n                return;\n            }\n        }\n        // not merged\n        this._outgoingEvents.push(e);\n    }\n    _emitOutgoingEvents() {\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._emitOutgoingEvents();\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 /* OutgoingViewModelEventKind.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    attemptToMerge(other) {\n        if (other.kind !== this.kind) {\n            return null;\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 /* OutgoingViewModelEventKind.FocusChanged */;\n        this.oldHasFocus = oldHasFocus;\n        this.hasFocus = hasFocus;\n    }\n    isNoOp() {\n        return (this.oldHasFocus === this.hasFocus);\n    }\n    attemptToMerge(other) {\n        if (other.kind !== this.kind) {\n            return null;\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 /* OutgoingViewModelEventKind.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    attemptToMerge(other) {\n        if (other.kind !== this.kind) {\n            return null;\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 /* OutgoingViewModelEventKind.ViewZonesChanged */;\n    }\n    isNoOp() {\n        return false;\n    }\n    attemptToMerge(other) {\n        if (other.kind !== this.kind) {\n            return null;\n        }\n        return this;\n    }\n}\nexport class HiddenAreasChangedEvent {\n    constructor() {\n        this.kind = 4 /* OutgoingViewModelEventKind.HiddenAreasChanged */;\n    }\n    isNoOp() {\n        return false;\n    }\n    attemptToMerge(other) {\n        if (other.kind !== this.kind) {\n            return null;\n        }\n        return this;\n    }\n}\nexport class CursorStateChangedEvent {\n    constructor(oldSelections, selections, oldModelVersionId, modelVersionId, source, reason, reachedMaxCursorCount) {\n        this.kind = 6 /* OutgoingViewModelEventKind.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    attemptToMerge(other) {\n        if (other.kind !== this.kind) {\n            return null;\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 = 5 /* OutgoingViewModelEventKind.ReadOnlyEditAttempt */;\n    }\n    isNoOp() {\n        return false;\n    }\n    attemptToMerge(other) {\n        if (other.kind !== this.kind) {\n            return null;\n        }\n        return this;\n    }\n}\nexport class ModelDecorationsChangedEvent {\n    constructor(event) {\n        this.event = event;\n        this.kind = 7 /* OutgoingViewModelEventKind.ModelDecorationsChanged */;\n    }\n    isNoOp() {\n        return false;\n    }\n    attemptToMerge(other) {\n        return null;\n    }\n}\nexport class ModelLanguageChangedEvent {\n    constructor(event) {\n        this.event = event;\n        this.kind = 8 /* OutgoingViewModelEventKind.ModelLanguageChanged */;\n    }\n    isNoOp() {\n        return false;\n    }\n    attemptToMerge(other) {\n        return null;\n    }\n}\nexport class ModelLanguageConfigurationChangedEvent {\n    constructor(event) {\n        this.event = event;\n        this.kind = 9 /* OutgoingViewModelEventKind.ModelLanguageConfigurationChanged */;\n    }\n    isNoOp() {\n        return false;\n    }\n    attemptToMerge(other) {\n        return null;\n    }\n}\nexport class ModelContentChangedEvent {\n    constructor(event) {\n        this.event = event;\n        this.kind = 10 /* OutgoingViewModelEventKind.ModelContentChanged */;\n    }\n    isNoOp() {\n        return false;\n    }\n    attemptToMerge(other) {\n        return null;\n    }\n}\nexport class ModelOptionsChangedEvent {\n    constructor(event) {\n        this.event = event;\n        this.kind = 11 /* OutgoingViewModelEventKind.ModelOptionsChanged */;\n    }\n    isNoOp() {\n        return false;\n    }\n    attemptToMerge(other) {\n        return null;\n    }\n}\nexport class ModelTokensChangedEvent {\n    constructor(event) {\n        this.event = event;\n        this.kind = 12 /* OutgoingViewModelEventKind.ModelTokensChanged */;\n    }\n    isNoOp() {\n        return false;\n    }\n    attemptToMerge(other) {\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 { onUnexpectedError } from '../../../base/common/errors.js';\nimport * as strings from '../../../base/common/strings.js';\nimport { CursorCollection } from './cursorCollection.js';\nimport { CursorState, EditOperationResult } from '../cursorCommon.js';\nimport { CursorContext } from './cursorContext.js';\nimport { DeleteOperations } from './cursorDeleteOperations.js';\nimport { CompositionOutcome, TypeOperations } from './cursorTypeOperations.js';\nimport { BaseTypeWithAutoClosingCommand } from './cursorTypeEditOperations.js';\nimport { Range } from '../core/range.js';\nimport { Selection } from '../core/selection.js';\nimport { ModelInjectedTextChangedEvent } from '../textModelEvents.js';\nimport { ViewCursorStateChangedEvent, ViewRevealRangeRequestEvent } from '../viewEvents.js';\nimport { dispose, Disposable } from '../../../base/common/lifecycle.js';\nimport { CursorStateChangedEvent } from '../viewModelEventDispatcher.js';\nexport class CursorsController 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._viewModel, this._coordinatesConverter, cursorConfig);\n        this._cursors = new CursorCollection(this.context);\n        this._hasFocus = false;\n        this._isHandling = false;\n        this._compositionState = null;\n        this._columnSelectData = null;\n        this._autoClosedActions = [];\n        this._prevEditOperationType = 0 /* EditOperationType.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._viewModel, 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 /* CursorChangeReason.NotSet */, this.getCursorStates());\n    }\n    setHasFocus(hasFocus) {\n        this._hasFocus = hasFocus;\n    }\n    _validateAutoClosedActions() {\n        if (this._autoClosedActions.length > 0) {\n            const 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        const multiCursorLimit = this.context.cursorConfig.multiCursorLimit;\n        if (states !== null && states.length > multiCursorLimit) {\n            states = states.slice(0, multiCursorLimit);\n            reachedMaxCursorCount = true;\n        }\n        const oldState = CursorModelState.from(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    revealAll(eventsCollector, source, minimalReveal, verticalType, revealHorizontal, scrollType) {\n        const viewPositions = this._cursors.getViewPositions();\n        let revealViewRange = null;\n        let revealViewSelections = null;\n        if (viewPositions.length > 1) {\n            revealViewSelections = this._cursors.getViewSelections();\n        }\n        else {\n            revealViewRange = Range.fromPositions(viewPositions[0], viewPositions[0]);\n        }\n        eventsCollector.emitViewEvent(new ViewRevealRangeRequestEvent(source, minimalReveal, revealViewRange, revealViewSelections, verticalType, revealHorizontal, scrollType));\n    }\n    revealPrimary(eventsCollector, source, minimalReveal, verticalType, revealHorizontal, scrollType) {\n        const primaryCursor = this._cursors.getPrimaryCursor();\n        const revealViewSelections = [primaryCursor.viewState.selection];\n        eventsCollector.emitViewEvent(new ViewRevealRangeRequestEvent(source, minimalReveal, null, revealViewSelections, verticalType, revealHorizontal, scrollType));\n    }\n    saveState() {\n        const 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        const 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 /* CursorChangeReason.NotSet */, CursorState.fromModelSelections(desiredSelections));\n        this.revealAll(eventsCollector, 'restoreState', false, 0 /* VerticalRevealType.Simple */, true, 1 /* editorCommon.ScrollType.Immediate */);\n    }\n    onModelContentChanged(eventsCollector, event) {\n        if (event instanceof ModelInjectedTextChangedEvent) {\n            // If injected texts change, the view positions of all cursors need to be updated.\n            if (this._isHandling) {\n                // The view positions will be updated when handling finishes\n                return;\n            }\n            // setStates might remove markers, which could trigger a decoration change.\n            // If there are injected text decorations for that line, `onModelContentChanged` is emitted again\n            // and an endless recursion happens.\n            // _isHandling prevents that.\n            this._isHandling = true;\n            try {\n                this.setStates(eventsCollector, 'modelChange', 0 /* CursorChangeReason.NotSet */, this.getCursorStates());\n            }\n            finally {\n                this._isHandling = false;\n            }\n        }\n        else {\n            const e = event.rawContentChangedEvent;\n            this._knownModelVersionId = e.versionId;\n            if (this._isHandling) {\n                return;\n            }\n            const hadFlushEvent = e.containsEvent(1 /* RawContentChangedType.Flush */);\n            this._prevEditOperationType = 0 /* EditOperationType.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 /* CursorChangeReason.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 /* CursorChangeReason.Undo */ : e.isRedoing ? 6 /* CursorChangeReason.Redo */ : 2 /* CursorChangeReason.RecoverFromMarkers */, cursorState)) {\n                        this.revealAll(eventsCollector, 'modelChange', false, 0 /* VerticalRevealType.Simple */, true, 0 /* editorCommon.ScrollType.Smooth */);\n                    }\n                }\n                else {\n                    const selectionsFromMarkers = this._cursors.readSelectionFromMarkers();\n                    this.setStates(eventsCollector, 'modelChange', 2 /* CursorChangeReason.RecoverFromMarkers */, CursorState.fromModelSelections(selectionsFromMarkers));\n                }\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: this.context.cursorConfig.visibleColumnFromColumn(this._viewModel, viewSelectionStart),\n            toViewLineNumber: viewPosition.lineNumber,\n            toViewVisualColumn: this.context.cursorConfig.visibleColumnFromColumn(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        const autoClosedCharactersDeltaDecorations = [];\n        const autoClosedEnclosingDeltaDecorations = [];\n        for (let i = 0, len = autoClosedCharactersRanges.length; i < len; i++) {\n            autoClosedCharactersDeltaDecorations.push({\n                range: autoClosedCharactersRanges[i],\n                options: {\n                    description: 'auto-closed-character',\n                    inlineClassName: 'auto-closed-character',\n                    stickiness: 1 /* TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges */\n                }\n            });\n            autoClosedEnclosingDeltaDecorations.push({\n                range: autoClosedEnclosingRanges[i],\n                options: {\n                    description: 'auto-closed-enclosing',\n                    stickiness: 1 /* TrackedRangeStickiness.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            const autoClosedCharactersRanges = [];\n            const autoClosedEnclosingRanges = [];\n            for (let i = 0; i < opResult.commands.length; i++) {\n                const command = opResult.commands[i];\n                if (command instanceof BaseTypeWithAutoClosingCommand && 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 = CursorModelState.from(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, reason));\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        const 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        const autoClosedCharactersRanges = [];\n        const 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 /* CursorChangeReason.NotSet */);\n        }\n        if (autoClosedCharactersRanges.length > 0) {\n            this._pushAutoClosedAction(autoClosedCharactersRanges, autoClosedEnclosingRanges);\n        }\n    }\n    _executeEdit(callback, eventsCollector, source, cursorChangeReason = 0 /* CursorChangeReason.NotSet */) {\n        if (this.context.cursorConfig.readOnly) {\n            // we cannot edit when read only...\n            return;\n        }\n        const oldState = CursorModelState.from(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.revealAll(eventsCollector, source, false, 0 /* VerticalRevealType.Simple */, true, 0 /* editorCommon.ScrollType.Smooth */);\n        }\n    }\n    getAutoClosedCharacters() {\n        return AutoClosedAction.getAllAutoClosedCharacters(this._autoClosedActions);\n    }\n    startComposition(eventsCollector) {\n        this._compositionState = new CompositionState(this._model, this.getSelections());\n    }\n    endComposition(eventsCollector, source) {\n        const compositionOutcome = this._compositionState ? this._compositionState.deduceOutcome(this._model, this.getSelections()) : null;\n        this._compositionState = null;\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, compositionOutcome, this.getSelections(), this.getAutoClosedCharacters()));\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._compositionState, 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 /* CursorChangeReason.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 /* CursorChangeReason.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 /* EditOperationType.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 /* EditOperationType.Other */, commands, {\n                shouldPushStackElementBefore: false,\n                shouldPushStackElementAfter: false\n            }));\n        }, eventsCollector, source);\n    }\n}\n/**\n * A snapshot of the cursor and the model state\n */\nclass CursorModelState {\n    static from(model, cursor) {\n        return new CursorModelState(model.getVersionId(), cursor.getCursorStates());\n    }\n    constructor(modelVersionId, cursorState) {\n        this.modelVersionId = modelVersionId;\n        this.cursorState = cursorState;\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    static getAllAutoClosedCharacters(autoClosedActions) {\n        let autoClosedCharacters = [];\n        for (const autoClosedAction of autoClosedActions) {\n            autoClosedCharacters = autoClosedCharacters.concat(autoClosedAction.getAutoClosedCharactersRanges());\n        }\n        return autoClosedCharacters;\n    }\n    constructor(model, autoClosedCharactersDecorations, autoClosedEnclosingDecorations) {\n        this._model = model;\n        this._autoClosedCharactersDecorations = autoClosedCharactersDecorations;\n        this._autoClosedEnclosingDecorations = autoClosedEnclosingDecorations;\n    }\n    dispose() {\n        this._autoClosedCharactersDecorations = this._model.deltaDecorations(this._autoClosedCharactersDecorations, []);\n        this._autoClosedEnclosingDecorations = this._model.deltaDecorations(this._autoClosedEnclosingDecorations, []);\n    }\n    getAutoClosedCharactersRanges() {\n        const 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        const 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 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 /* TrackedRangeStickiness.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        const 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            const 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            const 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 /* SelectionDirection.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        const losingCursors = [];\n        for (const 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        const 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 /* TrackedRangeStickiness.GrowsOnlyWhenTypingBefore */;\n                    }\n                    else {\n                        stickiness = 3 /* TrackedRangeStickiness.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 /* TrackedRangeStickiness.GrowsOnlyWhenTypingBefore */;\n                    }\n                    else {\n                        stickiness = 3 /* TrackedRangeStickiness.GrowsOnlyWhenTypingAfter */;\n                    }\n                }\n            }\n            else {\n                stickiness = 1 /* TrackedRangeStickiness.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        const 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}\nclass CompositionLineState {\n    constructor(text, startSelection, endSelection) {\n        this.text = text;\n        this.startSelection = startSelection;\n        this.endSelection = endSelection;\n    }\n}\nclass CompositionState {\n    static _capture(textModel, selections) {\n        const result = [];\n        for (const selection of selections) {\n            if (selection.startLineNumber !== selection.endLineNumber) {\n                return null;\n            }\n            result.push(new CompositionLineState(textModel.getLineContent(selection.startLineNumber), selection.startColumn - 1, selection.endColumn - 1));\n        }\n        return result;\n    }\n    constructor(textModel, selections) {\n        this._original = CompositionState._capture(textModel, selections);\n    }\n    /**\n     * Returns the inserted text during this composition.\n     * If the composition resulted in existing text being changed (i.e. not a pure insertion) it returns null.\n     */\n    deduceOutcome(textModel, selections) {\n        if (!this._original) {\n            return null;\n        }\n        const current = CompositionState._capture(textModel, selections);\n        if (!current) {\n            return null;\n        }\n        if (this._original.length !== current.length) {\n            return null;\n        }\n        const result = [];\n        for (let i = 0, len = this._original.length; i < len; i++) {\n            result.push(CompositionState._deduceOutcome(this._original[i], current[i]));\n        }\n        return result;\n    }\n    static _deduceOutcome(original, current) {\n        const commonPrefix = Math.min(original.startSelection, current.startSelection, strings.commonPrefixLength(original.text, current.text));\n        const commonSuffix = Math.min(original.text.length - original.endSelection, current.text.length - current.endSelection, strings.commonSuffixLength(original.text, current.text));\n        const deletedText = original.text.substring(commonPrefix, original.text.length - commonSuffix);\n        const insertedText = current.text.substring(commonPrefix, current.text.length - commonSuffix);\n        return new CompositionOutcome(deletedText, original.startSelection - commonPrefix, original.endSelection - commonPrefix, insertedText, current.startSelection - commonPrefix, current.endSelection - commonPrefix);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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    static { this.INSTANCE_COUNT = 0; }\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            const 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, includeViewZones = false) {\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 - (includeViewZones ? 1 : 0));\n        return previousLinesHeight + previousWhitespacesHeight + this._paddingTop;\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    getVerticalOffsetAfterLineNumber(lineNumber, includeViewZones = false) {\n        this._checkPendingChanges();\n        lineNumber = lineNumber | 0;\n        const previousLinesHeight = this._lineHeight * lineNumber;\n        const previousWhitespacesHeight = this.getWhitespaceAccumulatedHeightBeforeLineNumber(lineNumber + (includeViewZones ? 1 : 0));\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            lineHeight: this._lineHeight,\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        const 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}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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.js';\nimport { ContentSizeChangedEvent } from '../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({\n            forceIntegerValues: true,\n            smoothScrollDuration,\n            scheduleAtNextAnimationFrame\n        }));\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    hasPendingScrollAnimation() {\n        return this._scrollable.hasPendingScrollAnimation();\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(146 /* EditorOption.layoutInfo */);\n        const padding = options.get(84 /* EditorOption.padding */);\n        this._linesLayout = new LinesLayout(lineCount, options.get(67 /* EditorOption.lineHeight */), padding.top, padding.bottom);\n        this._maxLineWidth = 0;\n        this._overlayWidgetsMinWidth = 0;\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(115 /* EditorOption.smoothScrolling */) ? SMOOTH_SCROLLING_TIME : 0);\n    }\n    // ---- begin view event handlers\n    onConfigurationChanged(e) {\n        const options = this._configuration.options;\n        if (e.hasChanged(67 /* EditorOption.lineHeight */)) {\n            this._linesLayout.setLineHeight(options.get(67 /* EditorOption.lineHeight */));\n        }\n        if (e.hasChanged(84 /* EditorOption.padding */)) {\n            const padding = options.get(84 /* EditorOption.padding */);\n            this._linesLayout.setPadding(padding.top, padding.bottom);\n        }\n        if (e.hasChanged(146 /* EditorOption.layoutInfo */)) {\n            const layoutInfo = options.get(146 /* EditorOption.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(115 /* EditorOption.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(104 /* EditorOption.scrollbar */);\n        if (scrollbar.horizontal === 2 /* ScrollbarVisibility.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(106 /* EditorOption.scrollBeyondLastLine */)) {\n            result += Math.max(0, height - options.get(67 /* EditorOption.lineHeight */) - options.get(84 /* EditorOption.padding */).bottom);\n        }\n        else if (!options.get(104 /* EditorOption.scrollbar */).ignoreHorizontalScrollbarInContentHeight) {\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() {\n        const options = this._configuration.options;\n        const maxLineWidth = this._maxLineWidth;\n        const wrappingInfo = options.get(147 /* EditorOption.wrappingInfo */);\n        const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n        const layoutInfo = options.get(146 /* EditorOption.layoutInfo */);\n        if (wrappingInfo.isViewportWrapping) {\n            const minimap = options.get(73 /* EditorOption.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(105 /* EditorOption.scrollBeyondLastColumn */) * fontInfo.typicalHalfwidthCharacterWidth;\n            const whitespaceMinWidth = this._linesLayout.getWhitespaceMinWidth();\n            return Math.max(maxLineWidth + extraHorizontalSpace + layoutInfo.verticalScrollbarWidth, whitespaceMinWidth, this._overlayWidgetsMinWidth);\n        }\n    }\n    setMaxLineWidth(maxLineWidth) {\n        this._maxLineWidth = maxLineWidth;\n        this._updateContentWidth();\n    }\n    setOverlayWidgetsMinWidth(maxMinWidth) {\n        this._overlayWidgetsMinWidth = maxMinWidth;\n        this._updateContentWidth();\n    }\n    _updateContentWidth() {\n        const scrollDimensions = this._scrollable.getScrollDimensions();\n        this._scrollable.setScrollDimensions(new EditorScrollDimensions(scrollDimensions.width, this._computeContentWidth(), 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        const scrollTop = currentScrollPosition.scrollTop;\n        const firstLineNumberInViewport = this._linesLayout.getLineNumberAtOrAfterVerticalOffset(scrollTop);\n        const whitespaceAboveFirstLine = this._linesLayout.getWhitespaceAccumulatedHeightBeforeLineNumber(firstLineNumberInViewport);\n        return {\n            scrollTop: scrollTop,\n            scrollTopWithoutViewZones: scrollTop - whitespaceAboveFirstLine,\n            scrollLeft: currentScrollPosition.scrollLeft\n        };\n    }\n    // ----\n    changeWhitespace(callback) {\n        const hadAChange = this._linesLayout.changeWhitespace(callback);\n        if (hadAChange) {\n            this.onHeightMaybeChanged();\n        }\n        return hadAChange;\n    }\n    getVerticalOffsetForLineNumber(lineNumber, includeViewZones = false) {\n        return this._linesLayout.getVerticalOffsetForLineNumber(lineNumber, includeViewZones);\n    }\n    getVerticalOffsetAfterLineNumber(lineNumber, includeViewZones = false) {\n        return this._linesLayout.getVerticalOffsetAfterLineNumber(lineNumber, includeViewZones);\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    // ----\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 /* ScrollType.Immediate */) {\n            this._scrollable.setScrollPositionNow(position);\n        }\n        else {\n            this._scrollable.setScrollPositionSmooth(position);\n        }\n    }\n    hasPendingScrollAnimation() {\n        return this._scrollable.hasPendingScrollAnimation();\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 { 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), 0 /* PositionAffinity.Left */, false, true);\n                const end = this._coordinatesConverter.convertModelPositionToViewPosition(new Position(modelRange.endLineNumber, this.model.getLineMaxColumn(modelRange.endLineNumber)), 1 /* PositionAffinity.Right */);\n                viewRange = new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n            }\n            else {\n                // For backwards compatibility reasons, we want injected text before any decoration.\n                // Thus, move decorations to the right.\n                viewRange = this._coordinatesConverter.convertModelRangeToViewRange(modelRange, 1 /* PositionAffinity.Right */);\n            }\n            r = new ViewModelDecoration(viewRange, options);\n            this._decorationsCache[id] = r;\n        }\n        return r;\n    }\n    getMinimapDecorationsInRange(range) {\n        return this._getDecorationsInRange(range, true, false).decorations;\n    }\n    getDecorationsViewportData(viewRange) {\n        let cacheIsValid = (this._cachedModelDecorationsResolver !== null);\n        cacheIsValid = cacheIsValid && (viewRange.equalsRange(this._cachedModelDecorationsResolverViewRange));\n        if (!cacheIsValid) {\n            this._cachedModelDecorationsResolver = this._getDecorationsInRange(viewRange, false, false);\n            this._cachedModelDecorationsResolverViewRange = viewRange;\n        }\n        return this._cachedModelDecorationsResolver;\n    }\n    getInlineDecorationsOnLine(lineNumber, onlyMinimapDecorations = false, onlyMarginDecorations = false) {\n        const range = new Range(lineNumber, this._linesCollection.getViewLineMinColumn(lineNumber), lineNumber, this._linesCollection.getViewLineMaxColumn(lineNumber));\n        return this._getDecorationsInRange(range, onlyMinimapDecorations, onlyMarginDecorations).inlineDecorations[0];\n    }\n    _getDecorationsInRange(viewRange, onlyMinimapDecorations, onlyMarginDecorations) {\n        const modelDecorations = this._linesCollection.getDecorationsInRange(viewRange, this.editorId, filterValidationDecorations(this.configuration.options), onlyMinimapDecorations, onlyMarginDecorations);\n        const startLineNumber = viewRange.startLineNumber;\n        const endLineNumber = viewRange.endLineNumber;\n        const decorationsInViewport = [];\n        let decorationsInViewportLen = 0;\n        const 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            const modelDecoration = modelDecorations[i];\n            const decorationOptions = modelDecoration.options;\n            if (!isModelDecorationVisible(this.model, modelDecoration)) {\n                continue;\n            }\n            const viewModelDecoration = this._getOrCreateViewModelDecoration(modelDecoration);\n            const viewRange = viewModelDecoration.range;\n            decorationsInViewport[decorationsInViewportLen++] = viewModelDecoration;\n            if (decorationOptions.inlineClassName) {\n                const inlineDecoration = new InlineDecoration(viewRange, decorationOptions.inlineClassName, decorationOptions.inlineClassNameAffectsLetterSpacing ? 3 /* InlineDecorationType.RegularAffectingLetterSpacing */ : 0 /* InlineDecorationType.Regular */);\n                const intersectedStartLineNumber = Math.max(startLineNumber, viewRange.startLineNumber);\n                const 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                    const inlineDecoration = new InlineDecoration(new Range(viewRange.startLineNumber, viewRange.startColumn, viewRange.startLineNumber, viewRange.startColumn), decorationOptions.beforeContentClassName, 1 /* InlineDecorationType.Before */);\n                    inlineDecorations[viewRange.startLineNumber - startLineNumber].push(inlineDecoration);\n                }\n            }\n            if (decorationOptions.afterContentClassName) {\n                if (startLineNumber <= viewRange.endLineNumber && viewRange.endLineNumber <= endLineNumber) {\n                    const inlineDecoration = new InlineDecoration(new Range(viewRange.endLineNumber, viewRange.endColumn, viewRange.endLineNumber, viewRange.endColumn), decorationOptions.afterContentClassName, 2 /* InlineDecorationType.After */);\n                    inlineDecorations[viewRange.endLineNumber - startLineNumber].push(inlineDecoration);\n                }\n            }\n        }\n        return {\n            decorations: decorationsInViewport,\n            inlineDecorations: inlineDecorations\n        };\n    }\n}\nexport function isModelDecorationVisible(model, decoration) {\n    if (decoration.options.hideInCommentTokens && isModelDecorationInComment(model, decoration)) {\n        return false;\n    }\n    if (decoration.options.hideInStringTokens && isModelDecorationInString(model, decoration)) {\n        return false;\n    }\n    return true;\n}\nexport function isModelDecorationInComment(model, decoration) {\n    return testTokensInRange(model, decoration.range, (tokenType) => tokenType === 1 /* StandardTokenType.Comment */);\n}\nexport function isModelDecorationInString(model, decoration) {\n    return testTokensInRange(model, decoration.range, (tokenType) => tokenType === 2 /* StandardTokenType.String */);\n}\n/**\n * Calls the callback for every token that intersects the range.\n * If the callback returns `false`, iteration stops and `false` is returned.\n * Otherwise, `true` is returned.\n */\nfunction testTokensInRange(model, range, callback) {\n    for (let lineNumber = range.startLineNumber; lineNumber <= range.endLineNumber; lineNumber++) {\n        const lineTokens = model.tokenization.getLineTokens(lineNumber);\n        const isFirstLine = lineNumber === range.startLineNumber;\n        const isEndLine = lineNumber === range.endLineNumber;\n        let tokenIdx = isFirstLine ? lineTokens.findTokenIndexAtOffset(range.startColumn - 1) : 0;\n        while (tokenIdx < lineTokens.getCount()) {\n            if (isEndLine) {\n                const startOffset = lineTokens.getStartOffset(tokenIdx);\n                if (startOffset > range.endColumn - 1) {\n                    break;\n                }\n            }\n            const callbackResult = callback(lineTokens.getStandardTokenType(tokenIdx));\n            if (!callbackResult) {\n                return false;\n            }\n            tokenIdx++;\n        }\n    }\n    return 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 { LineTokens } from '../tokens/lineTokens.js';\nimport { Position } from '../core/position.js';\nimport { LineInjectedText } from '../textModelEvents.js';\nimport { SingleLineInlineDecoration, ViewLineData } from '../viewModel.js';\nexport function createModelLineProjection(lineBreakData, isVisible) {\n    if (lineBreakData === null) {\n        // No mapping needed\n        if (isVisible) {\n            return IdentityModelLineProjection.INSTANCE;\n        }\n        return HiddenModelLineProjection.INSTANCE;\n    }\n    else {\n        return new ModelLineProjection(lineBreakData, isVisible);\n    }\n}\n/**\n * This projection is used to\n * * wrap model lines\n * * inject text\n */\nclass ModelLineProjection {\n    constructor(lineBreakData, isVisible) {\n        this._projectionData = 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    getProjectionData() {\n        return this._projectionData;\n    }\n    getViewLineCount() {\n        if (!this._isVisible) {\n            return 0;\n        }\n        return this._projectionData.getOutputLineCount();\n    }\n    getViewLineContent(model, modelLineNumber, outputLineIndex) {\n        this._assertVisible();\n        const startOffsetInInputWithInjections = outputLineIndex > 0 ? this._projectionData.breakOffsets[outputLineIndex - 1] : 0;\n        const endOffsetInInputWithInjections = this._projectionData.breakOffsets[outputLineIndex];\n        let r;\n        if (this._projectionData.injectionOffsets !== null) {\n            const injectedTexts = this._projectionData.injectionOffsets.map((offset, idx) => new LineInjectedText(0, 0, offset + 1, this._projectionData.injectionOptions[idx], 0));\n            const lineWithInjections = LineInjectedText.applyInjectedText(model.getLineContent(modelLineNumber), injectedTexts);\n            r = lineWithInjections.substring(startOffsetInInputWithInjections, endOffsetInInputWithInjections);\n        }\n        else {\n            r = model.getValueInRange({\n                startLineNumber: modelLineNumber,\n                startColumn: startOffsetInInputWithInjections + 1,\n                endLineNumber: modelLineNumber,\n                endColumn: endOffsetInInputWithInjections + 1\n            });\n        }\n        if (outputLineIndex > 0) {\n            r = spaces(this._projectionData.wrappedTextIndentLength) + r;\n        }\n        return r;\n    }\n    getViewLineLength(model, modelLineNumber, outputLineIndex) {\n        this._assertVisible();\n        return this._projectionData.getLineLength(outputLineIndex);\n    }\n    getViewLineMinColumn(_model, _modelLineNumber, outputLineIndex) {\n        this._assertVisible();\n        return this._projectionData.getMinOutputOffset(outputLineIndex) + 1;\n    }\n    getViewLineMaxColumn(model, modelLineNumber, outputLineIndex) {\n        this._assertVisible();\n        return this._projectionData.getMaxOutputOffset(outputLineIndex) + 1;\n    }\n    /**\n     * Try using {@link getViewLinesData} instead.\n    */\n    getViewLineData(model, modelLineNumber, outputLineIndex) {\n        const arr = new Array();\n        this.getViewLinesData(model, modelLineNumber, outputLineIndex, 1, 0, [true], arr);\n        return arr[0];\n    }\n    getViewLinesData(model, modelLineNumber, outputLineIdx, lineCount, globalStartIndex, needed, result) {\n        this._assertVisible();\n        const lineBreakData = this._projectionData;\n        const injectionOffsets = lineBreakData.injectionOffsets;\n        const injectionOptions = lineBreakData.injectionOptions;\n        let inlineDecorationsPerOutputLine = null;\n        if (injectionOffsets) {\n            inlineDecorationsPerOutputLine = [];\n            let totalInjectedTextLengthBefore = 0;\n            let currentInjectedOffset = 0;\n            for (let outputLineIndex = 0; outputLineIndex < lineBreakData.getOutputLineCount(); outputLineIndex++) {\n                const inlineDecorations = new Array();\n                inlineDecorationsPerOutputLine[outputLineIndex] = inlineDecorations;\n                const lineStartOffsetInInputWithInjections = outputLineIndex > 0 ? lineBreakData.breakOffsets[outputLineIndex - 1] : 0;\n                const lineEndOffsetInInputWithInjections = lineBreakData.breakOffsets[outputLineIndex];\n                while (currentInjectedOffset < injectionOffsets.length) {\n                    const length = injectionOptions[currentInjectedOffset].content.length;\n                    const injectedTextStartOffsetInInputWithInjections = injectionOffsets[currentInjectedOffset] + totalInjectedTextLengthBefore;\n                    const injectedTextEndOffsetInInputWithInjections = injectedTextStartOffsetInInputWithInjections + length;\n                    if (injectedTextStartOffsetInInputWithInjections > lineEndOffsetInInputWithInjections) {\n                        // Injected text only starts in later wrapped lines.\n                        break;\n                    }\n                    if (lineStartOffsetInInputWithInjections < injectedTextEndOffsetInInputWithInjections) {\n                        // Injected text ends after or in this line (but also starts in or before this line).\n                        const options = injectionOptions[currentInjectedOffset];\n                        if (options.inlineClassName) {\n                            const offset = (outputLineIndex > 0 ? lineBreakData.wrappedTextIndentLength : 0);\n                            const start = offset + Math.max(injectedTextStartOffsetInInputWithInjections - lineStartOffsetInInputWithInjections, 0);\n                            const end = offset + Math.min(injectedTextEndOffsetInInputWithInjections - lineStartOffsetInInputWithInjections, lineEndOffsetInInputWithInjections - lineStartOffsetInInputWithInjections);\n                            if (start !== end) {\n                                inlineDecorations.push(new SingleLineInlineDecoration(start, end, options.inlineClassName, options.inlineClassNameAffectsLetterSpacing));\n                            }\n                        }\n                    }\n                    if (injectedTextEndOffsetInInputWithInjections <= lineEndOffsetInInputWithInjections) {\n                        totalInjectedTextLengthBefore += length;\n                        currentInjectedOffset++;\n                    }\n                    else {\n                        // injected text breaks into next line, process it again\n                        break;\n                    }\n                }\n            }\n        }\n        let lineWithInjections;\n        if (injectionOffsets) {\n            lineWithInjections = model.tokenization.getLineTokens(modelLineNumber).withInserted(injectionOffsets.map((offset, idx) => ({\n                offset,\n                text: injectionOptions[idx].content,\n                tokenMetadata: LineTokens.defaultTokenMetadata\n            })));\n        }\n        else {\n            lineWithInjections = model.tokenization.getLineTokens(modelLineNumber);\n        }\n        for (let outputLineIndex = outputLineIdx; outputLineIndex < outputLineIdx + lineCount; outputLineIndex++) {\n            const globalIndex = globalStartIndex + outputLineIndex - outputLineIdx;\n            if (!needed[globalIndex]) {\n                result[globalIndex] = null;\n                continue;\n            }\n            result[globalIndex] = this._getViewLineData(lineWithInjections, inlineDecorationsPerOutputLine ? inlineDecorationsPerOutputLine[outputLineIndex] : null, outputLineIndex);\n        }\n    }\n    _getViewLineData(lineWithInjections, inlineDecorations, outputLineIndex) {\n        this._assertVisible();\n        const lineBreakData = this._projectionData;\n        const deltaStartIndex = (outputLineIndex > 0 ? lineBreakData.wrappedTextIndentLength : 0);\n        const lineStartOffsetInInputWithInjections = outputLineIndex > 0 ? lineBreakData.breakOffsets[outputLineIndex - 1] : 0;\n        const lineEndOffsetInInputWithInjections = lineBreakData.breakOffsets[outputLineIndex];\n        const tokens = lineWithInjections.sliceAndInflate(lineStartOffsetInInputWithInjections, lineEndOffsetInInputWithInjections, deltaStartIndex);\n        let lineContent = tokens.getLineContent();\n        if (outputLineIndex > 0) {\n            lineContent = spaces(lineBreakData.wrappedTextIndentLength) + lineContent;\n        }\n        const minColumn = this._projectionData.getMinOutputOffset(outputLineIndex) + 1;\n        const maxColumn = lineContent.length + 1;\n        const continuesWithWrappedLine = (outputLineIndex + 1 < this.getViewLineCount());\n        const startVisibleColumn = (outputLineIndex === 0 ? 0 : lineBreakData.breakOffsetsVisibleColumn[outputLineIndex - 1]);\n        return new ViewLineData(lineContent, continuesWithWrappedLine, minColumn, maxColumn, startVisibleColumn, tokens, inlineDecorations);\n    }\n    getModelColumnOfViewPosition(outputLineIndex, outputColumn) {\n        this._assertVisible();\n        return this._projectionData.translateToInputOffset(outputLineIndex, outputColumn - 1) + 1;\n    }\n    getViewPositionOfModelPosition(deltaLineNumber, inputColumn, affinity = 2 /* PositionAffinity.None */) {\n        this._assertVisible();\n        const r = this._projectionData.translateToOutputPosition(inputColumn - 1, affinity);\n        return r.toPosition(deltaLineNumber);\n    }\n    getViewLineNumberOfModelPosition(deltaLineNumber, inputColumn) {\n        this._assertVisible();\n        const r = this._projectionData.translateToOutputPosition(inputColumn - 1);\n        return deltaLineNumber + r.outputLineIndex;\n    }\n    normalizePosition(outputLineIndex, outputPosition, affinity) {\n        const baseViewLineNumber = outputPosition.lineNumber - outputLineIndex;\n        const normalizedOutputPosition = this._projectionData.normalizeOutputPosition(outputLineIndex, outputPosition.column - 1, affinity);\n        const result = normalizedOutputPosition.toPosition(baseViewLineNumber);\n        return result;\n    }\n    getInjectedTextAt(outputLineIndex, outputColumn) {\n        return this._projectionData.getInjectedText(outputLineIndex, outputColumn - 1);\n    }\n    _assertVisible() {\n        if (!this._isVisible) {\n            throw new Error('Not supported');\n        }\n    }\n}\n/**\n * This projection does not change the model line.\n*/\nclass IdentityModelLineProjection {\n    static { this.INSTANCE = new IdentityModelLineProjection(); }\n    constructor() { }\n    isVisible() {\n        return true;\n    }\n    setVisible(isVisible) {\n        if (isVisible) {\n            return this;\n        }\n        return HiddenModelLineProjection.INSTANCE;\n    }\n    getProjectionData() {\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        const lineTokens = model.tokenization.getLineTokens(modelLineNumber);\n        const lineContent = lineTokens.getLineContent();\n        return new ViewLineData(lineContent, false, 1, lineContent.length + 1, 0, lineTokens.inflate(), null);\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    normalizePosition(outputLineIndex, outputPosition, affinity) {\n        return outputPosition;\n    }\n    getInjectedTextAt(_outputLineIndex, _outputColumn) {\n        return null;\n    }\n}\n/**\n * This projection hides the model line.\n */\nclass HiddenModelLineProjection {\n    static { this.INSTANCE = new HiddenModelLineProjection(); }\n    constructor() { }\n    isVisible() {\n        return false;\n    }\n    setVisible(isVisible) {\n        if (!isVisible) {\n            return this;\n        }\n        return IdentityModelLineProjection.INSTANCE;\n    }\n    getProjectionData() {\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    normalizePosition(outputLineIndex, outputPosition, affinity) {\n        throw new Error('Not supported');\n    }\n    getInjectedTextAt(_outputLineIndex, _outputColumn) {\n        throw new Error('Not supported');\n    }\n}\nconst _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}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { IndentGuide, IndentGuideHorizontalLine } from '../textModelGuides.js';\nimport { ModelDecorationOptions } from '../model/textModel.js';\nimport { LineInjectedText } from '../textModelEvents.js';\nimport * as viewEvents from '../viewEvents.js';\nimport { createModelLineProjection } from './modelLineProjection.js';\nimport { ConstantTimePrefixSumComputer } from '../model/prefixSumComputer.js';\nimport { ViewLineData } from '../viewModel.js';\nexport class ViewModelLinesFromProjectedModel {\n    constructor(editorId, model, domLineBreaksComputerFactory, monospaceLineBreaksComputerFactory, fontInfo, tabSize, wrappingStrategy, wrappingColumn, wrappingIndent, wordBreak) {\n        this._editorId = editorId;\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.wordBreak = wordBreak;\n        this._constructLines(/*resetHiddenAreas*/ true, null);\n    }\n    dispose() {\n        this.hiddenAreasDecorationIds = this.model.deltaDecorations(this.hiddenAreasDecorationIds, []);\n    }\n    createCoordinatesConverter() {\n        return new CoordinatesConverter(this);\n    }\n    _constructLines(resetHiddenAreas, previousLineBreaks) {\n        this.modelLineProjections = [];\n        if (resetHiddenAreas) {\n            this.hiddenAreasDecorationIds = this.model.deltaDecorations(this.hiddenAreasDecorationIds, []);\n        }\n        const linesContent = this.model.getLinesContent();\n        const injectedTextDecorations = this.model.getInjectedTextDecorations(this._editorId);\n        const lineCount = linesContent.length;\n        const lineBreaksComputer = this.createLineBreaksComputer();\n        const injectedTextQueue = new arrays.ArrayQueue(LineInjectedText.fromDecorations(injectedTextDecorations));\n        for (let i = 0; i < lineCount; i++) {\n            const lineInjectedText = injectedTextQueue.takeWhile(t => t.lineNumber === i + 1);\n            lineBreaksComputer.addRequest(linesContent[i], lineInjectedText, previousLineBreaks ? previousLineBreaks[i] : null);\n        }\n        const linesBreaks = lineBreaksComputer.finalize();\n        const values = [];\n        const hiddenAreas = this.hiddenAreasDecorationIds.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            const 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            const isInHiddenArea = (lineNumber >= hiddenAreaStart && lineNumber <= hiddenAreaEnd);\n            const line = createModelLineProjection(linesBreaks[i], !isInHiddenArea);\n            values[i] = line.getViewLineCount();\n            this.modelLineProjections[i] = line;\n        }\n        this._validModelVersionId = this.model.getVersionId();\n        this.projectedModelLineLineCounts = new ConstantTimePrefixSumComputer(values);\n    }\n    getHiddenAreas() {\n        return this.hiddenAreasDecorationIds.map((decId) => this.model.getDecorationRange(decId));\n    }\n    setHiddenAreas(_ranges) {\n        const validatedRanges = _ranges.map(r => this.model.validateRange(r));\n        const newRanges = normalizeLineRanges(validatedRanges);\n        // TODO@Martin: Please stop calling this method on each model change!\n        // This checks if there really was a change\n        const oldRanges = this.hiddenAreasDecorationIds.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        const newDecorations = newRanges.map((r) => ({\n            range: r,\n            options: ModelDecorationOptions.EMPTY,\n        }));\n        this.hiddenAreasDecorationIds = this.model.deltaDecorations(this.hiddenAreasDecorationIds, newDecorations);\n        const hiddenAreas = newRanges;\n        let hiddenAreaStart = 1, hiddenAreaEnd = 0;\n        let hiddenAreaIdx = -1;\n        let nextLineNumberToUpdateHiddenArea = (hiddenAreaIdx + 1 < hiddenAreas.length) ? hiddenAreaEnd + 1 : this.modelLineProjections.length + 2;\n        let hasVisibleLine = false;\n        for (let i = 0; i < this.modelLineProjections.length; i++) {\n            const 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.modelLineProjections.length + 2;\n            }\n            let lineChanged = false;\n            if (lineNumber >= hiddenAreaStart && lineNumber <= hiddenAreaEnd) {\n                // Line should be hidden\n                if (this.modelLineProjections[i].isVisible()) {\n                    this.modelLineProjections[i] = this.modelLineProjections[i].setVisible(false);\n                    lineChanged = true;\n                }\n            }\n            else {\n                hasVisibleLine = true;\n                // Line should be visible\n                if (!this.modelLineProjections[i].isVisible()) {\n                    this.modelLineProjections[i] = this.modelLineProjections[i].setVisible(true);\n                    lineChanged = true;\n                }\n            }\n            if (lineChanged) {\n                const newOutputLineCount = this.modelLineProjections[i].getViewLineCount();\n                this.projectedModelLineLineCounts.setValue(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.modelLineProjections.length) {\n            // invalid arguments\n            return false;\n        }\n        return this.modelLineProjections[modelLineNumber - 1].isVisible();\n    }\n    getModelLineViewLineCount(modelLineNumber) {\n        if (modelLineNumber < 1 || modelLineNumber > this.modelLineProjections.length) {\n            // invalid arguments\n            return 1;\n        }\n        return this.modelLineProjections[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, wordBreak) {\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        const equalWordBreak = (this.wordBreak === wordBreak);\n        if (equalFontInfo && equalWrappingStrategy && equalWrappingColumn && equalWrappingIndent && equalWordBreak) {\n            return false;\n        }\n        const onlyWrappingColumnChanged = (equalFontInfo && equalWrappingStrategy && !equalWrappingColumn && equalWrappingIndent && equalWordBreak);\n        this.fontInfo = fontInfo;\n        this.wrappingStrategy = wrappingStrategy;\n        this.wrappingColumn = wrappingColumn;\n        this.wrappingIndent = wrappingIndent;\n        this.wordBreak = wordBreak;\n        let previousLineBreaks = null;\n        if (onlyWrappingColumnChanged) {\n            previousLineBreaks = [];\n            for (let i = 0, len = this.modelLineProjections.length; i < len; i++) {\n                previousLineBreaks[i] = this.modelLineProjections[i].getProjectionData();\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, this.wordBreak);\n    }\n    onModelFlushed() {\n        this._constructLines(/*resetHiddenAreas*/ true, null);\n    }\n    onModelLinesDeleted(versionId, fromLineNumber, toLineNumber) {\n        if (!versionId || 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        const outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.projectedModelLineLineCounts.getPrefixSum(fromLineNumber - 1) + 1);\n        const outputToLineNumber = this.projectedModelLineLineCounts.getPrefixSum(toLineNumber);\n        this.modelLineProjections.splice(fromLineNumber - 1, toLineNumber - fromLineNumber + 1);\n        this.projectedModelLineLineCounts.removeValues(fromLineNumber - 1, toLineNumber - fromLineNumber + 1);\n        return new viewEvents.ViewLinesDeletedEvent(outputFromLineNumber, outputToLineNumber);\n    }\n    onModelLinesInserted(versionId, fromLineNumber, _toLineNumber, lineBreaks) {\n        if (!versionId || 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.modelLineProjections[fromLineNumber - 2].isVisible());\n        const outputFromLineNumber = (fromLineNumber === 1 ? 1 : this.projectedModelLineLineCounts.getPrefixSum(fromLineNumber - 1) + 1);\n        let totalOutputLineCount = 0;\n        const insertLines = [];\n        const insertPrefixSumValues = [];\n        for (let i = 0, len = lineBreaks.length; i < len; i++) {\n            const line = createModelLineProjection(lineBreaks[i], !isInHiddenArea);\n            insertLines.push(line);\n            const outputLineCount = line.getViewLineCount();\n            totalOutputLineCount += outputLineCount;\n            insertPrefixSumValues[i] = outputLineCount;\n        }\n        // TODO@Alex: use arrays.arrayInsert\n        this.modelLineProjections =\n            this.modelLineProjections.slice(0, fromLineNumber - 1)\n                .concat(insertLines)\n                .concat(this.modelLineProjections.slice(fromLineNumber - 1));\n        this.projectedModelLineLineCounts.insertValues(fromLineNumber - 1, insertPrefixSumValues);\n        return new viewEvents.ViewLinesInsertedEvent(outputFromLineNumber, outputFromLineNumber + totalOutputLineCount - 1);\n    }\n    onModelLineChanged(versionId, lineNumber, lineBreakData) {\n        if (versionId !== null && 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        const lineIndex = lineNumber - 1;\n        const oldOutputLineCount = this.modelLineProjections[lineIndex].getViewLineCount();\n        const isVisible = this.modelLineProjections[lineIndex].isVisible();\n        const line = createModelLineProjection(lineBreakData, isVisible);\n        this.modelLineProjections[lineIndex] = line;\n        const newOutputLineCount = this.modelLineProjections[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 = this.projectedModelLineLineCounts.getPrefixSum(lineNumber - 1) + 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 = this.projectedModelLineLineCounts.getPrefixSum(lineNumber - 1) + 1;\n            changeTo = changeFrom + oldOutputLineCount - 1;\n            insertFrom = changeTo + 1;\n            insertTo = insertFrom + (newOutputLineCount - oldOutputLineCount) - 1;\n            lineMappingChanged = true;\n        }\n        else {\n            changeFrom = this.projectedModelLineLineCounts.getPrefixSum(lineNumber - 1) + 1;\n            changeTo = changeFrom + newOutputLineCount - 1;\n        }\n        this.projectedModelLineLineCounts.setValue(lineIndex, newOutputLineCount);\n        const viewLinesChangedEvent = (changeFrom <= changeTo ? new viewEvents.ViewLinesChangedEvent(changeFrom, changeTo - changeFrom + 1) : 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.modelLineProjections.length === 1 && !this.modelLineProjections[0].isVisible()) {\n            // At least one line must be visible => reset hidden areas\n            this.setHiddenAreas([]);\n        }\n    }\n    getViewLineCount() {\n        return this.projectedModelLineLineCounts.getTotalSum();\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.guides.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    // #region ViewLineInfo\n    getViewLineInfo(viewLineNumber) {\n        viewLineNumber = this._toValidViewLineNumber(viewLineNumber);\n        const r = this.projectedModelLineLineCounts.getIndexOf(viewLineNumber - 1);\n        const lineIndex = r.index;\n        const remainder = r.remainder;\n        return new ViewLineInfo(lineIndex + 1, remainder);\n    }\n    getMinColumnOfViewLine(viewLineInfo) {\n        return this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewLineMinColumn(this.model, viewLineInfo.modelLineNumber, viewLineInfo.modelLineWrappedLineIdx);\n    }\n    getMaxColumnOfViewLine(viewLineInfo) {\n        return this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewLineMaxColumn(this.model, viewLineInfo.modelLineNumber, viewLineInfo.modelLineWrappedLineIdx);\n    }\n    getModelStartPositionOfViewLine(viewLineInfo) {\n        const line = this.modelLineProjections[viewLineInfo.modelLineNumber - 1];\n        const minViewColumn = line.getViewLineMinColumn(this.model, viewLineInfo.modelLineNumber, viewLineInfo.modelLineWrappedLineIdx);\n        const column = line.getModelColumnOfViewPosition(viewLineInfo.modelLineWrappedLineIdx, minViewColumn);\n        return new Position(viewLineInfo.modelLineNumber, column);\n    }\n    getModelEndPositionOfViewLine(viewLineInfo) {\n        const line = this.modelLineProjections[viewLineInfo.modelLineNumber - 1];\n        const maxViewColumn = line.getViewLineMaxColumn(this.model, viewLineInfo.modelLineNumber, viewLineInfo.modelLineWrappedLineIdx);\n        const column = line.getModelColumnOfViewPosition(viewLineInfo.modelLineWrappedLineIdx, maxViewColumn);\n        return new Position(viewLineInfo.modelLineNumber, column);\n    }\n    getViewLineInfosGroupedByModelRanges(viewStartLineNumber, viewEndLineNumber) {\n        const startViewLine = this.getViewLineInfo(viewStartLineNumber);\n        const endViewLine = this.getViewLineInfo(viewEndLineNumber);\n        const result = new Array();\n        let lastVisibleModelPos = this.getModelStartPositionOfViewLine(startViewLine);\n        let viewLines = new Array();\n        for (let curModelLine = startViewLine.modelLineNumber; curModelLine <= endViewLine.modelLineNumber; curModelLine++) {\n            const line = this.modelLineProjections[curModelLine - 1];\n            if (line.isVisible()) {\n                const startOffset = curModelLine === startViewLine.modelLineNumber\n                    ? startViewLine.modelLineWrappedLineIdx\n                    : 0;\n                const endOffset = curModelLine === endViewLine.modelLineNumber\n                    ? endViewLine.modelLineWrappedLineIdx + 1\n                    : line.getViewLineCount();\n                for (let i = startOffset; i < endOffset; i++) {\n                    viewLines.push(new ViewLineInfo(curModelLine, i));\n                }\n            }\n            if (!line.isVisible() && lastVisibleModelPos) {\n                const lastVisibleModelPos2 = new Position(curModelLine - 1, this.model.getLineMaxColumn(curModelLine - 1) + 1);\n                const modelRange = Range.fromPositions(lastVisibleModelPos, lastVisibleModelPos2);\n                result.push(new ViewLineInfoGroupedByModelRange(modelRange, viewLines));\n                viewLines = [];\n                lastVisibleModelPos = null;\n            }\n            else if (line.isVisible() && !lastVisibleModelPos) {\n                lastVisibleModelPos = new Position(curModelLine, 1);\n            }\n        }\n        if (lastVisibleModelPos) {\n            const modelRange = Range.fromPositions(lastVisibleModelPos, this.getModelEndPositionOfViewLine(endViewLine));\n            result.push(new ViewLineInfoGroupedByModelRange(modelRange, viewLines));\n        }\n        return result;\n    }\n    // #endregion\n    getViewLinesBracketGuides(viewStartLineNumber, viewEndLineNumber, activeViewPosition, options) {\n        const modelActivePosition = activeViewPosition ? this.convertViewPositionToModelPosition(activeViewPosition.lineNumber, activeViewPosition.column) : null;\n        const resultPerViewLine = [];\n        for (const group of this.getViewLineInfosGroupedByModelRanges(viewStartLineNumber, viewEndLineNumber)) {\n            const modelRangeStartLineNumber = group.modelRange.startLineNumber;\n            const bracketGuidesPerModelLine = this.model.guides.getLinesBracketGuides(modelRangeStartLineNumber, group.modelRange.endLineNumber, modelActivePosition, options);\n            for (const viewLineInfo of group.viewLines) {\n                const bracketGuides = bracketGuidesPerModelLine[viewLineInfo.modelLineNumber - modelRangeStartLineNumber];\n                // visibleColumns stay as they are (this is a bug and needs to be fixed, but it is not a regression)\n                // model-columns must be converted to view-model columns.\n                const result = bracketGuides.map(g => {\n                    if (g.forWrappedLinesAfterColumn !== -1) {\n                        const p = this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewPositionOfModelPosition(0, g.forWrappedLinesAfterColumn);\n                        if (p.lineNumber >= viewLineInfo.modelLineWrappedLineIdx) {\n                            return undefined;\n                        }\n                    }\n                    if (g.forWrappedLinesBeforeOrAtColumn !== -1) {\n                        const p = this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewPositionOfModelPosition(0, g.forWrappedLinesBeforeOrAtColumn);\n                        if (p.lineNumber < viewLineInfo.modelLineWrappedLineIdx) {\n                            return undefined;\n                        }\n                    }\n                    if (!g.horizontalLine) {\n                        return g;\n                    }\n                    let column = -1;\n                    if (g.column !== -1) {\n                        const p = this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewPositionOfModelPosition(0, g.column);\n                        if (p.lineNumber === viewLineInfo.modelLineWrappedLineIdx) {\n                            column = p.column;\n                        }\n                        else if (p.lineNumber < viewLineInfo.modelLineWrappedLineIdx) {\n                            column = this.getMinColumnOfViewLine(viewLineInfo);\n                        }\n                        else if (p.lineNumber > viewLineInfo.modelLineWrappedLineIdx) {\n                            return undefined;\n                        }\n                    }\n                    const viewPosition = this.convertModelPositionToViewPosition(viewLineInfo.modelLineNumber, g.horizontalLine.endColumn);\n                    const p = this.modelLineProjections[viewLineInfo.modelLineNumber - 1].getViewPositionOfModelPosition(0, g.horizontalLine.endColumn);\n                    if (p.lineNumber === viewLineInfo.modelLineWrappedLineIdx) {\n                        return new IndentGuide(g.visibleColumn, column, g.className, new IndentGuideHorizontalLine(g.horizontalLine.top, viewPosition.column), -1, -1);\n                    }\n                    else if (p.lineNumber < viewLineInfo.modelLineWrappedLineIdx) {\n                        return undefined;\n                    }\n                    else {\n                        if (g.visibleColumn !== -1) {\n                            // Don't repeat horizontal lines that use visibleColumn for unrelated lines.\n                            return undefined;\n                        }\n                        return new IndentGuide(g.visibleColumn, column, g.className, new IndentGuideHorizontalLine(g.horizontalLine.top, this.getMaxColumnOfViewLine(viewLineInfo)), -1, -1);\n                    }\n                });\n                resultPerViewLine.push(result.filter((r) => !!r));\n            }\n        }\n        return resultPerViewLine;\n    }\n    getViewLinesIndentGuides(viewStartLineNumber, viewEndLineNumber) {\n        // TODO: Use the same code as in `getViewLinesBracketGuides`.\n        // Future TODO: Merge with `getViewLinesBracketGuides`.\n        // However, this requires more refactoring of indent guides.\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        const resultRepeatCount = [];\n        const 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.modelLineProjections[modelLineIndex];\n            if (line.isVisible()) {\n                const viewLineStartIndex = line.getViewLineNumberOfModelPosition(0, modelLineIndex === modelStartLineIndex ? modelStart.column : 1);\n                const viewLineEndIndex = line.getViewLineNumberOfModelPosition(0, this.model.getLineMaxColumn(modelLineIndex + 1));\n                const count = viewLineEndIndex - viewLineStartIndex + 1;\n                let option = 0 /* IndentGuideRepeatOption.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 /* IndentGuideRepeatOption.BlockSubsequent */ : 2 /* IndentGuideRepeatOption.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.guides.getLinesIndentGuides(reqStart.lineNumber, modelLineIndex));\n                    reqStart = null;\n                }\n            }\n        }\n        if (reqStart !== null) {\n            result = result.concat(this.model.guides.getLinesIndentGuides(reqStart.lineNumber, modelEnd.lineNumber));\n            reqStart = null;\n        }\n        const viewLineCount = viewEndLineNumber - viewStartLineNumber + 1;\n        const 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            const count = Math.min(viewLineCount - currIndex, resultRepeatCount[i]);\n            const option = resultRepeatOption[i];\n            let blockAtIndex;\n            if (option === 2 /* IndentGuideRepeatOption.BlockAll */) {\n                blockAtIndex = 0;\n            }\n            else if (option === 1 /* IndentGuideRepeatOption.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        const info = this.getViewLineInfo(viewLineNumber);\n        return this.modelLineProjections[info.modelLineNumber - 1].getViewLineContent(this.model, info.modelLineNumber, info.modelLineWrappedLineIdx);\n    }\n    getViewLineLength(viewLineNumber) {\n        const info = this.getViewLineInfo(viewLineNumber);\n        return this.modelLineProjections[info.modelLineNumber - 1].getViewLineLength(this.model, info.modelLineNumber, info.modelLineWrappedLineIdx);\n    }\n    getViewLineMinColumn(viewLineNumber) {\n        const info = this.getViewLineInfo(viewLineNumber);\n        return this.modelLineProjections[info.modelLineNumber - 1].getViewLineMinColumn(this.model, info.modelLineNumber, info.modelLineWrappedLineIdx);\n    }\n    getViewLineMaxColumn(viewLineNumber) {\n        const info = this.getViewLineInfo(viewLineNumber);\n        return this.modelLineProjections[info.modelLineNumber - 1].getViewLineMaxColumn(this.model, info.modelLineNumber, info.modelLineWrappedLineIdx);\n    }\n    getViewLineData(viewLineNumber) {\n        const info = this.getViewLineInfo(viewLineNumber);\n        return this.modelLineProjections[info.modelLineNumber - 1].getViewLineData(this.model, info.modelLineNumber, info.modelLineWrappedLineIdx);\n    }\n    getViewLinesData(viewStartLineNumber, viewEndLineNumber, needed) {\n        viewStartLineNumber = this._toValidViewLineNumber(viewStartLineNumber);\n        viewEndLineNumber = this._toValidViewLineNumber(viewEndLineNumber);\n        const start = this.projectedModelLineLineCounts.getIndexOf(viewStartLineNumber - 1);\n        let viewLineNumber = viewStartLineNumber;\n        const startModelLineIndex = start.index;\n        const startRemainder = start.remainder;\n        const result = [];\n        for (let modelLineIndex = startModelLineIndex, len = this.model.getLineCount(); modelLineIndex < len; modelLineIndex++) {\n            const line = this.modelLineProjections[modelLineIndex];\n            if (!line.isVisible()) {\n                continue;\n            }\n            const 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            line.getViewLinesData(this.model, modelLineIndex + 1, fromViewLineIndex, remainingViewLineCount, 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        const r = this.projectedModelLineLineCounts.getIndexOf(viewLineNumber - 1);\n        const lineIndex = r.index;\n        const remainder = r.remainder;\n        const line = this.modelLineProjections[lineIndex];\n        const minColumn = line.getViewLineMinColumn(this.model, lineIndex + 1, remainder);\n        const 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        const computedModelColumn = line.getModelColumnOfViewPosition(remainder, viewColumn);\n        const 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        const info = this.getViewLineInfo(viewLineNumber);\n        const inputColumn = this.modelLineProjections[info.modelLineNumber - 1].getModelColumnOfViewPosition(info.modelLineWrappedLineIdx, viewColumn);\n        // console.log('out -> in ' + viewLineNumber + ',' + viewColumn + ' ===> ' + (lineIndex+1) + ',' + inputColumn);\n        return this.model.validatePosition(new Position(info.modelLineNumber, 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, affinity = 2 /* PositionAffinity.None */, allowZeroLineNumber = false, belowHiddenRanges = false) {\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        if (belowHiddenRanges) {\n            while (lineIndex < this.modelLineProjections.length && !this.modelLineProjections[lineIndex].isVisible()) {\n                lineIndex++;\n                lineIndexChanged = true;\n            }\n        }\n        else {\n            while (lineIndex > 0 && !this.modelLineProjections[lineIndex].isVisible()) {\n                lineIndex--;\n                lineIndexChanged = true;\n            }\n        }\n        if (lineIndex === 0 && !this.modelLineProjections[lineIndex].isVisible()) {\n            // Could not reach a real line\n            // console.log('in -> out ' + inputLineNumber + ',' + inputColumn + ' ===> ' + 1 + ',' + 1);\n            // TODO@alexdima@hediet this isn't soo pretty\n            return new Position(allowZeroLineNumber ? 0 : 1, 1);\n        }\n        const deltaLineNumber = 1 + this.projectedModelLineLineCounts.getPrefixSum(lineIndex);\n        let r;\n        if (lineIndexChanged) {\n            if (belowHiddenRanges) {\n                r = this.modelLineProjections[lineIndex].getViewPositionOfModelPosition(deltaLineNumber, 1, affinity);\n            }\n            else {\n                r = this.modelLineProjections[lineIndex].getViewPositionOfModelPosition(deltaLineNumber, this.model.getLineMaxColumn(lineIndex + 1), affinity);\n            }\n        }\n        else {\n            r = this.modelLineProjections[inputLineNumber - 1].getViewPositionOfModelPosition(deltaLineNumber, inputColumn, affinity);\n        }\n        // console.log('in -> out ' + inputLineNumber + ',' + inputColumn + ' ===> ' + r.lineNumber + ',' + r);\n        return r;\n    }\n    /**\n     * @param affinity The affinity in case of an empty range. Has no effect for non-empty ranges.\n    */\n    convertModelRangeToViewRange(modelRange, affinity = 0 /* PositionAffinity.Left */) {\n        if (modelRange.isEmpty()) {\n            const start = this.convertModelPositionToViewPosition(modelRange.startLineNumber, modelRange.startColumn, affinity);\n            return Range.fromPositions(start);\n        }\n        else {\n            const start = this.convertModelPositionToViewPosition(modelRange.startLineNumber, modelRange.startColumn, 1 /* PositionAffinity.Right */);\n            const end = this.convertModelPositionToViewPosition(modelRange.endLineNumber, modelRange.endColumn, 0 /* PositionAffinity.Left */);\n            return new Range(start.lineNumber, start.column, end.lineNumber, end.column);\n        }\n    }\n    getViewLineNumberOfModelPosition(modelLineNumber, modelColumn) {\n        let lineIndex = modelLineNumber - 1;\n        if (this.modelLineProjections[lineIndex].isVisible()) {\n            // this model line is visible\n            const deltaLineNumber = 1 + this.projectedModelLineLineCounts.getPrefixSum(lineIndex);\n            return this.modelLineProjections[lineIndex].getViewLineNumberOfModelPosition(deltaLineNumber, modelColumn);\n        }\n        // this model line is not visible\n        while (lineIndex > 0 && !this.modelLineProjections[lineIndex].isVisible()) {\n            lineIndex--;\n        }\n        if (lineIndex === 0 && !this.modelLineProjections[lineIndex].isVisible()) {\n            // Could not reach a real line\n            return 1;\n        }\n        const deltaLineNumber = 1 + this.projectedModelLineLineCounts.getPrefixSum(lineIndex);\n        return this.modelLineProjections[lineIndex].getViewLineNumberOfModelPosition(deltaLineNumber, this.model.getLineMaxColumn(lineIndex + 1));\n    }\n    getDecorationsInRange(range, ownerId, filterOutValidation, onlyMinimapDecorations, onlyMarginDecorations) {\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, onlyMinimapDecorations, onlyMarginDecorations);\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.modelLineProjections[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, onlyMinimapDecorations));\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, onlyMinimapDecorations));\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        const finalResult = [];\n        let 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    getInjectedTextAt(position) {\n        const info = this.getViewLineInfo(position.lineNumber);\n        return this.modelLineProjections[info.modelLineNumber - 1].getInjectedTextAt(info.modelLineWrappedLineIdx, position.column);\n    }\n    normalizePosition(position, affinity) {\n        const info = this.getViewLineInfo(position.lineNumber);\n        return this.modelLineProjections[info.modelLineNumber - 1].normalizePosition(info.modelLineWrappedLineIdx, position, affinity);\n    }\n    getLineIndentColumn(lineNumber) {\n        const info = this.getViewLineInfo(lineNumber);\n        if (info.modelLineWrappedLineIdx === 0) {\n            return this.model.getLineIndentColumn(info.modelLineNumber);\n        }\n        // wrapped lines have no indentation.\n        // We deliberately don't handle the case that indentation is wrapped\n        // to avoid two view lines reporting indentation for the very same model line.\n        return 0;\n    }\n}\n/**\n * Overlapping unsorted ranges:\n * [   )      [ )       [  )\n *    [    )      [       )\n * ->\n * Non overlapping sorted ranges:\n * [       )  [ ) [        )\n *\n * Note: This function only considers line information! Columns are ignored.\n*/\nfunction normalizeLineRanges(ranges) {\n    if (ranges.length === 0) {\n        return [];\n    }\n    const sortedRanges = ranges.slice();\n    sortedRanges.sort(Range.compareRangesUsingStarts);\n    const result = [];\n    let currentRangeStart = sortedRanges[0].startLineNumber;\n    let currentRangeEnd = sortedRanges[0].endLineNumber;\n    for (let i = 1, len = sortedRanges.length; i < len; i++) {\n        const range = sortedRanges[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/**\n * Represents a view line. Can be used to efficiently query more information about it.\n */\nclass ViewLineInfo {\n    constructor(modelLineNumber, modelLineWrappedLineIdx) {\n        this.modelLineNumber = modelLineNumber;\n        this.modelLineWrappedLineIdx = modelLineWrappedLineIdx;\n    }\n}\n/**\n * A list of view lines that have a contiguous span in the model.\n*/\nclass ViewLineInfoGroupedByModelRange {\n    constructor(modelRange, viewLines) {\n        this.modelRange = modelRange;\n        this.viewLines = viewLines;\n    }\n}\nclass 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, affinity, allowZero, belowHiddenRanges) {\n        return this._lines.convertModelPositionToViewPosition(modelPosition.lineNumber, modelPosition.column, affinity, allowZero, belowHiddenRanges);\n    }\n    convertModelRangeToViewRange(modelRange, affinity) {\n        return this._lines.convertModelRangeToViewRange(modelRange, affinity);\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    getViewLineNumberOfModelPosition(modelLineNumber, modelColumn) {\n        return this._lines.getViewLineNumberOfModelPosition(modelLineNumber, modelColumn);\n    }\n}\nexport class ViewModelLinesFromModelAsIs {\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        const result = [];\n        return {\n            addRequest: (lineText, injectedText, 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, 1), 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    getViewLinesBracketGuides(startLineNumber, endLineNumber, activePosition) {\n        return new Array(endLineNumber - startLineNumber + 1).fill([]);\n    }\n    getViewLinesIndentGuides(viewStartLineNumber, viewEndLineNumber) {\n        const viewLineCount = viewEndLineNumber - viewStartLineNumber + 1;\n        const 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        const lineTokens = this.model.tokenization.getLineTokens(viewLineNumber);\n        const lineContent = lineTokens.getLineContent();\n        return new ViewLineData(lineContent, false, 1, lineContent.length + 1, 0, lineTokens.inflate(), null);\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        const result = [];\n        for (let lineNumber = viewStartLineNumber; lineNumber <= viewEndLineNumber; lineNumber++) {\n            const idx = lineNumber - viewStartLineNumber;\n            result[idx] = needed[idx] ? this.getViewLineData(lineNumber) : null;\n        }\n        return result;\n    }\n    getDecorationsInRange(range, ownerId, filterOutValidation, onlyMinimapDecorations, onlyMarginDecorations) {\n        return this.model.getDecorationsInRange(range, ownerId, filterOutValidation, onlyMinimapDecorations, onlyMarginDecorations);\n    }\n    normalizePosition(position, affinity) {\n        return this.model.normalizePosition(position, affinity);\n    }\n    getLineIndentColumn(lineNumber) {\n        return this.model.getLineIndentColumn(lineNumber);\n    }\n    getInjectedTextAt(position) {\n        // Identity lines collection does not support injected text.\n        return null;\n    }\n}\nclass 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    getViewLineNumberOfModelPosition(modelLineNumber, modelColumn) {\n        return modelLineNumber;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { GlyphMarginLane } from '../model.js';\nconst MAX_LANE = GlyphMarginLane.Right;\nexport class GlyphMarginLanesModel {\n    constructor(maxLine) {\n        this.persist = 0;\n        this._requiredLanes = 1; // always render at least one lane\n        this.lanes = new Uint8Array(Math.ceil(((maxLine + 1) * MAX_LANE) / 8));\n    }\n    reset(maxLine) {\n        const bytes = Math.ceil(((maxLine + 1) * MAX_LANE) / 8);\n        if (this.lanes.length < bytes) {\n            this.lanes = new Uint8Array(bytes);\n        }\n        else {\n            this.lanes.fill(0);\n        }\n        this._requiredLanes = 1;\n    }\n    get requiredLanes() {\n        return this._requiredLanes;\n    }\n    push(lane, range, persist) {\n        if (persist) {\n            this.persist |= (1 << (lane - 1));\n        }\n        for (let i = range.startLineNumber; i <= range.endLineNumber; i++) {\n            const bit = (MAX_LANE * i) + (lane - 1);\n            this.lanes[bit >>> 3] |= (1 << (bit % 8));\n            this._requiredLanes = Math.max(this._requiredLanes, this.countAtLine(i));\n        }\n    }\n    getLanesAtLine(lineNumber) {\n        const lanes = [];\n        let bit = MAX_LANE * lineNumber;\n        for (let i = 0; i < MAX_LANE; i++) {\n            if (this.persist & (1 << i) || this.lanes[bit >>> 3] & (1 << (bit % 8))) {\n                lanes.push(i + 1);\n            }\n            bit++;\n        }\n        return lanes.length ? lanes : [GlyphMarginLane.Center];\n    }\n    countAtLine(lineNumber) {\n        let bit = MAX_LANE * lineNumber;\n        let count = 0;\n        for (let i = 0; i < MAX_LANE; i++) {\n            if (this.persist & (1 << i) || this.lanes[bit >>> 3] & (1 << (bit % 8))) {\n                count++;\n            }\n            bit++;\n        }\n        return count;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { ArrayQueue } from '../../../base/common/arrays.js';\nimport { RunOnceScheduler } from '../../../base/common/async.js';\nimport { Color } from '../../../base/common/color.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 { EDITOR_FONT_DEFAULTS, filterValidationDecorations } from '../config/editorOptions.js';\nimport { CursorsController } from '../cursor/cursor.js';\nimport { CursorConfiguration } from '../cursorCommon.js';\nimport { Position } from '../core/position.js';\nimport { Range } from '../core/range.js';\nimport * as textModelEvents from '../textModelEvents.js';\nimport { TokenizationRegistry } from '../languages.js';\nimport { PLAINTEXT_LANGUAGE_ID } from '../languages/modesRegistry.js';\nimport { tokenizeLineToHTML } from '../languages/textToHtmlTokenizer.js';\nimport * as viewEvents from '../viewEvents.js';\nimport { ViewLayout } from '../viewLayout/viewLayout.js';\nimport { MinimapTokensColorTracker } from './minimapTokensColorTracker.js';\nimport { MinimapLinesRenderingData, OverviewRulerDecorationsGroup, ViewLineRenderingData } from '../viewModel.js';\nimport { ViewModelDecorations } from './viewModelDecorations.js';\nimport { FocusChangedEvent, HiddenAreasChangedEvent, ModelContentChangedEvent, ModelDecorationsChangedEvent, ModelLanguageChangedEvent, ModelLanguageConfigurationChangedEvent, ModelOptionsChangedEvent, ModelTokensChangedEvent, ReadOnlyEditAttemptEvent, ScrollChangedEvent, ViewModelEventDispatcher, ViewZonesChangedEvent } from '../viewModelEventDispatcher.js';\nimport { ViewModelLinesFromModelAsIs, ViewModelLinesFromProjectedModel } from './viewModelLines.js';\nimport { GlyphMarginLanesModel } from './glyphLanesModel.js';\nconst USE_IDENTITY_LINES_COLLECTION = true;\nexport class ViewModel extends Disposable {\n    constructor(editorId, configuration, model, domLineBreaksComputerFactory, monospaceLineBreaksComputerFactory, scheduleAtNextAnimationFrame, languageConfigurationService, _themeService, _attachedView, _transactionalTarget) {\n        super();\n        this.languageConfigurationService = languageConfigurationService;\n        this._themeService = _themeService;\n        this._attachedView = _attachedView;\n        this._transactionalTarget = _transactionalTarget;\n        this.hiddenAreasModel = new HiddenAreasModel();\n        this.previousHiddenAreas = [];\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.getLanguageId(), this.model.getOptions(), this._configuration, this.languageConfigurationService);\n        this._updateConfigurationViewLineCount = this._register(new RunOnceScheduler(() => this._updateConfigurationViewLineCountNow(), 0));\n        this._hasFocus = false;\n        this._viewportStart = ViewportStart.create(this.model);\n        this.glyphLanes = new GlyphMarginLanesModel(0);\n        if (USE_IDENTITY_LINES_COLLECTION && this.model.isTooLargeForTokenization()) {\n            this._lines = new ViewModelLinesFromModelAsIs(this.model);\n        }\n        else {\n            const options = this._configuration.options;\n            const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n            const wrappingStrategy = options.get(140 /* EditorOption.wrappingStrategy */);\n            const wrappingInfo = options.get(147 /* EditorOption.wrappingInfo */);\n            const wrappingIndent = options.get(139 /* EditorOption.wrappingIndent */);\n            const wordBreak = options.get(130 /* EditorOption.wordBreak */);\n            this._lines = new ViewModelLinesFromProjectedModel(this._editorId, this.model, domLineBreaksComputerFactory, monospaceLineBreaksComputerFactory, fontInfo, this.model.getOptions().tabSize, wrappingStrategy, wrappingInfo.wrappingColumn, wrappingIndent, wordBreak);\n        }\n        this.coordinatesConverter = this._lines.createCoordinatesConverter();\n        this._cursor = this._register(new CursorsController(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._handleVisibleLinesChanged();\n            }\n            if (e.scrollTopChanged) {\n                this._viewportStart.invalidate();\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._register(this._themeService.onDidColorThemeChange((theme) => {\n            this._invalidateDecorationsColorCache();\n            this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewThemeChangedEvent(theme));\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._viewportStart.dispose();\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    getModelVisibleRanges() {\n        const linesViewportData = this.viewLayout.getLinesViewportData();\n        const viewVisibleRange = new Range(linesViewportData.startLineNumber, this.getLineMinColumn(linesViewportData.startLineNumber), linesViewportData.endLineNumber, this.getLineMaxColumn(linesViewportData.endLineNumber));\n        const modelVisibleRanges = this._toModelVisibleRanges(viewVisibleRange);\n        return modelVisibleRanges;\n    }\n    visibleLinesStabilized() {\n        const modelVisibleRanges = this.getModelVisibleRanges();\n        this._attachedView.setVisibleLines(modelVisibleRanges, true);\n    }\n    _handleVisibleLinesChanged() {\n        const modelVisibleRanges = this.getModelVisibleRanges();\n        this._attachedView.setVisibleLines(modelVisibleRanges, false);\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    _captureStableViewport() {\n        // We might need to restore the current start view range, so save it (if available)\n        // But only if the scroll position is not at the top of the file\n        if (this._viewportStart.isValid && this.viewLayout.getCurrentScrollTop() > 0) {\n            const previousViewportStartViewPosition = new Position(this._viewportStart.viewLineNumber, this.getLineMinColumn(this._viewportStart.viewLineNumber));\n            const previousViewportStartModelPosition = this.coordinatesConverter.convertViewPositionToModelPosition(previousViewportStartViewPosition);\n            return new StableViewport(previousViewportStartModelPosition, this._viewportStart.startLineDelta);\n        }\n        return new StableViewport(null, 0);\n    }\n    _onConfigurationChanged(eventsCollector, e) {\n        const stableViewport = this._captureStableViewport();\n        const options = this._configuration.options;\n        const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n        const wrappingStrategy = options.get(140 /* EditorOption.wrappingStrategy */);\n        const wrappingInfo = options.get(147 /* EditorOption.wrappingInfo */);\n        const wrappingIndent = options.get(139 /* EditorOption.wrappingIndent */);\n        const wordBreak = options.get(130 /* EditorOption.wordBreak */);\n        if (this._lines.setWrappingSettings(fontInfo, wrappingStrategy, wrappingInfo.wrappingColumn, wrappingIndent, wordBreak)) {\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._updateConfigurationViewLineCount.schedule();\n        }\n        if (e.hasChanged(92 /* EditorOption.readOnly */)) {\n            // Must read again all decorations due to readOnly filtering\n            this._decorations.reset();\n            eventsCollector.emitViewEvent(new viewEvents.ViewDecorationsChangedEvent(null));\n        }\n        if (e.hasChanged(99 /* EditorOption.renderValidationDecorations */)) {\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        stableViewport.recoverViewportStart(this.coordinatesConverter, this.viewLayout);\n        if (CursorConfiguration.shouldRecreate(e)) {\n            this.cursorConfig = new CursorConfiguration(this.model.getLanguageId(), this.model.getOptions(), this._configuration, this.languageConfigurationService);\n            this._cursor.updateConfiguration(this.cursorConfig);\n        }\n    }\n    _registerModelEvents() {\n        this._register(this.model.onDidChangeContentOrInjectedText((e) => {\n            try {\n                const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n                let hadOtherModelChange = false;\n                let hadModelLineChangeThatChangedLineMapping = false;\n                const changes = (e instanceof textModelEvents.InternalModelContentChangeEvent ? e.rawContentChangedEvent.changes : e.changes);\n                const versionId = (e instanceof textModelEvents.InternalModelContentChangeEvent ? e.rawContentChangedEvent.versionId : null);\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 /* textModelEvents.RawContentChangedType.LinesInserted */: {\n                            for (let lineIdx = 0; lineIdx < change.detail.length; lineIdx++) {\n                                const line = change.detail[lineIdx];\n                                let injectedText = change.injectedTexts[lineIdx];\n                                if (injectedText) {\n                                    injectedText = injectedText.filter(element => (!element.ownerId || element.ownerId === this._editorId));\n                                }\n                                lineBreaksComputer.addRequest(line, injectedText, null);\n                            }\n                            break;\n                        }\n                        case 2 /* textModelEvents.RawContentChangedType.LineChanged */: {\n                            let injectedText = null;\n                            if (change.injectedText) {\n                                injectedText = change.injectedText.filter(element => (!element.ownerId || element.ownerId === this._editorId));\n                            }\n                            lineBreaksComputer.addRequest(change.detail, injectedText, null);\n                            break;\n                        }\n                    }\n                }\n                const lineBreaks = lineBreaksComputer.finalize();\n                const lineBreakQueue = new ArrayQueue(lineBreaks);\n                for (const change of changes) {\n                    switch (change.changeType) {\n                        case 1 /* textModelEvents.RawContentChangedType.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 /* textModelEvents.RawContentChangedType.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 /* textModelEvents.RawContentChangedType.LinesInserted */: {\n                            const insertedLineBreaks = lineBreakQueue.takeCount(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 /* textModelEvents.RawContentChangedType.LineChanged */: {\n                            const changedLineBreakData = lineBreakQueue.dequeue();\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 /* textModelEvents.RawContentChangedType.EOLChanged */: {\n                            // Nothing to do. The new version will be accepted below\n                            break;\n                        }\n                    }\n                }\n                if (versionId !== null) {\n                    this._lines.acceptVersionId(versionId);\n                }\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            const viewportStartWasValid = this._viewportStart.isValid;\n            this._viewportStart.invalidate();\n            this._configuration.setModelLineCount(this.model.getLineCount());\n            this._updateConfigurationViewLineCountNow();\n            // Recover viewport\n            if (!this._hasFocus && this.model.getAttachedEditorCount() >= 2 && viewportStartWasValid) {\n                const modelRange = this.model._getTrackedRange(this._viewportStart.modelTrackedRange);\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._viewportStart.startLineDelta }, 1 /* ScrollType.Immediate */);\n                }\n            }\n            try {\n                const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n                if (e instanceof textModelEvents.InternalModelContentChangeEvent) {\n                    eventsCollector.emitOutgoingEvent(new ModelContentChangedEvent(e.contentChangedEvent));\n                }\n                this._cursor.onModelContentChanged(eventsCollector, e);\n            }\n            finally {\n                this._eventDispatcher.endEmitViewEvents();\n            }\n            this._handleVisibleLinesChanged();\n        }));\n        this._register(this.model.onDidChangeTokens((e) => {\n            const 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            this._eventDispatcher.emitOutgoingEvent(new ModelTokensChangedEvent(e));\n        }));\n        this._register(this.model.onDidChangeLanguageConfiguration((e) => {\n            this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewLanguageConfigurationEvent());\n            this.cursorConfig = new CursorConfiguration(this.model.getLanguageId(), this.model.getOptions(), this._configuration, this.languageConfigurationService);\n            this._cursor.updateConfiguration(this.cursorConfig);\n            this._eventDispatcher.emitOutgoingEvent(new ModelLanguageConfigurationChangedEvent(e));\n        }));\n        this._register(this.model.onDidChangeLanguage((e) => {\n            this.cursorConfig = new CursorConfiguration(this.model.getLanguageId(), this.model.getOptions(), this._configuration, this.languageConfigurationService);\n            this._cursor.updateConfiguration(this.cursorConfig);\n            this._eventDispatcher.emitOutgoingEvent(new ModelLanguageChangedEvent(e));\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.getLanguageId(), this.model.getOptions(), this._configuration, this.languageConfigurationService);\n            this._cursor.updateConfiguration(this.cursorConfig);\n            this._eventDispatcher.emitOutgoingEvent(new ModelOptionsChangedEvent(e));\n        }));\n        this._register(this.model.onDidChangeDecorations((e) => {\n            this._decorations.onModelDecorationsChanged();\n            this._eventDispatcher.emitSingleViewEvent(new viewEvents.ViewDecorationsChangedEvent(e));\n            this._eventDispatcher.emitOutgoingEvent(new ModelDecorationsChangedEvent(e));\n        }));\n    }\n    setHiddenAreas(ranges, source) {\n        this.hiddenAreasModel.setHiddenAreas(source, ranges);\n        const mergedRanges = this.hiddenAreasModel.getMergedRanges();\n        if (mergedRanges === this.previousHiddenAreas) {\n            return;\n        }\n        this.previousHiddenAreas = mergedRanges;\n        const stableViewport = this._captureStableViewport();\n        let lineMappingChanged = false;\n        try {\n            const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n            lineMappingChanged = this._lines.setHiddenAreas(mergedRanges);\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            const firstModelLineInViewPort = stableViewport.viewportStartModelPosition?.lineNumber;\n            const firstModelLineIsHidden = firstModelLineInViewPort && mergedRanges.some(range => range.startLineNumber <= firstModelLineInViewPort && firstModelLineInViewPort <= range.endLineNumber);\n            if (!firstModelLineIsHidden) {\n                stableViewport.recoverViewportStart(this.coordinatesConverter, this.viewLayout);\n            }\n        }\n        finally {\n            this._eventDispatcher.endEmitViewEvents();\n        }\n        this._updateConfigurationViewLineCount.schedule();\n        if (lineMappingChanged) {\n            this._eventDispatcher.emitOutgoingEvent(new HiddenAreasChangedEvent());\n        }\n    }\n    getVisibleRangesPlusViewportAboveBelow() {\n        const layoutInfo = this._configuration.options.get(146 /* EditorOption.layoutInfo */);\n        const lineHeight = this._configuration.options.get(67 /* EditorOption.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    getHiddenAreas() {\n        return this._lines.getHiddenAreas();\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        const result = [];\n        let resultLen = 0;\n        let startLineNumber = visibleRange.startLineNumber;\n        let startColumn = visibleRange.startColumn;\n        const endLineNumber = visibleRange.endLineNumber;\n        const 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    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._viewportStart.update(this, startLineNumber);\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    getBracketGuidesInRangeByLine(startLineNumber, endLineNumber, activePosition, options) {\n        return this._lines.getViewLinesBracketGuides(startLineNumber, endLineNumber, activePosition, options);\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    getMinimapDecorationsInRange(range) {\n        return this._decorations.getMinimapDecorationsInRange(range);\n    }\n    getDecorationsInViewport(visibleRange) {\n        return this._decorations.getDecorationsViewportData(visibleRange).decorations;\n    }\n    getInjectedTextAt(viewPosition) {\n        return this._lines.getInjectedTextAt(viewPosition);\n    }\n    getViewportViewLineRenderingData(visibleRange, lineNumber) {\n        const allInlineDecorations = this._decorations.getDecorationsViewportData(visibleRange).inlineDecorations;\n        const inlineDecorations = allInlineDecorations[lineNumber - visibleRange.startLineNumber];\n        return this._getViewLineRenderingData(lineNumber, inlineDecorations);\n    }\n    getViewLineRenderingData(lineNumber) {\n        const inlineDecorations = this._decorations.getInlineDecorationsOnLine(lineNumber);\n        return this._getViewLineRenderingData(lineNumber, inlineDecorations);\n    }\n    _getViewLineRenderingData(lineNumber, inlineDecorations) {\n        const mightContainRTL = this.model.mightContainRTL();\n        const mightContainNonBasicASCII = this.model.mightContainNonBasicASCII();\n        const tabSize = this.getTabSize();\n        const lineData = this._lines.getViewLineData(lineNumber);\n        if (lineData.inlineDecorations) {\n            inlineDecorations = [\n                ...inlineDecorations,\n                ...lineData.inlineDecorations.map(d => d.toInlineDecoration(lineNumber))\n            ];\n        }\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        const result = this._lines.getViewLinesData(startLineNumber, endLineNumber, needed);\n        return new MinimapLinesRenderingData(this.getTabSize(), result);\n    }\n    getAllOverviewRulerDecorations(theme) {\n        const decorations = this.model.getOverviewRulerDecorations(this._editorId, filterValidationDecorations(this._configuration.options));\n        const result = new OverviewRulerDecorations();\n        for (const decoration of decorations) {\n            const decorationOptions = decoration.options;\n            const opts = decorationOptions.overviewRuler;\n            if (!opts) {\n                continue;\n            }\n            const lane = opts.position;\n            if (lane === 0) {\n                continue;\n            }\n            const color = opts.getColor(theme.value);\n            const viewStartLineNumber = this.coordinatesConverter.getViewLineNumberOfModelPosition(decoration.range.startLineNumber, decoration.range.startColumn);\n            const viewEndLineNumber = this.coordinatesConverter.getViewLineNumberOfModelPosition(decoration.range.endLineNumber, decoration.range.endColumn);\n            result.accept(color, decorationOptions.zIndex, viewStartLineNumber, viewEndLineNumber, lane);\n        }\n        return result.asArray;\n    }\n    _invalidateDecorationsColorCache() {\n        const decorations = this.model.getOverviewRulerDecorations();\n        for (const decoration of decorations) {\n            const opts1 = decoration.options.overviewRuler;\n            opts1?.invalidateCachedColor();\n            const opts2 = decoration.options.minimap;\n            opts2?.invalidateCachedColor();\n        }\n    }\n    getValueInRange(range, eol) {\n        const modelRange = this.coordinatesConverter.convertViewRangeToModelRange(range);\n        return this.model.getValueInRange(modelRange, eol);\n    }\n    getValueLengthInRange(range, eol) {\n        const modelRange = this.coordinatesConverter.convertViewRangeToModelRange(range);\n        return this.model.getValueLengthInRange(modelRange, eol);\n    }\n    modifyPosition(position, offset) {\n        const modelPosition = this.coordinatesConverter.convertViewPositionToModelPosition(position);\n        const resultModelPosition = this.model.modifyPosition(modelPosition, offset);\n        return this.coordinatesConverter.convertModelPositionToViewPosition(resultModelPosition);\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    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            const 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 /* EndOfLinePreference.CRLF */ : 0 /* EndOfLinePreference.TextDefined */));\n                }\n                prevModelLineNumber = modelLineNumber;\n            }\n            return result.length === 1 ? result[0] : result;\n        }\n        const result = [];\n        for (const modelRange of modelRanges) {\n            if (!modelRange.isEmpty()) {\n                result.push(this.model.getValueInRange(modelRange, forceCRLF ? 2 /* EndOfLinePreference.CRLF */ : 0 /* EndOfLinePreference.TextDefined */));\n            }\n        }\n        return result.length === 1 ? result[0] : result;\n    }\n    getRichTextToCopy(modelRanges, emptySelectionClipboard) {\n        const languageId = this.model.getLanguageId();\n        if (languageId === PLAINTEXT_LANGUAGE_ID) {\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(50 /* EditorOption.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,\n            html: (`<div style=\"`\n                + `color: ${colorMap[1 /* ColorId.DefaultForeground */]};`\n                + `background-color: ${colorMap[2 /* ColorId.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.tokenization.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        const colorMap = TokenizationRegistry.getColorMap();\n        const 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 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        return 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 /* CursorChangeReason.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._executeCursorEdit(eventsCollector => this._cursor.startComposition(eventsCollector));\n    }\n    endComposition(source) {\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    revealAllCursors(source, revealHorizontal, minimalReveal = false) {\n        this._withViewEventsCollector(eventsCollector => this._cursor.revealAll(eventsCollector, source, minimalReveal, 0 /* viewEvents.VerticalRevealType.Simple */, revealHorizontal, 0 /* ScrollType.Smooth */));\n    }\n    revealPrimaryCursor(source, revealHorizontal, minimalReveal = false) {\n        this._withViewEventsCollector(eventsCollector => this._cursor.revealPrimary(eventsCollector, source, minimalReveal, 0 /* viewEvents.VerticalRevealType.Simple */, revealHorizontal, 0 /* ScrollType.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, false, viewRange, null, 0 /* viewEvents.VerticalRevealType.Simple */, true, 0 /* ScrollType.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, false, viewRange, null, 0 /* viewEvents.VerticalRevealType.Simple */, true, 0 /* ScrollType.Smooth */)));\n    }\n    revealRange(source, revealHorizontal, viewRange, verticalType, scrollType) {\n        this._withViewEventsCollector(eventsCollector => eventsCollector.emitViewEvent(new viewEvents.ViewRevealRangeRequestEvent(source, false, viewRange, null, verticalType, revealHorizontal, scrollType)));\n    }\n    //#endregion\n    //#region viewLayout\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    //#endregion\n    _withViewEventsCollector(callback) {\n        return this._transactionalTarget.batchChanges(() => {\n            try {\n                const eventsCollector = this._eventDispatcher.beginEmitViewEvents();\n                return callback(eventsCollector);\n            }\n            finally {\n                this._eventDispatcher.endEmitViewEvents();\n            }\n        });\n    }\n    batchEvents(callback) {\n        this._withViewEventsCollector(() => { callback(); });\n    }\n    normalizePosition(position, affinity) {\n        return this._lines.normalizePosition(position, affinity);\n    }\n    /**\n     * Gets the column at which indentation stops at a given line.\n     * @internal\n    */\n    getLineIndentColumn(lineNumber) {\n        return this._lines.getLineIndentColumn(lineNumber);\n    }\n}\nclass ViewportStart {\n    static create(model) {\n        const viewportStartLineTrackedRange = model._setTrackedRange(null, new Range(1, 1, 1, 1), 1 /* TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges */);\n        return new ViewportStart(model, 1, false, viewportStartLineTrackedRange, 0);\n    }\n    get viewLineNumber() {\n        return this._viewLineNumber;\n    }\n    get isValid() {\n        return this._isValid;\n    }\n    get modelTrackedRange() {\n        return this._modelTrackedRange;\n    }\n    get startLineDelta() {\n        return this._startLineDelta;\n    }\n    constructor(_model, _viewLineNumber, _isValid, _modelTrackedRange, _startLineDelta) {\n        this._model = _model;\n        this._viewLineNumber = _viewLineNumber;\n        this._isValid = _isValid;\n        this._modelTrackedRange = _modelTrackedRange;\n        this._startLineDelta = _startLineDelta;\n    }\n    dispose() {\n        this._model._setTrackedRange(this._modelTrackedRange, null, 1 /* TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges */);\n    }\n    update(viewModel, startLineNumber) {\n        const position = viewModel.coordinatesConverter.convertViewPositionToModelPosition(new Position(startLineNumber, viewModel.getLineMinColumn(startLineNumber)));\n        const viewportStartLineTrackedRange = viewModel.model._setTrackedRange(this._modelTrackedRange, new Range(position.lineNumber, position.column, position.lineNumber, position.column), 1 /* TrackedRangeStickiness.NeverGrowsWhenTypingAtEdges */);\n        const viewportStartLineTop = viewModel.viewLayout.getVerticalOffsetForLineNumber(startLineNumber);\n        const scrollTop = viewModel.viewLayout.getCurrentScrollTop();\n        this._viewLineNumber = startLineNumber;\n        this._isValid = true;\n        this._modelTrackedRange = viewportStartLineTrackedRange;\n        this._startLineDelta = scrollTop - viewportStartLineTop;\n    }\n    invalidate() {\n        this._isValid = false;\n    }\n}\nclass OverviewRulerDecorations {\n    constructor() {\n        this._asMap = Object.create(null);\n        this.asArray = [];\n    }\n    accept(color, zIndex, startLineNumber, endLineNumber, lane) {\n        const prevGroup = this._asMap[color];\n        if (prevGroup) {\n            const prevData = prevGroup.data;\n            const prevLane = prevData[prevData.length - 3];\n            const prevEndLineNumber = prevData[prevData.length - 1];\n            if (prevLane === lane && prevEndLineNumber + 1 >= startLineNumber) {\n                // merge into prev\n                if (endLineNumber > prevEndLineNumber) {\n                    prevData[prevData.length - 1] = endLineNumber;\n                }\n                return;\n            }\n            // push\n            prevData.push(lane, startLineNumber, endLineNumber);\n        }\n        else {\n            const group = new OverviewRulerDecorationsGroup(color, zIndex, [lane, startLineNumber, endLineNumber]);\n            this._asMap[color] = group;\n            this.asArray.push(group);\n        }\n    }\n}\nclass HiddenAreasModel {\n    constructor() {\n        this.hiddenAreas = new Map();\n        this.shouldRecompute = false;\n        this.ranges = [];\n    }\n    setHiddenAreas(source, ranges) {\n        const existing = this.hiddenAreas.get(source);\n        if (existing && rangeArraysEqual(existing, ranges)) {\n            return;\n        }\n        this.hiddenAreas.set(source, ranges);\n        this.shouldRecompute = true;\n    }\n    /**\n     * The returned array is immutable.\n    */\n    getMergedRanges() {\n        if (!this.shouldRecompute) {\n            return this.ranges;\n        }\n        this.shouldRecompute = false;\n        const newRanges = Array.from(this.hiddenAreas.values()).reduce((r, hiddenAreas) => mergeLineRangeArray(r, hiddenAreas), []);\n        if (rangeArraysEqual(this.ranges, newRanges)) {\n            return this.ranges;\n        }\n        this.ranges = newRanges;\n        return this.ranges;\n    }\n}\nfunction mergeLineRangeArray(arr1, arr2) {\n    const result = [];\n    let i = 0;\n    let j = 0;\n    while (i < arr1.length && j < arr2.length) {\n        const item1 = arr1[i];\n        const item2 = arr2[j];\n        if (item1.endLineNumber < item2.startLineNumber - 1) {\n            result.push(arr1[i++]);\n        }\n        else if (item2.endLineNumber < item1.startLineNumber - 1) {\n            result.push(arr2[j++]);\n        }\n        else {\n            const startLineNumber = Math.min(item1.startLineNumber, item2.startLineNumber);\n            const endLineNumber = Math.max(item1.endLineNumber, item2.endLineNumber);\n            result.push(new Range(startLineNumber, 1, endLineNumber, 1));\n            i++;\n            j++;\n        }\n    }\n    while (i < arr1.length) {\n        result.push(arr1[i++]);\n    }\n    while (j < arr2.length) {\n        result.push(arr2[j++]);\n    }\n    return result;\n}\nfunction rangeArraysEqual(arr1, arr2) {\n    if (arr1.length !== arr2.length) {\n        return false;\n    }\n    for (let i = 0; i < arr1.length; i++) {\n        if (!arr1[i].equalsRange(arr2[i])) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Maintain a stable viewport by trying to keep the first line in the viewport constant.\n */\nclass StableViewport {\n    constructor(viewportStartModelPosition, startLineDelta) {\n        this.viewportStartModelPosition = viewportStartModelPosition;\n        this.startLineDelta = startLineDelta;\n    }\n    recoverViewportStart(coordinatesConverter, viewLayout) {\n        if (!this.viewportStartModelPosition) {\n            return;\n        }\n        const viewPosition = coordinatesConverter.convertModelPositionToViewPosition(this.viewportStartModelPosition);\n        const viewPositionTop = viewLayout.getVerticalOffsetForLineNumber(viewPosition.lineNumber);\n        viewLayout.setScrollPosition({ scrollTop: viewPositionTop + this.startLineDelta }, 1 /* ScrollType.Immediate */);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 CodeEditorWidget_1;\nimport '../../services/markerDecorations.js';\nimport * as dom from '../../../../base/browser/dom.js';\nimport { onUnexpectedError } from '../../../../base/common/errors.js';\nimport { Emitter, createEventDeliveryQueue } from '../../../../base/common/event.js';\nimport { Disposable, dispose } from '../../../../base/common/lifecycle.js';\nimport { Schemas } from '../../../../base/common/network.js';\nimport './editor.css';\nimport { applyFontInfo } from '../../config/domFontInfo.js';\nimport { EditorConfiguration } from '../../config/editorConfiguration.js';\nimport { TabFocus } from '../../config/tabFocus.js';\nimport { EditorExtensionsRegistry } from '../../editorExtensions.js';\nimport { ICodeEditorService } from '../../services/codeEditorService.js';\nimport { View } from '../../view.js';\nimport { DOMLineBreaksComputerFactory } from '../../view/domLineBreaksComputer.js';\nimport { ViewUserInputEvents } from '../../view/viewUserInputEvents.js';\nimport { CodeEditorContributions } from './codeEditorContributions.js';\nimport { filterValidationDecorations } from '../../../common/config/editorOptions.js';\nimport { CursorColumns } from '../../../common/core/cursorColumns.js';\nimport { editorUnnecessaryCodeOpacity } from '../../../common/core/editorColorRegistry.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { WordOperations } from '../../../common/cursor/cursorWordOperations.js';\nimport { InternalEditorAction } from '../../../common/editorAction.js';\nimport * as editorCommon from '../../../common/editorCommon.js';\nimport { EditorContextKeys } from '../../../common/editorContextKeys.js';\nimport { ILanguageConfigurationService } from '../../../common/languages/languageConfigurationRegistry.js';\nimport { ModelDecorationOptions } from '../../../common/model/textModel.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { MonospaceLineBreaksComputerFactory } from '../../../common/viewModel/monospaceLineBreaksComputer.js';\nimport { ViewModel } from '../../../common/viewModel/viewModelImpl.js';\nimport * as nls from '../../../../nls.js';\nimport { IAccessibilityService } from '../../../../platform/accessibility/common/accessibility.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, Severity } from '../../../../platform/notification/common/notification.js';\nimport { editorErrorForeground, editorHintForeground, editorInfoForeground, editorWarningForeground } from '../../../../platform/theme/common/colorRegistry.js';\nimport { IThemeService, registerThemingParticipant } from '../../../../platform/theme/common/themeService.js';\nimport { MenuId } from '../../../../platform/actions/common/actions.js';\nlet CodeEditorWidget = class CodeEditorWidget extends Disposable {\n    static { CodeEditorWidget_1 = this; }\n    static { this.dropIntoEditorDecorationOptions = ModelDecorationOptions.register({\n        description: 'workbench-dnd-target',\n        className: 'dnd-target'\n    }); }\n    //#endregion\n    get isSimpleWidget() {\n        return this._configuration.isSimpleWidget;\n    }\n    get contextMenuId() {\n        return this._configuration.contextMenuId;\n    }\n    constructor(domElement, _options, codeEditorWidgetOptions, instantiationService, codeEditorService, commandService, contextKeyService, themeService, notificationService, accessibilityService, languageConfigurationService, languageFeaturesService) {\n        super();\n        this.languageConfigurationService = languageConfigurationService;\n        //#region Eventing\n        this._deliveryQueue = createEventDeliveryQueue();\n        this._contributions = this._register(new CodeEditorContributions());\n        this._onDidDispose = this._register(new Emitter());\n        this.onDidDispose = this._onDidDispose.event;\n        this._onDidChangeModelContent = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidChangeModelContent = this._onDidChangeModelContent.event;\n        this._onDidChangeModelLanguage = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidChangeModelLanguage = this._onDidChangeModelLanguage.event;\n        this._onDidChangeModelLanguageConfiguration = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidChangeModelLanguageConfiguration = this._onDidChangeModelLanguageConfiguration.event;\n        this._onDidChangeModelOptions = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidChangeModelOptions = this._onDidChangeModelOptions.event;\n        this._onDidChangeModelDecorations = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidChangeModelDecorations = this._onDidChangeModelDecorations.event;\n        this._onDidChangeModelTokens = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidChangeModelTokens = this._onDidChangeModelTokens.event;\n        this._onDidChangeConfiguration = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidChangeConfiguration = this._onDidChangeConfiguration.event;\n        this._onWillChangeModel = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onWillChangeModel = this._onWillChangeModel.event;\n        this._onDidChangeModel = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidChangeModel = this._onDidChangeModel.event;\n        this._onDidChangeCursorPosition = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidChangeCursorPosition = this._onDidChangeCursorPosition.event;\n        this._onDidChangeCursorSelection = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidChangeCursorSelection = this._onDidChangeCursorSelection.event;\n        this._onDidAttemptReadOnlyEdit = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onDidAttemptReadOnlyEdit = this._onDidAttemptReadOnlyEdit.event;\n        this._onDidLayoutChange = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidLayoutChange = this._onDidLayoutChange.event;\n        this._editorTextFocus = this._register(new BooleanEventEmitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidFocusEditorText = this._editorTextFocus.onDidChangeToTrue;\n        this.onDidBlurEditorText = this._editorTextFocus.onDidChangeToFalse;\n        this._editorWidgetFocus = this._register(new BooleanEventEmitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidFocusEditorWidget = this._editorWidgetFocus.onDidChangeToTrue;\n        this.onDidBlurEditorWidget = this._editorWidgetFocus.onDidChangeToFalse;\n        this._onWillType = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onWillType = this._onWillType.event;\n        this._onDidType = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onDidType = this._onDidType.event;\n        this._onDidCompositionStart = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onDidCompositionStart = this._onDidCompositionStart.event;\n        this._onDidCompositionEnd = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onDidCompositionEnd = this._onDidCompositionEnd.event;\n        this._onDidPaste = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onDidPaste = this._onDidPaste.event;\n        this._onMouseUp = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onMouseUp = this._onMouseUp.event;\n        this._onMouseDown = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onMouseDown = this._onMouseDown.event;\n        this._onMouseDrag = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onMouseDrag = this._onMouseDrag.event;\n        this._onMouseDrop = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onMouseDrop = this._onMouseDrop.event;\n        this._onMouseDropCanceled = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onMouseDropCanceled = this._onMouseDropCanceled.event;\n        this._onDropIntoEditor = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onDropIntoEditor = this._onDropIntoEditor.event;\n        this._onContextMenu = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onContextMenu = this._onContextMenu.event;\n        this._onMouseMove = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onMouseMove = this._onMouseMove.event;\n        this._onMouseLeave = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onMouseLeave = this._onMouseLeave.event;\n        this._onMouseWheel = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onMouseWheel = this._onMouseWheel.event;\n        this._onKeyUp = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onKeyUp = this._onKeyUp.event;\n        this._onKeyDown = this._register(new InteractionEmitter(this._contributions, this._deliveryQueue));\n        this.onKeyDown = this._onKeyDown.event;\n        this._onDidContentSizeChange = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidContentSizeChange = this._onDidContentSizeChange.event;\n        this._onDidScrollChange = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidScrollChange = this._onDidScrollChange.event;\n        this._onDidChangeViewZones = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidChangeViewZones = this._onDidChangeViewZones.event;\n        this._onDidChangeHiddenAreas = this._register(new Emitter({ deliveryQueue: this._deliveryQueue }));\n        this.onDidChangeHiddenAreas = this._onDidChangeHiddenAreas.event;\n        this._updateCounter = 0;\n        this._onBeginUpdate = this._register(new Emitter());\n        this.onBeginUpdate = this._onBeginUpdate.event;\n        this._onEndUpdate = this._register(new Emitter());\n        this.onEndUpdate = this._onEndUpdate.event;\n        this._actions = new Map();\n        this._bannerDomNode = null;\n        this._dropIntoEditorDecorations = this.createDecorationsCollection();\n        codeEditorService.willCreateCodeEditor();\n        const options = { ..._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._telemetryData = codeEditorWidgetOptions.telemetryData;\n        this._configuration = this._register(this._createConfiguration(codeEditorWidgetOptions.isSimpleWidget || false, codeEditorWidgetOptions.contextMenuId ?? (codeEditorWidgetOptions.isSimpleWidget ? MenuId.SimpleEditorContext : MenuId.EditorContext), options, accessibilityService));\n        this._register(this._configuration.onDidChange((e) => {\n            this._onDidChangeConfiguration.fire(e);\n            const options = this._configuration.options;\n            if (e.hasChanged(146 /* EditorOption.layoutInfo */)) {\n                const layoutInfo = options.get(146 /* EditorOption.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, languageFeaturesService));\n        this._instantiationService = this._register(instantiationService.createChild(new ServiceCollection([IContextKeyService, this._contextKeyService])));\n        this._modelData = null;\n        this._focusTracker = new CodeEditorWidgetFocusTracker(domElement, this._overflowWidgetsDomNode);\n        this._register(this._focusTracker.onChange(() => {\n            this._editorWidgetFocus.setValue(this._focusTracker.hasFocus());\n        }));\n        this._contentWidgets = {};\n        this._overlayWidgets = {};\n        this._glyphMarginWidgets = {};\n        let contributions;\n        if (Array.isArray(codeEditorWidgetOptions.contributions)) {\n            contributions = codeEditorWidgetOptions.contributions;\n        }\n        else {\n            contributions = EditorExtensionsRegistry.getEditorContributions();\n        }\n        this._contributions.initialize(this, contributions, this._instantiationService);\n        for (const action of EditorExtensionsRegistry.getEditorActions()) {\n            if (this._actions.has(action.id)) {\n                onUnexpectedError(new Error(`Cannot have two actions with the same id ${action.id}`));\n                continue;\n            }\n            const internalAction = new InternalEditorAction(action.id, action.label, action.alias, action.metadata, action.precondition ?? undefined, (args) => {\n                return this._instantiationService.invokeFunction((accessor) => {\n                    return Promise.resolve(action.runEditorCommand(accessor, this, args));\n                });\n            }, this._contextKeyService);\n            this._actions.set(internalAction.id, internalAction);\n        }\n        const isDropIntoEnabled = () => {\n            return !this._configuration.options.get(92 /* EditorOption.readOnly */)\n                && this._configuration.options.get(36 /* EditorOption.dropIntoEditor */).enabled;\n        };\n        this._register(new dom.DragAndDropObserver(this._domElement, {\n            onDragOver: e => {\n                if (!isDropIntoEnabled()) {\n                    return;\n                }\n                const target = this.getTargetAtClientPoint(e.clientX, e.clientY);\n                if (target?.position) {\n                    this.showDropIndicatorAt(target.position);\n                }\n            },\n            onDrop: async (e) => {\n                if (!isDropIntoEnabled()) {\n                    return;\n                }\n                this.removeDropIndicator();\n                if (!e.dataTransfer) {\n                    return;\n                }\n                const target = this.getTargetAtClientPoint(e.clientX, e.clientY);\n                if (target?.position) {\n                    this._onDropIntoEditor.fire({ position: target.position, event: e });\n                }\n            },\n            onDragLeave: () => {\n                this.removeDropIndicator();\n            },\n            onDragEnd: () => {\n                this.removeDropIndicator();\n            },\n        }));\n        this._codeEditorService.addCodeEditor(this);\n    }\n    writeScreenReaderContent(reason) {\n        this._modelData?.view.writeScreenReaderContent(reason);\n    }\n    _createConfiguration(isSimpleWidget, contextMenuId, options, accessibilityService) {\n        return new EditorConfiguration(isSimpleWidget, contextMenuId, 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        this._actions.clear();\n        this._contentWidgets = {};\n        this._overlayWidgets = {};\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(132 /* EditorOption.wordSeparators */), this._configuration.options.get(131 /* EditorOption.wordSegmenterLocales */), 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 /* EndOfLinePreference.TextDefined */;\n        if (options && options.lineEnding && options.lineEnding === '\\n') {\n            eolPreference = 1 /* EndOfLinePreference.LF */;\n        }\n        else if (options && options.lineEnding && options.lineEnding === '\\r\\n') {\n            eolPreference = 2 /* EndOfLinePreference.CRLF */;\n        }\n        return this._modelData.model.getValue(eolPreference, preserveBOM);\n    }\n    setValue(newValue) {\n        try {\n            this._beginUpdate();\n            if (!this._modelData) {\n                return;\n            }\n            this._modelData.model.setValue(newValue);\n        }\n        finally {\n            this._endUpdate();\n        }\n    }\n    getModel() {\n        if (!this._modelData) {\n            return null;\n        }\n        return this._modelData.model;\n    }\n    setModel(_model = null) {\n        try {\n            this._beginUpdate();\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 e = {\n                oldModelUrl: this._modelData?.model.uri || null,\n                newModelUrl: model?.uri || null\n            };\n            this._onWillChangeModel.fire(e);\n            const hasTextFocus = this.hasTextFocus();\n            const detachedModel = this._detachModel();\n            this._attachModel(model);\n            if (hasTextFocus && this.hasModel()) {\n                this.focus();\n            }\n            this._removeDecorationTypes();\n            this._onDidChangeModel.fire(e);\n            this._postDetachModelCleanup(detachedModel);\n            this._contributionsDisposable = this._contributions.onAfterModelAttached();\n        }\n        finally {\n            this._endUpdate();\n        }\n    }\n    _removeDecorationTypes() {\n        this._decorationTypeKeysToIds = {};\n        if (this._decorationTypeSubtypes) {\n            for (const decorationType in this._decorationTypeSubtypes) {\n                const subTypes = this._decorationTypeSubtypes[decorationType];\n                for (const 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 _getVerticalOffsetAfterPosition(modelData, modelLineNumber, modelColumn, includeViewZones) {\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.getVerticalOffsetAfterLineNumber(viewPosition.lineNumber, includeViewZones);\n    }\n    getTopForLineNumber(lineNumber, includeViewZones = false) {\n        if (!this._modelData) {\n            return -1;\n        }\n        return CodeEditorWidget_1._getVerticalOffsetForPosition(this._modelData, lineNumber, 1, includeViewZones);\n    }\n    getTopForPosition(lineNumber, column) {\n        if (!this._modelData) {\n            return -1;\n        }\n        return CodeEditorWidget_1._getVerticalOffsetForPosition(this._modelData, lineNumber, column, false);\n    }\n    static _getVerticalOffsetForPosition(modelData, modelLineNumber, modelColumn, includeViewZones = false) {\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, includeViewZones);\n    }\n    getBottomForLineNumber(lineNumber, includeViewZones = false) {\n        if (!this._modelData) {\n            return -1;\n        }\n        const maxCol = this._modelData.model.getLineMaxColumn(lineNumber);\n        return CodeEditorWidget_1._getVerticalOffsetAfterPosition(this._modelData, lineNumber, maxCol, includeViewZones);\n    }\n    setHiddenAreas(ranges, source) {\n        this._modelData?.viewModel.setHiddenAreas(ranges.map(r => Range.lift(r)), source);\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, source = 'api') {\n        if (!this._modelData) {\n            return;\n        }\n        if (!Position.isIPosition(position)) {\n            throw new Error('Invalid arguments');\n        }\n        this._modelData.viewModel.setSelections(source, [{\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 /* editorCommon.ScrollType.Smooth */) {\n        this._revealLine(lineNumber, 0 /* VerticalRevealType.Simple */, scrollType);\n    }\n    revealLineInCenter(lineNumber, scrollType = 0 /* editorCommon.ScrollType.Smooth */) {\n        this._revealLine(lineNumber, 1 /* VerticalRevealType.Center */, scrollType);\n    }\n    revealLineInCenterIfOutsideViewport(lineNumber, scrollType = 0 /* editorCommon.ScrollType.Smooth */) {\n        this._revealLine(lineNumber, 2 /* VerticalRevealType.CenterIfOutsideViewport */, scrollType);\n    }\n    revealLineNearTop(lineNumber, scrollType = 0 /* editorCommon.ScrollType.Smooth */) {\n        this._revealLine(lineNumber, 5 /* VerticalRevealType.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 /* editorCommon.ScrollType.Smooth */) {\n        this._revealPosition(position, 0 /* VerticalRevealType.Simple */, true, scrollType);\n    }\n    revealPositionInCenter(position, scrollType = 0 /* editorCommon.ScrollType.Smooth */) {\n        this._revealPosition(position, 1 /* VerticalRevealType.Center */, true, scrollType);\n    }\n    revealPositionInCenterIfOutsideViewport(position, scrollType = 0 /* editorCommon.ScrollType.Smooth */) {\n        this._revealPosition(position, 2 /* VerticalRevealType.CenterIfOutsideViewport */, true, scrollType);\n    }\n    revealPositionNearTop(position, scrollType = 0 /* editorCommon.ScrollType.Smooth */) {\n        this._revealPosition(position, 5 /* VerticalRevealType.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, source = 'api') {\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, source);\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, source);\n        }\n    }\n    _setSelectionImpl(sel, source) {\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(source, [selection]);\n    }\n    revealLines(startLineNumber, endLineNumber, scrollType = 0 /* editorCommon.ScrollType.Smooth */) {\n        this._revealLines(startLineNumber, endLineNumber, 0 /* VerticalRevealType.Simple */, scrollType);\n    }\n    revealLinesInCenter(startLineNumber, endLineNumber, scrollType = 0 /* editorCommon.ScrollType.Smooth */) {\n        this._revealLines(startLineNumber, endLineNumber, 1 /* VerticalRevealType.Center */, scrollType);\n    }\n    revealLinesInCenterIfOutsideViewport(startLineNumber, endLineNumber, scrollType = 0 /* editorCommon.ScrollType.Smooth */) {\n        this._revealLines(startLineNumber, endLineNumber, 2 /* VerticalRevealType.CenterIfOutsideViewport */, scrollType);\n    }\n    revealLinesNearTop(startLineNumber, endLineNumber, scrollType = 0 /* editorCommon.ScrollType.Smooth */) {\n        this._revealLines(startLineNumber, endLineNumber, 5 /* VerticalRevealType.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 /* editorCommon.ScrollType.Smooth */, revealVerticalInCenter = false, revealHorizontal = true) {\n        this._revealRange(range, revealVerticalInCenter ? 1 /* VerticalRevealType.Center */ : 0 /* VerticalRevealType.Simple */, revealHorizontal, scrollType);\n    }\n    revealRangeInCenter(range, scrollType = 0 /* editorCommon.ScrollType.Smooth */) {\n        this._revealRange(range, 1 /* VerticalRevealType.Center */, true, scrollType);\n    }\n    revealRangeInCenterIfOutsideViewport(range, scrollType = 0 /* editorCommon.ScrollType.Smooth */) {\n        this._revealRange(range, 2 /* VerticalRevealType.CenterIfOutsideViewport */, true, scrollType);\n    }\n    revealRangeNearTop(range, scrollType = 0 /* editorCommon.ScrollType.Smooth */) {\n        this._revealRange(range, 5 /* VerticalRevealType.NearTop */, true, scrollType);\n    }\n    revealRangeNearTopIfOutsideViewport(range, scrollType = 0 /* editorCommon.ScrollType.Smooth */) {\n        this._revealRange(range, 6 /* VerticalRevealType.NearTopIfOutsideViewport */, true, scrollType);\n    }\n    revealRangeAtTop(range, scrollType = 0 /* editorCommon.ScrollType.Smooth */) {\n        this._revealRange(range, 3 /* VerticalRevealType.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 /* CursorChangeReason.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 /* editorCommon.ScrollType.Immediate */) {\n        if (!this._modelData) {\n            return;\n        }\n        if (typeof newScrollLeft !== 'number') {\n            throw new Error('Invalid arguments');\n        }\n        this._modelData.viewModel.viewLayout.setScrollPosition({\n            scrollLeft: newScrollLeft\n        }, scrollType);\n    }\n    setScrollTop(newScrollTop, scrollType = 1 /* editorCommon.ScrollType.Immediate */) {\n        if (!this._modelData) {\n            return;\n        }\n        if (typeof newScrollTop !== 'number') {\n            throw new Error('Invalid arguments');\n        }\n        this._modelData.viewModel.viewLayout.setScrollPosition({\n            scrollTop: newScrollTop\n        }, scrollType);\n    }\n    setScrollPosition(position, scrollType = 1 /* editorCommon.ScrollType.Immediate */) {\n        if (!this._modelData) {\n            return;\n        }\n        this._modelData.viewModel.viewLayout.setScrollPosition(position, scrollType);\n    }\n    hasPendingScrollAnimation() {\n        if (!this._modelData) {\n            return false;\n        }\n        return this._modelData.viewModel.viewLayout.hasPendingScrollAnimation();\n    }\n    saveViewState() {\n        if (!this._modelData) {\n            return null;\n        }\n        const contributionsState = this._contributions.saveViewState();\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                if (cursorState.length > 0) {\n                    this._modelData.viewModel.restoreCursorState(cursorState);\n                }\n            }\n            else {\n                // Backwards compatibility\n                this._modelData.viewModel.restoreCursorState([cursorState]);\n            }\n            this._contributions.restoreViewState(codeEditorState.contributionsState || {});\n            const reducedState = this._modelData.viewModel.reduceRestoreState(codeEditorState.viewState);\n            this._modelData.view.restoreState(reducedState);\n        }\n    }\n    handleInitialized() {\n        this._getViewModel()?.visibleLinesStabilized();\n    }\n    getContribution(id) {\n        return this._contributions.get(id);\n    }\n    getActions() {\n        return Array.from(this._actions.values());\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.get(id) || null;\n    }\n    trigger(source, handlerId, payload) {\n        payload = payload || {};\n        try {\n            this._beginUpdate();\n            switch (handlerId) {\n                case \"compositionStart\" /* editorCommon.Handler.CompositionStart */:\n                    this._startComposition();\n                    return;\n                case \"compositionEnd\" /* editorCommon.Handler.CompositionEnd */:\n                    this._endComposition(source);\n                    return;\n                case \"type\" /* editorCommon.Handler.Type */: {\n                    const args = payload;\n                    this._type(source, args.text || '');\n                    return;\n                }\n                case \"replacePreviousChar\" /* editorCommon.Handler.ReplacePreviousChar */: {\n                    const args = payload;\n                    this._compositionType(source, args.text || '', args.replaceCharCnt || 0, 0, 0);\n                    return;\n                }\n                case \"compositionType\" /* editorCommon.Handler.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\" /* editorCommon.Handler.Paste */: {\n                    const args = payload;\n                    this._paste(source, args.text || '', args.pasteOnNewLine || false, args.multicursorText || null, args.mode || null, args.clipboardEvent);\n                    return;\n                }\n                case \"cut\" /* editorCommon.Handler.Cut */:\n                    this._cut(source);\n                    return;\n            }\n            const action = this.getAction(handlerId);\n            if (action) {\n                Promise.resolve(action.run(payload)).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        finally {\n            this._endUpdate();\n        }\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, clipboardEvent) {\n        if (!this._modelData) {\n            return;\n        }\n        const viewModel = this._modelData.viewModel;\n        const startPosition = viewModel.getSelection().getStartPosition();\n        viewModel.paste(text, pasteOnNewLine, multicursorText, source);\n        const endPosition = viewModel.getSelection().getStartPosition();\n        if (source === 'keyboard') {\n            this._onDidPaste.fire({\n                clipboardEvent,\n                range: new Range(startPosition.lineNumber, startPosition.column, endPosition.lineNumber, endPosition.column),\n                languageId: 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(92 /* EditorOption.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(92 /* EditorOption.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(92 /* EditorOption.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    createDecorationsCollection(decorations) {\n        return new EditorDecorationsCollection(this, decorations);\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    getDecorationsInRange(range) {\n        if (!this._modelData) {\n            return null;\n        }\n        return this._modelData.model.getDecorationsInRange(range, this._id, filterValidationDecorations(this._configuration.options));\n    }\n    /**\n     * @deprecated\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(decorationIds) {\n        if (!this._modelData || decorationIds.length === 0) {\n            return;\n        }\n        this._modelData.model.changeDecorations((changeAccessor) => {\n            changeAccessor.deltaDecorations(decorationIds, []);\n        });\n    }\n    removeDecorationsByType(decorationTypeKey) {\n        // remove decorations for type and sub type\n        const oldDecorationsIds = this._decorationTypeKeysToIds[decorationTypeKey];\n        if (oldDecorationsIds) {\n            this.changeDecorations(accessor => accessor.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(146 /* EditorOption.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    delegateVerticalScrollbarPointerDown(browserEvent) {\n        if (!this._modelData || !this._modelData.hasRealView) {\n            return;\n        }\n        this._modelData.view.delegateVerticalScrollbarPointerDown(browserEvent);\n    }\n    delegateScrollFromMouseWheelEvent(browserEvent) {\n        if (!this._modelData || !this._modelData.hasRealView) {\n            return;\n        }\n        this._modelData.view.delegateScrollFromMouseWheelEvent(browserEvent);\n    }\n    layout(dimension, postponeRendering = false) {\n        this._configuration.observeContainer(dimension);\n        if (!postponeRendering) {\n            this.render();\n        }\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:' + widget.getId());\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    addGlyphMarginWidget(widget) {\n        const widgetData = {\n            widget: widget,\n            position: widget.getPosition()\n        };\n        if (this._glyphMarginWidgets.hasOwnProperty(widget.getId())) {\n            console.warn('Overwriting a glyph margin widget with the same id.');\n        }\n        this._glyphMarginWidgets[widget.getId()] = widgetData;\n        if (this._modelData && this._modelData.hasRealView) {\n            this._modelData.view.addGlyphMarginWidget(widgetData);\n        }\n    }\n    layoutGlyphMarginWidget(widget) {\n        const widgetId = widget.getId();\n        if (this._glyphMarginWidgets.hasOwnProperty(widgetId)) {\n            const widgetData = this._glyphMarginWidgets[widgetId];\n            widgetData.position = widget.getPosition();\n            if (this._modelData && this._modelData.hasRealView) {\n                this._modelData.view.layoutGlyphMarginWidget(widgetData);\n            }\n        }\n    }\n    removeGlyphMarginWidget(widget) {\n        const widgetId = widget.getId();\n        if (this._glyphMarginWidgets.hasOwnProperty(widgetId)) {\n            const widgetData = this._glyphMarginWidgets[widgetId];\n            delete this._glyphMarginWidgets[widgetId];\n            if (this._modelData && this._modelData.hasRealView) {\n                this._modelData.view.removeGlyphMarginWidget(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(146 /* EditorOption.layoutInfo */);\n        const top = CodeEditorWidget_1._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(67 /* EditorOption.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.viewModel.batchEvents(() => {\n            this._modelData.view.render(true, forceRedraw);\n        });\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        applyFontInfo(target, this._configuration.options.get(50 /* EditorOption.fontInfo */));\n    }\n    setBanner(domNode, domNodeHeight) {\n        if (this._bannerDomNode && this._domElement.contains(this._bannerDomNode)) {\n            this._bannerDomNode.remove();\n        }\n        this._bannerDomNode = domNode;\n        this._configuration.setReservedHeight(domNode ? domNodeHeight : 0);\n        if (this._bannerDomNode) {\n            this._domElement.prepend(this._bannerDomNode);\n        }\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.getLanguageId());\n        this._configuration.setIsDominatedByLongLines(model.isDominatedByLongLines());\n        this._configuration.setModelLineCount(model.getLineCount());\n        const attachedView = model.onBeforeAttached();\n        const viewModel = new ViewModel(this._id, this._configuration, model, DOMLineBreaksComputerFactory.create(dom.getWindow(this._domElement)), MonospaceLineBreaksComputerFactory.create(this._configuration.options), (callback) => dom.scheduleAtNextAnimationFrame(dom.getWindow(this._domElement), callback), this.languageConfigurationService, this._themeService, attachedView, {\n            batchChanges: (cb) => {\n                try {\n                    this._beginUpdate();\n                    return cb();\n                }\n                finally {\n                    this._endUpdate();\n                }\n            },\n        });\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 /* OutgoingViewModelEventKind.ContentSizeChanged */:\n                    this._onDidContentSizeChange.fire(e);\n                    break;\n                case 1 /* OutgoingViewModelEventKind.FocusChanged */:\n                    this._editorTextFocus.setValue(e.hasFocus);\n                    break;\n                case 2 /* OutgoingViewModelEventKind.ScrollChanged */:\n                    this._onDidScrollChange.fire(e);\n                    break;\n                case 3 /* OutgoingViewModelEventKind.ViewZonesChanged */:\n                    this._onDidChangeViewZones.fire();\n                    break;\n                case 4 /* OutgoingViewModelEventKind.HiddenAreasChanged */:\n                    this._onDidChangeHiddenAreas.fire();\n                    break;\n                case 5 /* OutgoingViewModelEventKind.ReadOnlyEditAttempt */:\n                    this._onDidAttemptReadOnlyEdit.fire();\n                    break;\n                case 6 /* OutgoingViewModelEventKind.CursorStateChanged */: {\n                    if (e.reachedMaxCursorCount) {\n                        const multiCursorLimit = this.getOption(80 /* EditorOption.multiCursorLimit */);\n                        const message = nls.localize('cursors.maximum', \"The number of cursors has been limited to {0}. Consider using [find and replace](https://code.visualstudio.com/docs/editor/codebasics#_find-and-replace) for larger changes or increase the editor multi cursor limit setting.\", multiCursorLimit);\n                        this._notificationService.prompt(Severity.Warning, message, [\n                            {\n                                label: 'Find and Replace',\n                                run: () => {\n                                    this._commandService.executeCommand('editor.action.startFindReplaceAction');\n                                }\n                            },\n                            {\n                                label: nls.localize('goToSetting', 'Increase Multi Cursor Limit'),\n                                run: () => {\n                                    this._commandService.executeCommand('workbench.action.openSettings2', {\n                                        query: 'editor.multiCursorLimit'\n                                    });\n                                }\n                            }\n                        ]);\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                case 7 /* OutgoingViewModelEventKind.ModelDecorationsChanged */:\n                    this._onDidChangeModelDecorations.fire(e.event);\n                    break;\n                case 8 /* OutgoingViewModelEventKind.ModelLanguageChanged */:\n                    this._domElement.setAttribute('data-mode-id', model.getLanguageId());\n                    this._onDidChangeModelLanguage.fire(e.event);\n                    break;\n                case 9 /* OutgoingViewModelEventKind.ModelLanguageConfigurationChanged */:\n                    this._onDidChangeModelLanguageConfiguration.fire(e.event);\n                    break;\n                case 10 /* OutgoingViewModelEventKind.ModelContentChanged */:\n                    this._onDidChangeModelContent.fire(e.event);\n                    break;\n                case 11 /* OutgoingViewModelEventKind.ModelOptionsChanged */:\n                    this._onDidChangeModelOptions.fire(e.event);\n                    break;\n                case 12 /* OutgoingViewModelEventKind.ModelTokensChanged */:\n                    this._onDidChangeModelTokens.fire(e.event);\n                    break;\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            keys = Object.keys(this._glyphMarginWidgets);\n            for (let i = 0, len = keys.length; i < len; i++) {\n                const widgetId = keys[i];\n                view.addGlyphMarginWidget(this._glyphMarginWidgets[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, attachedView);\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\" /* editorCommon.Handler.Paste */, payload);\n                },\n                type: (text) => {\n                    const payload = { text };\n                    this._commandService.executeCommand(\"type\" /* editorCommon.Handler.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\" /* editorCommon.Handler.CompositionType */, payload);\n                    }\n                    else {\n                        const payload = { text, replaceCharCnt: replacePrevCharCnt };\n                        this._commandService.executeCommand(\"replacePreviousChar\" /* editorCommon.Handler.ReplacePreviousChar */, payload);\n                    }\n                },\n                startComposition: () => {\n                    this._commandService.executeCommand(\"compositionStart\" /* editorCommon.Handler.CompositionStart */, {});\n                },\n                endComposition: () => {\n                    this._commandService.executeCommand(\"compositionEnd\" /* editorCommon.Handler.CompositionEnd */, {});\n                },\n                cut: () => {\n                    this._commandService.executeCommand(\"cut\" /* editorCommon.Handler.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.getColorTheme(), viewModel, viewUserInputEvents, this._overflowWidgetsDomNode, this._instantiationService);\n        return [view, true];\n    }\n    _postDetachModelCleanup(detachedModel) {\n        detachedModel?.removeAllDecorationsWithOwnerId(this._id);\n    }\n    _detachModel() {\n        this._contributionsDisposable?.dispose();\n        this._contributionsDisposable = undefined;\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            removeDomNode.remove();\n        }\n        if (this._bannerDomNode && this._domElement.contains(this._bannerDomNode)) {\n            this._bannerDomNode.remove();\n        }\n        return model;\n    }\n    _removeDecorationType(key) {\n        this._codeEditorService.removeDecorationType(key);\n    }\n    hasModel() {\n        return (this._modelData !== null);\n    }\n    showDropIndicatorAt(position) {\n        const newDecorations = [{\n                range: new Range(position.lineNumber, position.column, position.lineNumber, position.column),\n                options: CodeEditorWidget_1.dropIntoEditorDecorationOptions\n            }];\n        this._dropIntoEditorDecorations.set(newDecorations);\n        this.revealPosition(position, 1 /* editorCommon.ScrollType.Immediate */);\n    }\n    removeDropIndicator() {\n        this._dropIntoEditorDecorations.clear();\n    }\n    setContextValue(key, value) {\n        this._contextKeyService.createKey(key, value);\n    }\n    _beginUpdate() {\n        this._updateCounter++;\n        if (this._updateCounter === 1) {\n            this._onBeginUpdate.fire();\n        }\n    }\n    _endUpdate() {\n        this._updateCounter--;\n        if (this._updateCounter === 0) {\n            this._onEndUpdate.fire();\n        }\n    }\n};\nCodeEditorWidget = CodeEditorWidget_1 = __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    __param(10, ILanguageConfigurationService),\n    __param(11, ILanguageFeaturesService)\n], CodeEditorWidget);\nexport { CodeEditorWidget };\nlet EDITOR_ID = 0;\nclass ModelData {\n    constructor(model, viewModel, view, hasRealView, listenersToRemove, attachedView) {\n        this.model = model;\n        this.viewModel = viewModel;\n        this.view = view;\n        this.hasRealView = hasRealView;\n        this.listenersToRemove = listenersToRemove;\n        this.attachedView = attachedView;\n    }\n    dispose() {\n        dispose(this.listenersToRemove);\n        this.model.onBeforeDetached(this.attachedView);\n        if (this.hasRealView) {\n            this.view.dispose();\n        }\n        this.viewModel.dispose();\n    }\n}\nexport class BooleanEventEmitter extends Disposable {\n    constructor(_emitterOptions) {\n        super();\n        this._emitterOptions = _emitterOptions;\n        this._onDidChangeToTrue = this._register(new Emitter(this._emitterOptions));\n        this.onDidChangeToTrue = this._onDidChangeToTrue.event;\n        this._onDidChangeToFalse = this._register(new Emitter(this._emitterOptions));\n        this.onDidChangeToFalse = this._onDidChangeToFalse.event;\n        this._value = 0 /* BooleanEventValue.NotSet */;\n    }\n    setValue(_value) {\n        const value = (_value ? 2 /* BooleanEventValue.True */ : 1 /* BooleanEventValue.False */);\n        if (this._value === value) {\n            return;\n        }\n        this._value = value;\n        if (this._value === 2 /* BooleanEventValue.True */) {\n            this._onDidChangeToTrue.fire();\n        }\n        else if (this._value === 1 /* BooleanEventValue.False */) {\n            this._onDidChangeToFalse.fire();\n        }\n    }\n}\n/**\n * A regular event emitter that also makes sure contributions are instantiated if necessary\n */\nclass InteractionEmitter extends Emitter {\n    constructor(_contributions, deliveryQueue) {\n        super({ deliveryQueue });\n        this._contributions = _contributions;\n    }\n    fire(event) {\n        this._contributions.onBeforeInteractionEvent();\n        super.fire(event);\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._tabMovesFocus = 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._register(TabFocus.onDidChangeTabFocus((tabFocusMode) => this._tabMovesFocus.set(tabFocusMode)));\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._tabMovesFocus.set(TabFocus.getTabFocusMode());\n        this._editorReadonly.set(options.get(92 /* EditorOption.readOnly */));\n        this._inDiffEditor.set(options.get(61 /* EditorOption.inDiffEditor */));\n        this._editorColumnSelection.set(options.get(22 /* EditorOption.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, _languageFeaturesService) {\n        super();\n        this._editor = _editor;\n        this._contextKeyService = _contextKeyService;\n        this._languageFeaturesService = _languageFeaturesService;\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._hasInlayHintsProvider = EditorContextKeys.hasInlayHintsProvider.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._isInEmbeddedEditor = EditorContextKeys.isInEmbeddedEditor.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(_languageFeaturesService.completionProvider.onDidChange(update));\n        this._register(_languageFeaturesService.codeActionProvider.onDidChange(update));\n        this._register(_languageFeaturesService.codeLensProvider.onDidChange(update));\n        this._register(_languageFeaturesService.definitionProvider.onDidChange(update));\n        this._register(_languageFeaturesService.declarationProvider.onDidChange(update));\n        this._register(_languageFeaturesService.implementationProvider.onDidChange(update));\n        this._register(_languageFeaturesService.typeDefinitionProvider.onDidChange(update));\n        this._register(_languageFeaturesService.hoverProvider.onDidChange(update));\n        this._register(_languageFeaturesService.documentHighlightProvider.onDidChange(update));\n        this._register(_languageFeaturesService.documentSymbolProvider.onDidChange(update));\n        this._register(_languageFeaturesService.referenceProvider.onDidChange(update));\n        this._register(_languageFeaturesService.renameProvider.onDidChange(update));\n        this._register(_languageFeaturesService.documentFormattingEditProvider.onDidChange(update));\n        this._register(_languageFeaturesService.documentRangeFormattingEditProvider.onDidChange(update));\n        this._register(_languageFeaturesService.signatureHelpProvider.onDidChange(update));\n        this._register(_languageFeaturesService.inlayHintsProvider.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._isInEmbeddedEditor.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.getLanguageId());\n            this._hasCompletionItemProvider.set(this._languageFeaturesService.completionProvider.has(model));\n            this._hasCodeActionsProvider.set(this._languageFeaturesService.codeActionProvider.has(model));\n            this._hasCodeLensProvider.set(this._languageFeaturesService.codeLensProvider.has(model));\n            this._hasDefinitionProvider.set(this._languageFeaturesService.definitionProvider.has(model));\n            this._hasDeclarationProvider.set(this._languageFeaturesService.declarationProvider.has(model));\n            this._hasImplementationProvider.set(this._languageFeaturesService.implementationProvider.has(model));\n            this._hasTypeDefinitionProvider.set(this._languageFeaturesService.typeDefinitionProvider.has(model));\n            this._hasHoverProvider.set(this._languageFeaturesService.hoverProvider.has(model));\n            this._hasDocumentHighlightProvider.set(this._languageFeaturesService.documentHighlightProvider.has(model));\n            this._hasDocumentSymbolProvider.set(this._languageFeaturesService.documentSymbolProvider.has(model));\n            this._hasReferenceProvider.set(this._languageFeaturesService.referenceProvider.has(model));\n            this._hasRenameProvider.set(this._languageFeaturesService.renameProvider.has(model));\n            this._hasSignatureHelpProvider.set(this._languageFeaturesService.signatureHelpProvider.has(model));\n            this._hasInlayHintsProvider.set(this._languageFeaturesService.inlayHintsProvider.has(model));\n            this._hasDocumentFormattingProvider.set(this._languageFeaturesService.documentFormattingEditProvider.has(model) || this._languageFeaturesService.documentRangeFormattingEditProvider.has(model));\n            this._hasDocumentSelectionFormattingProvider.set(this._languageFeaturesService.documentRangeFormattingEditProvider.has(model));\n            this._hasMultipleDocumentFormattingProvider.set(this._languageFeaturesService.documentFormattingEditProvider.all(model).length + this._languageFeaturesService.documentRangeFormattingEditProvider.all(model).length > 1);\n            this._hasMultipleDocumentSelectionFormattingProvider.set(this._languageFeaturesService.documentRangeFormattingEditProvider.all(model).length > 1);\n            this._isInEmbeddedEditor.set(model.uri.scheme === Schemas.walkThroughSnippet || model.uri.scheme === Schemas.vscodeChatCodeBlock);\n        });\n    }\n}\nclass CodeEditorWidgetFocusTracker extends Disposable {\n    constructor(domElement, overflowWidgetsDomNode) {\n        super();\n        this._onChange = this._register(new Emitter());\n        this.onChange = this._onChange.event;\n        this._hadFocus = undefined;\n        this._hasDomElementFocus = false;\n        this._domFocusTracker = this._register(dom.trackFocus(domElement));\n        this._overflowWidgetsDomNodeHasFocus = false;\n        this._register(this._domFocusTracker.onDidFocus(() => {\n            this._hasDomElementFocus = true;\n            this._update();\n        }));\n        this._register(this._domFocusTracker.onDidBlur(() => {\n            this._hasDomElementFocus = false;\n            this._update();\n        }));\n        if (overflowWidgetsDomNode) {\n            this._overflowWidgetsDomNode = this._register(dom.trackFocus(overflowWidgetsDomNode));\n            this._register(this._overflowWidgetsDomNode.onDidFocus(() => {\n                this._overflowWidgetsDomNodeHasFocus = true;\n                this._update();\n            }));\n            this._register(this._overflowWidgetsDomNode.onDidBlur(() => {\n                this._overflowWidgetsDomNodeHasFocus = false;\n                this._update();\n            }));\n        }\n    }\n    _update() {\n        const focused = this._hasDomElementFocus || this._overflowWidgetsDomNodeHasFocus;\n        if (this._hadFocus !== focused) {\n            this._hadFocus = focused;\n            this._onChange.fire(undefined);\n        }\n    }\n    hasFocus() {\n        return this._hadFocus ?? false;\n    }\n}\nclass EditorDecorationsCollection {\n    get length() {\n        return this._decorationIds.length;\n    }\n    constructor(_editor, decorations) {\n        this._editor = _editor;\n        this._decorationIds = [];\n        this._isChangingDecorations = false;\n        if (Array.isArray(decorations) && decorations.length > 0) {\n            this.set(decorations);\n        }\n    }\n    onDidChange(listener, thisArgs, disposables) {\n        return this._editor.onDidChangeModelDecorations((e) => {\n            if (this._isChangingDecorations) {\n                return;\n            }\n            listener.call(thisArgs, e);\n        }, disposables);\n    }\n    getRange(index) {\n        if (!this._editor.hasModel()) {\n            return null;\n        }\n        if (index >= this._decorationIds.length) {\n            return null;\n        }\n        return this._editor.getModel().getDecorationRange(this._decorationIds[index]);\n    }\n    getRanges() {\n        if (!this._editor.hasModel()) {\n            return [];\n        }\n        const model = this._editor.getModel();\n        const result = [];\n        for (const decorationId of this._decorationIds) {\n            const range = model.getDecorationRange(decorationId);\n            if (range) {\n                result.push(range);\n            }\n        }\n        return result;\n    }\n    has(decoration) {\n        return this._decorationIds.includes(decoration.id);\n    }\n    clear() {\n        if (this._decorationIds.length === 0) {\n            // nothing to do\n            return;\n        }\n        this.set([]);\n    }\n    set(newDecorations) {\n        try {\n            this._isChangingDecorations = true;\n            this._editor.changeDecorations((accessor) => {\n                this._decorationIds = accessor.deltaDecorations(this._decorationIds, newDecorations);\n            });\n        }\n        finally {\n            this._isChangingDecorations = false;\n        }\n        return this._decorationIds;\n    }\n    append(newDecorations) {\n        let newDecorationIds = [];\n        try {\n            this._isChangingDecorations = true;\n            this._editor.changeDecorations((accessor) => {\n                newDecorationIds = accessor.deltaDecorations([], newDecorations);\n                this._decorationIds = this._decorationIds.concat(newDecorationIds);\n            });\n        }\n        finally {\n            this._isChangingDecorations = false;\n        }\n        return newDecorationIds;\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 errorForeground = theme.getColor(editorErrorForeground);\n    if (errorForeground) {\n        collector.addRule(`.monaco-editor .${\"squiggly-error\" /* ClassName.EditorErrorDecoration */} { background: url(\"data:image/svg+xml,${getSquigglySVGData(errorForeground)}\") repeat-x bottom left; }`);\n    }\n    const warningForeground = theme.getColor(editorWarningForeground);\n    if (warningForeground) {\n        collector.addRule(`.monaco-editor .${\"squiggly-warning\" /* ClassName.EditorWarningDecoration */} { background: url(\"data:image/svg+xml,${getSquigglySVGData(warningForeground)}\") repeat-x bottom left; }`);\n    }\n    const infoForeground = theme.getColor(editorInfoForeground);\n    if (infoForeground) {\n        collector.addRule(`.monaco-editor .${\"squiggly-info\" /* ClassName.EditorInfoDecoration */} { background: url(\"data:image/svg+xml,${getSquigglySVGData(infoForeground)}\") repeat-x bottom left; }`);\n    }\n    const hintForeground = theme.getColor(editorHintForeground);\n    if (hintForeground) {\n        collector.addRule(`.monaco-editor .${\"squiggly-hint\" /* ClassName.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\" /* ClassName.EditorUnnecessaryInlineDecoration */} { opacity: ${unnecessaryForeground.rgba.a}; }`);\n    }\n});\n","/*---------------------------------------------------------------------------------------------\n *  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 StableEditorScrollState {\n    static capture(editor) {\n        if (editor.getScrollTop() === 0 || editor.hasPendingScrollAnimation()) {\n            // Never mess with the scroll top if the editor is at the top of the file or if there is a pending scroll animation\n            return new StableEditorScrollState(editor.getScrollTop(), editor.getContentHeight(), null, 0, null);\n        }\n        let visiblePosition = null;\n        let visiblePositionScrollDelta = 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        return new StableEditorScrollState(editor.getScrollTop(), editor.getContentHeight(), visiblePosition, visiblePositionScrollDelta, editor.getPosition());\n    }\n    constructor(_initialScrollTop, _initialContentHeight, _visiblePosition, _visiblePositionScrollDelta, _cursorPosition) {\n        this._initialScrollTop = _initialScrollTop;\n        this._initialContentHeight = _initialContentHeight;\n        this._visiblePosition = _visiblePosition;\n        this._visiblePositionScrollDelta = _visiblePositionScrollDelta;\n        this._cursorPosition = _cursorPosition;\n    }\n    restore(editor) {\n        if (this._initialContentHeight === editor.getContentHeight() && this._initialScrollTop === editor.getScrollTop()) {\n            // The editor's content height and scroll top haven't changed, so we don't need to do anything\n            return;\n        }\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        if (this._initialContentHeight === editor.getContentHeight() && this._initialScrollTop === editor.getScrollTop()) {\n            // The editor's content height and scroll top haven't changed, so we don't need to do anything\n            return;\n        }\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, 1 /* ScrollType.Immediate */);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { findLast } from '../../../../base/common/arraysFind.js';\nimport { CancellationTokenSource } from '../../../../base/common/cancellation.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../../../base/common/lifecycle.js';\nimport { autorun, autorunHandleChanges, autorunOpts, autorunWithStore, observableValue, transaction } from '../../../../base/common/observable.js';\nimport { ElementSizeObserver } from '../../config/elementSizeObserver.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { TextLength } from '../../../common/core/textLength.js';\nexport function joinCombine(arr1, arr2, keySelector, combine) {\n    if (arr1.length === 0) {\n        return arr2;\n    }\n    if (arr2.length === 0) {\n        return arr1;\n    }\n    const result = [];\n    let i = 0;\n    let j = 0;\n    while (i < arr1.length && j < arr2.length) {\n        const val1 = arr1[i];\n        const val2 = arr2[j];\n        const key1 = keySelector(val1);\n        const key2 = keySelector(val2);\n        if (key1 < key2) {\n            result.push(val1);\n            i++;\n        }\n        else if (key1 > key2) {\n            result.push(val2);\n            j++;\n        }\n        else {\n            result.push(combine(val1, val2));\n            i++;\n            j++;\n        }\n    }\n    while (i < arr1.length) {\n        result.push(arr1[i]);\n        i++;\n    }\n    while (j < arr2.length) {\n        result.push(arr2[j]);\n        j++;\n    }\n    return result;\n}\n// TODO make utility\nexport function applyObservableDecorations(editor, decorations) {\n    const d = new DisposableStore();\n    const decorationsCollection = editor.createDecorationsCollection();\n    d.add(autorunOpts({ debugName: () => `Apply decorations from ${decorations.debugName}` }, reader => {\n        const d = decorations.read(reader);\n        decorationsCollection.set(d);\n    }));\n    d.add({\n        dispose: () => {\n            decorationsCollection.clear();\n        }\n    });\n    return d;\n}\nexport function appendRemoveOnDispose(parent, child) {\n    parent.appendChild(child);\n    return toDisposable(() => {\n        child.remove();\n    });\n}\nexport function prependRemoveOnDispose(parent, child) {\n    parent.prepend(child);\n    return toDisposable(() => {\n        child.remove();\n    });\n}\nexport class ObservableElementSizeObserver extends Disposable {\n    get width() { return this._width; }\n    get height() { return this._height; }\n    get automaticLayout() { return this._automaticLayout; }\n    constructor(element, dimension) {\n        super();\n        this._automaticLayout = false;\n        this.elementSizeObserver = this._register(new ElementSizeObserver(element, dimension));\n        this._width = observableValue(this, this.elementSizeObserver.getWidth());\n        this._height = observableValue(this, this.elementSizeObserver.getHeight());\n        this._register(this.elementSizeObserver.onDidChange(e => transaction(tx => {\n            /** @description Set width/height from elementSizeObserver */\n            this._width.set(this.elementSizeObserver.getWidth(), tx);\n            this._height.set(this.elementSizeObserver.getHeight(), tx);\n        })));\n    }\n    observe(dimension) {\n        this.elementSizeObserver.observe(dimension);\n    }\n    setAutomaticLayout(automaticLayout) {\n        this._automaticLayout = automaticLayout;\n        if (automaticLayout) {\n            this.elementSizeObserver.startObserving();\n        }\n        else {\n            this.elementSizeObserver.stopObserving();\n        }\n    }\n}\nexport function animatedObservable(targetWindow, base, store) {\n    let targetVal = base.get();\n    let startVal = targetVal;\n    let curVal = targetVal;\n    const result = observableValue('animatedValue', targetVal);\n    let animationStartMs = -1;\n    const durationMs = 300;\n    let animationFrame = undefined;\n    store.add(autorunHandleChanges({\n        createEmptyChangeSummary: () => ({ animate: false }),\n        handleChange: (ctx, s) => {\n            if (ctx.didChange(base)) {\n                s.animate = s.animate || ctx.change;\n            }\n            return true;\n        }\n    }, (reader, s) => {\n        /** @description update value */\n        if (animationFrame !== undefined) {\n            targetWindow.cancelAnimationFrame(animationFrame);\n            animationFrame = undefined;\n        }\n        startVal = curVal;\n        targetVal = base.read(reader);\n        animationStartMs = Date.now() - (s.animate ? 0 : durationMs);\n        update();\n    }));\n    function update() {\n        const passedMs = Date.now() - animationStartMs;\n        curVal = Math.floor(easeOutExpo(passedMs, startVal, targetVal - startVal, durationMs));\n        if (passedMs < durationMs) {\n            animationFrame = targetWindow.requestAnimationFrame(update);\n        }\n        else {\n            curVal = targetVal;\n        }\n        result.set(curVal, undefined);\n    }\n    return result;\n}\nfunction easeOutExpo(t, b, c, d) {\n    return t === d ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n}\nexport class ViewZoneOverlayWidget extends Disposable {\n    constructor(editor, viewZone, htmlElement) {\n        super();\n        this._register(new ManagedOverlayWidget(editor, htmlElement));\n        this._register(applyStyle(htmlElement, {\n            height: viewZone.actualHeight,\n            top: viewZone.actualTop,\n        }));\n    }\n}\nexport class PlaceholderViewZone {\n    get afterLineNumber() { return this._afterLineNumber.get(); }\n    constructor(_afterLineNumber, heightInPx) {\n        this._afterLineNumber = _afterLineNumber;\n        this.heightInPx = heightInPx;\n        this.domNode = document.createElement('div');\n        this._actualTop = observableValue(this, undefined);\n        this._actualHeight = observableValue(this, undefined);\n        this.actualTop = this._actualTop;\n        this.actualHeight = this._actualHeight;\n        this.showInHiddenAreas = true;\n        this.onChange = this._afterLineNumber;\n        this.onDomNodeTop = (top) => {\n            this._actualTop.set(top, undefined);\n        };\n        this.onComputedHeight = (height) => {\n            this._actualHeight.set(height, undefined);\n        };\n    }\n}\nexport class ManagedOverlayWidget {\n    static { this._counter = 0; }\n    constructor(_editor, _domElement) {\n        this._editor = _editor;\n        this._domElement = _domElement;\n        this._overlayWidgetId = `managedOverlayWidget-${ManagedOverlayWidget._counter++}`;\n        this._overlayWidget = {\n            getId: () => this._overlayWidgetId,\n            getDomNode: () => this._domElement,\n            getPosition: () => null\n        };\n        this._editor.addOverlayWidget(this._overlayWidget);\n    }\n    dispose() {\n        this._editor.removeOverlayWidget(this._overlayWidget);\n    }\n}\nexport function applyStyle(domNode, style) {\n    return autorun(reader => {\n        /** @description applyStyle */\n        for (let [key, val] of Object.entries(style)) {\n            if (val && typeof val === 'object' && 'read' in val) {\n                val = val.read(reader);\n            }\n            if (typeof val === 'number') {\n                val = `${val}px`;\n            }\n            key = key.replace(/[A-Z]/g, m => '-' + m.toLowerCase());\n            domNode.style[key] = val;\n        }\n    });\n}\nexport function applyViewZones(editor, viewZones, setIsUpdating, zoneIds) {\n    const store = new DisposableStore();\n    const lastViewZoneIds = [];\n    store.add(autorunWithStore((reader, store) => {\n        /** @description applyViewZones */\n        const curViewZones = viewZones.read(reader);\n        const viewZonIdsPerViewZone = new Map();\n        const viewZoneIdPerOnChangeObservable = new Map();\n        // Add/remove view zones\n        if (setIsUpdating) {\n            setIsUpdating(true);\n        }\n        editor.changeViewZones(a => {\n            for (const id of lastViewZoneIds) {\n                a.removeZone(id);\n                zoneIds?.delete(id);\n            }\n            lastViewZoneIds.length = 0;\n            for (const z of curViewZones) {\n                const id = a.addZone(z);\n                if (z.setZoneId) {\n                    z.setZoneId(id);\n                }\n                lastViewZoneIds.push(id);\n                zoneIds?.add(id);\n                viewZonIdsPerViewZone.set(z, id);\n            }\n        });\n        if (setIsUpdating) {\n            setIsUpdating(false);\n        }\n        // Layout zone on change\n        store.add(autorunHandleChanges({\n            createEmptyChangeSummary() {\n                return { zoneIds: [] };\n            },\n            handleChange(context, changeSummary) {\n                const id = viewZoneIdPerOnChangeObservable.get(context.changedObservable);\n                if (id !== undefined) {\n                    changeSummary.zoneIds.push(id);\n                }\n                return true;\n            },\n        }, (reader, changeSummary) => {\n            /** @description layoutZone on change */\n            for (const vz of curViewZones) {\n                if (vz.onChange) {\n                    viewZoneIdPerOnChangeObservable.set(vz.onChange, viewZonIdsPerViewZone.get(vz));\n                    vz.onChange.read(reader);\n                }\n            }\n            if (setIsUpdating) {\n                setIsUpdating(true);\n            }\n            editor.changeViewZones(a => { for (const id of changeSummary.zoneIds) {\n                a.layoutZone(id);\n            } });\n            if (setIsUpdating) {\n                setIsUpdating(false);\n            }\n        }));\n    }));\n    store.add({\n        dispose() {\n            if (setIsUpdating) {\n                setIsUpdating(true);\n            }\n            editor.changeViewZones(a => { for (const id of lastViewZoneIds) {\n                a.removeZone(id);\n            } });\n            zoneIds?.clear();\n            if (setIsUpdating) {\n                setIsUpdating(false);\n            }\n        }\n    });\n    return store;\n}\nexport class DisposableCancellationTokenSource extends CancellationTokenSource {\n    dispose() {\n        super.dispose(true);\n    }\n}\nexport function translatePosition(posInOriginal, mappings) {\n    const mapping = findLast(mappings, m => m.original.startLineNumber <= posInOriginal.lineNumber);\n    if (!mapping) {\n        // No changes before the position\n        return Range.fromPositions(posInOriginal);\n    }\n    if (mapping.original.endLineNumberExclusive <= posInOriginal.lineNumber) {\n        const newLineNumber = posInOriginal.lineNumber - mapping.original.endLineNumberExclusive + mapping.modified.endLineNumberExclusive;\n        return Range.fromPositions(new Position(newLineNumber, posInOriginal.column));\n    }\n    if (!mapping.innerChanges) {\n        // Only for legacy algorithm\n        return Range.fromPositions(new Position(mapping.modified.startLineNumber, 1));\n    }\n    const innerMapping = findLast(mapping.innerChanges, m => m.originalRange.getStartPosition().isBeforeOrEqual(posInOriginal));\n    if (!innerMapping) {\n        const newLineNumber = posInOriginal.lineNumber - mapping.original.startLineNumber + mapping.modified.startLineNumber;\n        return Range.fromPositions(new Position(newLineNumber, posInOriginal.column));\n    }\n    if (innerMapping.originalRange.containsPosition(posInOriginal)) {\n        return innerMapping.modifiedRange;\n    }\n    else {\n        const l = lengthBetweenPositions(innerMapping.originalRange.getEndPosition(), posInOriginal);\n        return Range.fromPositions(l.addToPosition(innerMapping.modifiedRange.getEndPosition()));\n    }\n}\nfunction lengthBetweenPositions(position1, position2) {\n    if (position1.lineNumber === position2.lineNumber) {\n        return new TextLength(0, position2.column - position1.column);\n    }\n    else {\n        return new TextLength(position2.lineNumber - position1.lineNumber, position2.column - 1);\n    }\n}\nexport function filterWithPrevious(arr, filter) {\n    let prev;\n    return arr.filter(cur => {\n        const result = filter(cur, prev);\n        prev = cur;\n        return result;\n    });\n}\nexport class RefCounted {\n    static create(value, debugOwner = undefined) {\n        return new BaseRefCounted(value, value, debugOwner);\n    }\n    static createWithDisposable(value, disposable, debugOwner = undefined) {\n        const store = new DisposableStore();\n        store.add(disposable);\n        store.add(value);\n        return new BaseRefCounted(value, store, debugOwner);\n    }\n}\nclass BaseRefCounted extends RefCounted {\n    constructor(object, _disposable, _debugOwner) {\n        super();\n        this.object = object;\n        this._disposable = _disposable;\n        this._debugOwner = _debugOwner;\n        this._refCount = 1;\n        this._isDisposed = false;\n        this._owners = [];\n        if (_debugOwner) {\n            this._addOwner(_debugOwner);\n        }\n    }\n    _addOwner(debugOwner) {\n        if (debugOwner) {\n            this._owners.push(debugOwner);\n        }\n    }\n    createNewRef(debugOwner) {\n        this._refCount++;\n        if (debugOwner) {\n            this._addOwner(debugOwner);\n        }\n        return new ClonedRefCounted(this, debugOwner);\n    }\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._decreaseRefCount(this._debugOwner);\n    }\n    _decreaseRefCount(debugOwner) {\n        this._refCount--;\n        if (this._refCount === 0) {\n            this._disposable.dispose();\n        }\n        if (debugOwner) {\n            const idx = this._owners.indexOf(debugOwner);\n            if (idx !== -1) {\n                this._owners.splice(idx, 1);\n            }\n        }\n    }\n}\nclass ClonedRefCounted extends RefCounted {\n    constructor(_base, _debugOwner) {\n        super();\n        this._base = _base;\n        this._debugOwner = _debugOwner;\n        this._isDisposed = false;\n    }\n    get object() { return this._base.object; }\n    createNewRef(debugOwner) {\n        return this._base.createNewRef(debugOwner);\n    }\n    dispose() {\n        if (this._isDisposed) {\n            return;\n        }\n        this._isDisposed = true;\n        this._base._decreaseRefCount(this._debugOwner);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 { addDisposableListener, addStandardDisposableListener, reset } from '../../../../../base/browser/dom.js';\nimport { createTrustedTypesPolicy } from '../../../../../base/browser/trustedTypes.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 { forEachAdjacent, groupAdjacentBy } from '../../../../../base/common/arrays.js';\nimport { Codicon } from '../../../../../base/common/codicons.js';\nimport { Disposable, toDisposable } from '../../../../../base/common/lifecycle.js';\nimport { autorun, autorunWithStore, derived, derivedWithStore, observableValue, subtransaction, transaction } from '../../../../../base/common/observable.js';\nimport { ThemeIcon } from '../../../../../base/common/themables.js';\nimport { applyFontInfo } from '../../../config/domFontInfo.js';\nimport { applyStyle } from '../utils.js';\nimport { EditorFontLigatures } from '../../../../common/config/editorOptions.js';\nimport { LineRange } from '../../../../common/core/lineRange.js';\nimport { OffsetRange } from '../../../../common/core/offsetRange.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { LineRangeMapping } from '../../../../common/diff/rangeMapping.js';\nimport { ILanguageService } from '../../../../common/languages/language.js';\nimport { LineTokens } from '../../../../common/tokens/lineTokens.js';\nimport { RenderLineInput, renderViewLine2 } from '../../../../common/viewLayout/viewLineRenderer.js';\nimport { ViewLineRenderingData } from '../../../../common/viewModel.js';\nimport { localize } from '../../../../../nls.js';\nimport { AccessibilitySignal, IAccessibilitySignalService } from '../../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js';\nimport { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';\nimport { registerIcon } from '../../../../../platform/theme/common/iconRegistry.js';\nimport './accessibleDiffViewer.css';\nconst accessibleDiffViewerInsertIcon = registerIcon('diff-review-insert', Codicon.add, localize('accessibleDiffViewerInsertIcon', 'Icon for \\'Insert\\' in accessible diff viewer.'));\nconst accessibleDiffViewerRemoveIcon = registerIcon('diff-review-remove', Codicon.remove, localize('accessibleDiffViewerRemoveIcon', 'Icon for \\'Remove\\' in accessible diff viewer.'));\nconst accessibleDiffViewerCloseIcon = registerIcon('diff-review-close', Codicon.close, localize('accessibleDiffViewerCloseIcon', 'Icon for \\'Close\\' in accessible diff viewer.'));\nlet AccessibleDiffViewer = class AccessibleDiffViewer extends Disposable {\n    static { this._ttPolicy = createTrustedTypesPolicy('diffReview', { createHTML: value => value }); }\n    constructor(_parentNode, _visible, _setVisible, _canClose, _width, _height, _diffs, _models, _instantiationService) {\n        super();\n        this._parentNode = _parentNode;\n        this._visible = _visible;\n        this._setVisible = _setVisible;\n        this._canClose = _canClose;\n        this._width = _width;\n        this._height = _height;\n        this._diffs = _diffs;\n        this._models = _models;\n        this._instantiationService = _instantiationService;\n        this._state = derivedWithStore(this, (reader, store) => {\n            const visible = this._visible.read(reader);\n            this._parentNode.style.visibility = visible ? 'visible' : 'hidden';\n            if (!visible) {\n                return null;\n            }\n            const model = store.add(this._instantiationService.createInstance(ViewModel, this._diffs, this._models, this._setVisible, this._canClose));\n            const view = store.add(this._instantiationService.createInstance(View, this._parentNode, model, this._width, this._height, this._models));\n            return { model, view, };\n        }).recomputeInitiallyAndOnChange(this._store);\n    }\n    next() {\n        transaction(tx => {\n            const isVisible = this._visible.get();\n            this._setVisible(true, tx);\n            if (isVisible) {\n                this._state.get().model.nextGroup(tx);\n            }\n        });\n    }\n    prev() {\n        transaction(tx => {\n            this._setVisible(true, tx);\n            this._state.get().model.previousGroup(tx);\n        });\n    }\n    close() {\n        transaction(tx => {\n            this._setVisible(false, tx);\n        });\n    }\n};\nAccessibleDiffViewer = __decorate([\n    __param(8, IInstantiationService)\n], AccessibleDiffViewer);\nexport { AccessibleDiffViewer };\nlet ViewModel = class ViewModel extends Disposable {\n    constructor(_diffs, _models, _setVisible, canClose, _accessibilitySignalService) {\n        super();\n        this._diffs = _diffs;\n        this._models = _models;\n        this._setVisible = _setVisible;\n        this.canClose = canClose;\n        this._accessibilitySignalService = _accessibilitySignalService;\n        this._groups = observableValue(this, []);\n        this._currentGroupIdx = observableValue(this, 0);\n        this._currentElementIdx = observableValue(this, 0);\n        this.groups = this._groups;\n        this.currentGroup = this._currentGroupIdx.map((idx, r) => this._groups.read(r)[idx]);\n        this.currentGroupIndex = this._currentGroupIdx;\n        this.currentElement = this._currentElementIdx.map((idx, r) => this.currentGroup.read(r)?.lines[idx]);\n        this._register(autorun(reader => {\n            /** @description update groups */\n            const diffs = this._diffs.read(reader);\n            if (!diffs) {\n                this._groups.set([], undefined);\n                return;\n            }\n            const groups = computeViewElementGroups(diffs, this._models.getOriginalModel().getLineCount(), this._models.getModifiedModel().getLineCount());\n            transaction(tx => {\n                const p = this._models.getModifiedPosition();\n                if (p) {\n                    const nextGroup = groups.findIndex(g => p?.lineNumber < g.range.modified.endLineNumberExclusive);\n                    if (nextGroup !== -1) {\n                        this._currentGroupIdx.set(nextGroup, tx);\n                    }\n                }\n                this._groups.set(groups, tx);\n            });\n        }));\n        this._register(autorun(reader => {\n            /** @description play audio-cue for diff */\n            const currentViewItem = this.currentElement.read(reader);\n            if (currentViewItem?.type === LineType.Deleted) {\n                this._accessibilitySignalService.playSignal(AccessibilitySignal.diffLineDeleted, { source: 'accessibleDiffViewer.currentElementChanged' });\n            }\n            else if (currentViewItem?.type === LineType.Added) {\n                this._accessibilitySignalService.playSignal(AccessibilitySignal.diffLineInserted, { source: 'accessibleDiffViewer.currentElementChanged' });\n            }\n        }));\n        this._register(autorun(reader => {\n            /** @description select lines in editor */\n            // This ensures editor commands (like revert/stage) work\n            const currentViewItem = this.currentElement.read(reader);\n            if (currentViewItem && currentViewItem.type !== LineType.Header) {\n                const lineNumber = currentViewItem.modifiedLineNumber ?? currentViewItem.diff.modified.startLineNumber;\n                this._models.modifiedSetSelection(Range.fromPositions(new Position(lineNumber, 1)));\n            }\n        }));\n    }\n    _goToGroupDelta(delta, tx) {\n        const groups = this.groups.get();\n        if (!groups || groups.length <= 1) {\n            return;\n        }\n        subtransaction(tx, tx => {\n            this._currentGroupIdx.set(OffsetRange.ofLength(groups.length).clipCyclic(this._currentGroupIdx.get() + delta), tx);\n            this._currentElementIdx.set(0, tx);\n        });\n    }\n    nextGroup(tx) { this._goToGroupDelta(1, tx); }\n    previousGroup(tx) { this._goToGroupDelta(-1, tx); }\n    _goToLineDelta(delta) {\n        const group = this.currentGroup.get();\n        if (!group || group.lines.length <= 1) {\n            return;\n        }\n        transaction(tx => {\n            this._currentElementIdx.set(OffsetRange.ofLength(group.lines.length).clip(this._currentElementIdx.get() + delta), tx);\n        });\n    }\n    goToNextLine() { this._goToLineDelta(1); }\n    goToPreviousLine() { this._goToLineDelta(-1); }\n    goToLine(line) {\n        const group = this.currentGroup.get();\n        if (!group) {\n            return;\n        }\n        const idx = group.lines.indexOf(line);\n        if (idx === -1) {\n            return;\n        }\n        transaction(tx => {\n            this._currentElementIdx.set(idx, tx);\n        });\n    }\n    revealCurrentElementInEditor() {\n        if (!this.canClose.get()) {\n            return;\n        }\n        this._setVisible(false, undefined);\n        const curElem = this.currentElement.get();\n        if (curElem) {\n            if (curElem.type === LineType.Deleted) {\n                this._models.originalReveal(Range.fromPositions(new Position(curElem.originalLineNumber, 1)));\n            }\n            else {\n                this._models.modifiedReveal(curElem.type !== LineType.Header\n                    ? Range.fromPositions(new Position(curElem.modifiedLineNumber, 1))\n                    : undefined);\n            }\n        }\n    }\n    close() {\n        if (!this.canClose.get()) {\n            return;\n        }\n        this._setVisible(false, undefined);\n        this._models.modifiedFocus();\n    }\n};\nViewModel = __decorate([\n    __param(4, IAccessibilitySignalService)\n], ViewModel);\nconst viewElementGroupLineMargin = 3;\nfunction computeViewElementGroups(diffs, originalLineCount, modifiedLineCount) {\n    const result = [];\n    for (const g of groupAdjacentBy(diffs, (a, b) => (b.modified.startLineNumber - a.modified.endLineNumberExclusive < 2 * viewElementGroupLineMargin))) {\n        const viewElements = [];\n        viewElements.push(new HeaderViewElement());\n        const origFullRange = new LineRange(Math.max(1, g[0].original.startLineNumber - viewElementGroupLineMargin), Math.min(g[g.length - 1].original.endLineNumberExclusive + viewElementGroupLineMargin, originalLineCount + 1));\n        const modifiedFullRange = new LineRange(Math.max(1, g[0].modified.startLineNumber - viewElementGroupLineMargin), Math.min(g[g.length - 1].modified.endLineNumberExclusive + viewElementGroupLineMargin, modifiedLineCount + 1));\n        forEachAdjacent(g, (a, b) => {\n            const origRange = new LineRange(a ? a.original.endLineNumberExclusive : origFullRange.startLineNumber, b ? b.original.startLineNumber : origFullRange.endLineNumberExclusive);\n            const modifiedRange = new LineRange(a ? a.modified.endLineNumberExclusive : modifiedFullRange.startLineNumber, b ? b.modified.startLineNumber : modifiedFullRange.endLineNumberExclusive);\n            origRange.forEach(origLineNumber => {\n                viewElements.push(new UnchangedLineViewElement(origLineNumber, modifiedRange.startLineNumber + (origLineNumber - origRange.startLineNumber)));\n            });\n            if (b) {\n                b.original.forEach(origLineNumber => {\n                    viewElements.push(new DeletedLineViewElement(b, origLineNumber));\n                });\n                b.modified.forEach(modifiedLineNumber => {\n                    viewElements.push(new AddedLineViewElement(b, modifiedLineNumber));\n                });\n            }\n        });\n        const modifiedRange = g[0].modified.join(g[g.length - 1].modified);\n        const originalRange = g[0].original.join(g[g.length - 1].original);\n        result.push(new ViewElementGroup(new LineRangeMapping(modifiedRange, originalRange), viewElements));\n    }\n    return result;\n}\nvar LineType;\n(function (LineType) {\n    LineType[LineType[\"Header\"] = 0] = \"Header\";\n    LineType[LineType[\"Unchanged\"] = 1] = \"Unchanged\";\n    LineType[LineType[\"Deleted\"] = 2] = \"Deleted\";\n    LineType[LineType[\"Added\"] = 3] = \"Added\";\n})(LineType || (LineType = {}));\nclass ViewElementGroup {\n    constructor(range, lines) {\n        this.range = range;\n        this.lines = lines;\n    }\n}\nclass HeaderViewElement {\n    constructor() {\n        this.type = LineType.Header;\n    }\n}\nclass DeletedLineViewElement {\n    constructor(diff, originalLineNumber) {\n        this.diff = diff;\n        this.originalLineNumber = originalLineNumber;\n        this.type = LineType.Deleted;\n        this.modifiedLineNumber = undefined;\n    }\n}\nclass AddedLineViewElement {\n    constructor(diff, modifiedLineNumber) {\n        this.diff = diff;\n        this.modifiedLineNumber = modifiedLineNumber;\n        this.type = LineType.Added;\n        this.originalLineNumber = undefined;\n    }\n}\nclass UnchangedLineViewElement {\n    constructor(originalLineNumber, modifiedLineNumber) {\n        this.originalLineNumber = originalLineNumber;\n        this.modifiedLineNumber = modifiedLineNumber;\n        this.type = LineType.Unchanged;\n    }\n}\nlet View = class View extends Disposable {\n    constructor(_element, _model, _width, _height, _models, _languageService) {\n        super();\n        this._element = _element;\n        this._model = _model;\n        this._width = _width;\n        this._height = _height;\n        this._models = _models;\n        this._languageService = _languageService;\n        this.domNode = this._element;\n        this.domNode.className = 'monaco-component diff-review monaco-editor-background';\n        const actionBarContainer = document.createElement('div');\n        actionBarContainer.className = 'diff-review-actions';\n        this._actionBar = this._register(new ActionBar(actionBarContainer));\n        this._register(autorun(reader => {\n            /** @description update actions */\n            this._actionBar.clear();\n            if (this._model.canClose.read(reader)) {\n                this._actionBar.push(new Action('diffreview.close', localize('label.close', \"Close\"), 'close-diff-review ' + ThemeIcon.asClassName(accessibleDiffViewerCloseIcon), true, async () => _model.close()), { label: false, icon: true });\n            }\n        }));\n        this._content = document.createElement('div');\n        this._content.className = 'diff-review-content';\n        this._content.setAttribute('role', 'code');\n        this._scrollbar = this._register(new DomScrollableElement(this._content, {}));\n        reset(this.domNode, this._scrollbar.getDomNode(), actionBarContainer);\n        this._register(autorun(r => {\n            this._height.read(r);\n            this._width.read(r);\n            this._scrollbar.scanDomNode();\n        }));\n        this._register(toDisposable(() => { reset(this.domNode); }));\n        this._register(applyStyle(this.domNode, { width: this._width, height: this._height }));\n        this._register(applyStyle(this._content, { width: this._width, height: this._height }));\n        this._register(autorunWithStore((reader, store) => {\n            /** @description render */\n            this._model.currentGroup.read(reader);\n            this._render(store);\n        }));\n        // TODO@hediet use commands\n        this._register(addStandardDisposableListener(this.domNode, 'keydown', (e) => {\n            if (e.equals(18 /* KeyCode.DownArrow */)\n                || e.equals(2048 /* KeyMod.CtrlCmd */ | 18 /* KeyCode.DownArrow */)\n                || e.equals(512 /* KeyMod.Alt */ | 18 /* KeyCode.DownArrow */)) {\n                e.preventDefault();\n                this._model.goToNextLine();\n            }\n            if (e.equals(16 /* KeyCode.UpArrow */)\n                || e.equals(2048 /* KeyMod.CtrlCmd */ | 16 /* KeyCode.UpArrow */)\n                || e.equals(512 /* KeyMod.Alt */ | 16 /* KeyCode.UpArrow */)) {\n                e.preventDefault();\n                this._model.goToPreviousLine();\n            }\n            if (e.equals(9 /* KeyCode.Escape */)\n                || e.equals(2048 /* KeyMod.CtrlCmd */ | 9 /* KeyCode.Escape */)\n                || e.equals(512 /* KeyMod.Alt */ | 9 /* KeyCode.Escape */)\n                || e.equals(1024 /* KeyMod.Shift */ | 9 /* KeyCode.Escape */)) {\n                e.preventDefault();\n                this._model.close();\n            }\n            if (e.equals(10 /* KeyCode.Space */)\n                || e.equals(3 /* KeyCode.Enter */)) {\n                e.preventDefault();\n                this._model.revealCurrentElementInEditor();\n            }\n        }));\n    }\n    _render(store) {\n        const originalOptions = this._models.getOriginalOptions();\n        const modifiedOptions = this._models.getModifiedOptions();\n        const container = document.createElement('div');\n        container.className = 'diff-review-table';\n        container.setAttribute('role', 'list');\n        container.setAttribute('aria-label', localize('ariaLabel', 'Accessible Diff Viewer. Use arrow up and down to navigate.'));\n        applyFontInfo(container, modifiedOptions.get(50 /* EditorOption.fontInfo */));\n        reset(this._content, container);\n        const originalModel = this._models.getOriginalModel();\n        const modifiedModel = this._models.getModifiedModel();\n        if (!originalModel || !modifiedModel) {\n            return;\n        }\n        const originalModelOpts = originalModel.getOptions();\n        const modifiedModelOpts = modifiedModel.getOptions();\n        const lineHeight = modifiedOptions.get(67 /* EditorOption.lineHeight */);\n        const group = this._model.currentGroup.get();\n        for (const viewItem of group?.lines || []) {\n            if (!group) {\n                break;\n            }\n            let row;\n            if (viewItem.type === LineType.Header) {\n                const header = document.createElement('div');\n                header.className = 'diff-review-row';\n                header.setAttribute('role', 'listitem');\n                const r = group.range;\n                const diffIndex = this._model.currentGroupIndex.get();\n                const diffsLength = this._model.groups.get().length;\n                const getAriaLines = (lines) => lines === 0 ? localize('no_lines_changed', \"no lines changed\")\n                    : lines === 1 ? localize('one_line_changed', \"1 line changed\")\n                        : localize('more_lines_changed', \"{0} lines changed\", lines);\n                const originalChangedLinesCntAria = getAriaLines(r.original.length);\n                const modifiedChangedLinesCntAria = getAriaLines(r.modified.length);\n                header.setAttribute('aria-label', 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), diffsLength, r.original.startLineNumber, originalChangedLinesCntAria, r.modified.startLineNumber, modifiedChangedLinesCntAria));\n                const cell = document.createElement('div');\n                cell.className = 'diff-review-cell diff-review-summary';\n                // e.g.: `1/10: @@ -504,7 +517,7 @@`\n                cell.appendChild(document.createTextNode(`${diffIndex + 1}/${diffsLength}: @@ -${r.original.startLineNumber},${r.original.length} +${r.modified.startLineNumber},${r.modified.length} @@`));\n                header.appendChild(cell);\n                row = header;\n            }\n            else {\n                row = this._createRow(viewItem, lineHeight, this._width.get(), originalOptions, originalModel, originalModelOpts, modifiedOptions, modifiedModel, modifiedModelOpts);\n            }\n            container.appendChild(row);\n            const isSelectedObs = derived(reader => /** @description isSelected */ this._model.currentElement.read(reader) === viewItem);\n            store.add(autorun(reader => {\n                /** @description update tab index */\n                const isSelected = isSelectedObs.read(reader);\n                row.tabIndex = isSelected ? 0 : -1;\n                if (isSelected) {\n                    row.focus();\n                }\n            }));\n            store.add(addDisposableListener(row, 'focus', () => {\n                this._model.goToLine(viewItem);\n            }));\n        }\n        this._scrollbar.scanDomNode();\n    }\n    _createRow(item, lineHeight, width, originalOptions, originalModel, originalModelOpts, modifiedOptions, modifiedModel, modifiedModelOpts) {\n        const originalLayoutInfo = originalOptions.get(146 /* EditorOption.layoutInfo */);\n        const originalLineNumbersWidth = originalLayoutInfo.glyphMarginWidth + originalLayoutInfo.lineNumbersWidth;\n        const modifiedLayoutInfo = modifiedOptions.get(146 /* EditorOption.layoutInfo */);\n        const modifiedLineNumbersWidth = 10 + modifiedLayoutInfo.glyphMarginWidth + modifiedLayoutInfo.lineNumbersWidth;\n        let rowClassName = 'diff-review-row';\n        let lineNumbersExtraClassName = '';\n        const spacerClassName = 'diff-review-spacer';\n        let spacerIcon = null;\n        switch (item.type) {\n            case LineType.Added:\n                rowClassName = 'diff-review-row line-insert';\n                lineNumbersExtraClassName = ' char-insert';\n                spacerIcon = accessibleDiffViewerInsertIcon;\n                break;\n            case LineType.Deleted:\n                rowClassName = 'diff-review-row line-delete';\n                lineNumbersExtraClassName = ' char-delete';\n                spacerIcon = accessibleDiffViewerRemoveIcon;\n                break;\n        }\n        const row = document.createElement('div');\n        row.style.minWidth = width + 'px';\n        row.className = rowClassName;\n        row.setAttribute('role', 'listitem');\n        row.ariaLevel = '';\n        const 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 (item.originalLineNumber !== undefined) {\n            originalLineNumber.appendChild(document.createTextNode(String(item.originalLineNumber)));\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 (item.modifiedLineNumber !== undefined) {\n            modifiedLineNumber.appendChild(document.createTextNode(String(item.modifiedLineNumber)));\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 (item.modifiedLineNumber !== undefined) {\n            let html = this._getLineHtml(modifiedModel, modifiedOptions, modifiedModelOpts.tabSize, item.modifiedLineNumber, this._languageService.languageIdCodec);\n            if (AccessibleDiffViewer._ttPolicy) {\n                html = AccessibleDiffViewer._ttPolicy.createHTML(html);\n            }\n            cell.insertAdjacentHTML('beforeend', html);\n            lineContent = modifiedModel.getLineContent(item.modifiedLineNumber);\n        }\n        else {\n            let html = this._getLineHtml(originalModel, originalOptions, originalModelOpts.tabSize, item.originalLineNumber, this._languageService.languageIdCodec);\n            if (AccessibleDiffViewer._ttPolicy) {\n                html = AccessibleDiffViewer._ttPolicy.createHTML(html);\n            }\n            cell.insertAdjacentHTML('beforeend', html);\n            lineContent = originalModel.getLineContent(item.originalLineNumber);\n        }\n        if (lineContent.length === 0) {\n            lineContent = localize('blankLine', \"blank\");\n        }\n        let ariaLabel = '';\n        switch (item.type) {\n            case LineType.Unchanged:\n                if (item.originalLineNumber === item.modifiedLineNumber) {\n                    ariaLabel = localize({ key: 'unchangedLine', comment: ['The placeholders are contents of the line and should not be translated.'] }, \"{0} unchanged line {1}\", lineContent, item.originalLineNumber);\n                }\n                else {\n                    ariaLabel = localize('equalLine', \"{0} original line {1} modified line {2}\", lineContent, item.originalLineNumber, item.modifiedLineNumber);\n                }\n                break;\n            case LineType.Added:\n                ariaLabel = localize('insertLine', \"+ {0} modified line {1}\", lineContent, item.modifiedLineNumber);\n                break;\n            case LineType.Deleted:\n                ariaLabel = localize('deleteLine', \"- {0} original line {1}\", lineContent, item.originalLineNumber);\n                break;\n        }\n        row.setAttribute('aria-label', ariaLabel);\n        return row;\n    }\n    _getLineHtml(model, options, tabSize, lineNumber, languageIdCodec) {\n        const lineContent = model.getLineContent(lineNumber);\n        const fontInfo = options.get(50 /* EditorOption.fontInfo */);\n        const lineTokens = LineTokens.createEmpty(lineContent, languageIdCodec);\n        const isBasicASCII = ViewLineRenderingData.isBasicASCII(lineContent, model.mightContainNonBasicASCII());\n        const containsRTL = ViewLineRenderingData.containsRTL(lineContent, isBasicASCII, model.mightContainRTL());\n        const r = renderViewLine2(new RenderLineInput((fontInfo.isMonospace && !options.get(33 /* EditorOption.disableMonospaceOptimizations */)), fontInfo.canUseHalfwidthRightwardsArrow, lineContent, false, isBasicASCII, containsRTL, 0, lineTokens, [], tabSize, 0, fontInfo.spaceWidth, fontInfo.middotWidth, fontInfo.wsmiddotWidth, options.get(118 /* EditorOption.stopRenderingLineAfter */), options.get(100 /* EditorOption.renderWhitespace */), options.get(95 /* EditorOption.renderControlCharacters */), options.get(51 /* EditorOption.fontLigatures */) !== EditorFontLigatures.OFF, null));\n        return r.html;\n    }\n};\nView = __decorate([\n    __param(5, ILanguageService)\n], View);\nexport class AccessibleDiffViewerModelFromEditors {\n    constructor(editors) {\n        this.editors = editors;\n    }\n    getOriginalModel() {\n        return this.editors.original.getModel();\n    }\n    getOriginalOptions() {\n        return this.editors.original.getOptions();\n    }\n    originalReveal(range) {\n        this.editors.original.revealRange(range);\n        this.editors.original.setSelection(range);\n        this.editors.original.focus();\n    }\n    getModifiedModel() {\n        return this.editors.modified.getModel();\n    }\n    getModifiedOptions() {\n        return this.editors.modified.getOptions();\n    }\n    modifiedReveal(range) {\n        if (range) {\n            this.editors.modified.revealRange(range);\n            this.editors.modified.setSelection(range);\n        }\n        this.editors.modified.focus();\n    }\n    modifiedSetSelection(range) {\n        this.editors.modified.setSelection(range);\n    }\n    modifiedFocus() {\n        this.editors.modified.focus();\n    }\n    getModifiedPosition() {\n        return this.editors.modified.getPosition() ?? 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 { Codicon } from '../../../../base/common/codicons.js';\nimport { ThemeIcon } from '../../../../base/common/themables.js';\nimport { ModelDecorationOptions } from '../../../common/model/textModel.js';\nimport { localize } from '../../../../nls.js';\nimport { registerColor } from '../../../../platform/theme/common/colorRegistry.js';\nimport { registerIcon } from '../../../../platform/theme/common/iconRegistry.js';\nexport const diffMoveBorder = registerColor('diffEditor.move.border', '#8b8b8b9c', localize('diffEditor.move.border', 'The border color for text that got moved in the diff editor.'));\nexport const diffMoveBorderActive = registerColor('diffEditor.moveActive.border', '#FFA500', localize('diffEditor.moveActive.border', 'The active border color for text that got moved in the diff editor.'));\nexport const diffEditorUnchangedRegionShadow = registerColor('diffEditor.unchangedRegionShadow', { dark: '#000000', light: '#737373BF', hcDark: '#000000', hcLight: '#737373BF', }, localize('diffEditor.unchangedRegionShadow', 'The color of the shadow around unchanged region widgets.'));\nexport const diffInsertIcon = registerIcon('diff-insert', Codicon.add, localize('diffInsertIcon', 'Line decoration for inserts in the diff editor.'));\nexport const diffRemoveIcon = registerIcon('diff-remove', Codicon.remove, localize('diffRemoveIcon', 'Line decoration for removals in the diff editor.'));\nexport const diffLineAddDecorationBackgroundWithIndicator = ModelDecorationOptions.register({\n    className: 'line-insert',\n    description: 'line-insert',\n    isWholeLine: true,\n    linesDecorationsClassName: 'insert-sign ' + ThemeIcon.asClassName(diffInsertIcon),\n    marginClassName: 'gutter-insert',\n});\nexport const diffLineDeleteDecorationBackgroundWithIndicator = ModelDecorationOptions.register({\n    className: 'line-delete',\n    description: 'line-delete',\n    isWholeLine: true,\n    linesDecorationsClassName: 'delete-sign ' + ThemeIcon.asClassName(diffRemoveIcon),\n    marginClassName: 'gutter-delete',\n});\nexport const diffLineAddDecorationBackground = ModelDecorationOptions.register({\n    className: 'line-insert',\n    description: 'line-insert',\n    isWholeLine: true,\n    marginClassName: 'gutter-insert',\n});\nexport const diffLineDeleteDecorationBackground = ModelDecorationOptions.register({\n    className: 'line-delete',\n    description: 'line-delete',\n    isWholeLine: true,\n    marginClassName: 'gutter-delete',\n});\nexport const diffAddDecoration = ModelDecorationOptions.register({\n    className: 'char-insert',\n    description: 'char-insert',\n    shouldFillLineOnLineBreak: true,\n});\nexport const diffWholeLineAddDecoration = ModelDecorationOptions.register({\n    className: 'char-insert',\n    description: 'char-insert',\n    isWholeLine: true,\n});\nexport const diffAddDecorationEmpty = ModelDecorationOptions.register({\n    className: 'char-insert diff-range-empty',\n    description: 'char-insert diff-range-empty',\n});\nexport const diffDeleteDecoration = ModelDecorationOptions.register({\n    className: 'char-delete',\n    description: 'char-delete',\n    shouldFillLineOnLineBreak: true,\n});\nexport const diffWholeLineDeleteDecoration = ModelDecorationOptions.register({\n    className: 'char-delete',\n    description: 'char-delete',\n    isWholeLine: true,\n});\nexport const diffDeleteDecorationEmpty = ModelDecorationOptions.register({\n    className: 'char-delete diff-range-empty',\n    description: 'char-delete diff-range-empty',\n});\n","/*---------------------------------------------------------------------------------------------\n *  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 WorkerBasedDocumentDiffProvider_1;\nimport { registerSingleton } from '../../../../platform/instantiation/common/extensions.js';\nimport { IInstantiationService, createDecorator } from '../../../../platform/instantiation/common/instantiation.js';\nimport { Emitter } from '../../../../base/common/event.js';\nimport { StopWatch } from '../../../../base/common/stopwatch.js';\nimport { LineRange } from '../../../common/core/lineRange.js';\nimport { DetailedLineRangeMapping, RangeMapping } from '../../../common/diff/rangeMapping.js';\nimport { IEditorWorkerService } from '../../../common/services/editorWorker.js';\nimport { ITelemetryService } from '../../../../platform/telemetry/common/telemetry.js';\nexport const IDiffProviderFactoryService = createDecorator('diffProviderFactoryService');\nlet WorkerBasedDiffProviderFactoryService = class WorkerBasedDiffProviderFactoryService {\n    constructor(instantiationService) {\n        this.instantiationService = instantiationService;\n    }\n    createDiffProvider(options) {\n        return this.instantiationService.createInstance(WorkerBasedDocumentDiffProvider, options);\n    }\n};\nWorkerBasedDiffProviderFactoryService = __decorate([\n    __param(0, IInstantiationService)\n], WorkerBasedDiffProviderFactoryService);\nexport { WorkerBasedDiffProviderFactoryService };\nregisterSingleton(IDiffProviderFactoryService, WorkerBasedDiffProviderFactoryService, 1 /* InstantiationType.Delayed */);\nlet WorkerBasedDocumentDiffProvider = class WorkerBasedDocumentDiffProvider {\n    static { WorkerBasedDocumentDiffProvider_1 = this; }\n    static { this.diffCache = new Map(); }\n    constructor(options, editorWorkerService, telemetryService) {\n        this.editorWorkerService = editorWorkerService;\n        this.telemetryService = telemetryService;\n        this.onDidChangeEventEmitter = new Emitter();\n        this.onDidChange = this.onDidChangeEventEmitter.event;\n        this.diffAlgorithm = 'advanced';\n        this.diffAlgorithmOnDidChangeSubscription = undefined;\n        this.setOptions(options);\n    }\n    dispose() {\n        this.diffAlgorithmOnDidChangeSubscription?.dispose();\n    }\n    async computeDiff(original, modified, options, cancellationToken) {\n        if (typeof this.diffAlgorithm !== 'string') {\n            return this.diffAlgorithm.computeDiff(original, modified, options, cancellationToken);\n        }\n        if (original.isDisposed() || modified.isDisposed()) {\n            // TODO@hediet\n            return {\n                changes: [],\n                identical: true,\n                quitEarly: false,\n                moves: [],\n            };\n        }\n        // This significantly speeds up the case when the original file is empty\n        if (original.getLineCount() === 1 && original.getLineMaxColumn(1) === 1) {\n            if (modified.getLineCount() === 1 && modified.getLineMaxColumn(1) === 1) {\n                return {\n                    changes: [],\n                    identical: true,\n                    quitEarly: false,\n                    moves: [],\n                };\n            }\n            return {\n                changes: [\n                    new DetailedLineRangeMapping(new LineRange(1, 2), new LineRange(1, modified.getLineCount() + 1), [\n                        new RangeMapping(original.getFullModelRange(), modified.getFullModelRange())\n                    ])\n                ],\n                identical: false,\n                quitEarly: false,\n                moves: [],\n            };\n        }\n        const uriKey = JSON.stringify([original.uri.toString(), modified.uri.toString()]);\n        const context = JSON.stringify([original.id, modified.id, original.getAlternativeVersionId(), modified.getAlternativeVersionId(), JSON.stringify(options)]);\n        const c = WorkerBasedDocumentDiffProvider_1.diffCache.get(uriKey);\n        if (c && c.context === context) {\n            return c.result;\n        }\n        const sw = StopWatch.create();\n        const result = await this.editorWorkerService.computeDiff(original.uri, modified.uri, options, this.diffAlgorithm);\n        const timeMs = sw.elapsed();\n        this.telemetryService.publicLog2('diffEditor.computeDiff', {\n            timeMs,\n            timedOut: result?.quitEarly ?? true,\n            detectedMoves: options.computeMoves ? (result?.moves.length ?? 0) : -1,\n        });\n        if (cancellationToken.isCancellationRequested) {\n            // Text models might be disposed!\n            return {\n                changes: [],\n                identical: false,\n                quitEarly: true,\n                moves: [],\n            };\n        }\n        if (!result) {\n            throw new Error('no diff result available');\n        }\n        // max 10 items in cache\n        if (WorkerBasedDocumentDiffProvider_1.diffCache.size > 10) {\n            WorkerBasedDocumentDiffProvider_1.diffCache.delete(WorkerBasedDocumentDiffProvider_1.diffCache.keys().next().value);\n        }\n        WorkerBasedDocumentDiffProvider_1.diffCache.set(uriKey, { result, context });\n        return result;\n    }\n    setOptions(newOptions) {\n        let didChange = false;\n        if (newOptions.diffAlgorithm) {\n            if (this.diffAlgorithm !== newOptions.diffAlgorithm) {\n                this.diffAlgorithmOnDidChangeSubscription?.dispose();\n                this.diffAlgorithmOnDidChangeSubscription = undefined;\n                this.diffAlgorithm = newOptions.diffAlgorithm;\n                if (typeof newOptions.diffAlgorithm !== 'string') {\n                    this.diffAlgorithmOnDidChangeSubscription = newOptions.diffAlgorithm.onDidChange(() => this.onDidChangeEventEmitter.fire());\n                }\n                didChange = true;\n            }\n        }\n        if (didChange) {\n            this.onDidChangeEventEmitter.fire();\n        }\n    }\n};\nWorkerBasedDocumentDiffProvider = WorkerBasedDocumentDiffProvider_1 = __decorate([\n    __param(1, IEditorWorkerService),\n    __param(2, ITelemetryService)\n], WorkerBasedDocumentDiffProvider);\nexport { WorkerBasedDocumentDiffProvider };\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { env } from './process.js';\nexport function isHotReloadEnabled() {\n    return env && !!env['VSCODE_DEV'];\n}\nexport function registerHotReloadHandler(handler) {\n    if (!isHotReloadEnabled()) {\n        return { dispose() { } };\n    }\n    else {\n        const handlers = registerGlobalHotReloadHandler();\n        handlers.add(handler);\n        return {\n            dispose() { handlers.delete(handler); }\n        };\n    }\n}\nfunction registerGlobalHotReloadHandler() {\n    if (!hotReloadHandlers) {\n        hotReloadHandlers = new Set();\n    }\n    const g = globalThis;\n    if (!g.$hotReload_applyNewExports) {\n        g.$hotReload_applyNewExports = args => {\n            const args2 = { config: { mode: undefined }, ...args };\n            const results = [];\n            for (const h of hotReloadHandlers) {\n                const result = h(args2);\n                if (result) {\n                    results.push(result);\n                }\n            }\n            if (results.length > 0) {\n                return newExports => {\n                    let result = false;\n                    for (const r of results) {\n                        if (r(newExports)) {\n                            result = true;\n                        }\n                    }\n                    return result;\n                };\n            }\n            return undefined;\n        };\n    }\n    return hotReloadHandlers;\n}\nlet hotReloadHandlers = undefined;\nif (isHotReloadEnabled()) {\n    // This code does not run in production.\n    registerHotReloadHandler(({ oldExports, newSrc, config }) => {\n        if (config.mode !== 'patch-prototype') {\n            return undefined;\n        }\n        return newExports => {\n            for (const key in newExports) {\n                const exportedItem = newExports[key];\n                console.log(`[hot-reload] Patching prototype methods of '${key}'`, { exportedItem });\n                if (typeof exportedItem === 'function' && exportedItem.prototype) {\n                    const oldExportedItem = oldExports[key];\n                    if (oldExportedItem) {\n                        for (const prop of Object.getOwnPropertyNames(exportedItem.prototype)) {\n                            const descriptor = Object.getOwnPropertyDescriptor(exportedItem.prototype, prop);\n                            const oldDescriptor = Object.getOwnPropertyDescriptor(oldExportedItem.prototype, prop);\n                            if (descriptor?.value?.toString() !== oldDescriptor?.value?.toString()) {\n                                console.log(`[hot-reload] Patching prototype method '${key}.${prop}'`);\n                            }\n                            Object.defineProperty(oldExportedItem.prototype, prop, descriptor);\n                        }\n                        newExports[key] = oldExportedItem;\n                    }\n                }\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 *--------------------------------------------------------------------------------------------*/\nimport { isHotReloadEnabled, registerHotReloadHandler } from './hotReload.js';\nimport { observableSignalFromEvent } from './observable.js';\nexport function readHotReloadableExport(value, reader) {\n    observeHotReloadableExports([value], reader);\n    return value;\n}\nexport function observeHotReloadableExports(values, reader) {\n    if (isHotReloadEnabled()) {\n        const o = observableSignalFromEvent('reload', event => registerHotReloadHandler(({ oldExports }) => {\n            if (![...Object.values(oldExports)].some(v => values.includes(v))) {\n                return undefined;\n            }\n            return (_newExports) => {\n                event(undefined);\n                return true;\n            };\n        }));\n        o.read(reader);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 { CancellationTokenSource } from '../../../../base/common/cancellation.js';\nimport { Disposable, toDisposable } from '../../../../base/common/lifecycle.js';\nimport { autorun, autorunWithStore, derived, observableSignal, observableSignalFromEvent, observableValue, transaction, waitForState } from '../../../../base/common/observable.js';\nimport { IDiffProviderFactoryService } from './diffProviderFactoryService.js';\nimport { filterWithPrevious } from './utils.js';\nimport { readHotReloadableExport } from '../../../../base/common/hotReloadHelpers.js';\nimport { LineRange, LineRangeSet } from '../../../common/core/lineRange.js';\nimport { DefaultLinesDiffComputer } from '../../../common/diff/defaultLinesDiffComputer/defaultLinesDiffComputer.js';\nimport { DetailedLineRangeMapping, LineRangeMapping, RangeMapping } from '../../../common/diff/rangeMapping.js';\nimport { TextEditInfo } from '../../../common/model/bracketPairsTextModelPart/bracketPairsTree/beforeEditPositionMapper.js';\nimport { combineTextEditInfos } from '../../../common/model/bracketPairsTextModelPart/bracketPairsTree/combineTextEditInfos.js';\nimport { optimizeSequenceDiffs } from '../../../common/diff/defaultLinesDiffComputer/heuristicSequenceOptimizations.js';\nimport { isDefined } from '../../../../base/common/types.js';\nimport { groupAdjacentBy } from '../../../../base/common/arrays.js';\nimport { softAssert } from '../../../../base/common/assert.js';\nlet DiffEditorViewModel = class DiffEditorViewModel extends Disposable {\n    setActiveMovedText(movedText) {\n        this._activeMovedText.set(movedText, undefined);\n    }\n    constructor(model, _options, _diffProviderFactoryService) {\n        super();\n        this.model = model;\n        this._options = _options;\n        this._diffProviderFactoryService = _diffProviderFactoryService;\n        this._isDiffUpToDate = observableValue(this, false);\n        this.isDiffUpToDate = this._isDiffUpToDate;\n        this._diff = observableValue(this, undefined);\n        this.diff = this._diff;\n        this._unchangedRegions = observableValue(this, undefined);\n        this.unchangedRegions = derived(this, r => {\n            if (this._options.hideUnchangedRegions.read(r)) {\n                return this._unchangedRegions.read(r)?.regions ?? [];\n            }\n            else {\n                // Reset state\n                transaction(tx => {\n                    for (const r of this._unchangedRegions.get()?.regions || []) {\n                        r.collapseAll(tx);\n                    }\n                });\n                return [];\n            }\n        });\n        this.movedTextToCompare = observableValue(this, undefined);\n        this._activeMovedText = observableValue(this, undefined);\n        this._hoveredMovedText = observableValue(this, undefined);\n        this.activeMovedText = derived(this, r => this.movedTextToCompare.read(r) ?? this._hoveredMovedText.read(r) ?? this._activeMovedText.read(r));\n        this._cancellationTokenSource = new CancellationTokenSource();\n        this._diffProvider = derived(this, reader => {\n            const diffProvider = this._diffProviderFactoryService.createDiffProvider({\n                diffAlgorithm: this._options.diffAlgorithm.read(reader)\n            });\n            const onChangeSignal = observableSignalFromEvent('onDidChange', diffProvider.onDidChange);\n            return {\n                diffProvider,\n                onChangeSignal,\n            };\n        });\n        this._register(toDisposable(() => this._cancellationTokenSource.cancel()));\n        const contentChangedSignal = observableSignal('contentChangedSignal');\n        const debouncer = this._register(new RunOnceScheduler(() => contentChangedSignal.trigger(undefined), 200));\n        this._register(autorun(reader => {\n            /** @description collapse touching unchanged ranges */\n            const lastUnchangedRegions = this._unchangedRegions.read(reader);\n            if (!lastUnchangedRegions || lastUnchangedRegions.regions.some(r => r.isDragged.read(reader))) {\n                return;\n            }\n            const lastUnchangedRegionsOrigRanges = lastUnchangedRegions.originalDecorationIds\n                .map(id => model.original.getDecorationRange(id))\n                .map(r => r ? LineRange.fromRangeInclusive(r) : undefined);\n            const lastUnchangedRegionsModRanges = lastUnchangedRegions.modifiedDecorationIds\n                .map(id => model.modified.getDecorationRange(id))\n                .map(r => r ? LineRange.fromRangeInclusive(r) : undefined);\n            const updatedLastUnchangedRegions = lastUnchangedRegions.regions.map((r, idx) => (!lastUnchangedRegionsOrigRanges[idx] || !lastUnchangedRegionsModRanges[idx]) ? undefined :\n                new UnchangedRegion(lastUnchangedRegionsOrigRanges[idx].startLineNumber, lastUnchangedRegionsModRanges[idx].startLineNumber, lastUnchangedRegionsOrigRanges[idx].length, r.visibleLineCountTop.read(reader), r.visibleLineCountBottom.read(reader))).filter(isDefined);\n            const newRanges = [];\n            let didChange = false;\n            for (const touching of groupAdjacentBy(updatedLastUnchangedRegions, (a, b) => a.getHiddenModifiedRange(reader).endLineNumberExclusive === b.getHiddenModifiedRange(reader).startLineNumber)) {\n                if (touching.length > 1) {\n                    didChange = true;\n                    const sumLineCount = touching.reduce((sum, r) => sum + r.lineCount, 0);\n                    const r = new UnchangedRegion(touching[0].originalLineNumber, touching[0].modifiedLineNumber, sumLineCount, touching[0].visibleLineCountTop.get(), touching[touching.length - 1].visibleLineCountBottom.get());\n                    newRanges.push(r);\n                }\n                else {\n                    newRanges.push(touching[0]);\n                }\n            }\n            if (didChange) {\n                const originalDecorationIds = model.original.deltaDecorations(lastUnchangedRegions.originalDecorationIds, newRanges.map(r => ({ range: r.originalUnchangedRange.toInclusiveRange(), options: { description: 'unchanged' } })));\n                const modifiedDecorationIds = model.modified.deltaDecorations(lastUnchangedRegions.modifiedDecorationIds, newRanges.map(r => ({ range: r.modifiedUnchangedRange.toInclusiveRange(), options: { description: 'unchanged' } })));\n                transaction(tx => {\n                    this._unchangedRegions.set({\n                        regions: newRanges,\n                        originalDecorationIds,\n                        modifiedDecorationIds\n                    }, tx);\n                });\n            }\n        }));\n        const updateUnchangedRegions = (result, tx, reader) => {\n            const newUnchangedRegions = UnchangedRegion.fromDiffs(result.changes, model.original.getLineCount(), model.modified.getLineCount(), this._options.hideUnchangedRegionsMinimumLineCount.read(reader), this._options.hideUnchangedRegionsContextLineCount.read(reader));\n            // Transfer state from cur state\n            let visibleRegions = undefined;\n            const lastUnchangedRegions = this._unchangedRegions.get();\n            if (lastUnchangedRegions) {\n                const lastUnchangedRegionsOrigRanges = lastUnchangedRegions.originalDecorationIds\n                    .map(id => model.original.getDecorationRange(id))\n                    .map(r => r ? LineRange.fromRangeInclusive(r) : undefined);\n                const lastUnchangedRegionsModRanges = lastUnchangedRegions.modifiedDecorationIds\n                    .map(id => model.modified.getDecorationRange(id))\n                    .map(r => r ? LineRange.fromRangeInclusive(r) : undefined);\n                const updatedLastUnchangedRegions = filterWithPrevious(lastUnchangedRegions.regions\n                    .map((r, idx) => {\n                    if (!lastUnchangedRegionsOrigRanges[idx] || !lastUnchangedRegionsModRanges[idx]) {\n                        return undefined;\n                    }\n                    const length = lastUnchangedRegionsOrigRanges[idx].length;\n                    return new UnchangedRegion(lastUnchangedRegionsOrigRanges[idx].startLineNumber, lastUnchangedRegionsModRanges[idx].startLineNumber, length, \n                    // The visible area can shrink by edits -> we have to account for this\n                    Math.min(r.visibleLineCountTop.get(), length), Math.min(r.visibleLineCountBottom.get(), length - r.visibleLineCountTop.get()));\n                }).filter(isDefined), (cur, prev) => !prev || (cur.modifiedLineNumber >= prev.modifiedLineNumber + prev.lineCount && cur.originalLineNumber >= prev.originalLineNumber + prev.lineCount));\n                let hiddenRegions = updatedLastUnchangedRegions.map(r => new LineRangeMapping(r.getHiddenOriginalRange(reader), r.getHiddenModifiedRange(reader)));\n                hiddenRegions = LineRangeMapping.clip(hiddenRegions, LineRange.ofLength(1, model.original.getLineCount()), LineRange.ofLength(1, model.modified.getLineCount()));\n                visibleRegions = LineRangeMapping.inverse(hiddenRegions, model.original.getLineCount(), model.modified.getLineCount());\n            }\n            const newUnchangedRegions2 = [];\n            if (visibleRegions) {\n                for (const r of newUnchangedRegions) {\n                    const intersecting = visibleRegions.filter(f => f.original.intersectsStrict(r.originalUnchangedRange) && f.modified.intersectsStrict(r.modifiedUnchangedRange));\n                    newUnchangedRegions2.push(...r.setVisibleRanges(intersecting, tx));\n                }\n            }\n            else {\n                newUnchangedRegions2.push(...newUnchangedRegions);\n            }\n            const originalDecorationIds = model.original.deltaDecorations(lastUnchangedRegions?.originalDecorationIds || [], newUnchangedRegions2.map(r => ({ range: r.originalUnchangedRange.toInclusiveRange(), options: { description: 'unchanged' } })));\n            const modifiedDecorationIds = model.modified.deltaDecorations(lastUnchangedRegions?.modifiedDecorationIds || [], newUnchangedRegions2.map(r => ({ range: r.modifiedUnchangedRange.toInclusiveRange(), options: { description: 'unchanged' } })));\n            this._unchangedRegions.set({\n                regions: newUnchangedRegions2,\n                originalDecorationIds,\n                modifiedDecorationIds\n            }, tx);\n        };\n        this._register(model.modified.onDidChangeContent((e) => {\n            const diff = this._diff.get();\n            if (diff) {\n                const textEdits = TextEditInfo.fromModelContentChanges(e.changes);\n                const result = applyModifiedEdits(this._lastDiff, textEdits, model.original, model.modified);\n                if (result) {\n                    this._lastDiff = result;\n                    transaction(tx => {\n                        this._diff.set(DiffState.fromDiffResult(this._lastDiff), tx);\n                        updateUnchangedRegions(result, tx);\n                        const currentSyncedMovedText = this.movedTextToCompare.get();\n                        this.movedTextToCompare.set(currentSyncedMovedText ? this._lastDiff.moves.find(m => m.lineRangeMapping.modified.intersect(currentSyncedMovedText.lineRangeMapping.modified)) : undefined, tx);\n                    });\n                }\n            }\n            this._isDiffUpToDate.set(false, undefined);\n            debouncer.schedule();\n        }));\n        this._register(model.original.onDidChangeContent((e) => {\n            const diff = this._diff.get();\n            if (diff) {\n                const textEdits = TextEditInfo.fromModelContentChanges(e.changes);\n                const result = applyOriginalEdits(this._lastDiff, textEdits, model.original, model.modified);\n                if (result) {\n                    this._lastDiff = result;\n                    transaction(tx => {\n                        this._diff.set(DiffState.fromDiffResult(this._lastDiff), tx);\n                        updateUnchangedRegions(result, tx);\n                        const currentSyncedMovedText = this.movedTextToCompare.get();\n                        this.movedTextToCompare.set(currentSyncedMovedText ? this._lastDiff.moves.find(m => m.lineRangeMapping.modified.intersect(currentSyncedMovedText.lineRangeMapping.modified)) : undefined, tx);\n                    });\n                }\n            }\n            this._isDiffUpToDate.set(false, undefined);\n            debouncer.schedule();\n        }));\n        this._register(autorunWithStore(async (reader, store) => {\n            /** @description compute diff */\n            // So that they get recomputed when these settings change\n            this._options.hideUnchangedRegionsMinimumLineCount.read(reader);\n            this._options.hideUnchangedRegionsContextLineCount.read(reader);\n            debouncer.cancel();\n            contentChangedSignal.read(reader);\n            const documentDiffProvider = this._diffProvider.read(reader);\n            documentDiffProvider.onChangeSignal.read(reader);\n            readHotReloadableExport(DefaultLinesDiffComputer, reader);\n            readHotReloadableExport(optimizeSequenceDiffs, reader);\n            this._isDiffUpToDate.set(false, undefined);\n            let originalTextEditInfos = [];\n            store.add(model.original.onDidChangeContent((e) => {\n                const edits = TextEditInfo.fromModelContentChanges(e.changes);\n                originalTextEditInfos = combineTextEditInfos(originalTextEditInfos, edits);\n            }));\n            let modifiedTextEditInfos = [];\n            store.add(model.modified.onDidChangeContent((e) => {\n                const edits = TextEditInfo.fromModelContentChanges(e.changes);\n                modifiedTextEditInfos = combineTextEditInfos(modifiedTextEditInfos, edits);\n            }));\n            let result = await documentDiffProvider.diffProvider.computeDiff(model.original, model.modified, {\n                ignoreTrimWhitespace: this._options.ignoreTrimWhitespace.read(reader),\n                maxComputationTimeMs: this._options.maxComputationTimeMs.read(reader),\n                computeMoves: this._options.showMoves.read(reader),\n            }, this._cancellationTokenSource.token);\n            if (this._cancellationTokenSource.token.isCancellationRequested) {\n                return;\n            }\n            if (model.original.isDisposed() || model.modified.isDisposed()) {\n                // TODO@hediet fishy?\n                return;\n            }\n            result = normalizeDocumentDiff(result, model.original, model.modified);\n            result = applyOriginalEdits(result, originalTextEditInfos, model.original, model.modified) ?? result;\n            result = applyModifiedEdits(result, modifiedTextEditInfos, model.original, model.modified) ?? result;\n            transaction(tx => {\n                /** @description write diff result */\n                updateUnchangedRegions(result, tx);\n                this._lastDiff = result;\n                const state = DiffState.fromDiffResult(result);\n                this._diff.set(state, tx);\n                this._isDiffUpToDate.set(true, tx);\n                const currentSyncedMovedText = this.movedTextToCompare.get();\n                this.movedTextToCompare.set(currentSyncedMovedText ? this._lastDiff.moves.find(m => m.lineRangeMapping.modified.intersect(currentSyncedMovedText.lineRangeMapping.modified)) : undefined, tx);\n            });\n        }));\n    }\n    ensureModifiedLineIsVisible(lineNumber, preference, tx) {\n        if (this.diff.get()?.mappings.length === 0) {\n            return;\n        }\n        const unchangedRegions = this._unchangedRegions.get()?.regions || [];\n        for (const r of unchangedRegions) {\n            if (r.getHiddenModifiedRange(undefined).contains(lineNumber)) {\n                r.showModifiedLine(lineNumber, preference, tx);\n                return;\n            }\n        }\n    }\n    ensureOriginalLineIsVisible(lineNumber, preference, tx) {\n        if (this.diff.get()?.mappings.length === 0) {\n            return;\n        }\n        const unchangedRegions = this._unchangedRegions.get()?.regions || [];\n        for (const r of unchangedRegions) {\n            if (r.getHiddenOriginalRange(undefined).contains(lineNumber)) {\n                r.showOriginalLine(lineNumber, preference, tx);\n                return;\n            }\n        }\n    }\n    async waitForDiff() {\n        await waitForState(this.isDiffUpToDate, s => s);\n    }\n    serializeState() {\n        const regions = this._unchangedRegions.get();\n        return {\n            collapsedRegions: regions?.regions.map(r => ({ range: r.getHiddenModifiedRange(undefined).serialize() }))\n        };\n    }\n    restoreSerializedState(state) {\n        const ranges = state.collapsedRegions?.map(r => LineRange.deserialize(r.range));\n        const regions = this._unchangedRegions.get();\n        if (!regions || !ranges) {\n            return;\n        }\n        transaction(tx => {\n            for (const r of regions.regions) {\n                for (const range of ranges) {\n                    if (r.modifiedUnchangedRange.intersect(range)) {\n                        r.setHiddenModifiedRange(range, tx);\n                        break;\n                    }\n                }\n            }\n        });\n    }\n};\nDiffEditorViewModel = __decorate([\n    __param(2, IDiffProviderFactoryService)\n], DiffEditorViewModel);\nexport { DiffEditorViewModel };\nfunction normalizeDocumentDiff(diff, original, modified) {\n    return {\n        changes: diff.changes.map(c => new DetailedLineRangeMapping(c.original, c.modified, c.innerChanges ? c.innerChanges.map(i => normalizeRangeMapping(i, original, modified)) : undefined)),\n        moves: diff.moves,\n        identical: diff.identical,\n        quitEarly: diff.quitEarly,\n    };\n}\nfunction normalizeRangeMapping(rangeMapping, original, modified) {\n    let originalRange = rangeMapping.originalRange;\n    let modifiedRange = rangeMapping.modifiedRange;\n    if (originalRange.startColumn === 1 && modifiedRange.startColumn === 1 &&\n        (originalRange.endColumn !== 1 || modifiedRange.endColumn !== 1) &&\n        originalRange.endColumn === original.getLineMaxColumn(originalRange.endLineNumber)\n        && modifiedRange.endColumn === modified.getLineMaxColumn(modifiedRange.endLineNumber)\n        && originalRange.endLineNumber < original.getLineCount()\n        && modifiedRange.endLineNumber < modified.getLineCount()) {\n        originalRange = originalRange.setEndPosition(originalRange.endLineNumber + 1, 1);\n        modifiedRange = modifiedRange.setEndPosition(modifiedRange.endLineNumber + 1, 1);\n    }\n    return new RangeMapping(originalRange, modifiedRange);\n}\nexport class DiffState {\n    static fromDiffResult(result) {\n        return new DiffState(result.changes.map(c => new DiffMapping(c)), result.moves || [], result.identical, result.quitEarly);\n    }\n    constructor(mappings, movedTexts, identical, quitEarly) {\n        this.mappings = mappings;\n        this.movedTexts = movedTexts;\n        this.identical = identical;\n        this.quitEarly = quitEarly;\n    }\n}\nexport class DiffMapping {\n    constructor(lineRangeMapping) {\n        this.lineRangeMapping = lineRangeMapping;\n        /*\n        readonly movedTo: MovedText | undefined,\n        readonly movedFrom: MovedText | undefined,\n\n        if (movedTo) {\n            assertFn(() =>\n                movedTo.lineRangeMapping.modifiedRange.equals(lineRangeMapping.modifiedRange)\n                && lineRangeMapping.originalRange.isEmpty\n                && !movedFrom\n            );\n        } else if (movedFrom) {\n            assertFn(() =>\n                movedFrom.lineRangeMapping.originalRange.equals(lineRangeMapping.originalRange)\n                && lineRangeMapping.modifiedRange.isEmpty\n                && !movedTo\n            );\n        }\n        */\n    }\n}\nexport class UnchangedRegion {\n    static fromDiffs(changes, originalLineCount, modifiedLineCount, minHiddenLineCount, minContext) {\n        const inversedMappings = DetailedLineRangeMapping.inverse(changes, originalLineCount, modifiedLineCount);\n        const result = [];\n        for (const mapping of inversedMappings) {\n            let origStart = mapping.original.startLineNumber;\n            let modStart = mapping.modified.startLineNumber;\n            let length = mapping.original.length;\n            const atStart = origStart === 1 && modStart === 1;\n            const atEnd = origStart + length === originalLineCount + 1 && modStart + length === modifiedLineCount + 1;\n            if ((atStart || atEnd) && length >= minContext + minHiddenLineCount) {\n                if (atStart && !atEnd) {\n                    length -= minContext;\n                }\n                if (atEnd && !atStart) {\n                    origStart += minContext;\n                    modStart += minContext;\n                    length -= minContext;\n                }\n                result.push(new UnchangedRegion(origStart, modStart, length, 0, 0));\n            }\n            else if (length >= minContext * 2 + minHiddenLineCount) {\n                origStart += minContext;\n                modStart += minContext;\n                length -= minContext * 2;\n                result.push(new UnchangedRegion(origStart, modStart, length, 0, 0));\n            }\n        }\n        return result;\n    }\n    get originalUnchangedRange() {\n        return LineRange.ofLength(this.originalLineNumber, this.lineCount);\n    }\n    get modifiedUnchangedRange() {\n        return LineRange.ofLength(this.modifiedLineNumber, this.lineCount);\n    }\n    constructor(originalLineNumber, modifiedLineNumber, lineCount, visibleLineCountTop, visibleLineCountBottom) {\n        this.originalLineNumber = originalLineNumber;\n        this.modifiedLineNumber = modifiedLineNumber;\n        this.lineCount = lineCount;\n        this._visibleLineCountTop = observableValue(this, 0);\n        this.visibleLineCountTop = this._visibleLineCountTop;\n        this._visibleLineCountBottom = observableValue(this, 0);\n        this.visibleLineCountBottom = this._visibleLineCountBottom;\n        this._shouldHideControls = derived(this, reader => /** @description isVisible */ this.visibleLineCountTop.read(reader) + this.visibleLineCountBottom.read(reader) === this.lineCount && !this.isDragged.read(reader));\n        this.isDragged = observableValue(this, undefined);\n        const visibleLineCountTop2 = Math.max(Math.min(visibleLineCountTop, this.lineCount), 0);\n        const visibleLineCountBottom2 = Math.max(Math.min(visibleLineCountBottom, this.lineCount - visibleLineCountTop), 0);\n        softAssert(visibleLineCountTop === visibleLineCountTop2);\n        softAssert(visibleLineCountBottom === visibleLineCountBottom2);\n        this._visibleLineCountTop.set(visibleLineCountTop2, undefined);\n        this._visibleLineCountBottom.set(visibleLineCountBottom2, undefined);\n    }\n    setVisibleRanges(visibleRanges, tx) {\n        const result = [];\n        const hiddenModified = new LineRangeSet(visibleRanges.map(r => r.modified)).subtractFrom(this.modifiedUnchangedRange);\n        let originalStartLineNumber = this.originalLineNumber;\n        let modifiedStartLineNumber = this.modifiedLineNumber;\n        const modifiedEndLineNumberEx = this.modifiedLineNumber + this.lineCount;\n        if (hiddenModified.ranges.length === 0) {\n            this.showAll(tx);\n            result.push(this);\n        }\n        else {\n            let i = 0;\n            for (const r of hiddenModified.ranges) {\n                const isLast = i === hiddenModified.ranges.length - 1;\n                i++;\n                const length = (isLast ? modifiedEndLineNumberEx : r.endLineNumberExclusive) - modifiedStartLineNumber;\n                const newR = new UnchangedRegion(originalStartLineNumber, modifiedStartLineNumber, length, 0, 0);\n                newR.setHiddenModifiedRange(r, tx);\n                result.push(newR);\n                originalStartLineNumber = newR.originalUnchangedRange.endLineNumberExclusive;\n                modifiedStartLineNumber = newR.modifiedUnchangedRange.endLineNumberExclusive;\n            }\n        }\n        return result;\n    }\n    shouldHideControls(reader) {\n        return this._shouldHideControls.read(reader);\n    }\n    getHiddenOriginalRange(reader) {\n        return LineRange.ofLength(this.originalLineNumber + this._visibleLineCountTop.read(reader), this.lineCount - this._visibleLineCountTop.read(reader) - this._visibleLineCountBottom.read(reader));\n    }\n    getHiddenModifiedRange(reader) {\n        return LineRange.ofLength(this.modifiedLineNumber + this._visibleLineCountTop.read(reader), this.lineCount - this._visibleLineCountTop.read(reader) - this._visibleLineCountBottom.read(reader));\n    }\n    setHiddenModifiedRange(range, tx) {\n        const visibleLineCountTop = range.startLineNumber - this.modifiedLineNumber;\n        const visibleLineCountBottom = (this.modifiedLineNumber + this.lineCount) - range.endLineNumberExclusive;\n        this.setState(visibleLineCountTop, visibleLineCountBottom, tx);\n    }\n    getMaxVisibleLineCountTop() {\n        return this.lineCount - this._visibleLineCountBottom.get();\n    }\n    getMaxVisibleLineCountBottom() {\n        return this.lineCount - this._visibleLineCountTop.get();\n    }\n    showMoreAbove(count = 10, tx) {\n        const maxVisibleLineCountTop = this.getMaxVisibleLineCountTop();\n        this._visibleLineCountTop.set(Math.min(this._visibleLineCountTop.get() + count, maxVisibleLineCountTop), tx);\n    }\n    showMoreBelow(count = 10, tx) {\n        const maxVisibleLineCountBottom = this.lineCount - this._visibleLineCountTop.get();\n        this._visibleLineCountBottom.set(Math.min(this._visibleLineCountBottom.get() + count, maxVisibleLineCountBottom), tx);\n    }\n    showAll(tx) {\n        this._visibleLineCountBottom.set(this.lineCount - this._visibleLineCountTop.get(), tx);\n    }\n    showModifiedLine(lineNumber, preference, tx) {\n        const top = lineNumber + 1 - (this.modifiedLineNumber + this._visibleLineCountTop.get());\n        const bottom = (this.modifiedLineNumber - this._visibleLineCountBottom.get() + this.lineCount) - lineNumber;\n        if (preference === 0 /* RevealPreference.FromCloserSide */ && top < bottom || preference === 1 /* RevealPreference.FromTop */) {\n            this._visibleLineCountTop.set(this._visibleLineCountTop.get() + top, tx);\n        }\n        else {\n            this._visibleLineCountBottom.set(this._visibleLineCountBottom.get() + bottom, tx);\n        }\n    }\n    showOriginalLine(lineNumber, preference, tx) {\n        const top = lineNumber - this.originalLineNumber;\n        const bottom = (this.originalLineNumber + this.lineCount) - lineNumber;\n        if (preference === 0 /* RevealPreference.FromCloserSide */ && top < bottom || preference === 1 /* RevealPreference.FromTop */) {\n            this._visibleLineCountTop.set(Math.min(this._visibleLineCountTop.get() + bottom - top, this.getMaxVisibleLineCountTop()), tx);\n        }\n        else {\n            this._visibleLineCountBottom.set(Math.min(this._visibleLineCountBottom.get() + top - bottom, this.getMaxVisibleLineCountBottom()), tx);\n        }\n    }\n    collapseAll(tx) {\n        this._visibleLineCountTop.set(0, tx);\n        this._visibleLineCountBottom.set(0, tx);\n    }\n    setState(visibleLineCountTop, visibleLineCountBottom, tx) {\n        visibleLineCountTop = Math.max(Math.min(visibleLineCountTop, this.lineCount), 0);\n        visibleLineCountBottom = Math.max(Math.min(visibleLineCountBottom, this.lineCount - visibleLineCountTop), 0);\n        this._visibleLineCountTop.set(visibleLineCountTop, tx);\n        this._visibleLineCountBottom.set(visibleLineCountBottom, tx);\n    }\n}\nfunction applyOriginalEdits(diff, textEdits, originalTextModel, modifiedTextModel) {\n    return undefined;\n    /*\n    TODO@hediet\n    if (textEdits.length === 0) {\n        return diff;\n    }\n\n    const diff2 = flip(diff);\n    const diff3 = applyModifiedEdits(diff2, textEdits, modifiedTextModel, originalTextModel);\n    if (!diff3) {\n        return undefined;\n    }\n    return flip(diff3);*/\n}\n/*\nfunction flip(diff: IDocumentDiff): IDocumentDiff {\n    return {\n        changes: diff.changes.map(c => c.flip()),\n        moves: diff.moves.map(m => m.flip()),\n        identical: diff.identical,\n        quitEarly: diff.quitEarly,\n    };\n}\n*/\nfunction applyModifiedEdits(diff, textEdits, originalTextModel, modifiedTextModel) {\n    return undefined;\n    /*\n    TODO@hediet\n    if (textEdits.length === 0) {\n        return diff;\n    }\n    if (diff.changes.some(c => !c.innerChanges) || diff.moves.length > 0) {\n        // TODO support these cases\n        return undefined;\n    }\n\n    const changes = applyModifiedEditsToLineRangeMappings(diff.changes, textEdits, originalTextModel, modifiedTextModel);\n\n    const moves = diff.moves.map(m => {\n        const newModifiedRange = applyEditToLineRange(m.lineRangeMapping.modified, textEdits);\n        return newModifiedRange ? new MovedText(\n            new SimpleLineRangeMapping(m.lineRangeMapping.original, newModifiedRange),\n            applyModifiedEditsToLineRangeMappings(m.changes, textEdits, originalTextModel, modifiedTextModel),\n        ) : undefined;\n    }).filter(isDefined);\n\n    return {\n        identical: false,\n        quitEarly: false,\n        changes,\n        moves,\n    };*/\n}\n/*\nfunction applyEditToLineRange(range: LineRange, textEdits: TextEditInfo[]): LineRange | undefined {\n    let rangeStartLineNumber = range.startLineNumber;\n    let rangeEndLineNumberEx = range.endLineNumberExclusive;\n\n    for (let i = textEdits.length - 1; i >= 0; i--) {\n        const textEdit = textEdits[i];\n        const textEditStartLineNumber = lengthGetLineCount(textEdit.startOffset) + 1;\n        const textEditEndLineNumber = lengthGetLineCount(textEdit.endOffset) + 1;\n        const newLengthLineCount = lengthGetLineCount(textEdit.newLength);\n        const delta = newLengthLineCount - (textEditEndLineNumber - textEditStartLineNumber);\n\n        if (textEditEndLineNumber < rangeStartLineNumber) {\n            // the text edit is before us\n            rangeStartLineNumber += delta;\n            rangeEndLineNumberEx += delta;\n        } else if (textEditStartLineNumber > rangeEndLineNumberEx) {\n            // the text edit is after us\n            // NOOP\n        } else if (textEditStartLineNumber < rangeStartLineNumber && rangeEndLineNumberEx < textEditEndLineNumber) {\n            // the range is fully contained in the text edit\n            return undefined;\n        } else if (textEditStartLineNumber < rangeStartLineNumber && textEditEndLineNumber <= rangeEndLineNumberEx) {\n            // the text edit ends inside our range\n            rangeStartLineNumber = textEditEndLineNumber + 1;\n            rangeStartLineNumber += delta;\n            rangeEndLineNumberEx += delta;\n        } else if (rangeStartLineNumber <= textEditStartLineNumber && textEditEndLineNumber < rangeStartLineNumber) {\n            // the text edit starts inside our range\n            rangeEndLineNumberEx = textEditStartLineNumber;\n        } else {\n            rangeEndLineNumberEx += delta;\n        }\n    }\n\n    return new LineRange(rangeStartLineNumber, rangeEndLineNumberEx);\n}\n\nfunction applyModifiedEditsToLineRangeMappings(changes: readonly LineRangeMapping[], textEdits: TextEditInfo[], originalTextModel: ITextModel, modifiedTextModel: ITextModel): LineRangeMapping[] {\n    const diffTextEdits = changes.flatMap(c => c.innerChanges!.map(c => new TextEditInfo(\n        positionToLength(c.originalRange.getStartPosition()),\n        positionToLength(c.originalRange.getEndPosition()),\n        lengthOfRange(c.modifiedRange).toLength(),\n    )));\n\n    const combined = combineTextEditInfos(diffTextEdits, textEdits);\n\n    let lastOriginalEndOffset = lengthZero;\n    let lastModifiedEndOffset = lengthZero;\n    const rangeMappings = combined.map(c => {\n        const modifiedStartOffset = lengthAdd(lastModifiedEndOffset, lengthDiffNonNegative(lastOriginalEndOffset, c.startOffset));\n        lastOriginalEndOffset = c.endOffset;\n        lastModifiedEndOffset = lengthAdd(modifiedStartOffset, c.newLength);\n\n        return new RangeMapping(\n            Range.fromPositions(lengthToPosition(c.startOffset), lengthToPosition(c.endOffset)),\n            Range.fromPositions(lengthToPosition(modifiedStartOffset), lengthToPosition(lastModifiedEndOffset)),\n        );\n    });\n\n    const newChanges = lineRangeMappingFromRangeMappings(\n        rangeMappings,\n        originalTextModel.getLinesContent(),\n        modifiedTextModel.getLinesContent(),\n    );\n    return newChanges;\n}\n*/\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { addStandardDisposableListener, getDomNodePagePosition } from '../../../../../../base/browser/dom.js';\nimport { Action } from '../../../../../../base/common/actions.js';\nimport { Codicon } from '../../../../../../base/common/codicons.js';\nimport { Disposable } from '../../../../../../base/common/lifecycle.js';\nimport { isIOS } from '../../../../../../base/common/platform.js';\nimport { ThemeIcon } from '../../../../../../base/common/themables.js';\nimport { localize } from '../../../../../../nls.js';\nexport class InlineDiffDeletedCodeMargin extends Disposable {\n    get visibility() {\n        return this._visibility;\n    }\n    set visibility(_visibility) {\n        if (this._visibility !== _visibility) {\n            this._visibility = _visibility;\n            this._diffActions.style.visibility = _visibility ? 'visible' : 'hidden';\n        }\n    }\n    constructor(_getViewZoneId, _marginDomNode, _modifiedEditor, _diff, _editor, _viewLineCounts, _originalTextModel, _contextMenuService, _clipboardService) {\n        super();\n        this._getViewZoneId = _getViewZoneId;\n        this._marginDomNode = _marginDomNode;\n        this._modifiedEditor = _modifiedEditor;\n        this._diff = _diff;\n        this._editor = _editor;\n        this._viewLineCounts = _viewLineCounts;\n        this._originalTextModel = _originalTextModel;\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 = ThemeIcon.asClassName(Codicon.lightBulb) + ' lightbulb-glyph';\n        this._diffActions.style.position = 'absolute';\n        const lineHeight = this._modifiedEditor.getOption(67 /* EditorOption.lineHeight */);\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        let currentLineNumberOffset = 0;\n        const useShadowDOM = _modifiedEditor.getOption(128 /* EditorOption.useShadowDOM */) && !isIOS; // Do not use shadow dom on IOS #122035\n        const showContextMenu = (x, y) => {\n            this._contextMenuService.showContextMenu({\n                domForShadowRoot: useShadowDOM ? _modifiedEditor.getDomNode() ?? undefined : undefined,\n                getAnchor: () => ({ x, y }),\n                getActions: () => {\n                    const actions = [];\n                    const isDeletion = _diff.modified.isEmpty;\n                    // default action\n                    actions.push(new Action('diff.clipboard.copyDeletedContent', isDeletion\n                        ? (_diff.original.length > 1\n                            ? localize('diff.clipboard.copyDeletedLinesContent.label', \"Copy deleted lines\")\n                            : localize('diff.clipboard.copyDeletedLinesContent.single.label', \"Copy deleted line\"))\n                        : (_diff.original.length > 1\n                            ? localize('diff.clipboard.copyChangedLinesContent.label', \"Copy changed lines\")\n                            : localize('diff.clipboard.copyChangedLinesContent.single.label', \"Copy changed line\")), undefined, true, async () => {\n                        const originalText = this._originalTextModel.getValueInRange(_diff.original.toExclusiveRange());\n                        await this._clipboardService.writeText(originalText);\n                    }));\n                    if (_diff.original.length > 1) {\n                        actions.push(new Action('diff.clipboard.copyDeletedLineContent', isDeletion\n                            ? localize('diff.clipboard.copyDeletedLineContent.label', \"Copy deleted line ({0})\", _diff.original.startLineNumber + currentLineNumberOffset)\n                            : localize('diff.clipboard.copyChangedLineContent.label', \"Copy changed line ({0})\", _diff.original.startLineNumber + currentLineNumberOffset), undefined, true, async () => {\n                            let lineContent = this._originalTextModel.getLineContent(_diff.original.startLineNumber + currentLineNumberOffset);\n                            if (lineContent === '') {\n                                // empty line -> new line\n                                const eof = this._originalTextModel.getEndOfLineSequence();\n                                lineContent = eof === 0 /* EndOfLineSequence.LF */ ? '\\n' : '\\r\\n';\n                            }\n                            await this._clipboardService.writeText(lineContent);\n                        }));\n                    }\n                    const readOnly = _modifiedEditor.getOption(92 /* EditorOption.readOnly */);\n                    if (!readOnly) {\n                        actions.push(new Action('diff.inline.revertChange', localize('diff.inline.revertChange.label', \"Revert this change\"), undefined, true, async () => {\n                            this._editor.revert(this._diff);\n                        }));\n                    }\n                    return actions;\n                },\n                autoSelectFirstItem: true\n            });\n        };\n        this._register(addStandardDisposableListener(this._diffActions, 'mousedown', e => {\n            if (!e.leftButton) {\n                return;\n            }\n            const { top, height } = getDomNodePagePosition(this._diffActions);\n            const pad = Math.floor(lineHeight / 3);\n            e.preventDefault();\n            showContextMenu(e.posx, top + height + pad);\n        }));\n        this._register(_modifiedEditor.onMouseMove((e) => {\n            if ((e.target.type === 8 /* MouseTargetType.CONTENT_VIEW_ZONE */ || e.target.type === 5 /* MouseTargetType.GUTTER_VIEW_ZONE */) && e.target.detail.viewZoneId === this._getViewZoneId()) {\n                currentLineNumberOffset = this._updateLightBulbPosition(this._marginDomNode, e.event.browserEvent.y, lineHeight);\n                this.visibility = true;\n            }\n            else {\n                this.visibility = false;\n            }\n        }));\n        this._register(_modifiedEditor.onMouseDown((e) => {\n            if (!e.event.leftButton) {\n                return;\n            }\n            if (e.target.type === 8 /* MouseTargetType.CONTENT_VIEW_ZONE */ || e.target.type === 5 /* MouseTargetType.GUTTER_VIEW_ZONE */) {\n                const viewZoneId = e.target.detail.viewZoneId;\n                if (viewZoneId === this._getViewZoneId()) {\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    _updateLightBulbPosition(marginDomNode, y, lineHeight) {\n        const { top } = 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._viewLineCounts) {\n            let acc = 0;\n            for (let i = 0; i < this._viewLineCounts.length; i++) {\n                acc += this._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 *--------------------------------------------------------------------------------------------*/\nimport { createTrustedTypesPolicy } from '../../../../../../base/browser/trustedTypes.js';\nimport { applyFontInfo } from '../../../../config/domFontInfo.js';\nimport { EditorFontLigatures } from '../../../../../common/config/editorOptions.js';\nimport { StringBuilder } from '../../../../../common/core/stringBuilder.js';\nimport { LineDecoration } from '../../../../../common/viewLayout/lineDecorations.js';\nimport { RenderLineInput, renderViewLine } from '../../../../../common/viewLayout/viewLineRenderer.js';\nimport { ViewLineRenderingData } from '../../../../../common/viewModel.js';\nconst ttPolicy = createTrustedTypesPolicy('diffEditorWidget', { createHTML: value => value });\nexport function renderLines(source, options, decorations, domNode) {\n    applyFontInfo(domNode, options.fontInfo);\n    const hasCharChanges = (decorations.length > 0);\n    const sb = new StringBuilder(10000);\n    let maxCharsPerLine = 0;\n    let renderedLineCount = 0;\n    const viewLineCounts = [];\n    for (let lineIndex = 0; lineIndex < source.lineTokens.length; lineIndex++) {\n        const lineNumber = lineIndex + 1;\n        const lineTokens = source.lineTokens[lineIndex];\n        const lineBreakData = source.lineBreakData[lineIndex];\n        const actualDecorations = LineDecoration.filter(decorations, lineNumber, 1, Number.MAX_SAFE_INTEGER);\n        if (lineBreakData) {\n            let lastBreakOffset = 0;\n            for (const breakOffset of lineBreakData.breakOffsets) {\n                const viewLineTokens = lineTokens.sliceAndInflate(lastBreakOffset, breakOffset, 0);\n                maxCharsPerLine = Math.max(maxCharsPerLine, renderOriginalLine(renderedLineCount, viewLineTokens, LineDecoration.extractWrapped(actualDecorations, lastBreakOffset, breakOffset), hasCharChanges, source.mightContainNonBasicASCII, source.mightContainRTL, options, sb));\n                renderedLineCount++;\n                lastBreakOffset = breakOffset;\n            }\n            viewLineCounts.push(lineBreakData.breakOffsets.length);\n        }\n        else {\n            viewLineCounts.push(1);\n            maxCharsPerLine = Math.max(maxCharsPerLine, renderOriginalLine(renderedLineCount, lineTokens, actualDecorations, hasCharChanges, source.mightContainNonBasicASCII, source.mightContainRTL, options, sb));\n            renderedLineCount++;\n        }\n    }\n    maxCharsPerLine += options.scrollBeyondLastColumn;\n    const html = sb.build();\n    const trustedhtml = ttPolicy ? ttPolicy.createHTML(html) : html;\n    domNode.innerHTML = trustedhtml;\n    const minWidthInPx = (maxCharsPerLine * options.typicalHalfwidthCharacterWidth);\n    return {\n        heightInLines: renderedLineCount,\n        minWidthInPx,\n        viewLineCounts,\n    };\n}\nexport class LineSource {\n    constructor(lineTokens, lineBreakData, mightContainNonBasicASCII, mightContainRTL) {\n        this.lineTokens = lineTokens;\n        this.lineBreakData = lineBreakData;\n        this.mightContainNonBasicASCII = mightContainNonBasicASCII;\n        this.mightContainRTL = mightContainRTL;\n    }\n}\nexport class RenderOptions {\n    static fromEditor(editor) {\n        const modifiedEditorOptions = editor.getOptions();\n        const fontInfo = modifiedEditorOptions.get(50 /* EditorOption.fontInfo */);\n        const layoutInfo = modifiedEditorOptions.get(146 /* EditorOption.layoutInfo */);\n        return new RenderOptions(editor.getModel()?.getOptions().tabSize || 0, fontInfo, modifiedEditorOptions.get(33 /* EditorOption.disableMonospaceOptimizations */), fontInfo.typicalHalfwidthCharacterWidth, modifiedEditorOptions.get(105 /* EditorOption.scrollBeyondLastColumn */), modifiedEditorOptions.get(67 /* EditorOption.lineHeight */), layoutInfo.decorationsWidth, modifiedEditorOptions.get(118 /* EditorOption.stopRenderingLineAfter */), modifiedEditorOptions.get(100 /* EditorOption.renderWhitespace */), modifiedEditorOptions.get(95 /* EditorOption.renderControlCharacters */), modifiedEditorOptions.get(51 /* EditorOption.fontLigatures */));\n    }\n    constructor(tabSize, fontInfo, disableMonospaceOptimizations, typicalHalfwidthCharacterWidth, scrollBeyondLastColumn, lineHeight, lineDecorationsWidth, stopRenderingLineAfter, renderWhitespace, renderControlCharacters, fontLigatures) {\n        this.tabSize = tabSize;\n        this.fontInfo = fontInfo;\n        this.disableMonospaceOptimizations = disableMonospaceOptimizations;\n        this.typicalHalfwidthCharacterWidth = typicalHalfwidthCharacterWidth;\n        this.scrollBeyondLastColumn = scrollBeyondLastColumn;\n        this.lineHeight = lineHeight;\n        this.lineDecorationsWidth = lineDecorationsWidth;\n        this.stopRenderingLineAfter = stopRenderingLineAfter;\n        this.renderWhitespace = renderWhitespace;\n        this.renderControlCharacters = renderControlCharacters;\n        this.fontLigatures = fontLigatures;\n    }\n}\nfunction renderOriginalLine(viewLineIdx, lineTokens, decorations, hasCharChanges, mightContainNonBasicASCII, mightContainRTL, options, sb) {\n    sb.appendString('<div class=\"view-line');\n    if (!hasCharChanges) {\n        // No char changes\n        sb.appendString(' char-delete');\n    }\n    sb.appendString('\" style=\"top:');\n    sb.appendString(String(viewLineIdx * options.lineHeight));\n    sb.appendString('px;width:1000000px;\">');\n    const lineContent = lineTokens.getLineContent();\n    const isBasicASCII = ViewLineRenderingData.isBasicASCII(lineContent, mightContainNonBasicASCII);\n    const containsRTL = ViewLineRenderingData.containsRTL(lineContent, isBasicASCII, mightContainRTL);\n    const output = renderViewLine(new RenderLineInput((options.fontInfo.isMonospace && !options.disableMonospaceOptimizations), options.fontInfo.canUseHalfwidthRightwardsArrow, lineContent, false, isBasicASCII, containsRTL, 0, lineTokens, decorations, options.tabSize, 0, options.fontInfo.spaceWidth, options.fontInfo.middotWidth, options.fontInfo.wsmiddotWidth, options.stopRenderingLineAfter, options.renderWhitespace, options.renderControlCharacters, options.fontLigatures !== EditorFontLigatures.OFF, null // Send no selections, original line cannot be selected\n    ), sb);\n    sb.appendString('</div>');\n    return output.characterMapping.getHorizontalOffset(output.characterMapping.length);\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 { $, addDisposableListener } from '../../../../../../base/browser/dom.js';\nimport { ArrayQueue } from '../../../../../../base/common/arrays.js';\nimport { RunOnceScheduler } from '../../../../../../base/common/async.js';\nimport { Codicon } from '../../../../../../base/common/codicons.js';\nimport { Disposable, DisposableStore } from '../../../../../../base/common/lifecycle.js';\nimport { autorun, derived, derivedWithStore, observableFromEvent, observableValue } from '../../../../../../base/common/observable.js';\nimport { ThemeIcon } from '../../../../../../base/common/themables.js';\nimport { assertIsDefined } from '../../../../../../base/common/types.js';\nimport { applyFontInfo } from '../../../../config/domFontInfo.js';\nimport { diffDeleteDecoration, diffRemoveIcon } from '../../registrations.contribution.js';\nimport { DiffMapping } from '../../diffEditorViewModel.js';\nimport { InlineDiffDeletedCodeMargin } from './inlineDiffDeletedCodeMargin.js';\nimport { LineSource, RenderOptions, renderLines } from './renderLines.js';\nimport { animatedObservable, joinCombine } from '../../utils.js';\nimport { LineRange } from '../../../../../common/core/lineRange.js';\nimport { Position } from '../../../../../common/core/position.js';\nimport { InlineDecoration } from '../../../../../common/viewModel.js';\nimport { IClipboardService } from '../../../../../../platform/clipboard/common/clipboardService.js';\nimport { IContextMenuService } from '../../../../../../platform/contextview/browser/contextView.js';\nimport { Range } from '../../../../../common/core/range.js';\n/**\n * Ensures both editors have the same height by aligning unchanged lines.\n * In inline view mode, inserts viewzones to show deleted code from the original text model in the modified code editor.\n * Synchronizes scrolling.\n *\n * Make sure to add the view zones!\n */\nlet DiffEditorViewZones = class DiffEditorViewZones extends Disposable {\n    constructor(_targetWindow, _editors, _diffModel, _options, _diffEditorWidget, _canIgnoreViewZoneUpdateEvent, _origViewZonesToIgnore, _modViewZonesToIgnore, _clipboardService, _contextMenuService) {\n        super();\n        this._targetWindow = _targetWindow;\n        this._editors = _editors;\n        this._diffModel = _diffModel;\n        this._options = _options;\n        this._diffEditorWidget = _diffEditorWidget;\n        this._canIgnoreViewZoneUpdateEvent = _canIgnoreViewZoneUpdateEvent;\n        this._origViewZonesToIgnore = _origViewZonesToIgnore;\n        this._modViewZonesToIgnore = _modViewZonesToIgnore;\n        this._clipboardService = _clipboardService;\n        this._contextMenuService = _contextMenuService;\n        this._originalTopPadding = observableValue(this, 0);\n        this._originalScrollOffset = observableValue(this, 0);\n        this._originalScrollOffsetAnimated = animatedObservable(this._targetWindow, this._originalScrollOffset, this._store);\n        this._modifiedTopPadding = observableValue(this, 0);\n        this._modifiedScrollOffset = observableValue(this, 0);\n        this._modifiedScrollOffsetAnimated = animatedObservable(this._targetWindow, this._modifiedScrollOffset, this._store);\n        const state = observableValue('invalidateAlignmentsState', 0);\n        const updateImmediately = this._register(new RunOnceScheduler(() => {\n            state.set(state.get() + 1, undefined);\n        }, 0));\n        this._register(this._editors.original.onDidChangeViewZones((_args) => { if (!this._canIgnoreViewZoneUpdateEvent()) {\n            updateImmediately.schedule();\n        } }));\n        this._register(this._editors.modified.onDidChangeViewZones((_args) => { if (!this._canIgnoreViewZoneUpdateEvent()) {\n            updateImmediately.schedule();\n        } }));\n        this._register(this._editors.original.onDidChangeConfiguration((args) => {\n            if (args.hasChanged(147 /* EditorOption.wrappingInfo */) || args.hasChanged(67 /* EditorOption.lineHeight */)) {\n                updateImmediately.schedule();\n            }\n        }));\n        this._register(this._editors.modified.onDidChangeConfiguration((args) => {\n            if (args.hasChanged(147 /* EditorOption.wrappingInfo */) || args.hasChanged(67 /* EditorOption.lineHeight */)) {\n                updateImmediately.schedule();\n            }\n        }));\n        const originalModelTokenizationCompleted = this._diffModel.map(m => m ? observableFromEvent(this, m.model.original.onDidChangeTokens, () => m.model.original.tokenization.backgroundTokenizationState === 2 /* BackgroundTokenizationState.Completed */) : undefined).map((m, reader) => m?.read(reader));\n        const alignments = derived((reader) => {\n            /** @description alignments */\n            const diffModel = this._diffModel.read(reader);\n            const diff = diffModel?.diff.read(reader);\n            if (!diffModel || !diff) {\n                return null;\n            }\n            state.read(reader);\n            const renderSideBySide = this._options.renderSideBySide.read(reader);\n            const innerHunkAlignment = renderSideBySide;\n            return computeRangeAlignment(this._editors.original, this._editors.modified, diff.mappings, this._origViewZonesToIgnore, this._modViewZonesToIgnore, innerHunkAlignment);\n        });\n        const alignmentsSyncedMovedText = derived((reader) => {\n            /** @description alignmentsSyncedMovedText */\n            const syncedMovedText = this._diffModel.read(reader)?.movedTextToCompare.read(reader);\n            if (!syncedMovedText) {\n                return null;\n            }\n            state.read(reader);\n            const mappings = syncedMovedText.changes.map(c => new DiffMapping(c));\n            // TODO dont include alignments outside syncedMovedText\n            return computeRangeAlignment(this._editors.original, this._editors.modified, mappings, this._origViewZonesToIgnore, this._modViewZonesToIgnore, true);\n        });\n        function createFakeLinesDiv() {\n            const r = document.createElement('div');\n            r.className = 'diagonal-fill';\n            return r;\n        }\n        const alignmentViewZonesDisposables = this._register(new DisposableStore());\n        this.viewZones = derivedWithStore(this, (reader, store) => {\n            alignmentViewZonesDisposables.clear();\n            const alignmentsVal = alignments.read(reader) || [];\n            const origViewZones = [];\n            const modViewZones = [];\n            const modifiedTopPaddingVal = this._modifiedTopPadding.read(reader);\n            if (modifiedTopPaddingVal > 0) {\n                modViewZones.push({\n                    afterLineNumber: 0,\n                    domNode: document.createElement('div'),\n                    heightInPx: modifiedTopPaddingVal,\n                    showInHiddenAreas: true,\n                    suppressMouseDown: true,\n                });\n            }\n            const originalTopPaddingVal = this._originalTopPadding.read(reader);\n            if (originalTopPaddingVal > 0) {\n                origViewZones.push({\n                    afterLineNumber: 0,\n                    domNode: document.createElement('div'),\n                    heightInPx: originalTopPaddingVal,\n                    showInHiddenAreas: true,\n                    suppressMouseDown: true,\n                });\n            }\n            const renderSideBySide = this._options.renderSideBySide.read(reader);\n            const deletedCodeLineBreaksComputer = !renderSideBySide ? this._editors.modified._getViewModel()?.createLineBreaksComputer() : undefined;\n            if (deletedCodeLineBreaksComputer) {\n                const originalModel = this._editors.original.getModel();\n                for (const a of alignmentsVal) {\n                    if (a.diff) {\n                        for (let i = a.originalRange.startLineNumber; i < a.originalRange.endLineNumberExclusive; i++) {\n                            // `i` can be out of bound when the diff has not been updated yet.\n                            // In this case, we do an early return.\n                            // TODO@hediet: Fix this by applying the edit directly to the diff model, so that the diff is always valid.\n                            if (i > originalModel.getLineCount()) {\n                                return { orig: origViewZones, mod: modViewZones };\n                            }\n                            deletedCodeLineBreaksComputer?.addRequest(originalModel.getLineContent(i), null, null);\n                        }\n                    }\n                }\n            }\n            const lineBreakData = deletedCodeLineBreaksComputer?.finalize() ?? [];\n            let lineBreakDataIdx = 0;\n            const modLineHeight = this._editors.modified.getOption(67 /* EditorOption.lineHeight */);\n            const syncedMovedText = this._diffModel.read(reader)?.movedTextToCompare.read(reader);\n            const mightContainNonBasicASCII = this._editors.original.getModel()?.mightContainNonBasicASCII() ?? false;\n            const mightContainRTL = this._editors.original.getModel()?.mightContainRTL() ?? false;\n            const renderOptions = RenderOptions.fromEditor(this._editors.modified);\n            for (const a of alignmentsVal) {\n                if (a.diff && !renderSideBySide && (!this._options.useTrueInlineDiffRendering.read(reader) || !allowsTrueInlineDiffRendering(a.diff))) {\n                    if (!a.originalRange.isEmpty) {\n                        originalModelTokenizationCompleted.read(reader); // Update view-zones once tokenization completes\n                        const deletedCodeDomNode = document.createElement('div');\n                        deletedCodeDomNode.classList.add('view-lines', 'line-delete', 'monaco-mouse-cursor-text');\n                        const originalModel = this._editors.original.getModel();\n                        // `a.originalRange` can be out of bound when the diff has not been updated yet.\n                        // In this case, we do an early return.\n                        // TODO@hediet: Fix this by applying the edit directly to the diff model, so that the diff is always valid.\n                        if (a.originalRange.endLineNumberExclusive - 1 > originalModel.getLineCount()) {\n                            return { orig: origViewZones, mod: modViewZones };\n                        }\n                        const source = new LineSource(a.originalRange.mapToLineArray(l => originalModel.tokenization.getLineTokens(l)), a.originalRange.mapToLineArray(_ => lineBreakData[lineBreakDataIdx++]), mightContainNonBasicASCII, mightContainRTL);\n                        const decorations = [];\n                        for (const i of a.diff.innerChanges || []) {\n                            decorations.push(new InlineDecoration(i.originalRange.delta(-(a.diff.original.startLineNumber - 1)), diffDeleteDecoration.className, 0 /* InlineDecorationType.Regular */));\n                        }\n                        const result = renderLines(source, renderOptions, decorations, deletedCodeDomNode);\n                        const marginDomNode = document.createElement('div');\n                        marginDomNode.className = 'inline-deleted-margin-view-zone';\n                        applyFontInfo(marginDomNode, renderOptions.fontInfo);\n                        if (this._options.renderIndicators.read(reader)) {\n                            for (let i = 0; i < result.heightInLines; i++) {\n                                const marginElement = document.createElement('div');\n                                marginElement.className = `delete-sign ${ThemeIcon.asClassName(diffRemoveIcon)}`;\n                                marginElement.setAttribute('style', `position:absolute;top:${i * modLineHeight}px;width:${renderOptions.lineDecorationsWidth}px;height:${modLineHeight}px;right:0;`);\n                                marginDomNode.appendChild(marginElement);\n                            }\n                        }\n                        let zoneId = undefined;\n                        alignmentViewZonesDisposables.add(new InlineDiffDeletedCodeMargin(() => assertIsDefined(zoneId), marginDomNode, this._editors.modified, a.diff, this._diffEditorWidget, result.viewLineCounts, this._editors.original.getModel(), this._contextMenuService, this._clipboardService));\n                        for (let i = 0; i < result.viewLineCounts.length; i++) {\n                            const count = result.viewLineCounts[i];\n                            // Account for wrapped lines in the (collapsed) original editor (which doesn't wrap lines).\n                            if (count > 1) {\n                                origViewZones.push({\n                                    afterLineNumber: a.originalRange.startLineNumber + i,\n                                    domNode: createFakeLinesDiv(),\n                                    heightInPx: (count - 1) * modLineHeight,\n                                    showInHiddenAreas: true,\n                                    suppressMouseDown: true,\n                                });\n                            }\n                        }\n                        modViewZones.push({\n                            afterLineNumber: a.modifiedRange.startLineNumber - 1,\n                            domNode: deletedCodeDomNode,\n                            heightInPx: result.heightInLines * modLineHeight,\n                            minWidthInPx: result.minWidthInPx,\n                            marginDomNode,\n                            setZoneId(id) { zoneId = id; },\n                            showInHiddenAreas: true,\n                            suppressMouseDown: true,\n                        });\n                    }\n                    const marginDomNode = document.createElement('div');\n                    marginDomNode.className = 'gutter-delete';\n                    origViewZones.push({\n                        afterLineNumber: a.originalRange.endLineNumberExclusive - 1,\n                        domNode: createFakeLinesDiv(),\n                        heightInPx: a.modifiedHeightInPx,\n                        marginDomNode,\n                        showInHiddenAreas: true,\n                        suppressMouseDown: true,\n                    });\n                }\n                else {\n                    const delta = a.modifiedHeightInPx - a.originalHeightInPx;\n                    if (delta > 0) {\n                        if (syncedMovedText?.lineRangeMapping.original.delta(-1).deltaLength(2).contains(a.originalRange.endLineNumberExclusive - 1)) {\n                            continue;\n                        }\n                        origViewZones.push({\n                            afterLineNumber: a.originalRange.endLineNumberExclusive - 1,\n                            domNode: createFakeLinesDiv(),\n                            heightInPx: delta,\n                            showInHiddenAreas: true,\n                            suppressMouseDown: true,\n                        });\n                    }\n                    else {\n                        if (syncedMovedText?.lineRangeMapping.modified.delta(-1).deltaLength(2).contains(a.modifiedRange.endLineNumberExclusive - 1)) {\n                            continue;\n                        }\n                        function createViewZoneMarginArrow() {\n                            const arrow = document.createElement('div');\n                            arrow.className = 'arrow-revert-change ' + ThemeIcon.asClassName(Codicon.arrowRight);\n                            store.add(addDisposableListener(arrow, 'mousedown', e => e.stopPropagation()));\n                            store.add(addDisposableListener(arrow, 'click', e => {\n                                e.stopPropagation();\n                                _diffEditorWidget.revert(a.diff);\n                            }));\n                            return $('div', {}, arrow);\n                        }\n                        let marginDomNode = undefined;\n                        if (a.diff && a.diff.modified.isEmpty && this._options.shouldRenderOldRevertArrows.read(reader)) {\n                            marginDomNode = createViewZoneMarginArrow();\n                        }\n                        modViewZones.push({\n                            afterLineNumber: a.modifiedRange.endLineNumberExclusive - 1,\n                            domNode: createFakeLinesDiv(),\n                            heightInPx: -delta,\n                            marginDomNode,\n                            showInHiddenAreas: true,\n                            suppressMouseDown: true,\n                        });\n                    }\n                }\n            }\n            for (const a of alignmentsSyncedMovedText.read(reader) ?? []) {\n                if (!syncedMovedText?.lineRangeMapping.original.intersect(a.originalRange)\n                    || !syncedMovedText?.lineRangeMapping.modified.intersect(a.modifiedRange)) {\n                    // ignore unrelated alignments outside the synced moved text\n                    continue;\n                }\n                const delta = a.modifiedHeightInPx - a.originalHeightInPx;\n                if (delta > 0) {\n                    origViewZones.push({\n                        afterLineNumber: a.originalRange.endLineNumberExclusive - 1,\n                        domNode: createFakeLinesDiv(),\n                        heightInPx: delta,\n                        showInHiddenAreas: true,\n                        suppressMouseDown: true,\n                    });\n                }\n                else {\n                    modViewZones.push({\n                        afterLineNumber: a.modifiedRange.endLineNumberExclusive - 1,\n                        domNode: createFakeLinesDiv(),\n                        heightInPx: -delta,\n                        showInHiddenAreas: true,\n                        suppressMouseDown: true,\n                    });\n                }\n            }\n            return { orig: origViewZones, mod: modViewZones };\n        });\n        let ignoreChange = false;\n        this._register(this._editors.original.onDidScrollChange(e => {\n            if (e.scrollLeftChanged && !ignoreChange) {\n                ignoreChange = true;\n                this._editors.modified.setScrollLeft(e.scrollLeft);\n                ignoreChange = false;\n            }\n        }));\n        this._register(this._editors.modified.onDidScrollChange(e => {\n            if (e.scrollLeftChanged && !ignoreChange) {\n                ignoreChange = true;\n                this._editors.original.setScrollLeft(e.scrollLeft);\n                ignoreChange = false;\n            }\n        }));\n        this._originalScrollTop = observableFromEvent(this._editors.original.onDidScrollChange, () => /** @description original.getScrollTop */ this._editors.original.getScrollTop());\n        this._modifiedScrollTop = observableFromEvent(this._editors.modified.onDidScrollChange, () => /** @description modified.getScrollTop */ this._editors.modified.getScrollTop());\n        // origExtraHeight + origOffset - origScrollTop = modExtraHeight + modOffset - modScrollTop\n        // origScrollTop = origExtraHeight + origOffset - modExtraHeight - modOffset + modScrollTop\n        // modScrollTop = modExtraHeight + modOffset - origExtraHeight - origOffset + origScrollTop\n        // origOffset - modOffset = heightOfLines(1..Y) - heightOfLines(1..X)\n        // origScrollTop >= 0, modScrollTop >= 0\n        this._register(autorun(reader => {\n            /** @description update scroll modified */\n            const newScrollTopModified = this._originalScrollTop.read(reader)\n                - (this._originalScrollOffsetAnimated.get() - this._modifiedScrollOffsetAnimated.read(reader))\n                - (this._originalTopPadding.get() - this._modifiedTopPadding.read(reader));\n            if (newScrollTopModified !== this._editors.modified.getScrollTop()) {\n                this._editors.modified.setScrollTop(newScrollTopModified, 1 /* ScrollType.Immediate */);\n            }\n        }));\n        this._register(autorun(reader => {\n            /** @description update scroll original */\n            const newScrollTopOriginal = this._modifiedScrollTop.read(reader)\n                - (this._modifiedScrollOffsetAnimated.get() - this._originalScrollOffsetAnimated.read(reader))\n                - (this._modifiedTopPadding.get() - this._originalTopPadding.read(reader));\n            if (newScrollTopOriginal !== this._editors.original.getScrollTop()) {\n                this._editors.original.setScrollTop(newScrollTopOriginal, 1 /* ScrollType.Immediate */);\n            }\n        }));\n        this._register(autorun(reader => {\n            /** @description update editor top offsets */\n            const m = this._diffModel.read(reader)?.movedTextToCompare.read(reader);\n            let deltaOrigToMod = 0;\n            if (m) {\n                const trueTopOriginal = this._editors.original.getTopForLineNumber(m.lineRangeMapping.original.startLineNumber, true) - this._originalTopPadding.get();\n                const trueTopModified = this._editors.modified.getTopForLineNumber(m.lineRangeMapping.modified.startLineNumber, true) - this._modifiedTopPadding.get();\n                deltaOrigToMod = trueTopModified - trueTopOriginal;\n            }\n            if (deltaOrigToMod > 0) {\n                this._modifiedTopPadding.set(0, undefined);\n                this._originalTopPadding.set(deltaOrigToMod, undefined);\n            }\n            else if (deltaOrigToMod < 0) {\n                this._modifiedTopPadding.set(-deltaOrigToMod, undefined);\n                this._originalTopPadding.set(0, undefined);\n            }\n            else {\n                setTimeout(() => {\n                    this._modifiedTopPadding.set(0, undefined);\n                    this._originalTopPadding.set(0, undefined);\n                }, 400);\n            }\n            if (this._editors.modified.hasTextFocus()) {\n                this._originalScrollOffset.set(this._modifiedScrollOffset.get() - deltaOrigToMod, undefined, true);\n            }\n            else {\n                this._modifiedScrollOffset.set(this._originalScrollOffset.get() + deltaOrigToMod, undefined, true);\n            }\n        }));\n    }\n};\nDiffEditorViewZones = __decorate([\n    __param(8, IClipboardService),\n    __param(9, IContextMenuService)\n], DiffEditorViewZones);\nexport { DiffEditorViewZones };\nfunction computeRangeAlignment(originalEditor, modifiedEditor, diffs, originalEditorAlignmentViewZones, modifiedEditorAlignmentViewZones, innerHunkAlignment) {\n    const originalLineHeightOverrides = new ArrayQueue(getAdditionalLineHeights(originalEditor, originalEditorAlignmentViewZones));\n    const modifiedLineHeightOverrides = new ArrayQueue(getAdditionalLineHeights(modifiedEditor, modifiedEditorAlignmentViewZones));\n    const origLineHeight = originalEditor.getOption(67 /* EditorOption.lineHeight */);\n    const modLineHeight = modifiedEditor.getOption(67 /* EditorOption.lineHeight */);\n    const result = [];\n    let lastOriginalLineNumber = 0;\n    let lastModifiedLineNumber = 0;\n    function handleAlignmentsOutsideOfDiffs(untilOriginalLineNumberExclusive, untilModifiedLineNumberExclusive) {\n        while (true) {\n            let origNext = originalLineHeightOverrides.peek();\n            let modNext = modifiedLineHeightOverrides.peek();\n            if (origNext && origNext.lineNumber >= untilOriginalLineNumberExclusive) {\n                origNext = undefined;\n            }\n            if (modNext && modNext.lineNumber >= untilModifiedLineNumberExclusive) {\n                modNext = undefined;\n            }\n            if (!origNext && !modNext) {\n                break;\n            }\n            const distOrig = origNext ? origNext.lineNumber - lastOriginalLineNumber : Number.MAX_VALUE;\n            const distNext = modNext ? modNext.lineNumber - lastModifiedLineNumber : Number.MAX_VALUE;\n            if (distOrig < distNext) {\n                originalLineHeightOverrides.dequeue();\n                modNext = {\n                    lineNumber: origNext.lineNumber - lastOriginalLineNumber + lastModifiedLineNumber,\n                    heightInPx: 0,\n                };\n            }\n            else if (distOrig > distNext) {\n                modifiedLineHeightOverrides.dequeue();\n                origNext = {\n                    lineNumber: modNext.lineNumber - lastModifiedLineNumber + lastOriginalLineNumber,\n                    heightInPx: 0,\n                };\n            }\n            else {\n                originalLineHeightOverrides.dequeue();\n                modifiedLineHeightOverrides.dequeue();\n            }\n            result.push({\n                originalRange: LineRange.ofLength(origNext.lineNumber, 1),\n                modifiedRange: LineRange.ofLength(modNext.lineNumber, 1),\n                originalHeightInPx: origLineHeight + origNext.heightInPx,\n                modifiedHeightInPx: modLineHeight + modNext.heightInPx,\n                diff: undefined,\n            });\n        }\n    }\n    for (const m of diffs) {\n        const c = m.lineRangeMapping;\n        handleAlignmentsOutsideOfDiffs(c.original.startLineNumber, c.modified.startLineNumber);\n        let first = true;\n        let lastModLineNumber = c.modified.startLineNumber;\n        let lastOrigLineNumber = c.original.startLineNumber;\n        function emitAlignment(origLineNumberExclusive, modLineNumberExclusive, forceAlignment = false) {\n            if (origLineNumberExclusive < lastOrigLineNumber || modLineNumberExclusive < lastModLineNumber) {\n                return;\n            }\n            if (first) {\n                first = false;\n            }\n            else if (!forceAlignment && (origLineNumberExclusive === lastOrigLineNumber || modLineNumberExclusive === lastModLineNumber)) {\n                // This causes a re-alignment of an already aligned line.\n                // However, we don't care for the final alignment.\n                return;\n            }\n            const originalRange = new LineRange(lastOrigLineNumber, origLineNumberExclusive);\n            const modifiedRange = new LineRange(lastModLineNumber, modLineNumberExclusive);\n            if (originalRange.isEmpty && modifiedRange.isEmpty) {\n                return;\n            }\n            const originalAdditionalHeight = originalLineHeightOverrides\n                .takeWhile(v => v.lineNumber < origLineNumberExclusive)\n                ?.reduce((p, c) => p + c.heightInPx, 0) ?? 0;\n            const modifiedAdditionalHeight = modifiedLineHeightOverrides\n                .takeWhile(v => v.lineNumber < modLineNumberExclusive)\n                ?.reduce((p, c) => p + c.heightInPx, 0) ?? 0;\n            result.push({\n                originalRange,\n                modifiedRange,\n                originalHeightInPx: originalRange.length * origLineHeight + originalAdditionalHeight,\n                modifiedHeightInPx: modifiedRange.length * modLineHeight + modifiedAdditionalHeight,\n                diff: m.lineRangeMapping,\n            });\n            lastOrigLineNumber = origLineNumberExclusive;\n            lastModLineNumber = modLineNumberExclusive;\n        }\n        if (innerHunkAlignment) {\n            for (const i of c.innerChanges || []) {\n                if (i.originalRange.startColumn > 1 && i.modifiedRange.startColumn > 1) {\n                    // There is some unmodified text on this line before the diff\n                    emitAlignment(i.originalRange.startLineNumber, i.modifiedRange.startLineNumber);\n                }\n                const originalModel = originalEditor.getModel();\n                // When the diff is invalid, the ranges might be out of bounds (this should be fixed in the diff model by applying edits directly).\n                const maxColumn = i.originalRange.endLineNumber <= originalModel.getLineCount() ? originalModel.getLineMaxColumn(i.originalRange.endLineNumber) : Number.MAX_SAFE_INTEGER;\n                if (i.originalRange.endColumn < maxColumn) {\n                    // // There is some unmodified text on this line after the diff\n                    emitAlignment(i.originalRange.endLineNumber, i.modifiedRange.endLineNumber);\n                }\n            }\n        }\n        emitAlignment(c.original.endLineNumberExclusive, c.modified.endLineNumberExclusive, true);\n        lastOriginalLineNumber = c.original.endLineNumberExclusive;\n        lastModifiedLineNumber = c.modified.endLineNumberExclusive;\n    }\n    handleAlignmentsOutsideOfDiffs(Number.MAX_VALUE, Number.MAX_VALUE);\n    return result;\n}\nfunction getAdditionalLineHeights(editor, viewZonesToIgnore) {\n    const viewZoneHeights = [];\n    const wrappingZoneHeights = [];\n    const hasWrapping = editor.getOption(147 /* EditorOption.wrappingInfo */).wrappingColumn !== -1;\n    const coordinatesConverter = editor._getViewModel().coordinatesConverter;\n    const editorLineHeight = editor.getOption(67 /* EditorOption.lineHeight */);\n    if (hasWrapping) {\n        for (let i = 1; i <= editor.getModel().getLineCount(); i++) {\n            const lineCount = coordinatesConverter.getModelLineViewLineCount(i);\n            if (lineCount > 1) {\n                wrappingZoneHeights.push({ lineNumber: i, heightInPx: editorLineHeight * (lineCount - 1) });\n            }\n        }\n    }\n    for (const w of editor.getWhitespaces()) {\n        if (viewZonesToIgnore.has(w.id)) {\n            continue;\n        }\n        const modelLineNumber = w.afterLineNumber === 0 ? 0 : coordinatesConverter.convertViewPositionToModelPosition(new Position(w.afterLineNumber, 1)).lineNumber;\n        viewZoneHeights.push({ lineNumber: modelLineNumber, heightInPx: w.height });\n    }\n    const result = joinCombine(viewZoneHeights, wrappingZoneHeights, v => v.lineNumber, (v1, v2) => ({ lineNumber: v1.lineNumber, heightInPx: v1.heightInPx + v2.heightInPx }));\n    return result;\n}\nexport function allowsTrueInlineDiffRendering(mapping) {\n    if (!mapping.innerChanges) {\n        return false;\n    }\n    return mapping.innerChanges.every(c => (rangeIsSingleLine(c.modifiedRange) && rangeIsSingleLine(c.originalRange))\n        || c.originalRange.equalsRange(new Range(1, 1, 1, 1)));\n}\nfunction rangeIsSingleLine(range) {\n    return range.startLineNumber === range.endLineNumber;\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { h } from '../../../../../base/browser/dom.js';\nimport { ActionBar } from '../../../../../base/browser/ui/actionbar/actionbar.js';\nimport { Action } from '../../../../../base/common/actions.js';\nimport { booleanComparator, compareBy, numberComparator, tieBreakComparators } from '../../../../../base/common/arrays.js';\nimport { findMaxIdx } from '../../../../../base/common/arraysFind.js';\nimport { Codicon } from '../../../../../base/common/codicons.js';\nimport { Disposable, toDisposable } from '../../../../../base/common/lifecycle.js';\nimport { autorun, autorunHandleChanges, autorunWithStore, constObservable, derived, derivedWithStore, observableFromEvent, observableSignalFromEvent, observableValue, recomputeInitiallyAndOnChange } from '../../../../../base/common/observable.js';\nimport { ThemeIcon } from '../../../../../base/common/themables.js';\nimport { PlaceholderViewZone, ViewZoneOverlayWidget, applyStyle, applyViewZones } from '../utils.js';\nimport { OffsetRange, OffsetRangeSet } from '../../../../common/core/offsetRange.js';\nimport { localize } from '../../../../../nls.js';\nexport class MovedBlocksLinesFeature extends Disposable {\n    static { this.movedCodeBlockPadding = 4; }\n    constructor(_rootElement, _diffModel, _originalEditorLayoutInfo, _modifiedEditorLayoutInfo, _editors) {\n        super();\n        this._rootElement = _rootElement;\n        this._diffModel = _diffModel;\n        this._originalEditorLayoutInfo = _originalEditorLayoutInfo;\n        this._modifiedEditorLayoutInfo = _modifiedEditorLayoutInfo;\n        this._editors = _editors;\n        this._originalScrollTop = observableFromEvent(this, this._editors.original.onDidScrollChange, () => this._editors.original.getScrollTop());\n        this._modifiedScrollTop = observableFromEvent(this, this._editors.modified.onDidScrollChange, () => this._editors.modified.getScrollTop());\n        this._viewZonesChanged = observableSignalFromEvent('onDidChangeViewZones', this._editors.modified.onDidChangeViewZones);\n        this.width = observableValue(this, 0);\n        this._modifiedViewZonesChangedSignal = observableSignalFromEvent('modified.onDidChangeViewZones', this._editors.modified.onDidChangeViewZones);\n        this._originalViewZonesChangedSignal = observableSignalFromEvent('original.onDidChangeViewZones', this._editors.original.onDidChangeViewZones);\n        this._state = derivedWithStore(this, (reader, store) => {\n            /** @description state */\n            this._element.replaceChildren();\n            const model = this._diffModel.read(reader);\n            const moves = model?.diff.read(reader)?.movedTexts;\n            if (!moves || moves.length === 0) {\n                this.width.set(0, undefined);\n                return;\n            }\n            this._viewZonesChanged.read(reader);\n            const infoOrig = this._originalEditorLayoutInfo.read(reader);\n            const infoMod = this._modifiedEditorLayoutInfo.read(reader);\n            if (!infoOrig || !infoMod) {\n                this.width.set(0, undefined);\n                return;\n            }\n            this._modifiedViewZonesChangedSignal.read(reader);\n            this._originalViewZonesChangedSignal.read(reader);\n            const lines = moves.map((move) => {\n                function computeLineStart(range, editor) {\n                    const t1 = editor.getTopForLineNumber(range.startLineNumber, true);\n                    const t2 = editor.getTopForLineNumber(range.endLineNumberExclusive, true);\n                    return (t1 + t2) / 2;\n                }\n                const start = computeLineStart(move.lineRangeMapping.original, this._editors.original);\n                const startOffset = this._originalScrollTop.read(reader);\n                const end = computeLineStart(move.lineRangeMapping.modified, this._editors.modified);\n                const endOffset = this._modifiedScrollTop.read(reader);\n                const from = start - startOffset;\n                const to = end - endOffset;\n                const top = Math.min(start, end);\n                const bottom = Math.max(start, end);\n                return { range: new OffsetRange(top, bottom), from, to, fromWithoutScroll: start, toWithoutScroll: end, move };\n            });\n            lines.sort(tieBreakComparators(compareBy(l => l.fromWithoutScroll > l.toWithoutScroll, booleanComparator), compareBy(l => l.fromWithoutScroll > l.toWithoutScroll ? l.fromWithoutScroll : -l.toWithoutScroll, numberComparator)));\n            const layout = LinesLayout.compute(lines.map(l => l.range));\n            const padding = 10;\n            const lineAreaLeft = infoOrig.verticalScrollbarWidth;\n            const lineAreaWidth = (layout.getTrackCount() - 1) * 10 + padding * 2;\n            const width = lineAreaLeft + lineAreaWidth + (infoMod.contentLeft - MovedBlocksLinesFeature.movedCodeBlockPadding);\n            let idx = 0;\n            for (const line of lines) {\n                const track = layout.getTrack(idx);\n                const verticalY = lineAreaLeft + padding + track * 10;\n                const arrowHeight = 15;\n                const arrowWidth = 15;\n                const right = width;\n                const rectWidth = infoMod.glyphMarginWidth + infoMod.lineNumbersWidth;\n                const rectHeight = 18;\n                const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\n                rect.classList.add('arrow-rectangle');\n                rect.setAttribute('x', `${right - rectWidth}`);\n                rect.setAttribute('y', `${line.to - rectHeight / 2}`);\n                rect.setAttribute('width', `${rectWidth}`);\n                rect.setAttribute('height', `${rectHeight}`);\n                this._element.appendChild(rect);\n                const g = document.createElementNS('http://www.w3.org/2000/svg', 'g');\n                const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n                path.setAttribute('d', `M ${0} ${line.from} L ${verticalY} ${line.from} L ${verticalY} ${line.to} L ${right - arrowWidth} ${line.to}`);\n                path.setAttribute('fill', 'none');\n                g.appendChild(path);\n                const arrowRight = document.createElementNS('http://www.w3.org/2000/svg', 'polygon');\n                arrowRight.classList.add('arrow');\n                store.add(autorun(reader => {\n                    path.classList.toggle('currentMove', line.move === model.activeMovedText.read(reader));\n                    arrowRight.classList.toggle('currentMove', line.move === model.activeMovedText.read(reader));\n                }));\n                arrowRight.setAttribute('points', `${right - arrowWidth},${line.to - arrowHeight / 2} ${right},${line.to} ${right - arrowWidth},${line.to + arrowHeight / 2}`);\n                g.appendChild(arrowRight);\n                this._element.appendChild(g);\n                /*\n                TODO@hediet\n                path.addEventListener('mouseenter', () => {\n                    model.setHoveredMovedText(line.move);\n                });\n                path.addEventListener('mouseleave', () => {\n                    model.setHoveredMovedText(undefined);\n                });*/\n                idx++;\n            }\n            this.width.set(lineAreaWidth, undefined);\n        });\n        this._element = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n        this._element.setAttribute('class', 'moved-blocks-lines');\n        this._rootElement.appendChild(this._element);\n        this._register(toDisposable(() => this._element.remove()));\n        this._register(autorun(reader => {\n            /** @description update moved blocks lines positioning */\n            const info = this._originalEditorLayoutInfo.read(reader);\n            const info2 = this._modifiedEditorLayoutInfo.read(reader);\n            if (!info || !info2) {\n                return;\n            }\n            this._element.style.left = `${info.width - info.verticalScrollbarWidth}px`;\n            this._element.style.height = `${info.height}px`;\n            this._element.style.width = `${info.verticalScrollbarWidth + info.contentLeft - MovedBlocksLinesFeature.movedCodeBlockPadding + this.width.read(reader)}px`;\n        }));\n        this._register(recomputeInitiallyAndOnChange(this._state));\n        const movedBlockViewZones = derived(reader => {\n            const model = this._diffModel.read(reader);\n            const d = model?.diff.read(reader);\n            if (!d) {\n                return [];\n            }\n            return d.movedTexts.map(move => ({\n                move,\n                original: new PlaceholderViewZone(constObservable(move.lineRangeMapping.original.startLineNumber - 1), 18),\n                modified: new PlaceholderViewZone(constObservable(move.lineRangeMapping.modified.startLineNumber - 1), 18),\n            }));\n        });\n        this._register(applyViewZones(this._editors.original, movedBlockViewZones.map(zones => /** @description movedBlockViewZones.original */ zones.map(z => z.original))));\n        this._register(applyViewZones(this._editors.modified, movedBlockViewZones.map(zones => /** @description movedBlockViewZones.modified */ zones.map(z => z.modified))));\n        this._register(autorunWithStore((reader, store) => {\n            const blocks = movedBlockViewZones.read(reader);\n            for (const b of blocks) {\n                store.add(new MovedBlockOverlayWidget(this._editors.original, b.original, b.move, 'original', this._diffModel.get()));\n                store.add(new MovedBlockOverlayWidget(this._editors.modified, b.modified, b.move, 'modified', this._diffModel.get()));\n            }\n        }));\n        const originalHasFocus = observableSignalFromEvent('original.onDidFocusEditorWidget', e => this._editors.original.onDidFocusEditorWidget(() => setTimeout(() => e(undefined), 0)));\n        const modifiedHasFocus = observableSignalFromEvent('modified.onDidFocusEditorWidget', e => this._editors.modified.onDidFocusEditorWidget(() => setTimeout(() => e(undefined), 0)));\n        let lastChangedEditor = 'modified';\n        this._register(autorunHandleChanges({\n            createEmptyChangeSummary: () => undefined,\n            handleChange: (ctx, summary) => {\n                if (ctx.didChange(originalHasFocus)) {\n                    lastChangedEditor = 'original';\n                }\n                if (ctx.didChange(modifiedHasFocus)) {\n                    lastChangedEditor = 'modified';\n                }\n                return true;\n            }\n        }, reader => {\n            /** @description MovedBlocksLines.setActiveMovedTextFromCursor */\n            originalHasFocus.read(reader);\n            modifiedHasFocus.read(reader);\n            const m = this._diffModel.read(reader);\n            if (!m) {\n                return;\n            }\n            const diff = m.diff.read(reader);\n            let movedText = undefined;\n            if (diff && lastChangedEditor === 'original') {\n                const originalPos = this._editors.originalCursor.read(reader);\n                if (originalPos) {\n                    movedText = diff.movedTexts.find(m => m.lineRangeMapping.original.contains(originalPos.lineNumber));\n                }\n            }\n            if (diff && lastChangedEditor === 'modified') {\n                const modifiedPos = this._editors.modifiedCursor.read(reader);\n                if (modifiedPos) {\n                    movedText = diff.movedTexts.find(m => m.lineRangeMapping.modified.contains(modifiedPos.lineNumber));\n                }\n            }\n            if (movedText !== m.movedTextToCompare.get()) {\n                m.movedTextToCompare.set(undefined, undefined);\n            }\n            m.setActiveMovedText(movedText);\n        }));\n    }\n}\nclass LinesLayout {\n    static compute(lines) {\n        const setsPerTrack = [];\n        const trackPerLineIdx = [];\n        for (const line of lines) {\n            let trackIdx = setsPerTrack.findIndex(set => !set.intersectsStrict(line));\n            if (trackIdx === -1) {\n                const maxTrackCount = 6;\n                if (setsPerTrack.length >= maxTrackCount) {\n                    trackIdx = findMaxIdx(setsPerTrack, compareBy(set => set.intersectWithRangeLength(line), numberComparator));\n                }\n                else {\n                    trackIdx = setsPerTrack.length;\n                    setsPerTrack.push(new OffsetRangeSet());\n                }\n            }\n            setsPerTrack[trackIdx].addRange(line);\n            trackPerLineIdx.push(trackIdx);\n        }\n        return new LinesLayout(setsPerTrack.length, trackPerLineIdx);\n    }\n    constructor(_trackCount, trackPerLineIdx) {\n        this._trackCount = _trackCount;\n        this.trackPerLineIdx = trackPerLineIdx;\n    }\n    getTrack(lineIdx) {\n        return this.trackPerLineIdx[lineIdx];\n    }\n    getTrackCount() {\n        return this._trackCount;\n    }\n}\nclass MovedBlockOverlayWidget extends ViewZoneOverlayWidget {\n    constructor(_editor, _viewZone, _move, _kind, _diffModel) {\n        const root = h('div.diff-hidden-lines-widget');\n        super(_editor, _viewZone, root.root);\n        this._editor = _editor;\n        this._move = _move;\n        this._kind = _kind;\n        this._diffModel = _diffModel;\n        this._nodes = h('div.diff-moved-code-block', { style: { marginRight: '4px' } }, [\n            h('div.text-content@textContent'),\n            h('div.action-bar@actionBar'),\n        ]);\n        root.root.appendChild(this._nodes.root);\n        const editorLayout = observableFromEvent(this._editor.onDidLayoutChange, () => this._editor.getLayoutInfo());\n        this._register(applyStyle(this._nodes.root, {\n            paddingRight: editorLayout.map(l => l.verticalScrollbarWidth)\n        }));\n        let text;\n        if (_move.changes.length > 0) {\n            text = this._kind === 'original' ? localize('codeMovedToWithChanges', 'Code moved with changes to line {0}-{1}', this._move.lineRangeMapping.modified.startLineNumber, this._move.lineRangeMapping.modified.endLineNumberExclusive - 1) : localize('codeMovedFromWithChanges', 'Code moved with changes from line {0}-{1}', this._move.lineRangeMapping.original.startLineNumber, this._move.lineRangeMapping.original.endLineNumberExclusive - 1);\n        }\n        else {\n            text = this._kind === 'original' ? localize('codeMovedTo', 'Code moved to line {0}-{1}', this._move.lineRangeMapping.modified.startLineNumber, this._move.lineRangeMapping.modified.endLineNumberExclusive - 1) : localize('codeMovedFrom', 'Code moved from line {0}-{1}', this._move.lineRangeMapping.original.startLineNumber, this._move.lineRangeMapping.original.endLineNumberExclusive - 1);\n        }\n        const actionBar = this._register(new ActionBar(this._nodes.actionBar, {\n            highlightToggledItems: true,\n        }));\n        const caption = new Action('', text, '', false);\n        actionBar.push(caption, { icon: false, label: true });\n        const actionCompare = new Action('', 'Compare', ThemeIcon.asClassName(Codicon.compareChanges), true, () => {\n            this._editor.focus();\n            this._diffModel.movedTextToCompare.set(this._diffModel.movedTextToCompare.get() === _move ? undefined : this._move, undefined);\n        });\n        this._register(autorun(reader => {\n            const isActive = this._diffModel.movedTextToCompare.read(reader) === _move;\n            actionCompare.checked = isActive;\n        }));\n        actionBar.push(actionCompare, { icon: false, label: 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';\nimport { derived } from '../../../../../base/common/observable.js';\nimport { allowsTrueInlineDiffRendering } from './diffEditorViewZones/diffEditorViewZones.js';\nimport { MovedBlocksLinesFeature } from '../features/movedBlocksLinesFeature.js';\nimport { diffAddDecoration, diffAddDecorationEmpty, diffDeleteDecoration, diffDeleteDecorationEmpty, diffLineAddDecorationBackground, diffLineAddDecorationBackgroundWithIndicator, diffLineDeleteDecorationBackground, diffLineDeleteDecorationBackgroundWithIndicator, diffWholeLineAddDecoration, diffWholeLineDeleteDecoration } from '../registrations.contribution.js';\nimport { applyObservableDecorations } from '../utils.js';\nexport class DiffEditorDecorations extends Disposable {\n    constructor(_editors, _diffModel, _options, widget) {\n        super();\n        this._editors = _editors;\n        this._diffModel = _diffModel;\n        this._options = _options;\n        this._decorations = derived(this, (reader) => {\n            const diffModel = this._diffModel.read(reader);\n            const diff = diffModel?.diff.read(reader);\n            if (!diff) {\n                return null;\n            }\n            const movedTextToCompare = this._diffModel.read(reader).movedTextToCompare.read(reader);\n            const renderIndicators = this._options.renderIndicators.read(reader);\n            const showEmptyDecorations = this._options.showEmptyDecorations.read(reader);\n            const originalDecorations = [];\n            const modifiedDecorations = [];\n            if (!movedTextToCompare) {\n                for (const m of diff.mappings) {\n                    if (!m.lineRangeMapping.original.isEmpty) {\n                        originalDecorations.push({ range: m.lineRangeMapping.original.toInclusiveRange(), options: renderIndicators ? diffLineDeleteDecorationBackgroundWithIndicator : diffLineDeleteDecorationBackground });\n                    }\n                    if (!m.lineRangeMapping.modified.isEmpty) {\n                        modifiedDecorations.push({ range: m.lineRangeMapping.modified.toInclusiveRange(), options: renderIndicators ? diffLineAddDecorationBackgroundWithIndicator : diffLineAddDecorationBackground });\n                    }\n                    if (m.lineRangeMapping.modified.isEmpty || m.lineRangeMapping.original.isEmpty) {\n                        if (!m.lineRangeMapping.original.isEmpty) {\n                            originalDecorations.push({ range: m.lineRangeMapping.original.toInclusiveRange(), options: diffWholeLineDeleteDecoration });\n                        }\n                        if (!m.lineRangeMapping.modified.isEmpty) {\n                            modifiedDecorations.push({ range: m.lineRangeMapping.modified.toInclusiveRange(), options: diffWholeLineAddDecoration });\n                        }\n                    }\n                    else {\n                        const useInlineDiff = this._options.useTrueInlineDiffRendering.read(reader) && allowsTrueInlineDiffRendering(m.lineRangeMapping);\n                        for (const i of m.lineRangeMapping.innerChanges || []) {\n                            // Don't show empty markers outside the line range\n                            if (m.lineRangeMapping.original.contains(i.originalRange.startLineNumber)) {\n                                originalDecorations.push({ range: i.originalRange, options: (i.originalRange.isEmpty() && showEmptyDecorations) ? diffDeleteDecorationEmpty : diffDeleteDecoration });\n                            }\n                            if (m.lineRangeMapping.modified.contains(i.modifiedRange.startLineNumber)) {\n                                modifiedDecorations.push({ range: i.modifiedRange, options: (i.modifiedRange.isEmpty() && showEmptyDecorations && !useInlineDiff) ? diffAddDecorationEmpty : diffAddDecoration });\n                            }\n                            if (useInlineDiff) {\n                                const deletedText = diffModel.model.original.getValueInRange(i.originalRange);\n                                modifiedDecorations.push({\n                                    range: i.modifiedRange,\n                                    options: {\n                                        description: 'deleted-text',\n                                        before: {\n                                            content: deletedText,\n                                            inlineClassName: 'inline-deleted-text',\n                                        },\n                                        zIndex: 100000,\n                                        showIfCollapsed: true,\n                                    }\n                                });\n                            }\n                        }\n                    }\n                }\n            }\n            if (movedTextToCompare) {\n                for (const m of movedTextToCompare.changes) {\n                    const fullRangeOriginal = m.original.toInclusiveRange();\n                    if (fullRangeOriginal) {\n                        originalDecorations.push({ range: fullRangeOriginal, options: renderIndicators ? diffLineDeleteDecorationBackgroundWithIndicator : diffLineDeleteDecorationBackground });\n                    }\n                    const fullRangeModified = m.modified.toInclusiveRange();\n                    if (fullRangeModified) {\n                        modifiedDecorations.push({ range: fullRangeModified, options: renderIndicators ? diffLineAddDecorationBackgroundWithIndicator : diffLineAddDecorationBackground });\n                    }\n                    for (const i of m.innerChanges || []) {\n                        originalDecorations.push({ range: i.originalRange, options: diffDeleteDecoration });\n                        modifiedDecorations.push({ range: i.modifiedRange, options: diffAddDecoration });\n                    }\n                }\n            }\n            const activeMovedText = this._diffModel.read(reader).activeMovedText.read(reader);\n            for (const m of diff.movedTexts) {\n                originalDecorations.push({\n                    range: m.lineRangeMapping.original.toInclusiveRange(), options: {\n                        description: 'moved',\n                        blockClassName: 'movedOriginal' + (m === activeMovedText ? ' currentMove' : ''),\n                        blockPadding: [MovedBlocksLinesFeature.movedCodeBlockPadding, 0, MovedBlocksLinesFeature.movedCodeBlockPadding, MovedBlocksLinesFeature.movedCodeBlockPadding],\n                    }\n                });\n                modifiedDecorations.push({\n                    range: m.lineRangeMapping.modified.toInclusiveRange(), options: {\n                        description: 'moved',\n                        blockClassName: 'movedModified' + (m === activeMovedText ? ' currentMove' : ''),\n                        blockPadding: [4, 0, 4, 4],\n                    }\n                });\n            }\n            return { originalDecorations, modifiedDecorations };\n        });\n        this._register(applyObservableDecorations(this._editors.original, this._decorations.map(d => d?.originalDecorations || [])));\n        this._register(applyObservableDecorations(this._editors.modified, this._decorations.map(d => d?.modifiedDecorations || [])));\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 } from '../../../../../base/browser/ui/sash/sash.js';\nimport { Disposable } from '../../../../../base/common/lifecycle.js';\nimport { autorun, observableValue } from '../../../../../base/common/observable.js';\nimport { derivedWithSetter } from '../../../../../base/common/observableInternal/derived.js';\nexport class SashLayout {\n    resetSash() {\n        this._sashRatio.set(undefined, undefined);\n    }\n    constructor(_options, dimensions) {\n        this._options = _options;\n        this.dimensions = dimensions;\n        this.sashLeft = derivedWithSetter(this, reader => {\n            const ratio = this._sashRatio.read(reader) ?? this._options.splitViewDefaultRatio.read(reader);\n            return this._computeSashLeft(ratio, reader);\n        }, (value, tx) => {\n            const contentWidth = this.dimensions.width.get();\n            this._sashRatio.set(value / contentWidth, tx);\n        });\n        this._sashRatio = observableValue(this, undefined);\n    }\n    /** @pure */\n    _computeSashLeft(desiredRatio, reader) {\n        const contentWidth = this.dimensions.width.read(reader);\n        const midPoint = Math.floor(this._options.splitViewDefaultRatio.read(reader) * contentWidth);\n        const sashLeft = this._options.enableSplitViewResizing.read(reader) ? Math.floor(desiredRatio * contentWidth) : midPoint;\n        const MINIMUM_EDITOR_WIDTH = 100;\n        if (contentWidth <= MINIMUM_EDITOR_WIDTH * 2) {\n            return midPoint;\n        }\n        if (sashLeft < MINIMUM_EDITOR_WIDTH) {\n            return MINIMUM_EDITOR_WIDTH;\n        }\n        if (sashLeft > contentWidth - MINIMUM_EDITOR_WIDTH) {\n            return contentWidth - MINIMUM_EDITOR_WIDTH;\n        }\n        return sashLeft;\n    }\n}\nexport class DiffEditorSash extends Disposable {\n    constructor(_domNode, _dimensions, _enabled, _boundarySashes, sashLeft, _resetSash) {\n        super();\n        this._domNode = _domNode;\n        this._dimensions = _dimensions;\n        this._enabled = _enabled;\n        this._boundarySashes = _boundarySashes;\n        this.sashLeft = sashLeft;\n        this._resetSash = _resetSash;\n        this._sash = this._register(new Sash(this._domNode, {\n            getVerticalSashTop: (_sash) => 0,\n            getVerticalSashLeft: (_sash) => this.sashLeft.get(),\n            getVerticalSashHeight: (_sash) => this._dimensions.height.get(),\n        }, { orientation: 0 /* Orientation.VERTICAL */ }));\n        this._startSashPosition = undefined;\n        this._register(this._sash.onDidStart(() => {\n            this._startSashPosition = this.sashLeft.get();\n        }));\n        this._register(this._sash.onDidChange((e) => {\n            this.sashLeft.set(this._startSashPosition + (e.currentX - e.startX), undefined);\n        }));\n        this._register(this._sash.onDidEnd(() => this._sash.layout()));\n        this._register(this._sash.onDidReset(() => this._resetSash()));\n        this._register(autorun(reader => {\n            const sashes = this._boundarySashes.read(reader);\n            if (sashes) {\n                this._sash.orthogonalEndSash = sashes.bottom;\n            }\n        }));\n        this._register(autorun(reader => {\n            /** @description DiffEditorSash.layoutSash */\n            const enabled = this._enabled.read(reader);\n            this._sash.state = enabled ? 3 /* SashState.Enabled */ : 0 /* SashState.Disabled */;\n            this.sashLeft.read(reader);\n            this._dimensions.height.read(reader);\n            this._sash.layout();\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 { h, reset } from '../../../../../base/browser/dom.js';\nimport { Disposable, toDisposable } from '../../../../../base/common/lifecycle.js';\nimport { autorun, observableFromEvent, observableSignal, observableSignalFromEvent, observableValue, transaction } from '../../../../../base/common/observable.js';\nimport { LineRange } from '../../../../common/core/lineRange.js';\nimport { OffsetRange } from '../../../../common/core/offsetRange.js';\nexport class EditorGutter extends Disposable {\n    constructor(_editor, _domNode, itemProvider) {\n        super();\n        this._editor = _editor;\n        this._domNode = _domNode;\n        this.itemProvider = itemProvider;\n        this.scrollTop = observableFromEvent(this, this._editor.onDidScrollChange, (e) => /** @description editor.onDidScrollChange */ this._editor.getScrollTop());\n        this.isScrollTopZero = this.scrollTop.map((scrollTop) => /** @description isScrollTopZero */ scrollTop === 0);\n        this.modelAttached = observableFromEvent(this, this._editor.onDidChangeModel, (e) => /** @description editor.onDidChangeModel */ this._editor.hasModel());\n        this.editorOnDidChangeViewZones = observableSignalFromEvent('onDidChangeViewZones', this._editor.onDidChangeViewZones);\n        this.editorOnDidContentSizeChange = observableSignalFromEvent('onDidContentSizeChange', this._editor.onDidContentSizeChange);\n        this.domNodeSizeChanged = observableSignal('domNodeSizeChanged');\n        this.views = new Map();\n        this._domNode.className = 'gutter monaco-editor';\n        const scrollDecoration = this._domNode.appendChild(h('div.scroll-decoration', { role: 'presentation', ariaHidden: 'true', style: { width: '100%' } })\n            .root);\n        const o = new ResizeObserver(() => {\n            transaction(tx => {\n                /** @description ResizeObserver: size changed */\n                this.domNodeSizeChanged.trigger(tx);\n            });\n        });\n        o.observe(this._domNode);\n        this._register(toDisposable(() => o.disconnect()));\n        this._register(autorun(reader => {\n            /** @description update scroll decoration */\n            scrollDecoration.className = this.isScrollTopZero.read(reader) ? '' : 'scroll-decoration';\n        }));\n        this._register(autorun(reader => /** @description EditorGutter.Render */ this.render(reader)));\n    }\n    dispose() {\n        super.dispose();\n        reset(this._domNode);\n    }\n    render(reader) {\n        if (!this.modelAttached.read(reader)) {\n            return;\n        }\n        this.domNodeSizeChanged.read(reader);\n        this.editorOnDidChangeViewZones.read(reader);\n        this.editorOnDidContentSizeChange.read(reader);\n        const scrollTop = this.scrollTop.read(reader);\n        const visibleRanges = this._editor.getVisibleRanges();\n        const unusedIds = new Set(this.views.keys());\n        const viewRange = OffsetRange.ofStartAndLength(0, this._domNode.clientHeight);\n        if (!viewRange.isEmpty) {\n            for (const visibleRange of visibleRanges) {\n                const visibleRange2 = new LineRange(visibleRange.startLineNumber, visibleRange.endLineNumber + 1);\n                const gutterItems = this.itemProvider.getIntersectingGutterItems(visibleRange2, reader);\n                transaction(tx => {\n                    /** EditorGutter.render */\n                    for (const gutterItem of gutterItems) {\n                        if (!gutterItem.range.intersect(visibleRange2)) {\n                            continue;\n                        }\n                        unusedIds.delete(gutterItem.id);\n                        let view = this.views.get(gutterItem.id);\n                        if (!view) {\n                            const viewDomNode = document.createElement('div');\n                            this._domNode.appendChild(viewDomNode);\n                            const gutterItemObs = observableValue('item', gutterItem);\n                            const itemView = this.itemProvider.createView(gutterItemObs, viewDomNode);\n                            view = new ManagedGutterItemView(gutterItemObs, itemView, viewDomNode);\n                            this.views.set(gutterItem.id, view);\n                        }\n                        else {\n                            view.item.set(gutterItem, tx);\n                        }\n                        const top = gutterItem.range.startLineNumber <= this._editor.getModel().getLineCount()\n                            ? this._editor.getTopForLineNumber(gutterItem.range.startLineNumber, true) - scrollTop\n                            : this._editor.getBottomForLineNumber(gutterItem.range.startLineNumber - 1, false) - scrollTop;\n                        const bottom = gutterItem.range.endLineNumberExclusive === 1 ?\n                            Math.max(top, this._editor.getTopForLineNumber(gutterItem.range.startLineNumber, false) - scrollTop)\n                            : Math.max(top, this._editor.getBottomForLineNumber(gutterItem.range.endLineNumberExclusive - 1, true) - scrollTop);\n                        const height = bottom - top;\n                        view.domNode.style.top = `${top}px`;\n                        view.domNode.style.height = `${height}px`;\n                        view.gutterItemView.layout(OffsetRange.ofStartAndLength(top, height), viewRange);\n                    }\n                });\n            }\n        }\n        for (const id of unusedIds) {\n            const view = this.views.get(id);\n            view.gutterItemView.dispose();\n            view.domNode.remove();\n            this.views.delete(id);\n        }\n    }\n}\nclass ManagedGutterItemView {\n    constructor(item, gutterItemView, domNode) {\n        this.item = item;\n        this.gutterItemView = gutterItemView;\n        this.domNode = 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 *--------------------------------------------------------------------------------------------*/\nimport { ActionRunner } from '../../../../base/common/actions.js';\nexport class ActionRunnerWithContext extends ActionRunner {\n    constructor(_getContext) {\n        super();\n        this._getContext = _getContext;\n    }\n    runAction(action, _context) {\n        const ctx = this._getContext();\n        return super.runAction(action, ctx);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { AbstractText } from '../core/textEdit.js';\nimport { TextLength } from '../core/textLength.js';\nexport class TextModelText extends AbstractText {\n    constructor(_textModel) {\n        super();\n        this._textModel = _textModel;\n    }\n    getValueOfRange(range) {\n        return this._textModel.getValueInRange(range);\n    }\n    get length() {\n        const lastLineNumber = this._textModel.getLineCount();\n        const lastLineLen = this._textModel.getLineLength(lastLineNumber);\n        return new TextLength(lastLineNumber - 1, lastLineLen);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 } from '../actionbar/actionbar.js';\nimport { DropdownMenuActionViewItem } from '../dropdown/dropdownActionViewItem.js';\nimport { Action, SubmenuAction } from '../../../common/actions.js';\nimport { Codicon } from '../../../common/codicons.js';\nimport { ThemeIcon } from '../../../common/themables.js';\nimport { EventMultiplexer } from '../../../common/event.js';\nimport { Disposable, DisposableStore } from '../../../common/lifecycle.js';\nimport './toolbar.css';\nimport * as nls from '../../../../nls.js';\nimport { createInstantHoverDelegate } from '../hover/hoverDelegateFactory.js';\n/**\n * A widget that combines an action bar for primary actions and a dropdown for secondary actions.\n */\nexport class ToolBar extends Disposable {\n    constructor(container, contextMenuProvider, options = { orientation: 0 /* ActionsOrientation.HORIZONTAL */ }) {\n        super();\n        this.submenuActionViewItems = [];\n        this.hasSecondaryActions = false;\n        this._onDidChangeDropdownVisibility = this._register(new EventMultiplexer());\n        this.onDidChangeDropdownVisibility = this._onDidChangeDropdownVisibility.event;\n        this.disposables = this._register(new DisposableStore());\n        options.hoverDelegate = options.hoverDelegate ?? this._register(createInstantHoverDelegate());\n        this.options = options;\n        this.toggleMenuAction = this._register(new ToggleMenuAction(() => this.toggleMenuActionViewItem?.show(), options.toggleMenuTitle));\n        this.element = document.createElement('div');\n        this.element.className = 'monaco-toolbar';\n        container.appendChild(this.element);\n        this.actionBar = this._register(new ActionBar(this.element, {\n            orientation: options.orientation,\n            ariaLabel: options.ariaLabel,\n            actionRunner: options.actionRunner,\n            allowContextMenu: options.allowContextMenu,\n            highlightToggledItems: options.highlightToggledItems,\n            hoverDelegate: options.hoverDelegate,\n            actionViewItemProvider: (action, viewItemOptions) => {\n                if (action.id === ToggleMenuAction.ID) {\n                    this.toggleMenuActionViewItem = new DropdownMenuActionViewItem(action, action.menuActions, contextMenuProvider, {\n                        actionViewItemProvider: this.options.actionViewItemProvider,\n                        actionRunner: this.actionRunner,\n                        keybindingProvider: this.options.getKeyBinding,\n                        classNames: ThemeIcon.asClassNameArray(options.moreIcon ?? Codicon.toolBarMore),\n                        anchorAlignmentProvider: this.options.anchorAlignmentProvider,\n                        menuAsChild: !!this.options.renderDropdownAsChildElement,\n                        skipTelemetry: this.options.skipTelemetry,\n                        isMenu: true,\n                        hoverDelegate: this.options.hoverDelegate\n                    });\n                    this.toggleMenuActionViewItem.setActionContext(this.actionBar.context);\n                    this.disposables.add(this._onDidChangeDropdownVisibility.add(this.toggleMenuActionViewItem.onDidChangeVisibility));\n                    return this.toggleMenuActionViewItem;\n                }\n                if (options.actionViewItemProvider) {\n                    const result = options.actionViewItemProvider(action, viewItemOptions);\n                    if (result) {\n                        return result;\n                    }\n                }\n                if (action instanceof SubmenuAction) {\n                    const result = new DropdownMenuActionViewItem(action, action.actions, contextMenuProvider, {\n                        actionViewItemProvider: this.options.actionViewItemProvider,\n                        actionRunner: this.actionRunner,\n                        keybindingProvider: this.options.getKeyBinding,\n                        classNames: action.class,\n                        anchorAlignmentProvider: this.options.anchorAlignmentProvider,\n                        menuAsChild: !!this.options.renderDropdownAsChildElement,\n                        skipTelemetry: this.options.skipTelemetry,\n                        hoverDelegate: this.options.hoverDelegate\n                    });\n                    result.setActionContext(this.actionBar.context);\n                    this.submenuActionViewItems.push(result);\n                    this.disposables.add(this._onDidChangeDropdownVisibility.add(result.onDidChangeVisibility));\n                    return result;\n                }\n                return undefined;\n            }\n        }));\n    }\n    set actionRunner(actionRunner) {\n        this.actionBar.actionRunner = actionRunner;\n    }\n    get actionRunner() {\n        return this.actionBar.actionRunner;\n    }\n    getElement() {\n        return this.element;\n    }\n    getItemAction(indexOrElement) {\n        return this.actionBar.getAction(indexOrElement);\n    }\n    setActions(primaryActions, secondaryActions) {\n        this.clear();\n        const primaryActionsToSet = primaryActions ? primaryActions.slice(0) : [];\n        // Inject additional action to open secondary actions if present\n        this.hasSecondaryActions = !!(secondaryActions && secondaryActions.length > 0);\n        if (this.hasSecondaryActions && secondaryActions) {\n            this.toggleMenuAction.menuActions = secondaryActions.slice(0);\n            primaryActionsToSet.push(this.toggleMenuAction);\n        }\n        primaryActionsToSet.forEach(action => {\n            this.actionBar.push(action, { icon: this.options.icon ?? true, label: this.options.label ?? false, keybinding: this.getKeybindingLabel(action) });\n        });\n    }\n    getKeybindingLabel(action) {\n        const key = this.options.getKeyBinding?.(action);\n        return key?.getLabel() ?? undefined;\n    }\n    clear() {\n        this.submenuActionViewItems = [];\n        this.disposables.clear();\n        this.actionBar.clear();\n    }\n    dispose() {\n        this.clear();\n        this.disposables.dispose();\n        super.dispose();\n    }\n}\nexport class ToggleMenuAction extends Action {\n    static { this.ID = 'toolbar.toggle.more'; }\n    constructor(toggleDropdownMenu, title) {\n        title = title || nls.localize('moreActions', \"More Actions...\");\n        super(ToggleMenuAction.ID, title, undefined, true);\n        this._menuActions = [];\n        this.toggleDropdownMenu = toggleDropdownMenu;\n    }\n    async run() {\n        this.toggleDropdownMenu();\n    }\n    get menuActions() {\n        return this._menuActions;\n    }\n    set menuActions(actions) {\n        this._menuActions = actions;\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 { addDisposableListener, getWindow } from '../../../base/browser/dom.js';\nimport { StandardMouseEvent } from '../../../base/browser/mouseEvent.js';\nimport { ToggleMenuAction, ToolBar } from '../../../base/browser/ui/toolbar/toolbar.js';\nimport { Separator, toAction } from '../../../base/common/actions.js';\nimport { coalesceInPlace } from '../../../base/common/arrays.js';\nimport { intersection } from '../../../base/common/collections.js';\nimport { BugIndicatingError } from '../../../base/common/errors.js';\nimport { Emitter } from '../../../base/common/event.js';\nimport { Iterable } from '../../../base/common/iterator.js';\nimport { DisposableStore } from '../../../base/common/lifecycle.js';\nimport { localize } from '../../../nls.js';\nimport { createAndFillInActionBarActions } from './menuEntryActionViewItem.js';\nimport { IMenuService, MenuItemAction, SubmenuItemAction } from '../common/actions.js';\nimport { createConfigureKeybindingAction } from '../common/menuService.js';\nimport { ICommandService } from '../../commands/common/commands.js';\nimport { IContextKeyService } from '../../contextkey/common/contextkey.js';\nimport { IContextMenuService } from '../../contextview/browser/contextView.js';\nimport { IKeybindingService } from '../../keybinding/common/keybinding.js';\nimport { ITelemetryService } from '../../telemetry/common/telemetry.js';\n/**\n * The `WorkbenchToolBar` does\n * - support hiding of menu items\n * - lookup keybindings for each actions automatically\n * - send `workbenchActionExecuted`-events for each action\n *\n * See {@link MenuWorkbenchToolBar} for a toolbar that is backed by a menu.\n */\nlet WorkbenchToolBar = class WorkbenchToolBar extends ToolBar {\n    constructor(container, _options, _menuService, _contextKeyService, _contextMenuService, _keybindingService, _commandService, telemetryService) {\n        super(container, _contextMenuService, {\n            // defaults\n            getKeyBinding: (action) => _keybindingService.lookupKeybinding(action.id) ?? undefined,\n            // options (override defaults)\n            ..._options,\n            // mandatory (overide options)\n            allowContextMenu: true,\n            skipTelemetry: typeof _options?.telemetrySource === 'string',\n        });\n        this._options = _options;\n        this._menuService = _menuService;\n        this._contextKeyService = _contextKeyService;\n        this._contextMenuService = _contextMenuService;\n        this._keybindingService = _keybindingService;\n        this._commandService = _commandService;\n        this._sessionDisposables = this._store.add(new DisposableStore());\n        // telemetry logic\n        const telemetrySource = _options?.telemetrySource;\n        if (telemetrySource) {\n            this._store.add(this.actionBar.onDidRun(e => telemetryService.publicLog2('workbenchActionExecuted', { id: e.action.id, from: telemetrySource })));\n        }\n    }\n    setActions(_primary, _secondary = [], menuIds) {\n        this._sessionDisposables.clear();\n        const primary = _primary.slice(); // for hiding and overflow we set some items to undefined\n        const secondary = _secondary.slice();\n        const toggleActions = [];\n        let toggleActionsCheckedCount = 0;\n        const extraSecondary = [];\n        let someAreHidden = false;\n        // unless disabled, move all hidden items to secondary group or ignore them\n        if (this._options?.hiddenItemStrategy !== -1 /* HiddenItemStrategy.NoHide */) {\n            for (let i = 0; i < primary.length; i++) {\n                const action = primary[i];\n                if (!(action instanceof MenuItemAction) && !(action instanceof SubmenuItemAction)) {\n                    // console.warn(`Action ${action.id}/${action.label} is not a MenuItemAction`);\n                    continue;\n                }\n                if (!action.hideActions) {\n                    continue;\n                }\n                // collect all toggle actions\n                toggleActions.push(action.hideActions.toggle);\n                if (action.hideActions.toggle.checked) {\n                    toggleActionsCheckedCount++;\n                }\n                // hidden items move into overflow or ignore\n                if (action.hideActions.isHidden) {\n                    someAreHidden = true;\n                    primary[i] = undefined;\n                    if (this._options?.hiddenItemStrategy !== 0 /* HiddenItemStrategy.Ignore */) {\n                        extraSecondary[i] = action;\n                    }\n                }\n            }\n        }\n        // count for max\n        if (this._options?.overflowBehavior !== undefined) {\n            const exemptedIds = intersection(new Set(this._options.overflowBehavior.exempted), Iterable.map(primary, a => a?.id));\n            const maxItems = this._options.overflowBehavior.maxItems - exemptedIds.size;\n            let count = 0;\n            for (let i = 0; i < primary.length; i++) {\n                const action = primary[i];\n                if (!action) {\n                    continue;\n                }\n                count++;\n                if (exemptedIds.has(action.id)) {\n                    continue;\n                }\n                if (count >= maxItems) {\n                    primary[i] = undefined;\n                    extraSecondary[i] = action;\n                }\n            }\n        }\n        // coalesce turns Array<IAction|undefined> into IAction[]\n        coalesceInPlace(primary);\n        coalesceInPlace(extraSecondary);\n        super.setActions(primary, Separator.join(extraSecondary, secondary));\n        // add context menu for toggle and configure keybinding actions\n        if (toggleActions.length > 0 || primary.length > 0) {\n            this._sessionDisposables.add(addDisposableListener(this.getElement(), 'contextmenu', e => {\n                const event = new StandardMouseEvent(getWindow(this.getElement()), e);\n                const action = this.getItemAction(event.target);\n                if (!(action)) {\n                    return;\n                }\n                event.preventDefault();\n                event.stopPropagation();\n                const primaryActions = [];\n                // -- Configure Keybinding Action --\n                if (action instanceof MenuItemAction && action.menuKeybinding) {\n                    primaryActions.push(action.menuKeybinding);\n                }\n                else if (!(action instanceof SubmenuItemAction || action instanceof ToggleMenuAction)) {\n                    // only enable the configure keybinding action for actions that support keybindings\n                    const supportsKeybindings = !!this._keybindingService.lookupKeybinding(action.id);\n                    primaryActions.push(createConfigureKeybindingAction(this._commandService, this._keybindingService, action.id, undefined, supportsKeybindings));\n                }\n                // -- Hide Actions --\n                if (toggleActions.length > 0) {\n                    let noHide = false;\n                    // last item cannot be hidden when using ignore strategy\n                    if (toggleActionsCheckedCount === 1 && this._options?.hiddenItemStrategy === 0 /* HiddenItemStrategy.Ignore */) {\n                        noHide = true;\n                        for (let i = 0; i < toggleActions.length; i++) {\n                            if (toggleActions[i].checked) {\n                                toggleActions[i] = toAction({\n                                    id: action.id,\n                                    label: action.label,\n                                    checked: true,\n                                    enabled: false,\n                                    run() { }\n                                });\n                                break; // there is only one\n                            }\n                        }\n                    }\n                    // add \"hide foo\" actions\n                    if (!noHide && (action instanceof MenuItemAction || action instanceof SubmenuItemAction)) {\n                        if (!action.hideActions) {\n                            // no context menu for MenuItemAction instances that support no hiding\n                            // those are fake actions and need to be cleaned up\n                            return;\n                        }\n                        primaryActions.push(action.hideActions.hide);\n                    }\n                    else {\n                        primaryActions.push(toAction({\n                            id: 'label',\n                            label: localize('hide', \"Hide\"),\n                            enabled: false,\n                            run() { }\n                        }));\n                    }\n                }\n                const actions = Separator.join(primaryActions, toggleActions);\n                // add \"Reset Menu\" action\n                if (this._options?.resetMenu && !menuIds) {\n                    menuIds = [this._options.resetMenu];\n                }\n                if (someAreHidden && menuIds) {\n                    actions.push(new Separator());\n                    actions.push(toAction({\n                        id: 'resetThisMenu',\n                        label: localize('resetThisMenu', \"Reset Menu\"),\n                        run: () => this._menuService.resetHiddenStates(menuIds)\n                    }));\n                }\n                if (actions.length === 0) {\n                    return;\n                }\n                this._contextMenuService.showContextMenu({\n                    getAnchor: () => event,\n                    getActions: () => actions,\n                    // add context menu actions (iff appicable)\n                    menuId: this._options?.contextMenu,\n                    menuActionOptions: { renderShortTitle: true, ...this._options?.menuOptions },\n                    skipTelemetry: typeof this._options?.telemetrySource === 'string',\n                    contextKeyService: this._contextKeyService,\n                });\n            }));\n        }\n    }\n};\nWorkbenchToolBar = __decorate([\n    __param(2, IMenuService),\n    __param(3, IContextKeyService),\n    __param(4, IContextMenuService),\n    __param(5, IKeybindingService),\n    __param(6, ICommandService),\n    __param(7, ITelemetryService)\n], WorkbenchToolBar);\nexport { WorkbenchToolBar };\n/**\n * A {@link WorkbenchToolBar workbench toolbar} that is purely driven from a {@link MenuId menu}-identifier.\n *\n * *Note* that Manual updates via `setActions` are NOT supported.\n */\nlet MenuWorkbenchToolBar = class MenuWorkbenchToolBar extends WorkbenchToolBar {\n    constructor(container, menuId, options, menuService, contextKeyService, contextMenuService, keybindingService, commandService, telemetryService) {\n        super(container, { resetMenu: menuId, ...options }, menuService, contextKeyService, contextMenuService, keybindingService, commandService, telemetryService);\n        this._onDidChangeMenuItems = this._store.add(new Emitter());\n        this.onDidChangeMenuItems = this._onDidChangeMenuItems.event;\n        // update logic\n        const menu = this._store.add(menuService.createMenu(menuId, contextKeyService, { emitEventsForSubmenuChanges: true }));\n        const updateToolbar = () => {\n            const primary = [];\n            const secondary = [];\n            createAndFillInActionBarActions(menu, options?.menuOptions, { primary, secondary }, options?.toolbarOptions?.primaryGroup, options?.toolbarOptions?.shouldInlineSubmenu, options?.toolbarOptions?.useSeparatorsInPrimaryActions);\n            container.classList.toggle('has-no-actions', primary.length === 0 && secondary.length === 0);\n            super.setActions(primary, secondary);\n        };\n        this._store.add(menu.onDidChange(() => {\n            updateToolbar();\n            this._onDidChangeMenuItems.fire(this);\n        }));\n        updateToolbar();\n    }\n    /**\n     * @deprecated The WorkbenchToolBar does not support this method because it works with menus.\n     */\n    setActions() {\n        throw new BugIndicatingError('This toolbar is populated from a menu.');\n    }\n};\nMenuWorkbenchToolBar = __decorate([\n    __param(3, IMenuService),\n    __param(4, IContextKeyService),\n    __param(5, IContextMenuService),\n    __param(6, IKeybindingService),\n    __param(7, ICommandService),\n    __param(8, ITelemetryService)\n], MenuWorkbenchToolBar);\nexport { MenuWorkbenchToolBar };\n","/*---------------------------------------------------------------------------------------------\n *  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 { EventType, addDisposableListener, h } from '../../../../../base/browser/dom.js';\nimport { Disposable } from '../../../../../base/common/lifecycle.js';\nimport { autorun, autorunWithStore, derived, observableFromEvent, observableValue } from '../../../../../base/common/observable.js';\nimport { derivedDisposable, derivedWithSetter } from '../../../../../base/common/observableInternal/derived.js';\nimport { DiffEditorSash } from '../components/diffEditorSash.js';\nimport { appendRemoveOnDispose, applyStyle, prependRemoveOnDispose } from '../utils.js';\nimport { EditorGutter } from '../utils/editorGutter.js';\nimport { ActionRunnerWithContext } from '../../multiDiffEditor/utils.js';\nimport { LineRange, LineRangeSet } from '../../../../common/core/lineRange.js';\nimport { OffsetRange } from '../../../../common/core/offsetRange.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { TextEdit } from '../../../../common/core/textEdit.js';\nimport { DetailedLineRangeMapping } from '../../../../common/diff/rangeMapping.js';\nimport { TextModelText } from '../../../../common/model/textModelText.js';\nimport { MenuWorkbenchToolBar } from '../../../../../platform/actions/browser/toolbar.js';\nimport { IMenuService, MenuId } from '../../../../../platform/actions/common/actions.js';\nimport { IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js';\nimport { WorkbenchHoverDelegate } from '../../../../../platform/hover/browser/hover.js';\nimport { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';\nconst emptyArr = [];\nconst width = 35;\nlet DiffEditorGutter = class DiffEditorGutter extends Disposable {\n    constructor(diffEditorRoot, _diffModel, _editors, _options, _sashLayout, _boundarySashes, _instantiationService, _contextKeyService, _menuService) {\n        super();\n        this._diffModel = _diffModel;\n        this._editors = _editors;\n        this._options = _options;\n        this._sashLayout = _sashLayout;\n        this._boundarySashes = _boundarySashes;\n        this._instantiationService = _instantiationService;\n        this._contextKeyService = _contextKeyService;\n        this._menuService = _menuService;\n        this._menu = this._register(this._menuService.createMenu(MenuId.DiffEditorHunkToolbar, this._contextKeyService));\n        this._actions = observableFromEvent(this, this._menu.onDidChange, () => this._menu.getActions());\n        this._hasActions = this._actions.map(a => a.length > 0);\n        this._showSash = derived(this, reader => this._options.renderSideBySide.read(reader) && this._hasActions.read(reader));\n        this.width = derived(this, reader => this._hasActions.read(reader) ? width : 0);\n        this.elements = h('div.gutter@gutter', { style: { position: 'absolute', height: '100%', width: width + 'px' } }, []);\n        this._currentDiff = derived(this, (reader) => {\n            const model = this._diffModel.read(reader);\n            if (!model) {\n                return undefined;\n            }\n            const mappings = model.diff.read(reader)?.mappings;\n            const cursorPosition = this._editors.modifiedCursor.read(reader);\n            if (!cursorPosition) {\n                return undefined;\n            }\n            return mappings?.find(m => m.lineRangeMapping.modified.contains(cursorPosition.lineNumber));\n        });\n        this._selectedDiffs = derived(this, (reader) => {\n            /** @description selectedDiffs */\n            const model = this._diffModel.read(reader);\n            const diff = model?.diff.read(reader);\n            // Return `emptyArr` because it is a constant. [] is always a new array and would trigger a change.\n            if (!diff) {\n                return emptyArr;\n            }\n            const selections = this._editors.modifiedSelections.read(reader);\n            if (selections.every(s => s.isEmpty())) {\n                return emptyArr;\n            }\n            const selectedLineNumbers = new LineRangeSet(selections.map(s => LineRange.fromRangeInclusive(s)));\n            const selectedMappings = diff.mappings.filter(m => m.lineRangeMapping.innerChanges && selectedLineNumbers.intersects(m.lineRangeMapping.modified));\n            const result = selectedMappings.map(mapping => ({\n                mapping,\n                rangeMappings: mapping.lineRangeMapping.innerChanges.filter(c => selections.some(s => Range.areIntersecting(c.modifiedRange, s)))\n            }));\n            if (result.length === 0 || result.every(r => r.rangeMappings.length === 0)) {\n                return emptyArr;\n            }\n            return result;\n        });\n        this._register(prependRemoveOnDispose(diffEditorRoot, this.elements.root));\n        this._register(addDisposableListener(this.elements.root, 'click', () => {\n            this._editors.modified.focus();\n        }));\n        this._register(applyStyle(this.elements.root, { display: this._hasActions.map(a => a ? 'block' : 'none') }));\n        derivedDisposable(this, reader => {\n            const showSash = this._showSash.read(reader);\n            return !showSash ? undefined : new DiffEditorSash(diffEditorRoot, this._sashLayout.dimensions, this._options.enableSplitViewResizing, this._boundarySashes, derivedWithSetter(this, reader => this._sashLayout.sashLeft.read(reader) - width, (v, tx) => this._sashLayout.sashLeft.set(v + width, tx)), () => this._sashLayout.resetSash());\n        }).recomputeInitiallyAndOnChange(this._store);\n        this._register(new EditorGutter(this._editors.modified, this.elements.root, {\n            getIntersectingGutterItems: (range, reader) => {\n                const model = this._diffModel.read(reader);\n                if (!model) {\n                    return [];\n                }\n                const diffs = model.diff.read(reader);\n                if (!diffs) {\n                    return [];\n                }\n                const selection = this._selectedDiffs.read(reader);\n                if (selection.length > 0) {\n                    const m = DetailedLineRangeMapping.fromRangeMappings(selection.flatMap(s => s.rangeMappings));\n                    return [\n                        new DiffGutterItem(m, true, MenuId.DiffEditorSelectionToolbar, undefined, model.model.original.uri, model.model.modified.uri)\n                    ];\n                }\n                const currentDiff = this._currentDiff.read(reader);\n                return diffs.mappings.map(m => new DiffGutterItem(m.lineRangeMapping.withInnerChangesFromLineRanges(), m.lineRangeMapping === currentDiff?.lineRangeMapping, MenuId.DiffEditorHunkToolbar, undefined, model.model.original.uri, model.model.modified.uri));\n            },\n            createView: (item, target) => {\n                return this._instantiationService.createInstance(DiffToolBar, item, target, this);\n            },\n        }));\n        this._register(addDisposableListener(this.elements.gutter, EventType.MOUSE_WHEEL, (e) => {\n            if (this._editors.modified.getOption(104 /* EditorOption.scrollbar */).handleMouseWheel) {\n                this._editors.modified.delegateScrollFromMouseWheelEvent(e);\n            }\n        }, { passive: false }));\n    }\n    computeStagedValue(mapping) {\n        const c = mapping.innerChanges ?? [];\n        const modified = new TextModelText(this._editors.modifiedModel.get());\n        const original = new TextModelText(this._editors.original.getModel());\n        const edit = new TextEdit(c.map(c => c.toTextEdit(modified)));\n        const value = edit.apply(original);\n        return value;\n    }\n    layout(left) {\n        this.elements.gutter.style.left = left + 'px';\n    }\n};\nDiffEditorGutter = __decorate([\n    __param(6, IInstantiationService),\n    __param(7, IContextKeyService),\n    __param(8, IMenuService)\n], DiffEditorGutter);\nexport { DiffEditorGutter };\nclass DiffGutterItem {\n    constructor(mapping, showAlways, menuId, rangeOverride, originalUri, modifiedUri) {\n        this.mapping = mapping;\n        this.showAlways = showAlways;\n        this.menuId = menuId;\n        this.rangeOverride = rangeOverride;\n        this.originalUri = originalUri;\n        this.modifiedUri = modifiedUri;\n    }\n    get id() { return this.mapping.modified.toString(); }\n    get range() { return this.rangeOverride ?? this.mapping.modified; }\n}\nlet DiffToolBar = class DiffToolBar extends Disposable {\n    constructor(_item, target, gutter, instantiationService) {\n        super();\n        this._item = _item;\n        this._elements = h('div.gutterItem', { style: { height: '20px', width: '34px' } }, [\n            h('div.background@background', {}, []),\n            h('div.buttons@buttons', {}, []),\n        ]);\n        this._showAlways = this._item.map(this, item => item.showAlways);\n        this._menuId = this._item.map(this, item => item.menuId);\n        this._isSmall = observableValue(this, false);\n        this._lastItemRange = undefined;\n        this._lastViewRange = undefined;\n        const hoverDelegate = this._register(instantiationService.createInstance(WorkbenchHoverDelegate, 'element', true, { position: { hoverPosition: 1 /* HoverPosition.RIGHT */ } }));\n        this._register(appendRemoveOnDispose(target, this._elements.root));\n        this._register(autorun(reader => {\n            /** @description update showAlways */\n            const showAlways = this._showAlways.read(reader);\n            this._elements.root.classList.toggle('noTransition', true);\n            this._elements.root.classList.toggle('showAlways', showAlways);\n            setTimeout(() => {\n                this._elements.root.classList.toggle('noTransition', false);\n            }, 0);\n        }));\n        this._register(autorunWithStore((reader, store) => {\n            this._elements.buttons.replaceChildren();\n            const i = store.add(instantiationService.createInstance(MenuWorkbenchToolBar, this._elements.buttons, this._menuId.read(reader), {\n                orientation: 1 /* ActionsOrientation.VERTICAL */,\n                hoverDelegate,\n                toolbarOptions: {\n                    primaryGroup: g => g.startsWith('primary'),\n                },\n                overflowBehavior: { maxItems: this._isSmall.read(reader) ? 1 : 3 },\n                hiddenItemStrategy: 0 /* HiddenItemStrategy.Ignore */,\n                actionRunner: new ActionRunnerWithContext(() => {\n                    const item = this._item.get();\n                    const mapping = item.mapping;\n                    return {\n                        mapping,\n                        originalWithModifiedChanges: gutter.computeStagedValue(mapping),\n                        originalUri: item.originalUri,\n                        modifiedUri: item.modifiedUri,\n                    };\n                }),\n                menuOptions: {\n                    shouldForwardArgs: true,\n                },\n            }));\n            store.add(i.onDidChangeMenuItems(() => {\n                if (this._lastItemRange) {\n                    this.layout(this._lastItemRange, this._lastViewRange);\n                }\n            }));\n        }));\n    }\n    layout(itemRange, viewRange) {\n        this._lastItemRange = itemRange;\n        this._lastViewRange = viewRange;\n        let itemHeight = this._elements.buttons.clientHeight;\n        this._isSmall.set(this._item.get().mapping.original.startLineNumber === 1 && itemRange.length < 30, undefined);\n        // Item might have changed\n        itemHeight = this._elements.buttons.clientHeight;\n        const middleHeight = itemRange.length / 2 - itemHeight / 2;\n        const margin = itemHeight;\n        let effectiveCheckboxTop = itemRange.start + middleHeight;\n        const preferredViewPortRange = OffsetRange.tryCreate(margin, viewRange.endExclusive - margin - itemHeight);\n        const preferredParentRange = OffsetRange.tryCreate(itemRange.start + margin, itemRange.endExclusive - itemHeight - margin);\n        if (preferredParentRange && preferredViewPortRange && preferredParentRange.start < preferredParentRange.endExclusive) {\n            effectiveCheckboxTop = preferredViewPortRange.clip(effectiveCheckboxTop);\n            effectiveCheckboxTop = preferredParentRange.clip(effectiveCheckboxTop);\n        }\n        this._elements.buttons.style.top = `${effectiveCheckboxTop - itemRange.start}px`;\n    }\n};\nDiffToolBar = __decorate([\n    __param(3, IInstantiationService)\n], DiffToolBar);\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { equalsIfDefined, itemsEquals } from '../../base/common/equals.js';\nimport { Disposable, DisposableStore, toDisposable } from '../../base/common/lifecycle.js';\nimport { autorun, autorunOpts, autorunWithStoreHandleChanges, derived, derivedOpts, observableFromEvent, observableSignal, observableValue, observableValueOpts } from '../../base/common/observable.js';\nimport { TransactionImpl } from '../../base/common/observableInternal/base.js';\nimport { derivedWithSetter } from '../../base/common/observableInternal/derived.js';\nimport { Selection } from '../common/core/selection.js';\n/**\n * Returns a facade for the code editor that provides observables for various states/events.\n*/\nexport function observableCodeEditor(editor) {\n    return ObservableCodeEditor.get(editor);\n}\nexport class ObservableCodeEditor extends Disposable {\n    static { this._map = new Map(); }\n    /**\n     * Make sure that editor is not disposed yet!\n    */\n    static get(editor) {\n        let result = ObservableCodeEditor._map.get(editor);\n        if (!result) {\n            result = new ObservableCodeEditor(editor);\n            ObservableCodeEditor._map.set(editor, result);\n            const d = editor.onDidDispose(() => {\n                const item = ObservableCodeEditor._map.get(editor);\n                if (item) {\n                    ObservableCodeEditor._map.delete(editor);\n                    item.dispose();\n                    d.dispose();\n                }\n            });\n        }\n        return result;\n    }\n    _beginUpdate() {\n        this._updateCounter++;\n        if (this._updateCounter === 1) {\n            this._currentTransaction = new TransactionImpl(() => {\n                /** @description Update editor state */\n            });\n        }\n    }\n    _endUpdate() {\n        this._updateCounter--;\n        if (this._updateCounter === 0) {\n            const t = this._currentTransaction;\n            this._currentTransaction = undefined;\n            t.finish();\n        }\n    }\n    constructor(editor) {\n        super();\n        this.editor = editor;\n        this._updateCounter = 0;\n        this._currentTransaction = undefined;\n        this._model = observableValue(this, this.editor.getModel());\n        this.model = this._model;\n        this.isReadonly = observableFromEvent(this, this.editor.onDidChangeConfiguration, () => this.editor.getOption(92 /* EditorOption.readOnly */));\n        this._versionId = observableValueOpts({ owner: this, lazy: true }, this.editor.getModel()?.getVersionId() ?? null);\n        this.versionId = this._versionId;\n        this._selections = observableValueOpts({ owner: this, equalsFn: equalsIfDefined(itemsEquals(Selection.selectionsEqual)), lazy: true }, this.editor.getSelections() ?? null);\n        this.selections = this._selections;\n        this.isFocused = observableFromEvent(this, e => {\n            const d1 = this.editor.onDidFocusEditorWidget(e);\n            const d2 = this.editor.onDidBlurEditorWidget(e);\n            return {\n                dispose() {\n                    d1.dispose();\n                    d2.dispose();\n                }\n            };\n        }, () => this.editor.hasWidgetFocus());\n        this.value = derivedWithSetter(this, reader => { this.versionId.read(reader); return this.model.read(reader)?.getValue() ?? ''; }, (value, tx) => {\n            const model = this.model.get();\n            if (model !== null) {\n                if (value !== model.getValue()) {\n                    model.setValue(value);\n                }\n            }\n        });\n        this.valueIsEmpty = derived(this, reader => { this.versionId.read(reader); return this.editor.getModel()?.getValueLength() === 0; });\n        this.cursorSelection = derivedOpts({ owner: this, equalsFn: equalsIfDefined(Selection.selectionsEqual) }, reader => this.selections.read(reader)?.[0] ?? null);\n        this.onDidType = observableSignal(this);\n        this.scrollTop = observableFromEvent(this.editor.onDidScrollChange, () => this.editor.getScrollTop());\n        this.scrollLeft = observableFromEvent(this.editor.onDidScrollChange, () => this.editor.getScrollLeft());\n        this.layoutInfo = observableFromEvent(this.editor.onDidLayoutChange, () => this.editor.getLayoutInfo());\n        this.layoutInfoContentLeft = this.layoutInfo.map(l => l.contentLeft);\n        this.layoutInfoDecorationsLeft = this.layoutInfo.map(l => l.decorationsLeft);\n        this.contentWidth = observableFromEvent(this.editor.onDidContentSizeChange, () => this.editor.getContentWidth());\n        this._overlayWidgetCounter = 0;\n        this._register(this.editor.onBeginUpdate(() => this._beginUpdate()));\n        this._register(this.editor.onEndUpdate(() => this._endUpdate()));\n        this._register(this.editor.onDidChangeModel(() => {\n            this._beginUpdate();\n            try {\n                this._model.set(this.editor.getModel(), this._currentTransaction);\n                this._forceUpdate();\n            }\n            finally {\n                this._endUpdate();\n            }\n        }));\n        this._register(this.editor.onDidType((e) => {\n            this._beginUpdate();\n            try {\n                this._forceUpdate();\n                this.onDidType.trigger(this._currentTransaction, e);\n            }\n            finally {\n                this._endUpdate();\n            }\n        }));\n        this._register(this.editor.onDidChangeModelContent(e => {\n            this._beginUpdate();\n            try {\n                this._versionId.set(this.editor.getModel()?.getVersionId() ?? null, this._currentTransaction, e);\n                this._forceUpdate();\n            }\n            finally {\n                this._endUpdate();\n            }\n        }));\n        this._register(this.editor.onDidChangeCursorSelection(e => {\n            this._beginUpdate();\n            try {\n                this._selections.set(this.editor.getSelections(), this._currentTransaction, e);\n                this._forceUpdate();\n            }\n            finally {\n                this._endUpdate();\n            }\n        }));\n    }\n    forceUpdate(cb) {\n        this._beginUpdate();\n        try {\n            this._forceUpdate();\n            if (!cb) {\n                return undefined;\n            }\n            return cb(this._currentTransaction);\n        }\n        finally {\n            this._endUpdate();\n        }\n    }\n    _forceUpdate() {\n        this._beginUpdate();\n        try {\n            this._model.set(this.editor.getModel(), this._currentTransaction);\n            this._versionId.set(this.editor.getModel()?.getVersionId() ?? null, this._currentTransaction, undefined);\n            this._selections.set(this.editor.getSelections(), this._currentTransaction, undefined);\n        }\n        finally {\n            this._endUpdate();\n        }\n    }\n    getOption(id) {\n        return observableFromEvent(this, cb => this.editor.onDidChangeConfiguration(e => {\n            if (e.hasChanged(id)) {\n                cb(undefined);\n            }\n        }), () => this.editor.getOption(id));\n    }\n    setDecorations(decorations) {\n        const d = new DisposableStore();\n        const decorationsCollection = this.editor.createDecorationsCollection();\n        d.add(autorunOpts({ owner: this, debugName: () => `Apply decorations from ${decorations.debugName}` }, reader => {\n            const d = decorations.read(reader);\n            decorationsCollection.set(d);\n        }));\n        d.add({\n            dispose: () => {\n                decorationsCollection.clear();\n            }\n        });\n        return d;\n    }\n    createOverlayWidget(widget) {\n        const overlayWidgetId = 'observableOverlayWidget' + (this._overlayWidgetCounter++);\n        const w = {\n            getDomNode: () => widget.domNode,\n            getPosition: () => widget.position.get(),\n            getId: () => overlayWidgetId,\n            allowEditorOverflow: widget.allowEditorOverflow,\n            getMinContentWidthInPx: () => widget.minContentWidthInPx.get(),\n        };\n        this.editor.addOverlayWidget(w);\n        const d = autorun(reader => {\n            widget.position.read(reader);\n            widget.minContentWidthInPx.read(reader);\n            this.editor.layoutOverlayWidget(w);\n        });\n        return toDisposable(() => {\n            d.dispose();\n            this.editor.removeOverlayWidget(w);\n        });\n    }\n}\nexport function reactToChange(observable, cb) {\n    return autorunWithStoreHandleChanges({\n        createEmptyChangeSummary: () => ({ deltas: [], didChange: false }),\n        handleChange: (context, changeSummary) => {\n            if (context.didChange(observable)) {\n                const e = context.change;\n                if (e !== undefined) {\n                    changeSummary.deltas.push(e);\n                }\n                changeSummary.didChange = true;\n            }\n            return true;\n        },\n    }, (reader, changeSummary) => {\n        const value = observable.read(reader);\n        if (changeSummary.didChange) {\n            cb(value, changeSummary.deltas);\n        }\n    });\n}\nexport function reactToChangeWithStore(observable, cb) {\n    const store = new DisposableStore();\n    const disposable = reactToChange(observable, (value, deltas) => {\n        store.clear();\n        cb(value, deltas, store);\n    });\n    return {\n        dispose() {\n            disposable.dispose();\n            store.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 *--------------------------------------------------------------------------------------------*/\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 HideUnchangedRegionsFeature_1;\nimport { $, addDisposableListener, getWindow, h, reset } from '../../../../../base/browser/dom.js';\nimport { renderIcon, renderLabelWithIcons } from '../../../../../base/browser/ui/iconLabel/iconLabels.js';\nimport { Codicon } from '../../../../../base/common/codicons.js';\nimport { MarkdownString } from '../../../../../base/common/htmlContent.js';\nimport { Disposable } from '../../../../../base/common/lifecycle.js';\nimport { autorun, derived, derivedWithStore, observableValue, transaction } from '../../../../../base/common/observable.js';\nimport { derivedDisposable } from '../../../../../base/common/observableInternal/derived.js';\nimport { ThemeIcon } from '../../../../../base/common/themables.js';\nimport { isDefined } from '../../../../../base/common/types.js';\nimport { observableCodeEditor } from '../../../observableCodeEditor.js';\nimport { PlaceholderViewZone, ViewZoneOverlayWidget, applyObservableDecorations, applyStyle } from '../utils.js';\nimport { LineRange } from '../../../../common/core/lineRange.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { SymbolKinds } from '../../../../common/languages.js';\nimport { localize } from '../../../../../nls.js';\nimport { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';\n/**\n * Make sure to add the view zones to the editor!\n */\nlet HideUnchangedRegionsFeature = class HideUnchangedRegionsFeature extends Disposable {\n    static { HideUnchangedRegionsFeature_1 = this; }\n    static { this._breadcrumbsSourceFactory = observableValue(HideUnchangedRegionsFeature_1, () => ({\n        dispose() {\n        },\n        getBreadcrumbItems(startRange, reader) {\n            return [];\n        },\n    })); }\n    static setBreadcrumbsSourceFactory(factory) {\n        this._breadcrumbsSourceFactory.set(factory, undefined);\n    }\n    get isUpdatingHiddenAreas() { return this._isUpdatingHiddenAreas; }\n    constructor(_editors, _diffModel, _options, _instantiationService) {\n        super();\n        this._editors = _editors;\n        this._diffModel = _diffModel;\n        this._options = _options;\n        this._instantiationService = _instantiationService;\n        this._modifiedOutlineSource = derivedDisposable(this, (reader) => {\n            const m = this._editors.modifiedModel.read(reader);\n            const factory = HideUnchangedRegionsFeature_1._breadcrumbsSourceFactory.read(reader);\n            return (!m || !factory) ? undefined : factory(m, this._instantiationService);\n        });\n        this._isUpdatingHiddenAreas = false;\n        this._register(this._editors.original.onDidChangeCursorPosition(e => {\n            if (e.reason === 1 /* CursorChangeReason.ContentFlush */) {\n                return;\n            }\n            const m = this._diffModel.get();\n            transaction(tx => {\n                for (const s of this._editors.original.getSelections() || []) {\n                    m?.ensureOriginalLineIsVisible(s.getStartPosition().lineNumber, 0 /* RevealPreference.FromCloserSide */, tx);\n                    m?.ensureOriginalLineIsVisible(s.getEndPosition().lineNumber, 0 /* RevealPreference.FromCloserSide */, tx);\n                }\n            });\n        }));\n        this._register(this._editors.modified.onDidChangeCursorPosition(e => {\n            if (e.reason === 1 /* CursorChangeReason.ContentFlush */) {\n                return;\n            }\n            const m = this._diffModel.get();\n            transaction(tx => {\n                for (const s of this._editors.modified.getSelections() || []) {\n                    m?.ensureModifiedLineIsVisible(s.getStartPosition().lineNumber, 0 /* RevealPreference.FromCloserSide */, tx);\n                    m?.ensureModifiedLineIsVisible(s.getEndPosition().lineNumber, 0 /* RevealPreference.FromCloserSide */, tx);\n                }\n            });\n        }));\n        const unchangedRegions = this._diffModel.map((m, reader) => {\n            const regions = m?.unchangedRegions.read(reader) ?? [];\n            if (regions.length === 1 && regions[0].modifiedLineNumber === 1 && regions[0].lineCount === this._editors.modifiedModel.read(reader)?.getLineCount()) {\n                return [];\n            }\n            return regions;\n        });\n        this.viewZones = derivedWithStore(this, (reader, store) => {\n            /** @description view Zones */\n            const modifiedOutlineSource = this._modifiedOutlineSource.read(reader);\n            if (!modifiedOutlineSource) {\n                return { origViewZones: [], modViewZones: [] };\n            }\n            const origViewZones = [];\n            const modViewZones = [];\n            const sideBySide = this._options.renderSideBySide.read(reader);\n            const compactMode = this._options.compactMode.read(reader);\n            const curUnchangedRegions = unchangedRegions.read(reader);\n            for (let i = 0; i < curUnchangedRegions.length; i++) {\n                const r = curUnchangedRegions[i];\n                if (r.shouldHideControls(reader)) {\n                    continue;\n                }\n                if (compactMode && (i === 0 || i === curUnchangedRegions.length - 1)) {\n                    continue;\n                }\n                if (compactMode) {\n                    {\n                        const d = derived(this, reader => /** @description hiddenOriginalRangeStart */ r.getHiddenOriginalRange(reader).startLineNumber - 1);\n                        const origVz = new PlaceholderViewZone(d, 12);\n                        origViewZones.push(origVz);\n                        store.add(new CompactCollapsedCodeOverlayWidget(this._editors.original, origVz, r, !sideBySide));\n                    }\n                    {\n                        const d = derived(this, reader => /** @description hiddenModifiedRangeStart */ r.getHiddenModifiedRange(reader).startLineNumber - 1);\n                        const modViewZone = new PlaceholderViewZone(d, 12);\n                        modViewZones.push(modViewZone);\n                        store.add(new CompactCollapsedCodeOverlayWidget(this._editors.modified, modViewZone, r));\n                    }\n                }\n                else {\n                    {\n                        const d = derived(this, reader => /** @description hiddenOriginalRangeStart */ r.getHiddenOriginalRange(reader).startLineNumber - 1);\n                        const origVz = new PlaceholderViewZone(d, 24);\n                        origViewZones.push(origVz);\n                        store.add(new CollapsedCodeOverlayWidget(this._editors.original, origVz, r, r.originalUnchangedRange, !sideBySide, modifiedOutlineSource, l => this._diffModel.get().ensureModifiedLineIsVisible(l, 2 /* RevealPreference.FromBottom */, undefined), this._options));\n                    }\n                    {\n                        const d = derived(this, reader => /** @description hiddenModifiedRangeStart */ r.getHiddenModifiedRange(reader).startLineNumber - 1);\n                        const modViewZone = new PlaceholderViewZone(d, 24);\n                        modViewZones.push(modViewZone);\n                        store.add(new CollapsedCodeOverlayWidget(this._editors.modified, modViewZone, r, r.modifiedUnchangedRange, false, modifiedOutlineSource, l => this._diffModel.get().ensureModifiedLineIsVisible(l, 2 /* RevealPreference.FromBottom */, undefined), this._options));\n                    }\n                }\n            }\n            return { origViewZones, modViewZones, };\n        });\n        const unchangedLinesDecoration = {\n            description: 'unchanged lines',\n            className: 'diff-unchanged-lines',\n            isWholeLine: true,\n        };\n        const unchangedLinesDecorationShow = {\n            description: 'Fold Unchanged',\n            glyphMarginHoverMessage: new MarkdownString(undefined, { isTrusted: true, supportThemeIcons: true })\n                .appendMarkdown(localize('foldUnchanged', 'Fold Unchanged Region')),\n            glyphMarginClassName: 'fold-unchanged ' + ThemeIcon.asClassName(Codicon.fold),\n            zIndex: 10001,\n        };\n        this._register(applyObservableDecorations(this._editors.original, derived(this, reader => {\n            /** @description decorations */\n            const curUnchangedRegions = unchangedRegions.read(reader);\n            const result = curUnchangedRegions.map(r => ({\n                range: r.originalUnchangedRange.toInclusiveRange(),\n                options: unchangedLinesDecoration,\n            }));\n            for (const r of curUnchangedRegions) {\n                if (r.shouldHideControls(reader)) {\n                    result.push({\n                        range: Range.fromPositions(new Position(r.originalLineNumber, 1)),\n                        options: unchangedLinesDecorationShow,\n                    });\n                }\n            }\n            return result;\n        })));\n        this._register(applyObservableDecorations(this._editors.modified, derived(this, reader => {\n            /** @description decorations */\n            const curUnchangedRegions = unchangedRegions.read(reader);\n            const result = curUnchangedRegions.map(r => ({\n                range: r.modifiedUnchangedRange.toInclusiveRange(),\n                options: unchangedLinesDecoration,\n            }));\n            for (const r of curUnchangedRegions) {\n                if (r.shouldHideControls(reader)) {\n                    result.push({\n                        range: LineRange.ofLength(r.modifiedLineNumber, 1).toInclusiveRange(),\n                        options: unchangedLinesDecorationShow,\n                    });\n                }\n            }\n            return result;\n        })));\n        this._register(autorun((reader) => {\n            /** @description update folded unchanged regions */\n            const curUnchangedRegions = unchangedRegions.read(reader);\n            this._isUpdatingHiddenAreas = true;\n            try {\n                this._editors.original.setHiddenAreas(curUnchangedRegions.map(r => r.getHiddenOriginalRange(reader).toInclusiveRange()).filter(isDefined));\n                this._editors.modified.setHiddenAreas(curUnchangedRegions.map(r => r.getHiddenModifiedRange(reader).toInclusiveRange()).filter(isDefined));\n            }\n            finally {\n                this._isUpdatingHiddenAreas = false;\n            }\n        }));\n        this._register(this._editors.modified.onMouseUp(event => {\n            if (!event.event.rightButton && event.target.position && event.target.element?.className.includes('fold-unchanged')) {\n                const lineNumber = event.target.position.lineNumber;\n                const model = this._diffModel.get();\n                if (!model) {\n                    return;\n                }\n                const region = model.unchangedRegions.get().find(r => r.modifiedUnchangedRange.includes(lineNumber));\n                if (!region) {\n                    return;\n                }\n                region.collapseAll(undefined);\n                event.event.stopPropagation();\n                event.event.preventDefault();\n            }\n        }));\n        this._register(this._editors.original.onMouseUp(event => {\n            if (!event.event.rightButton && event.target.position && event.target.element?.className.includes('fold-unchanged')) {\n                const lineNumber = event.target.position.lineNumber;\n                const model = this._diffModel.get();\n                if (!model) {\n                    return;\n                }\n                const region = model.unchangedRegions.get().find(r => r.originalUnchangedRange.includes(lineNumber));\n                if (!region) {\n                    return;\n                }\n                region.collapseAll(undefined);\n                event.event.stopPropagation();\n                event.event.preventDefault();\n            }\n        }));\n    }\n};\nHideUnchangedRegionsFeature = HideUnchangedRegionsFeature_1 = __decorate([\n    __param(3, IInstantiationService)\n], HideUnchangedRegionsFeature);\nexport { HideUnchangedRegionsFeature };\nclass CompactCollapsedCodeOverlayWidget extends ViewZoneOverlayWidget {\n    constructor(editor, _viewZone, _unchangedRegion, _hide = false) {\n        const root = h('div.diff-hidden-lines-widget');\n        super(editor, _viewZone, root.root);\n        this._unchangedRegion = _unchangedRegion;\n        this._hide = _hide;\n        this._nodes = h('div.diff-hidden-lines-compact', [\n            h('div.line-left', []),\n            h('div.text@text', []),\n            h('div.line-right', [])\n        ]);\n        root.root.appendChild(this._nodes.root);\n        if (this._hide) {\n            this._nodes.root.replaceChildren();\n        }\n        this._register(autorun(reader => {\n            /** @description update labels */\n            if (!this._hide) {\n                const lineCount = this._unchangedRegion.getHiddenModifiedRange(reader).length;\n                const linesHiddenText = localize('hiddenLines', '{0} hidden lines', lineCount);\n                this._nodes.text.innerText = linesHiddenText;\n            }\n        }));\n    }\n}\nclass CollapsedCodeOverlayWidget extends ViewZoneOverlayWidget {\n    constructor(_editor, _viewZone, _unchangedRegion, _unchangedRegionRange, _hide, _modifiedOutlineSource, _revealModifiedHiddenLine, _options) {\n        const root = h('div.diff-hidden-lines-widget');\n        super(_editor, _viewZone, root.root);\n        this._editor = _editor;\n        this._unchangedRegion = _unchangedRegion;\n        this._unchangedRegionRange = _unchangedRegionRange;\n        this._hide = _hide;\n        this._modifiedOutlineSource = _modifiedOutlineSource;\n        this._revealModifiedHiddenLine = _revealModifiedHiddenLine;\n        this._options = _options;\n        this._nodes = h('div.diff-hidden-lines', [\n            h('div.top@top', { title: localize('diff.hiddenLines.top', 'Click or drag to show more above') }),\n            h('div.center@content', { style: { display: 'flex' } }, [\n                h('div@first', { style: { display: 'flex', justifyContent: 'center', alignItems: 'center', flexShrink: '0' } }, [$('a', { title: localize('showUnchangedRegion', 'Show Unchanged Region'), role: 'button', onclick: () => { this._unchangedRegion.showAll(undefined); } }, ...renderLabelWithIcons('$(unfold)'))]),\n                h('div@others', { style: { display: 'flex', justifyContent: 'center', alignItems: 'center' } }),\n            ]),\n            h('div.bottom@bottom', { title: localize('diff.bottom', 'Click or drag to show more below'), role: 'button' }),\n        ]);\n        root.root.appendChild(this._nodes.root);\n        if (!this._hide) {\n            this._register(applyStyle(this._nodes.first, { width: observableCodeEditor(this._editor).layoutInfoContentLeft }));\n        }\n        else {\n            reset(this._nodes.first);\n        }\n        this._register(autorun(reader => {\n            /** @description Update CollapsedCodeOverlayWidget canMove* css classes */\n            const isFullyRevealed = this._unchangedRegion.visibleLineCountTop.read(reader) + this._unchangedRegion.visibleLineCountBottom.read(reader) === this._unchangedRegion.lineCount;\n            this._nodes.bottom.classList.toggle('canMoveTop', !isFullyRevealed);\n            this._nodes.bottom.classList.toggle('canMoveBottom', this._unchangedRegion.visibleLineCountBottom.read(reader) > 0);\n            this._nodes.top.classList.toggle('canMoveTop', this._unchangedRegion.visibleLineCountTop.read(reader) > 0);\n            this._nodes.top.classList.toggle('canMoveBottom', !isFullyRevealed);\n            const isDragged = this._unchangedRegion.isDragged.read(reader);\n            const domNode = this._editor.getDomNode();\n            if (domNode) {\n                domNode.classList.toggle('draggingUnchangedRegion', !!isDragged);\n                if (isDragged === 'top') {\n                    domNode.classList.toggle('canMoveTop', this._unchangedRegion.visibleLineCountTop.read(reader) > 0);\n                    domNode.classList.toggle('canMoveBottom', !isFullyRevealed);\n                }\n                else if (isDragged === 'bottom') {\n                    domNode.classList.toggle('canMoveTop', !isFullyRevealed);\n                    domNode.classList.toggle('canMoveBottom', this._unchangedRegion.visibleLineCountBottom.read(reader) > 0);\n                }\n                else {\n                    domNode.classList.toggle('canMoveTop', false);\n                    domNode.classList.toggle('canMoveBottom', false);\n                }\n            }\n        }));\n        const editor = this._editor;\n        this._register(addDisposableListener(this._nodes.top, 'mousedown', e => {\n            if (e.button !== 0) {\n                return;\n            }\n            this._nodes.top.classList.toggle('dragging', true);\n            this._nodes.root.classList.toggle('dragging', true);\n            e.preventDefault();\n            const startTop = e.clientY;\n            let didMove = false;\n            const cur = this._unchangedRegion.visibleLineCountTop.get();\n            this._unchangedRegion.isDragged.set('top', undefined);\n            const window = getWindow(this._nodes.top);\n            const mouseMoveListener = addDisposableListener(window, 'mousemove', e => {\n                const currentTop = e.clientY;\n                const delta = currentTop - startTop;\n                didMove = didMove || Math.abs(delta) > 2;\n                const lineDelta = Math.round(delta / editor.getOption(67 /* EditorOption.lineHeight */));\n                const newVal = Math.max(0, Math.min(cur + lineDelta, this._unchangedRegion.getMaxVisibleLineCountTop()));\n                this._unchangedRegion.visibleLineCountTop.set(newVal, undefined);\n            });\n            const mouseUpListener = addDisposableListener(window, 'mouseup', e => {\n                if (!didMove) {\n                    this._unchangedRegion.showMoreAbove(this._options.hideUnchangedRegionsRevealLineCount.get(), undefined);\n                }\n                this._nodes.top.classList.toggle('dragging', false);\n                this._nodes.root.classList.toggle('dragging', false);\n                this._unchangedRegion.isDragged.set(undefined, undefined);\n                mouseMoveListener.dispose();\n                mouseUpListener.dispose();\n            });\n        }));\n        this._register(addDisposableListener(this._nodes.bottom, 'mousedown', e => {\n            if (e.button !== 0) {\n                return;\n            }\n            this._nodes.bottom.classList.toggle('dragging', true);\n            this._nodes.root.classList.toggle('dragging', true);\n            e.preventDefault();\n            const startTop = e.clientY;\n            let didMove = false;\n            const cur = this._unchangedRegion.visibleLineCountBottom.get();\n            this._unchangedRegion.isDragged.set('bottom', undefined);\n            const window = getWindow(this._nodes.bottom);\n            const mouseMoveListener = addDisposableListener(window, 'mousemove', e => {\n                const currentTop = e.clientY;\n                const delta = currentTop - startTop;\n                didMove = didMove || Math.abs(delta) > 2;\n                const lineDelta = Math.round(delta / editor.getOption(67 /* EditorOption.lineHeight */));\n                const newVal = Math.max(0, Math.min(cur - lineDelta, this._unchangedRegion.getMaxVisibleLineCountBottom()));\n                const top = this._unchangedRegionRange.endLineNumberExclusive > editor.getModel().getLineCount()\n                    ? editor.getContentHeight()\n                    : editor.getTopForLineNumber(this._unchangedRegionRange.endLineNumberExclusive);\n                this._unchangedRegion.visibleLineCountBottom.set(newVal, undefined);\n                const top2 = this._unchangedRegionRange.endLineNumberExclusive > editor.getModel().getLineCount()\n                    ? editor.getContentHeight()\n                    : editor.getTopForLineNumber(this._unchangedRegionRange.endLineNumberExclusive);\n                editor.setScrollTop(editor.getScrollTop() + (top2 - top));\n            });\n            const mouseUpListener = addDisposableListener(window, 'mouseup', e => {\n                this._unchangedRegion.isDragged.set(undefined, undefined);\n                if (!didMove) {\n                    const top = editor.getTopForLineNumber(this._unchangedRegionRange.endLineNumberExclusive);\n                    this._unchangedRegion.showMoreBelow(this._options.hideUnchangedRegionsRevealLineCount.get(), undefined);\n                    const top2 = editor.getTopForLineNumber(this._unchangedRegionRange.endLineNumberExclusive);\n                    editor.setScrollTop(editor.getScrollTop() + (top2 - top));\n                }\n                this._nodes.bottom.classList.toggle('dragging', false);\n                this._nodes.root.classList.toggle('dragging', false);\n                mouseMoveListener.dispose();\n                mouseUpListener.dispose();\n            });\n        }));\n        this._register(autorun(reader => {\n            /** @description update labels */\n            const children = [];\n            if (!this._hide) {\n                const lineCount = _unchangedRegion.getHiddenModifiedRange(reader).length;\n                const linesHiddenText = localize('hiddenLines', '{0} hidden lines', lineCount);\n                const span = $('span', { title: localize('diff.hiddenLines.expandAll', 'Double click to unfold') }, linesHiddenText);\n                span.addEventListener('dblclick', e => {\n                    if (e.button !== 0) {\n                        return;\n                    }\n                    e.preventDefault();\n                    this._unchangedRegion.showAll(undefined);\n                });\n                children.push(span);\n                const range = this._unchangedRegion.getHiddenModifiedRange(reader);\n                const items = this._modifiedOutlineSource.getBreadcrumbItems(range, reader);\n                if (items.length > 0) {\n                    children.push($('span', undefined, '\\u00a0\\u00a0|\\u00a0\\u00a0'));\n                    for (let i = 0; i < items.length; i++) {\n                        const item = items[i];\n                        const icon = SymbolKinds.toIcon(item.kind);\n                        const divItem = h('div.breadcrumb-item', {\n                            style: { display: 'flex', alignItems: 'center' },\n                        }, [\n                            renderIcon(icon),\n                            '\\u00a0',\n                            item.name,\n                            ...(i === items.length - 1\n                                ? []\n                                : [renderIcon(Codicon.chevronRight)])\n                        ]).root;\n                        children.push(divItem);\n                        divItem.onclick = () => {\n                            this._revealModifiedHiddenLine(item.startLineNumber);\n                        };\n                    }\n                }\n            }\n            reset(this._nodes.others, ...children);\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 OverviewRulerFeature_1;\nimport { EventType, addDisposableListener, addStandardDisposableListener, h } from '../../../../../base/browser/dom.js';\nimport { createFastDomNode } from '../../../../../base/browser/fastDomNode.js';\nimport { ScrollbarState } from '../../../../../base/browser/ui/scrollbar/scrollbarState.js';\nimport { Disposable } from '../../../../../base/common/lifecycle.js';\nimport { autorun, autorunWithStore, derived, observableFromEvent, observableSignalFromEvent } from '../../../../../base/common/observable.js';\nimport { appendRemoveOnDispose } from '../utils.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { OverviewRulerZone } from '../../../../common/viewModel/overviewZoneManager.js';\nimport { defaultInsertColor, defaultRemoveColor, diffInserted, diffOverviewRulerInserted, diffOverviewRulerRemoved, diffRemoved } from '../../../../../platform/theme/common/colorRegistry.js';\nimport { IThemeService } from '../../../../../platform/theme/common/themeService.js';\nlet OverviewRulerFeature = class OverviewRulerFeature extends Disposable {\n    static { OverviewRulerFeature_1 = this; }\n    static { this.ONE_OVERVIEW_WIDTH = 15; }\n    static { this.ENTIRE_DIFF_OVERVIEW_WIDTH = this.ONE_OVERVIEW_WIDTH * 2; }\n    constructor(_editors, _rootElement, _diffModel, _rootWidth, _rootHeight, _modifiedEditorLayoutInfo, _themeService) {\n        super();\n        this._editors = _editors;\n        this._rootElement = _rootElement;\n        this._diffModel = _diffModel;\n        this._rootWidth = _rootWidth;\n        this._rootHeight = _rootHeight;\n        this._modifiedEditorLayoutInfo = _modifiedEditorLayoutInfo;\n        this._themeService = _themeService;\n        this.width = OverviewRulerFeature_1.ENTIRE_DIFF_OVERVIEW_WIDTH;\n        const currentColorTheme = observableFromEvent(this._themeService.onDidColorThemeChange, () => this._themeService.getColorTheme());\n        const currentColors = derived(reader => {\n            /** @description colors */\n            const theme = currentColorTheme.read(reader);\n            const insertColor = theme.getColor(diffOverviewRulerInserted) || (theme.getColor(diffInserted) || defaultInsertColor).transparent(2);\n            const removeColor = theme.getColor(diffOverviewRulerRemoved) || (theme.getColor(diffRemoved) || defaultRemoveColor).transparent(2);\n            return { insertColor, removeColor };\n        });\n        const viewportDomElement = createFastDomNode(document.createElement('div'));\n        viewportDomElement.setClassName('diffViewport');\n        viewportDomElement.setPosition('absolute');\n        const diffOverviewRoot = h('div.diffOverview', {\n            style: { position: 'absolute', top: '0px', width: OverviewRulerFeature_1.ENTIRE_DIFF_OVERVIEW_WIDTH + 'px' }\n        }).root;\n        this._register(appendRemoveOnDispose(diffOverviewRoot, viewportDomElement.domNode));\n        this._register(addStandardDisposableListener(diffOverviewRoot, EventType.POINTER_DOWN, (e) => {\n            this._editors.modified.delegateVerticalScrollbarPointerDown(e);\n        }));\n        this._register(addDisposableListener(diffOverviewRoot, EventType.MOUSE_WHEEL, (e) => {\n            this._editors.modified.delegateScrollFromMouseWheelEvent(e);\n        }, { passive: false }));\n        this._register(appendRemoveOnDispose(this._rootElement, diffOverviewRoot));\n        this._register(autorunWithStore((reader, store) => {\n            /** @description recreate overview rules when model changes */\n            const m = this._diffModel.read(reader);\n            const originalOverviewRuler = this._editors.original.createOverviewRuler('original diffOverviewRuler');\n            if (originalOverviewRuler) {\n                store.add(originalOverviewRuler);\n                store.add(appendRemoveOnDispose(diffOverviewRoot, originalOverviewRuler.getDomNode()));\n            }\n            const modifiedOverviewRuler = this._editors.modified.createOverviewRuler('modified diffOverviewRuler');\n            if (modifiedOverviewRuler) {\n                store.add(modifiedOverviewRuler);\n                store.add(appendRemoveOnDispose(diffOverviewRoot, modifiedOverviewRuler.getDomNode()));\n            }\n            if (!originalOverviewRuler || !modifiedOverviewRuler) {\n                // probably no model\n                return;\n            }\n            const origViewZonesChanged = observableSignalFromEvent('viewZoneChanged', this._editors.original.onDidChangeViewZones);\n            const modViewZonesChanged = observableSignalFromEvent('viewZoneChanged', this._editors.modified.onDidChangeViewZones);\n            const origHiddenRangesChanged = observableSignalFromEvent('hiddenRangesChanged', this._editors.original.onDidChangeHiddenAreas);\n            const modHiddenRangesChanged = observableSignalFromEvent('hiddenRangesChanged', this._editors.modified.onDidChangeHiddenAreas);\n            store.add(autorun(reader => {\n                /** @description set overview ruler zones */\n                origViewZonesChanged.read(reader);\n                modViewZonesChanged.read(reader);\n                origHiddenRangesChanged.read(reader);\n                modHiddenRangesChanged.read(reader);\n                const colors = currentColors.read(reader);\n                const diff = m?.diff.read(reader)?.mappings;\n                function createZones(ranges, color, editor) {\n                    const vm = editor._getViewModel();\n                    if (!vm) {\n                        return [];\n                    }\n                    return ranges\n                        .filter(d => d.length > 0)\n                        .map(r => {\n                        const start = vm.coordinatesConverter.convertModelPositionToViewPosition(new Position(r.startLineNumber, 1));\n                        const end = vm.coordinatesConverter.convertModelPositionToViewPosition(new Position(r.endLineNumberExclusive, 1));\n                        // By computing the lineCount, we won't ask the view model later for the bottom vertical position.\n                        // (The view model will take into account the alignment viewzones, which will give\n                        // modifications and deletetions always the same height.)\n                        const lineCount = end.lineNumber - start.lineNumber;\n                        return new OverviewRulerZone(start.lineNumber, end.lineNumber, lineCount, color.toString());\n                    });\n                }\n                const originalZones = createZones((diff || []).map(d => d.lineRangeMapping.original), colors.removeColor, this._editors.original);\n                const modifiedZones = createZones((diff || []).map(d => d.lineRangeMapping.modified), colors.insertColor, this._editors.modified);\n                originalOverviewRuler?.setZones(originalZones);\n                modifiedOverviewRuler?.setZones(modifiedZones);\n            }));\n            store.add(autorun(reader => {\n                /** @description layout overview ruler */\n                const height = this._rootHeight.read(reader);\n                const width = this._rootWidth.read(reader);\n                const layoutInfo = this._modifiedEditorLayoutInfo.read(reader);\n                if (layoutInfo) {\n                    const freeSpace = OverviewRulerFeature_1.ENTIRE_DIFF_OVERVIEW_WIDTH - 2 * OverviewRulerFeature_1.ONE_OVERVIEW_WIDTH;\n                    originalOverviewRuler.setLayout({\n                        top: 0,\n                        height: height,\n                        right: freeSpace + OverviewRulerFeature_1.ONE_OVERVIEW_WIDTH,\n                        width: OverviewRulerFeature_1.ONE_OVERVIEW_WIDTH,\n                    });\n                    modifiedOverviewRuler.setLayout({\n                        top: 0,\n                        height: height,\n                        right: 0,\n                        width: OverviewRulerFeature_1.ONE_OVERVIEW_WIDTH,\n                    });\n                    const scrollTop = this._editors.modifiedScrollTop.read(reader);\n                    const scrollHeight = this._editors.modifiedScrollHeight.read(reader);\n                    const scrollBarOptions = this._editors.modified.getOption(104 /* EditorOption.scrollbar */);\n                    const state = new ScrollbarState(scrollBarOptions.verticalHasArrows ? scrollBarOptions.arrowSize : 0, scrollBarOptions.verticalScrollbarSize, 0, layoutInfo.height, scrollHeight, scrollTop);\n                    viewportDomElement.setTop(state.getSliderPosition());\n                    viewportDomElement.setHeight(state.getSliderSize());\n                }\n                else {\n                    viewportDomElement.setTop(0);\n                    viewportDomElement.setHeight(0);\n                }\n                diffOverviewRoot.style.height = height + 'px';\n                diffOverviewRoot.style.left = (width - OverviewRulerFeature_1.ENTIRE_DIFF_OVERVIEW_WIDTH) + 'px';\n                viewportDomElement.setWidth(OverviewRulerFeature_1.ENTIRE_DIFF_OVERVIEW_WIDTH);\n            }));\n        }));\n    }\n};\nOverviewRulerFeature = OverviewRulerFeature_1 = __decorate([\n    __param(6, IThemeService)\n], OverviewRulerFeature);\nexport { OverviewRulerFeature };\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { addDisposableListener, h, EventType } from '../../../../../base/browser/dom.js';\nimport { renderIcon } from '../../../../../base/browser/ui/iconLabel/iconLabels.js';\nimport { Codicon } from '../../../../../base/common/codicons.js';\nimport { Disposable, toDisposable } from '../../../../../base/common/lifecycle.js';\nimport { autorunWithStore, derived } from '../../../../../base/common/observable.js';\nimport { LineRange, LineRangeSet } from '../../../../common/core/lineRange.js';\nimport { Range } from '../../../../common/core/range.js';\nimport { LineRangeMapping } from '../../../../common/diff/rangeMapping.js';\nimport { GlyphMarginLane } from '../../../../common/model.js';\nimport { localize } from '../../../../../nls.js';\nconst emptyArr = [];\nexport class RevertButtonsFeature extends Disposable {\n    constructor(_editors, _diffModel, _options, _widget) {\n        super();\n        this._editors = _editors;\n        this._diffModel = _diffModel;\n        this._options = _options;\n        this._widget = _widget;\n        this._selectedDiffs = derived(this, (reader) => {\n            /** @description selectedDiffs */\n            const model = this._diffModel.read(reader);\n            const diff = model?.diff.read(reader);\n            // Return `emptyArr` because it is a constant. [] is always a new array and would trigger a change.\n            if (!diff) {\n                return emptyArr;\n            }\n            const selections = this._editors.modifiedSelections.read(reader);\n            if (selections.every(s => s.isEmpty())) {\n                return emptyArr;\n            }\n            const selectedLineNumbers = new LineRangeSet(selections.map(s => LineRange.fromRangeInclusive(s)));\n            const selectedMappings = diff.mappings.filter(m => m.lineRangeMapping.innerChanges && selectedLineNumbers.intersects(m.lineRangeMapping.modified));\n            const result = selectedMappings.map(mapping => ({\n                mapping,\n                rangeMappings: mapping.lineRangeMapping.innerChanges.filter(c => selections.some(s => Range.areIntersecting(c.modifiedRange, s)))\n            }));\n            if (result.length === 0 || result.every(r => r.rangeMappings.length === 0)) {\n                return emptyArr;\n            }\n            return result;\n        });\n        this._register(autorunWithStore((reader, store) => {\n            if (!this._options.shouldRenderOldRevertArrows.read(reader)) {\n                return;\n            }\n            const model = this._diffModel.read(reader);\n            const diff = model?.diff.read(reader);\n            if (!model || !diff) {\n                return;\n            }\n            if (model.movedTextToCompare.read(reader)) {\n                return;\n            }\n            const glyphWidgetsModified = [];\n            const selectedDiffs = this._selectedDiffs.read(reader);\n            const selectedDiffsSet = new Set(selectedDiffs.map(d => d.mapping));\n            if (selectedDiffs.length > 0) {\n                // The button to revert the selection\n                const selections = this._editors.modifiedSelections.read(reader);\n                const btn = store.add(new RevertButton(selections[selections.length - 1].positionLineNumber, this._widget, selectedDiffs.flatMap(d => d.rangeMappings), true));\n                this._editors.modified.addGlyphMarginWidget(btn);\n                glyphWidgetsModified.push(btn);\n            }\n            for (const m of diff.mappings) {\n                if (selectedDiffsSet.has(m)) {\n                    continue;\n                }\n                if (!m.lineRangeMapping.modified.isEmpty && m.lineRangeMapping.innerChanges) {\n                    const btn = store.add(new RevertButton(m.lineRangeMapping.modified.startLineNumber, this._widget, m.lineRangeMapping, false));\n                    this._editors.modified.addGlyphMarginWidget(btn);\n                    glyphWidgetsModified.push(btn);\n                }\n            }\n            store.add(toDisposable(() => {\n                for (const w of glyphWidgetsModified) {\n                    this._editors.modified.removeGlyphMarginWidget(w);\n                }\n            }));\n        }));\n    }\n}\nexport class RevertButton extends Disposable {\n    static { this.counter = 0; }\n    getId() { return this._id; }\n    constructor(_lineNumber, _widget, _diffs, _revertSelection) {\n        super();\n        this._lineNumber = _lineNumber;\n        this._widget = _widget;\n        this._diffs = _diffs;\n        this._revertSelection = _revertSelection;\n        this._id = `revertButton${RevertButton.counter++}`;\n        this._domNode = h('div.revertButton', {\n            title: this._revertSelection\n                ? localize('revertSelectedChanges', 'Revert Selected Changes')\n                : localize('revertChange', 'Revert Change')\n        }, [renderIcon(Codicon.arrowRight)]).root;\n        this._register(addDisposableListener(this._domNode, EventType.MOUSE_DOWN, e => {\n            // don't prevent context menu from showing up\n            if (e.button !== 2) {\n                e.stopPropagation();\n                e.preventDefault();\n            }\n        }));\n        this._register(addDisposableListener(this._domNode, EventType.MOUSE_UP, e => {\n            e.stopPropagation();\n            e.preventDefault();\n        }));\n        this._register(addDisposableListener(this._domNode, EventType.CLICK, (e) => {\n            if (this._diffs instanceof LineRangeMapping) {\n                this._widget.revert(this._diffs);\n            }\n            else {\n                this._widget.revertRangeMappings(this._diffs);\n            }\n            e.stopPropagation();\n            e.preventDefault();\n        }));\n    }\n    /**\n     * Get the dom node of the glyph widget.\n     */\n    getDomNode() {\n        return this._domNode;\n    }\n    /**\n     * Get the placement of the glyph widget.\n     */\n    getPosition() {\n        return {\n            lane: GlyphMarginLane.Right,\n            range: {\n                startColumn: 1,\n                startLineNumber: this._lineNumber,\n                endColumn: 1,\n                endLineNumber: this._lineNumber,\n            },\n            zIndex: 10001,\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 { autorunOpts } from '../../../base/common/observable.js';\nimport { observableFromEventOpts } from '../../../base/common/observableInternal/utils.js';\n/** Creates an observable update when a configuration key updates. */\nexport function observableConfigValue(key, defaultValue, configurationService) {\n    return observableFromEventOpts({ debugName: () => `Configuration Key \"${key}\"`, }, (handleChange) => configurationService.onDidChangeConfiguration(e => {\n        if (e.affectsConfiguration(key)) {\n            handleChange(e);\n        }\n    }), () => configurationService.getValue(key) ?? defaultValue);\n}\n/** Update the configuration key with a value derived from observables. */\nexport function bindContextKey(key, service, computeValue) {\n    const boundKey = key.bindTo(service);\n    return autorunOpts({ debugName: () => `Set Context Key \"${key.key}\"` }, reader => {\n        boundKey.set(computeValue(reader));\n    });\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 } from '../../../../../base/common/lifecycle.js';\nimport { autorunHandleChanges, derivedOpts, observableFromEvent } from '../../../../../base/common/observable.js';\nimport { observableCodeEditor } from '../../../observableCodeEditor.js';\nimport { OverviewRulerFeature } from '../features/overviewRulerFeature.js';\nimport { EditorOptions } from '../../../../common/config/editorOptions.js';\nimport { Position } from '../../../../common/core/position.js';\nimport { localize } from '../../../../../nls.js';\nimport { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';\nimport { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js';\nlet DiffEditorEditors = class DiffEditorEditors extends Disposable {\n    get onDidContentSizeChange() { return this._onDidContentSizeChange.event; }\n    constructor(originalEditorElement, modifiedEditorElement, _options, _argCodeEditorWidgetOptions, _createInnerEditor, _instantiationService, _keybindingService) {\n        super();\n        this.originalEditorElement = originalEditorElement;\n        this.modifiedEditorElement = modifiedEditorElement;\n        this._options = _options;\n        this._argCodeEditorWidgetOptions = _argCodeEditorWidgetOptions;\n        this._createInnerEditor = _createInnerEditor;\n        this._instantiationService = _instantiationService;\n        this._keybindingService = _keybindingService;\n        this.original = this._register(this._createLeftHandSideEditor(this._options.editorOptions.get(), this._argCodeEditorWidgetOptions.originalEditor || {}));\n        this.modified = this._register(this._createRightHandSideEditor(this._options.editorOptions.get(), this._argCodeEditorWidgetOptions.modifiedEditor || {}));\n        this._onDidContentSizeChange = this._register(new Emitter());\n        this.modifiedScrollTop = observableFromEvent(this, this.modified.onDidScrollChange, () => /** @description modified.getScrollTop */ this.modified.getScrollTop());\n        this.modifiedScrollHeight = observableFromEvent(this, this.modified.onDidScrollChange, () => /** @description modified.getScrollHeight */ this.modified.getScrollHeight());\n        this.modifiedObs = observableCodeEditor(this.modified);\n        this.originalObs = observableCodeEditor(this.original);\n        this.modifiedModel = this.modifiedObs.model;\n        this.modifiedSelections = observableFromEvent(this, this.modified.onDidChangeCursorSelection, () => this.modified.getSelections() ?? []);\n        this.modifiedCursor = derivedOpts({ owner: this, equalsFn: Position.equals }, reader => this.modifiedSelections.read(reader)[0]?.getPosition() ?? new Position(1, 1));\n        this.originalCursor = observableFromEvent(this, this.original.onDidChangeCursorPosition, () => this.original.getPosition() ?? new Position(1, 1));\n        this._argCodeEditorWidgetOptions = null;\n        this._register(autorunHandleChanges({\n            createEmptyChangeSummary: () => ({}),\n            handleChange: (ctx, changeSummary) => {\n                if (ctx.didChange(_options.editorOptions)) {\n                    Object.assign(changeSummary, ctx.change.changedOptions);\n                }\n                return true;\n            }\n        }, (reader, changeSummary) => {\n            /** @description update editor options */\n            _options.editorOptions.read(reader);\n            this._options.renderSideBySide.read(reader);\n            this.modified.updateOptions(this._adjustOptionsForRightHandSide(reader, changeSummary));\n            this.original.updateOptions(this._adjustOptionsForLeftHandSide(reader, changeSummary));\n        }));\n    }\n    _createLeftHandSideEditor(options, codeEditorWidgetOptions) {\n        const leftHandSideOptions = this._adjustOptionsForLeftHandSide(undefined, options);\n        const editor = this._constructInnerEditor(this._instantiationService, this.originalEditorElement, leftHandSideOptions, codeEditorWidgetOptions);\n        editor.setContextValue('isInDiffLeftEditor', true);\n        return editor;\n    }\n    _createRightHandSideEditor(options, codeEditorWidgetOptions) {\n        const rightHandSideOptions = this._adjustOptionsForRightHandSide(undefined, options);\n        const editor = this._constructInnerEditor(this._instantiationService, this.modifiedEditorElement, rightHandSideOptions, codeEditorWidgetOptions);\n        editor.setContextValue('isInDiffRightEditor', true);\n        return editor;\n    }\n    _constructInnerEditor(instantiationService, container, options, editorWidgetOptions) {\n        const editor = this._createInnerEditor(instantiationService, container, options, editorWidgetOptions);\n        this._register(editor.onDidContentSizeChange(e => {\n            const width = this.original.getContentWidth() + this.modified.getContentWidth() + OverviewRulerFeature.ENTIRE_DIFF_OVERVIEW_WIDTH;\n            const height = Math.max(this.modified.getContentHeight(), this.original.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    _adjustOptionsForLeftHandSide(_reader, changedOptions) {\n        const result = this._adjustOptionsForSubEditor(changedOptions);\n        if (!this._options.renderSideBySide.get()) {\n            // never wrap hidden editor\n            result.wordWrapOverride1 = 'off';\n            result.wordWrapOverride2 = 'off';\n            result.stickyScroll = { enabled: false };\n            // Disable unicode highlighting for the original side in inline mode, as they are not shown anyway.\n            result.unicodeHighlight = { nonBasicASCII: false, ambiguousCharacters: false, invisibleCharacters: false };\n        }\n        else {\n            result.unicodeHighlight = this._options.editorOptions.get().unicodeHighlight || {};\n            result.wordWrapOverride1 = this._options.diffWordWrap.get();\n        }\n        result.glyphMargin = this._options.renderSideBySide.get();\n        if (changedOptions.originalAriaLabel) {\n            result.ariaLabel = changedOptions.originalAriaLabel;\n        }\n        result.ariaLabel = this._updateAriaLabel(result.ariaLabel);\n        result.readOnly = !this._options.originalEditable.get();\n        result.dropIntoEditor = { enabled: !result.readOnly };\n        result.extraEditorClassName = 'original-in-monaco-diff-editor';\n        return result;\n    }\n    _adjustOptionsForRightHandSide(reader, changedOptions) {\n        const result = this._adjustOptionsForSubEditor(changedOptions);\n        if (changedOptions.modifiedAriaLabel) {\n            result.ariaLabel = changedOptions.modifiedAriaLabel;\n        }\n        result.ariaLabel = this._updateAriaLabel(result.ariaLabel);\n        result.wordWrapOverride1 = this._options.diffWordWrap.get();\n        result.revealHorizontalRightPadding = EditorOptions.revealHorizontalRightPadding.defaultValue + OverviewRulerFeature.ENTIRE_DIFF_OVERVIEW_WIDTH;\n        result.scrollbar.verticalHasArrows = false;\n        result.extraEditorClassName = 'modified-in-monaco-diff-editor';\n        return result;\n    }\n    _adjustOptionsForSubEditor(options) {\n        const clonedOptions = {\n            ...options,\n            dimension: {\n                height: 0,\n                width: 0\n            },\n        };\n        clonedOptions.inDiffEditor = true;\n        clonedOptions.automaticLayout = false;\n        // Clone scrollbar options before changing them\n        clonedOptions.scrollbar = { ...(clonedOptions.scrollbar || {}) };\n        clonedOptions.folding = false;\n        clonedOptions.codeLens = this._options.diffCodeLens.get();\n        clonedOptions.fixedOverflowWidgets = true;\n        // Clone minimap options before changing them\n        clonedOptions.minimap = { ...(clonedOptions.minimap || {}) };\n        clonedOptions.minimap.enabled = false;\n        if (this._options.hideUnchangedRegions.get()) {\n            clonedOptions.stickyScroll = { enabled: false };\n        }\n        else {\n            clonedOptions.stickyScroll = this._options.editorOptions.get().stickyScroll;\n        }\n        return clonedOptions;\n    }\n    _updateAriaLabel(ariaLabel) {\n        if (!ariaLabel) {\n            ariaLabel = '';\n        }\n        const ariaNavigationTip = localize('diff-aria-navigation-tip', ' use {0} to open the accessibility help.', this._keybindingService.lookupKeybinding('editor.action.accessibilityHelp')?.getAriaLabel());\n        if (this._options.accessibilityVerbose.get()) {\n            return ariaLabel + ariaNavigationTip;\n        }\n        else if (ariaLabel) {\n            return ariaLabel.replaceAll(ariaNavigationTip, '');\n        }\n        return '';\n    }\n};\nDiffEditorEditors = __decorate([\n    __param(5, IInstantiationService),\n    __param(6, IKeybindingService)\n], DiffEditorEditors);\nexport { DiffEditorEditors };\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 DelegatingEditor extends Disposable {\n    constructor() {\n        super(...arguments);\n        this._id = ++DelegatingEditor.idCounter;\n        this._onDidDispose = this._register(new Emitter());\n        this.onDidDispose = this._onDidDispose.event;\n        // #endregion\n    }\n    static { this.idCounter = 0; }\n    getId() { return this.getEditorType() + ':v2:' + this._id; }\n    // #region editorBrowser.IDiffEditor: Delegating to modified Editor\n    getVisibleColumnFromPosition(position) {\n        return this._targetEditor.getVisibleColumnFromPosition(position);\n    }\n    getPosition() {\n        return this._targetEditor.getPosition();\n    }\n    setPosition(position, source = 'api') {\n        this._targetEditor.setPosition(position, source);\n    }\n    revealLine(lineNumber, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealLine(lineNumber, scrollType);\n    }\n    revealLineInCenter(lineNumber, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealLineInCenter(lineNumber, scrollType);\n    }\n    revealLineInCenterIfOutsideViewport(lineNumber, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealLineInCenterIfOutsideViewport(lineNumber, scrollType);\n    }\n    revealLineNearTop(lineNumber, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealLineNearTop(lineNumber, scrollType);\n    }\n    revealPosition(position, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealPosition(position, scrollType);\n    }\n    revealPositionInCenter(position, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealPositionInCenter(position, scrollType);\n    }\n    revealPositionInCenterIfOutsideViewport(position, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealPositionInCenterIfOutsideViewport(position, scrollType);\n    }\n    revealPositionNearTop(position, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealPositionNearTop(position, scrollType);\n    }\n    getSelection() {\n        return this._targetEditor.getSelection();\n    }\n    getSelections() {\n        return this._targetEditor.getSelections();\n    }\n    setSelection(something, source = 'api') {\n        this._targetEditor.setSelection(something, source);\n    }\n    setSelections(ranges, source = 'api') {\n        this._targetEditor.setSelections(ranges, source);\n    }\n    revealLines(startLineNumber, endLineNumber, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealLines(startLineNumber, endLineNumber, scrollType);\n    }\n    revealLinesInCenter(startLineNumber, endLineNumber, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealLinesInCenter(startLineNumber, endLineNumber, scrollType);\n    }\n    revealLinesInCenterIfOutsideViewport(startLineNumber, endLineNumber, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealLinesInCenterIfOutsideViewport(startLineNumber, endLineNumber, scrollType);\n    }\n    revealLinesNearTop(startLineNumber, endLineNumber, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealLinesNearTop(startLineNumber, endLineNumber, scrollType);\n    }\n    revealRange(range, scrollType = 0 /* ScrollType.Smooth */, revealVerticalInCenter = false, revealHorizontal = true) {\n        this._targetEditor.revealRange(range, scrollType, revealVerticalInCenter, revealHorizontal);\n    }\n    revealRangeInCenter(range, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealRangeInCenter(range, scrollType);\n    }\n    revealRangeInCenterIfOutsideViewport(range, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealRangeInCenterIfOutsideViewport(range, scrollType);\n    }\n    revealRangeNearTop(range, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealRangeNearTop(range, scrollType);\n    }\n    revealRangeNearTopIfOutsideViewport(range, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealRangeNearTopIfOutsideViewport(range, scrollType);\n    }\n    revealRangeAtTop(range, scrollType = 0 /* ScrollType.Smooth */) {\n        this._targetEditor.revealRangeAtTop(range, scrollType);\n    }\n    getSupportedActions() {\n        return this._targetEditor.getSupportedActions();\n    }\n    focus() {\n        this._targetEditor.focus();\n    }\n    trigger(source, handlerId, payload) {\n        this._targetEditor.trigger(source, handlerId, payload);\n    }\n    createDecorationsCollection(decorations) {\n        return this._targetEditor.createDecorationsCollection(decorations);\n    }\n    changeDecorations(callback) {\n        return this._targetEditor.changeDecorations(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 *--------------------------------------------------------------------------------------------*/\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 { derived, observableFromEvent, observableValue } from '../../../../base/common/observable.js';\nimport { derivedConstOnceDefined } from '../../../../base/common/observableInternal/utils.js';\nimport { allowsTrueInlineDiffRendering } from './components/diffEditorViewZones/diffEditorViewZones.js';\nimport { diffEditorDefaultOptions } from '../../../common/config/diffEditor.js';\nimport { clampedFloat, clampedInt, boolean as validateBooleanOption, stringSet as validateStringSetOption } from '../../../common/config/editorOptions.js';\nimport { IAccessibilityService } from '../../../../platform/accessibility/common/accessibility.js';\nlet DiffEditorOptions = class DiffEditorOptions {\n    get editorOptions() { return this._options; }\n    constructor(options, _accessibilityService) {\n        this._accessibilityService = _accessibilityService;\n        this._diffEditorWidth = observableValue(this, 0);\n        this._screenReaderMode = observableFromEvent(this, this._accessibilityService.onDidChangeScreenReaderOptimized, () => this._accessibilityService.isScreenReaderOptimized());\n        this.couldShowInlineViewBecauseOfSize = derived(this, reader => this._options.read(reader).renderSideBySide && this._diffEditorWidth.read(reader) <= this._options.read(reader).renderSideBySideInlineBreakpoint);\n        this.renderOverviewRuler = derived(this, reader => this._options.read(reader).renderOverviewRuler);\n        this.renderSideBySide = derived(this, reader => {\n            if (this.compactMode.read(reader)) {\n                if (this.shouldRenderInlineViewInSmartMode.read(reader)) {\n                    return false;\n                }\n            }\n            return this._options.read(reader).renderSideBySide\n                && !(this._options.read(reader).useInlineViewWhenSpaceIsLimited && this.couldShowInlineViewBecauseOfSize.read(reader) && !this._screenReaderMode.read(reader));\n        });\n        this.readOnly = derived(this, reader => this._options.read(reader).readOnly);\n        this.shouldRenderOldRevertArrows = derived(this, reader => {\n            if (!this._options.read(reader).renderMarginRevertIcon) {\n                return false;\n            }\n            if (!this.renderSideBySide.read(reader)) {\n                return false;\n            }\n            if (this.readOnly.read(reader)) {\n                return false;\n            }\n            if (this.shouldRenderGutterMenu.read(reader)) {\n                return false;\n            }\n            return true;\n        });\n        this.shouldRenderGutterMenu = derived(this, reader => this._options.read(reader).renderGutterMenu);\n        this.renderIndicators = derived(this, reader => this._options.read(reader).renderIndicators);\n        this.enableSplitViewResizing = derived(this, reader => this._options.read(reader).enableSplitViewResizing);\n        this.splitViewDefaultRatio = derived(this, reader => this._options.read(reader).splitViewDefaultRatio);\n        this.ignoreTrimWhitespace = derived(this, reader => this._options.read(reader).ignoreTrimWhitespace);\n        this.maxComputationTimeMs = derived(this, reader => this._options.read(reader).maxComputationTime);\n        this.showMoves = derived(this, reader => this._options.read(reader).experimental.showMoves && this.renderSideBySide.read(reader));\n        this.isInEmbeddedEditor = derived(this, reader => this._options.read(reader).isInEmbeddedEditor);\n        this.diffWordWrap = derived(this, reader => this._options.read(reader).diffWordWrap);\n        this.originalEditable = derived(this, reader => this._options.read(reader).originalEditable);\n        this.diffCodeLens = derived(this, reader => this._options.read(reader).diffCodeLens);\n        this.accessibilityVerbose = derived(this, reader => this._options.read(reader).accessibilityVerbose);\n        this.diffAlgorithm = derived(this, reader => this._options.read(reader).diffAlgorithm);\n        this.showEmptyDecorations = derived(this, reader => this._options.read(reader).experimental.showEmptyDecorations);\n        this.onlyShowAccessibleDiffViewer = derived(this, reader => this._options.read(reader).onlyShowAccessibleDiffViewer);\n        this.compactMode = derived(this, reader => this._options.read(reader).compactMode);\n        this.trueInlineDiffRenderingEnabled = derived(this, reader => this._options.read(reader).experimental.useTrueInlineView);\n        this.useTrueInlineDiffRendering = derived(this, reader => !this.renderSideBySide.read(reader) && this.trueInlineDiffRenderingEnabled.read(reader));\n        this.hideUnchangedRegions = derived(this, reader => this._options.read(reader).hideUnchangedRegions.enabled);\n        this.hideUnchangedRegionsRevealLineCount = derived(this, reader => this._options.read(reader).hideUnchangedRegions.revealLineCount);\n        this.hideUnchangedRegionsContextLineCount = derived(this, reader => this._options.read(reader).hideUnchangedRegions.contextLineCount);\n        this.hideUnchangedRegionsMinimumLineCount = derived(this, reader => this._options.read(reader).hideUnchangedRegions.minimumLineCount);\n        this._model = observableValue(this, undefined);\n        this.shouldRenderInlineViewInSmartMode = this._model\n            .map(this, model => derivedConstOnceDefined(this, reader => {\n            const diffs = model?.diff.read(reader);\n            return diffs ? isSimpleDiff(diffs, this.trueInlineDiffRenderingEnabled.read(reader)) : undefined;\n        }))\n            .flatten()\n            .map(this, v => !!v);\n        this.inlineViewHideOriginalLineNumbers = this.compactMode;\n        const optionsCopy = { ...options, ...validateDiffEditorOptions(options, diffEditorDefaultOptions) };\n        this._options = observableValue(this, optionsCopy);\n    }\n    updateOptions(changedOptions) {\n        const newDiffEditorOptions = validateDiffEditorOptions(changedOptions, this._options.get());\n        const newOptions = { ...this._options.get(), ...changedOptions, ...newDiffEditorOptions };\n        this._options.set(newOptions, undefined, { changedOptions: changedOptions });\n    }\n    setWidth(width) {\n        this._diffEditorWidth.set(width, undefined);\n    }\n    setModel(model) {\n        this._model.set(model, undefined);\n    }\n};\nDiffEditorOptions = __decorate([\n    __param(1, IAccessibilityService)\n], DiffEditorOptions);\nexport { DiffEditorOptions };\nfunction isSimpleDiff(diff, supportsTrueDiffRendering) {\n    return diff.mappings.every(m => isInsertion(m.lineRangeMapping) || isDeletion(m.lineRangeMapping) || (supportsTrueDiffRendering && allowsTrueInlineDiffRendering(m.lineRangeMapping)));\n}\nfunction isInsertion(mapping) {\n    return mapping.original.length === 0;\n}\nfunction isDeletion(mapping) {\n    return mapping.modified.length === 0;\n}\nfunction validateDiffEditorOptions(options, defaults) {\n    return {\n        enableSplitViewResizing: validateBooleanOption(options.enableSplitViewResizing, defaults.enableSplitViewResizing),\n        splitViewDefaultRatio: clampedFloat(options.splitViewDefaultRatio, 0.5, 0.1, 0.9),\n        renderSideBySide: validateBooleanOption(options.renderSideBySide, defaults.renderSideBySide),\n        renderMarginRevertIcon: validateBooleanOption(options.renderMarginRevertIcon, defaults.renderMarginRevertIcon),\n        maxComputationTime: clampedInt(options.maxComputationTime, defaults.maxComputationTime, 0, 1073741824 /* Constants.MAX_SAFE_SMALL_INTEGER */),\n        maxFileSize: clampedInt(options.maxFileSize, defaults.maxFileSize, 0, 1073741824 /* Constants.MAX_SAFE_SMALL_INTEGER */),\n        ignoreTrimWhitespace: validateBooleanOption(options.ignoreTrimWhitespace, defaults.ignoreTrimWhitespace),\n        renderIndicators: validateBooleanOption(options.renderIndicators, defaults.renderIndicators),\n        originalEditable: validateBooleanOption(options.originalEditable, defaults.originalEditable),\n        diffCodeLens: validateBooleanOption(options.diffCodeLens, defaults.diffCodeLens),\n        renderOverviewRuler: validateBooleanOption(options.renderOverviewRuler, defaults.renderOverviewRuler),\n        diffWordWrap: validateStringSetOption(options.diffWordWrap, defaults.diffWordWrap, ['off', 'on', 'inherit']),\n        diffAlgorithm: validateStringSetOption(options.diffAlgorithm, defaults.diffAlgorithm, ['legacy', 'advanced'], { 'smart': 'legacy', 'experimental': 'advanced' }),\n        accessibilityVerbose: validateBooleanOption(options.accessibilityVerbose, defaults.accessibilityVerbose),\n        experimental: {\n            showMoves: validateBooleanOption(options.experimental?.showMoves, defaults.experimental.showMoves),\n            showEmptyDecorations: validateBooleanOption(options.experimental?.showEmptyDecorations, defaults.experimental.showEmptyDecorations),\n            useTrueInlineView: validateBooleanOption(options.experimental?.useTrueInlineView, defaults.experimental.useTrueInlineView),\n        },\n        hideUnchangedRegions: {\n            enabled: validateBooleanOption(options.hideUnchangedRegions?.enabled ?? options.experimental?.collapseUnchangedRegions, defaults.hideUnchangedRegions.enabled),\n            contextLineCount: clampedInt(options.hideUnchangedRegions?.contextLineCount, defaults.hideUnchangedRegions.contextLineCount, 0, 1073741824 /* Constants.MAX_SAFE_SMALL_INTEGER */),\n            minimumLineCount: clampedInt(options.hideUnchangedRegions?.minimumLineCount, defaults.hideUnchangedRegions.minimumLineCount, 0, 1073741824 /* Constants.MAX_SAFE_SMALL_INTEGER */),\n            revealLineCount: clampedInt(options.hideUnchangedRegions?.revealLineCount, defaults.hideUnchangedRegions.revealLineCount, 0, 1073741824 /* Constants.MAX_SAFE_SMALL_INTEGER */),\n        },\n        isInEmbeddedEditor: validateBooleanOption(options.isInEmbeddedEditor, defaults.isInEmbeddedEditor),\n        onlyShowAccessibleDiffViewer: validateBooleanOption(options.onlyShowAccessibleDiffViewer, defaults.onlyShowAccessibleDiffViewer),\n        renderSideBySideInlineBreakpoint: clampedInt(options.renderSideBySideInlineBreakpoint, defaults.renderSideBySideInlineBreakpoint, 0, 1073741824 /* Constants.MAX_SAFE_SMALL_INTEGER */),\n        useInlineViewWhenSpaceIsLimited: validateBooleanOption(options.useInlineViewWhenSpaceIsLimited, defaults.useInlineViewWhenSpaceIsLimited),\n        renderGutterMenu: validateBooleanOption(options.renderGutterMenu, defaults.renderGutterMenu),\n        compactMode: validateBooleanOption(options.compactMode, defaults.compactMode),\n    };\n}\n","var __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};\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { getWindow, h } from '../../../../base/browser/dom.js';\nimport { findLast } from '../../../../base/common/arraysFind.js';\nimport { BugIndicatingError, onUnexpectedError } from '../../../../base/common/errors.js';\nimport { Event } from '../../../../base/common/event.js';\nimport { toDisposable } from '../../../../base/common/lifecycle.js';\nimport { autorun, autorunWithStore, derived, disposableObservableValue, observableFromEvent, observableValue, recomputeInitiallyAndOnChange, subtransaction, transaction } from '../../../../base/common/observable.js';\nimport { derivedDisposable } from '../../../../base/common/observableInternal/derived.js';\nimport './style.css';\nimport { EditorExtensionsRegistry } from '../../editorExtensions.js';\nimport { ICodeEditorService } from '../../services/codeEditorService.js';\nimport { StableEditorScrollState } from '../../stableEditorScroll.js';\nimport { CodeEditorWidget } from '../codeEditor/codeEditorWidget.js';\nimport { AccessibleDiffViewer, AccessibleDiffViewerModelFromEditors } from './components/accessibleDiffViewer.js';\nimport { DiffEditorDecorations } from './components/diffEditorDecorations.js';\nimport { DiffEditorSash, SashLayout } from './components/diffEditorSash.js';\nimport { DiffEditorViewZones } from './components/diffEditorViewZones/diffEditorViewZones.js';\nimport { DiffEditorGutter } from './features/gutterFeature.js';\nimport { HideUnchangedRegionsFeature } from './features/hideUnchangedRegionsFeature.js';\nimport { MovedBlocksLinesFeature } from './features/movedBlocksLinesFeature.js';\nimport { OverviewRulerFeature } from './features/overviewRulerFeature.js';\nimport { RevertButtonsFeature } from './features/revertButtonsFeature.js';\nimport { ObservableElementSizeObserver, RefCounted, applyStyle, applyViewZones, translatePosition } from './utils.js';\nimport { readHotReloadableExport } from '../../../../base/common/hotReloadHelpers.js';\nimport { bindContextKey } from '../../../../platform/observable/common/platformObservableUtils.js';\nimport { Position } from '../../../common/core/position.js';\nimport { Range } from '../../../common/core/range.js';\nimport { EditorType } from '../../../common/editorCommon.js';\nimport { EditorContextKeys } from '../../../common/editorContextKeys.js';\nimport { AccessibilitySignal, IAccessibilitySignalService } from '../../../../platform/accessibilitySignal/browser/accessibilitySignalService.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 { IEditorProgressService } from '../../../../platform/progress/common/progress.js';\nimport { DiffEditorEditors } from './components/diffEditorEditors.js';\nimport { DelegatingEditor } from './delegatingEditorImpl.js';\nimport { DiffEditorOptions } from './diffEditorOptions.js';\nimport { DiffEditorViewModel } from './diffEditorViewModel.js';\nlet DiffEditorWidget = class DiffEditorWidget extends DelegatingEditor {\n    get onDidContentSizeChange() { return this._editors.onDidContentSizeChange; }\n    constructor(_domElement, options, codeEditorWidgetOptions, _parentContextKeyService, _parentInstantiationService, codeEditorService, _accessibilitySignalService, _editorProgressService) {\n        super();\n        this._domElement = _domElement;\n        this._parentContextKeyService = _parentContextKeyService;\n        this._parentInstantiationService = _parentInstantiationService;\n        this._accessibilitySignalService = _accessibilitySignalService;\n        this._editorProgressService = _editorProgressService;\n        this.elements = h('div.monaco-diff-editor.side-by-side', { style: { position: 'relative', height: '100%' } }, [\n            h('div.editor.original@original', { style: { position: 'absolute', height: '100%', } }),\n            h('div.editor.modified@modified', { style: { position: 'absolute', height: '100%', } }),\n            h('div.accessibleDiffViewer@accessibleDiffViewer', { style: { position: 'absolute', height: '100%' } }),\n        ]);\n        this._diffModelSrc = this._register(disposableObservableValue(this, undefined));\n        this._diffModel = derived(this, reader => this._diffModelSrc.read(reader)?.object);\n        this.onDidChangeModel = Event.fromObservableLight(this._diffModel);\n        this._contextKeyService = this._register(this._parentContextKeyService.createScoped(this._domElement));\n        this._instantiationService = this._register(this._parentInstantiationService.createChild(new ServiceCollection([IContextKeyService, this._contextKeyService])));\n        this._boundarySashes = observableValue(this, undefined);\n        this._accessibleDiffViewerShouldBeVisible = observableValue(this, false);\n        this._accessibleDiffViewerVisible = derived(this, reader => this._options.onlyShowAccessibleDiffViewer.read(reader)\n            ? true\n            : this._accessibleDiffViewerShouldBeVisible.read(reader));\n        this._movedBlocksLinesPart = observableValue(this, undefined);\n        this._layoutInfo = derived(this, reader => {\n            const fullWidth = this._rootSizeObserver.width.read(reader);\n            const fullHeight = this._rootSizeObserver.height.read(reader);\n            if (this._rootSizeObserver.automaticLayout) {\n                this.elements.root.style.height = '100%';\n            }\n            else {\n                this.elements.root.style.height = fullHeight + 'px';\n            }\n            const sash = this._sash.read(reader);\n            const gutter = this._gutter.read(reader);\n            const gutterWidth = gutter?.width.read(reader) ?? 0;\n            const overviewRulerPartWidth = this._overviewRulerPart.read(reader)?.width ?? 0;\n            let originalLeft, originalWidth, modifiedLeft, modifiedWidth, gutterLeft;\n            const sideBySide = !!sash;\n            if (sideBySide) {\n                const sashLeft = sash.sashLeft.read(reader);\n                const movedBlocksLinesWidth = this._movedBlocksLinesPart.read(reader)?.width.read(reader) ?? 0;\n                originalLeft = 0;\n                originalWidth = sashLeft - gutterWidth - movedBlocksLinesWidth;\n                gutterLeft = sashLeft - gutterWidth;\n                modifiedLeft = sashLeft;\n                modifiedWidth = fullWidth - modifiedLeft - overviewRulerPartWidth;\n            }\n            else {\n                gutterLeft = 0;\n                const shouldHideOriginalLineNumbers = this._options.inlineViewHideOriginalLineNumbers.read(reader);\n                originalLeft = gutterWidth;\n                if (shouldHideOriginalLineNumbers) {\n                    originalWidth = 0;\n                }\n                else {\n                    originalWidth = Math.max(5, this._editors.originalObs.layoutInfoDecorationsLeft.read(reader));\n                }\n                modifiedLeft = gutterWidth + originalWidth;\n                modifiedWidth = fullWidth - modifiedLeft - overviewRulerPartWidth;\n            }\n            this.elements.original.style.left = originalLeft + 'px';\n            this.elements.original.style.width = originalWidth + 'px';\n            this._editors.original.layout({ width: originalWidth, height: fullHeight }, true);\n            gutter?.layout(gutterLeft);\n            this.elements.modified.style.left = modifiedLeft + 'px';\n            this.elements.modified.style.width = modifiedWidth + 'px';\n            this._editors.modified.layout({ width: modifiedWidth, height: fullHeight }, true);\n            return {\n                modifiedEditor: this._editors.modified.getLayoutInfo(),\n                originalEditor: this._editors.original.getLayoutInfo(),\n            };\n        });\n        this._diffValue = this._diffModel.map((m, r) => m?.diff.read(r));\n        this.onDidUpdateDiff = Event.fromObservableLight(this._diffValue);\n        codeEditorService.willCreateDiffEditor();\n        this._contextKeyService.createKey('isInDiffEditor', true);\n        this._domElement.appendChild(this.elements.root);\n        this._register(toDisposable(() => this.elements.root.remove()));\n        this._rootSizeObserver = this._register(new ObservableElementSizeObserver(this.elements.root, options.dimension));\n        this._rootSizeObserver.setAutomaticLayout(options.automaticLayout ?? false);\n        this._options = this._instantiationService.createInstance(DiffEditorOptions, options);\n        this._register(autorun(reader => {\n            this._options.setWidth(this._rootSizeObserver.width.read(reader));\n        }));\n        this._contextKeyService.createKey(EditorContextKeys.isEmbeddedDiffEditor.key, false);\n        this._register(bindContextKey(EditorContextKeys.isEmbeddedDiffEditor, this._contextKeyService, reader => this._options.isInEmbeddedEditor.read(reader)));\n        this._register(bindContextKey(EditorContextKeys.comparingMovedCode, this._contextKeyService, reader => !!this._diffModel.read(reader)?.movedTextToCompare.read(reader)));\n        this._register(bindContextKey(EditorContextKeys.diffEditorRenderSideBySideInlineBreakpointReached, this._contextKeyService, reader => this._options.couldShowInlineViewBecauseOfSize.read(reader)));\n        this._register(bindContextKey(EditorContextKeys.diffEditorInlineMode, this._contextKeyService, reader => !this._options.renderSideBySide.read(reader)));\n        this._register(bindContextKey(EditorContextKeys.hasChanges, this._contextKeyService, reader => (this._diffModel.read(reader)?.diff.read(reader)?.mappings.length ?? 0) > 0));\n        this._editors = this._register(this._instantiationService.createInstance(DiffEditorEditors, this.elements.original, this.elements.modified, this._options, codeEditorWidgetOptions, (i, c, o, o2) => this._createInnerEditor(i, c, o, o2)));\n        this._register(bindContextKey(EditorContextKeys.diffEditorOriginalWritable, this._contextKeyService, reader => this._options.originalEditable.read(reader)));\n        this._register(bindContextKey(EditorContextKeys.diffEditorModifiedWritable, this._contextKeyService, reader => !this._options.readOnly.read(reader)));\n        this._register(bindContextKey(EditorContextKeys.diffEditorOriginalUri, this._contextKeyService, reader => this._diffModel.read(reader)?.model.original.uri.toString() ?? ''));\n        this._register(bindContextKey(EditorContextKeys.diffEditorModifiedUri, this._contextKeyService, reader => this._diffModel.read(reader)?.model.modified.uri.toString() ?? ''));\n        this._overviewRulerPart = derivedDisposable(this, reader => !this._options.renderOverviewRuler.read(reader)\n            ? undefined\n            : this._instantiationService.createInstance(readHotReloadableExport(OverviewRulerFeature, reader), this._editors, this.elements.root, this._diffModel, this._rootSizeObserver.width, this._rootSizeObserver.height, this._layoutInfo.map(i => i.modifiedEditor))).recomputeInitiallyAndOnChange(this._store);\n        const dimensions = {\n            height: this._rootSizeObserver.height,\n            width: this._rootSizeObserver.width.map((w, reader) => w - (this._overviewRulerPart.read(reader)?.width ?? 0)),\n        };\n        this._sashLayout = new SashLayout(this._options, dimensions);\n        this._sash = derivedDisposable(this, reader => {\n            const showSash = this._options.renderSideBySide.read(reader);\n            this.elements.root.classList.toggle('side-by-side', showSash);\n            return !showSash ? undefined : new DiffEditorSash(this.elements.root, dimensions, this._options.enableSplitViewResizing, this._boundarySashes, this._sashLayout.sashLeft, () => this._sashLayout.resetSash());\n        }).recomputeInitiallyAndOnChange(this._store);\n        const unchangedRangesFeature = derivedDisposable(this, reader => /** @description UnchangedRangesFeature */ this._instantiationService.createInstance(readHotReloadableExport(HideUnchangedRegionsFeature, reader), this._editors, this._diffModel, this._options)).recomputeInitiallyAndOnChange(this._store);\n        derivedDisposable(this, reader => /** @description DiffEditorDecorations */ this._instantiationService.createInstance(readHotReloadableExport(DiffEditorDecorations, reader), this._editors, this._diffModel, this._options, this)).recomputeInitiallyAndOnChange(this._store);\n        const origViewZoneIdsToIgnore = new Set();\n        const modViewZoneIdsToIgnore = new Set();\n        let isUpdatingViewZones = false;\n        const viewZoneManager = derivedDisposable(this, reader => /** @description ViewZoneManager */ this._instantiationService.createInstance(readHotReloadableExport(DiffEditorViewZones, reader), getWindow(this._domElement), this._editors, this._diffModel, this._options, this, () => isUpdatingViewZones || unchangedRangesFeature.get().isUpdatingHiddenAreas, origViewZoneIdsToIgnore, modViewZoneIdsToIgnore)).recomputeInitiallyAndOnChange(this._store);\n        const originalViewZones = derived(this, (reader) => {\n            const orig = viewZoneManager.read(reader).viewZones.read(reader).orig;\n            const orig2 = unchangedRangesFeature.read(reader).viewZones.read(reader).origViewZones;\n            return orig.concat(orig2);\n        });\n        const modifiedViewZones = derived(this, (reader) => {\n            const mod = viewZoneManager.read(reader).viewZones.read(reader).mod;\n            const mod2 = unchangedRangesFeature.read(reader).viewZones.read(reader).modViewZones;\n            return mod.concat(mod2);\n        });\n        this._register(applyViewZones(this._editors.original, originalViewZones, isUpdatingOrigViewZones => {\n            isUpdatingViewZones = isUpdatingOrigViewZones;\n        }, origViewZoneIdsToIgnore));\n        let scrollState;\n        this._register(applyViewZones(this._editors.modified, modifiedViewZones, isUpdatingModViewZones => {\n            isUpdatingViewZones = isUpdatingModViewZones;\n            if (isUpdatingViewZones) {\n                scrollState = StableEditorScrollState.capture(this._editors.modified);\n            }\n            else {\n                scrollState?.restore(this._editors.modified);\n                scrollState = undefined;\n            }\n        }, modViewZoneIdsToIgnore));\n        this._accessibleDiffViewer = derivedDisposable(this, reader => this._instantiationService.createInstance(readHotReloadableExport(AccessibleDiffViewer, reader), this.elements.accessibleDiffViewer, this._accessibleDiffViewerVisible, (visible, tx) => this._accessibleDiffViewerShouldBeVisible.set(visible, tx), this._options.onlyShowAccessibleDiffViewer.map(v => !v), this._rootSizeObserver.width, this._rootSizeObserver.height, this._diffModel.map((m, r) => m?.diff.read(r)?.mappings.map(m => m.lineRangeMapping)), new AccessibleDiffViewerModelFromEditors(this._editors))).recomputeInitiallyAndOnChange(this._store);\n        const visibility = this._accessibleDiffViewerVisible.map(v => v ? 'hidden' : 'visible');\n        this._register(applyStyle(this.elements.modified, { visibility }));\n        this._register(applyStyle(this.elements.original, { visibility }));\n        this._createDiffEditorContributions();\n        codeEditorService.addDiffEditor(this);\n        this._gutter = derivedDisposable(this, reader => {\n            return this._options.shouldRenderGutterMenu.read(reader)\n                ? this._instantiationService.createInstance(readHotReloadableExport(DiffEditorGutter, reader), this.elements.root, this._diffModel, this._editors, this._options, this._sashLayout, this._boundarySashes)\n                : undefined;\n        });\n        this._register(recomputeInitiallyAndOnChange(this._layoutInfo));\n        derivedDisposable(this, reader => /** @description MovedBlocksLinesPart */ new (readHotReloadableExport(MovedBlocksLinesFeature, reader))(this.elements.root, this._diffModel, this._layoutInfo.map(i => i.originalEditor), this._layoutInfo.map(i => i.modifiedEditor), this._editors)).recomputeInitiallyAndOnChange(this._store, value => {\n            // This is to break the layout info <-> moved blocks lines part dependency cycle.\n            this._movedBlocksLinesPart.set(value, undefined);\n        });\n        this._register(Event.runAndSubscribe(this._editors.modified.onDidChangeCursorPosition, e => this._handleCursorPositionChange(e, true)));\n        this._register(Event.runAndSubscribe(this._editors.original.onDidChangeCursorPosition, e => this._handleCursorPositionChange(e, false)));\n        const isInitializingDiff = this._diffModel.map(this, (m, reader) => {\n            /** @isInitializingDiff isDiffUpToDate */\n            if (!m) {\n                return undefined;\n            }\n            return m.diff.read(reader) === undefined && !m.isDiffUpToDate.read(reader);\n        });\n        this._register(autorunWithStore((reader, store) => {\n            /** @description DiffEditorWidgetHelper.ShowProgress */\n            if (isInitializingDiff.read(reader) === true) {\n                const r = this._editorProgressService.show(true, 1000);\n                store.add(toDisposable(() => r.done()));\n            }\n        }));\n        this._register(autorunWithStore((reader, store) => {\n            store.add(new (readHotReloadableExport(RevertButtonsFeature, reader))(this._editors, this._diffModel, this._options, this));\n        }));\n        this._register(autorunWithStore((reader, store) => {\n            const model = this._diffModel.read(reader);\n            if (!model) {\n                return;\n            }\n            for (const m of [model.model.original, model.model.modified]) {\n                store.add(m.onWillDispose(e => {\n                    onUnexpectedError(new BugIndicatingError('TextModel got disposed before DiffEditorWidget model got reset'));\n                    this.setModel(null);\n                }));\n            }\n        }));\n        this._register(autorun(reader => {\n            this._options.setModel(this._diffModel.read(reader));\n        }));\n    }\n    _createInnerEditor(instantiationService, container, options, editorWidgetOptions) {\n        const editor = instantiationService.createInstance(CodeEditorWidget, container, options, editorWidgetOptions);\n        return editor;\n    }\n    _createDiffEditorContributions() {\n        const contributions = EditorExtensionsRegistry.getDiffEditorContributions();\n        for (const desc of contributions) {\n            try {\n                this._register(this._instantiationService.createInstance(desc.ctor, this));\n            }\n            catch (err) {\n                onUnexpectedError(err);\n            }\n        }\n    }\n    get _targetEditor() { return this._editors.modified; }\n    getEditorType() { return EditorType.IDiffEditor; }\n    layout(dimension) {\n        this._rootSizeObserver.observe(dimension);\n    }\n    hasTextFocus() { return this._editors.original.hasTextFocus() || this._editors.modified.hasTextFocus(); }\n    saveViewState() {\n        const originalViewState = this._editors.original.saveViewState();\n        const modifiedViewState = this._editors.modified.saveViewState();\n        return {\n            original: originalViewState,\n            modified: modifiedViewState,\n            modelState: this._diffModel.get()?.serializeState(),\n        };\n    }\n    restoreViewState(s) {\n        if (s && s.original && s.modified) {\n            const diffEditorState = s;\n            this._editors.original.restoreViewState(diffEditorState.original);\n            this._editors.modified.restoreViewState(diffEditorState.modified);\n            if (diffEditorState.modelState) {\n                this._diffModel.get()?.restoreSerializedState(diffEditorState.modelState);\n            }\n        }\n    }\n    handleInitialized() {\n        this._editors.original.handleInitialized();\n        this._editors.modified.handleInitialized();\n    }\n    createViewModel(model) {\n        return this._instantiationService.createInstance(DiffEditorViewModel, model, this._options);\n    }\n    getModel() { return this._diffModel.get()?.model ?? null; }\n    setModel(model) {\n        const vm = !model ? null\n            : ('model' in model) ? RefCounted.create(model).createNewRef(this)\n                : RefCounted.create(this.createViewModel(model), this);\n        this.setDiffModel(vm);\n    }\n    setDiffModel(viewModel, tx) {\n        const currentModel = this._diffModel.get();\n        if (!viewModel && currentModel) {\n            // Transitioning from a model to no-model\n            this._accessibleDiffViewer.get().close();\n        }\n        if (this._diffModel.get() !== viewModel?.object) {\n            subtransaction(tx, tx => {\n                const vm = viewModel?.object;\n                /** @description DiffEditorWidget.setModel */\n                observableFromEvent.batchEventsGlobally(tx, () => {\n                    this._editors.original.setModel(vm ? vm.model.original : null);\n                    this._editors.modified.setModel(vm ? vm.model.modified : null);\n                });\n                const prevValueRef = this._diffModelSrc.get()?.createNewRef(this);\n                this._diffModelSrc.set(viewModel?.createNewRef(this), tx);\n                setTimeout(() => {\n                    // async, so that this runs after the transaction finished.\n                    // TODO: use the transaction to schedule disposal\n                    prevValueRef?.dispose();\n                }, 0);\n            });\n        }\n    }\n    /**\n     * @param changedOptions Only has values for top-level options that have actually changed.\n     */\n    updateOptions(changedOptions) {\n        this._options.updateOptions(changedOptions);\n    }\n    getContainerDomNode() { return this._domElement; }\n    getOriginalEditor() { return this._editors.original; }\n    getModifiedEditor() { return this._editors.modified; }\n    /**\n     * @deprecated Use `this.getDiffComputationResult().changes2` instead.\n     */\n    getLineChanges() {\n        const diffState = this._diffModel.get()?.diff.get();\n        if (!diffState) {\n            return null;\n        }\n        return toLineChanges(diffState);\n    }\n    revert(diff) {\n        const model = this._diffModel.get();\n        if (!model || !model.isDiffUpToDate.get()) {\n            return;\n        }\n        this._editors.modified.executeEdits('diffEditor', [\n            {\n                range: diff.modified.toExclusiveRange(),\n                text: model.model.original.getValueInRange(diff.original.toExclusiveRange())\n            }\n        ]);\n    }\n    revertRangeMappings(diffs) {\n        const model = this._diffModel.get();\n        if (!model || !model.isDiffUpToDate.get()) {\n            return;\n        }\n        const changes = diffs.map(c => ({\n            range: c.modifiedRange,\n            text: model.model.original.getValueInRange(c.originalRange)\n        }));\n        this._editors.modified.executeEdits('diffEditor', changes);\n    }\n    _goTo(diff) {\n        this._editors.modified.setPosition(new Position(diff.lineRangeMapping.modified.startLineNumber, 1));\n        this._editors.modified.revealRangeInCenter(diff.lineRangeMapping.modified.toExclusiveRange());\n    }\n    goToDiff(target) {\n        const diffs = this._diffModel.get()?.diff.get()?.mappings;\n        if (!diffs || diffs.length === 0) {\n            return;\n        }\n        const curLineNumber = this._editors.modified.getPosition().lineNumber;\n        let diff;\n        if (target === 'next') {\n            diff = diffs.find(d => d.lineRangeMapping.modified.startLineNumber > curLineNumber) ?? diffs[0];\n        }\n        else {\n            diff = findLast(diffs, d => d.lineRangeMapping.modified.startLineNumber < curLineNumber) ?? diffs[diffs.length - 1];\n        }\n        this._goTo(diff);\n        if (diff.lineRangeMapping.modified.isEmpty) {\n            this._accessibilitySignalService.playSignal(AccessibilitySignal.diffLineDeleted, { source: 'diffEditor.goToDiff' });\n        }\n        else if (diff.lineRangeMapping.original.isEmpty) {\n            this._accessibilitySignalService.playSignal(AccessibilitySignal.diffLineInserted, { source: 'diffEditor.goToDiff' });\n        }\n        else if (diff) {\n            this._accessibilitySignalService.playSignal(AccessibilitySignal.diffLineModified, { source: 'diffEditor.goToDiff' });\n        }\n    }\n    revealFirstDiff() {\n        const diffModel = this._diffModel.get();\n        if (!diffModel) {\n            return;\n        }\n        // wait for the diff computation to finish\n        this.waitForDiff().then(() => {\n            const diffs = diffModel.diff.get()?.mappings;\n            if (!diffs || diffs.length === 0) {\n                return;\n            }\n            this._goTo(diffs[0]);\n        });\n    }\n    accessibleDiffViewerNext() { this._accessibleDiffViewer.get().next(); }\n    accessibleDiffViewerPrev() { this._accessibleDiffViewer.get().prev(); }\n    async waitForDiff() {\n        const diffModel = this._diffModel.get();\n        if (!diffModel) {\n            return;\n        }\n        await diffModel.waitForDiff();\n    }\n    mapToOtherSide() {\n        const isModifiedFocus = this._editors.modified.hasWidgetFocus();\n        const source = isModifiedFocus ? this._editors.modified : this._editors.original;\n        const destination = isModifiedFocus ? this._editors.original : this._editors.modified;\n        let destinationSelection;\n        const sourceSelection = source.getSelection();\n        if (sourceSelection) {\n            const mappings = this._diffModel.get()?.diff.get()?.mappings.map(m => isModifiedFocus ? m.lineRangeMapping.flip() : m.lineRangeMapping);\n            if (mappings) {\n                const newRange1 = translatePosition(sourceSelection.getStartPosition(), mappings);\n                const newRange2 = translatePosition(sourceSelection.getEndPosition(), mappings);\n                destinationSelection = Range.plusRange(newRange1, newRange2);\n            }\n        }\n        return { destination, destinationSelection };\n    }\n    switchSide() {\n        const { destination, destinationSelection } = this.mapToOtherSide();\n        destination.focus();\n        if (destinationSelection) {\n            destination.setSelection(destinationSelection);\n        }\n    }\n    exitCompareMove() {\n        const model = this._diffModel.get();\n        if (!model) {\n            return;\n        }\n        model.movedTextToCompare.set(undefined, undefined);\n    }\n    collapseAllUnchangedRegions() {\n        const unchangedRegions = this._diffModel.get()?.unchangedRegions.get();\n        if (!unchangedRegions) {\n            return;\n        }\n        transaction(tx => {\n            for (const region of unchangedRegions) {\n                region.collapseAll(tx);\n            }\n        });\n    }\n    showAllUnchangedRegions() {\n        const unchangedRegions = this._diffModel.get()?.unchangedRegions.get();\n        if (!unchangedRegions) {\n            return;\n        }\n        transaction(tx => {\n            for (const region of unchangedRegions) {\n                region.showAll(tx);\n            }\n        });\n    }\n    _handleCursorPositionChange(e, isModifiedEditor) {\n        if (e?.reason === 3 /* CursorChangeReason.Explicit */) {\n            const diff = this._diffModel.get()?.diff.get()?.mappings.find(m => isModifiedEditor ? m.lineRangeMapping.modified.contains(e.position.lineNumber) : m.lineRangeMapping.original.contains(e.position.lineNumber));\n            if (diff?.lineRangeMapping.modified.isEmpty) {\n                this._accessibilitySignalService.playSignal(AccessibilitySignal.diffLineDeleted, { source: 'diffEditor.cursorPositionChanged' });\n            }\n            else if (diff?.lineRangeMapping.original.isEmpty) {\n                this._accessibilitySignalService.playSignal(AccessibilitySignal.diffLineInserted, { source: 'diffEditor.cursorPositionChanged' });\n            }\n            else if (diff) {\n                this._accessibilitySignalService.playSignal(AccessibilitySignal.diffLineModified, { source: 'diffEditor.cursorPositionChanged' });\n            }\n        }\n    }\n};\nDiffEditorWidget = __decorate([\n    __param(3, IContextKeyService),\n    __param(4, IInstantiationService),\n    __param(5, ICodeEditorService),\n    __param(6, IAccessibilitySignalService),\n    __param(7, IEditorProgressService)\n], DiffEditorWidget);\nexport { DiffEditorWidget };\nfunction toLineChanges(state) {\n    return state.mappings.map(x => {\n        const m = x.lineRangeMapping;\n        let originalStartLineNumber;\n        let originalEndLineNumber;\n        let modifiedStartLineNumber;\n        let modifiedEndLineNumber;\n        let innerChanges = m.innerChanges;\n        if (m.original.isEmpty) {\n            // Insertion\n            originalStartLineNumber = m.original.startLineNumber - 1;\n            originalEndLineNumber = 0;\n            innerChanges = undefined;\n        }\n        else {\n            originalStartLineNumber = m.original.startLineNumber;\n            originalEndLineNumber = m.original.endLineNumberExclusive - 1;\n        }\n        if (m.modified.isEmpty) {\n            // Deletion\n            modifiedStartLineNumber = m.modified.startLineNumber - 1;\n            modifiedEndLineNumber = 0;\n            innerChanges = undefined;\n        }\n        else {\n            modifiedStartLineNumber = m.modified.startLineNumber;\n            modifiedEndLineNumber = m.modified.endLineNumberExclusive - 1;\n        }\n        return {\n            originalStartLineNumber,\n            originalEndLineNumber,\n            modifiedStartLineNumber,\n            modifiedEndLineNumber,\n            charChanges: innerChanges?.map(m => ({\n                originalStartLineNumber: m.originalRange.startLineNumber,\n                originalStartColumn: m.originalRange.startColumn,\n                originalEndLineNumber: m.originalRange.endLineNumber,\n                originalEndColumn: m.originalRange.endColumn,\n                modifiedStartLineNumber: m.modifiedRange.startLineNumber,\n                modifiedStartColumn: m.modifiedRange.startColumn,\n                modifiedEndLineNumber: m.modifiedRange.endLineNumber,\n                modifiedEndColumn: m.modifiedRange.endColumn,\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 * 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/codeEditor/codeEditorWidget.js';\nimport { InternalEditorAction } from '../../common/editorAction.js';\nimport { StandaloneKeybindingService, updateConfigurationService } from './standaloneServices.js';\nimport { IStandaloneThemeService } from '../common/standaloneTheme.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 { 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/model.js';\nimport { ILanguageService } from '../../common/languages/language.js';\nimport { StandaloneCodeEditorService } from './standaloneCodeEditorService.js';\nimport { PLAINTEXT_LANGUAGE_ID } from '../../common/languages/modesRegistry.js';\nimport { ILanguageConfigurationService } from '../../common/languages/languageConfigurationRegistry.js';\nimport { ILanguageFeaturesService } from '../../common/services/languageFeatures.js';\nimport { DiffEditorWidget } from '../../browser/widget/diffEditor/diffEditorWidget.js';\nimport { IAccessibilitySignalService } from '../../../platform/accessibilitySignal/browser/accessibilitySignalService.js';\nimport { mainWindow } from '../../../base/browser/window.js';\nimport { setHoverDelegateFactory } from '../../../base/browser/ui/hover/hoverDelegateFactory.js';\nimport { IHoverService, WorkbenchHoverDelegate } from '../../../platform/hover/browser/hover.js';\nimport { setBaseLayerHoverDelegate } from '../../../base/browser/ui/hover/hoverDelegate2.js';\nlet LAST_GENERATED_COMMAND_ID = 0;\nlet ariaDomNodeCreated = false;\n/**\n * Create ARIA dom node inside parent,\n * or only for the first editor instantiation inside document.body.\n * @param parent container element for ARIA dom node\n */\nfunction createAriaDomNode(parent) {\n    if (!parent) {\n        if (ariaDomNodeCreated) {\n            return;\n        }\n        ariaDomNodeCreated = true;\n    }\n    aria.setARIAContainer(parent || mainWindow.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, hoverService, keybindingService, themeService, notificationService, accessibilityService, languageConfigurationService, languageFeaturesService) {\n        const options = { ..._options };\n        options.ariaLabel = options.ariaLabel || StandaloneCodeEditorNLS.editorViewAccessibleLabel;\n        super(domElement, options, {}, instantiationService, codeEditorService, commandService, contextKeyService, themeService, notificationService, accessibilityService, languageConfigurationService, languageFeaturesService);\n        if (keybindingService instanceof StandaloneKeybindingService) {\n            this._standaloneKeybindingService = keybindingService;\n        }\n        else {\n            this._standaloneKeybindingService = null;\n        }\n        createAriaDomNode(options.ariaContainerElement);\n        setHoverDelegateFactory((placement, enableInstantHover) => instantiationService.createInstance(WorkbenchHoverDelegate, placement, enableInstantHover, {}));\n        setBaseLayerHoverDelegate(hoverService);\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        const commandId = 'DYNAMIC_' + (++LAST_GENERATED_COMMAND_ID);\n        const 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            const 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        const internalAction = new InternalEditorAction(uniqueId, label, label, undefined, precondition, (...args) => Promise.resolve(_descriptor.run(this, ...args)), this._contextKeyService);\n        // Store it under the original id, such that trigger with the original id will work\n        this._actions.set(id, internalAction);\n        toDispose.add(toDisposable(() => {\n            this._actions.delete(id);\n        }));\n        return toDispose;\n    }\n    _triggerCommand(handlerId, payload) {\n        if (this._codeEditorService instanceof StandaloneCodeEditorService) {\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, IHoverService),\n    __param(7, IKeybindingService),\n    __param(8, IThemeService),\n    __param(9, INotificationService),\n    __param(10, IAccessibilityService),\n    __param(11, ILanguageConfigurationService),\n    __param(12, ILanguageFeaturesService)\n], StandaloneCodeEditor);\nexport { StandaloneCodeEditor };\nlet StandaloneEditor = class StandaloneEditor extends StandaloneCodeEditor {\n    constructor(domElement, _options, instantiationService, codeEditorService, commandService, contextKeyService, hoverService, keybindingService, themeService, notificationService, configurationService, accessibilityService, modelService, languageService, languageConfigurationService, languageFeaturesService) {\n        const options = { ..._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        const _model = options.model;\n        delete options.model;\n        super(domElement, options, instantiationService, codeEditorService, commandService, contextKeyService, hoverService, keybindingService, themeService, notificationService, accessibilityService, languageConfigurationService, languageFeaturesService);\n        this._configurationService = configurationService;\n        this._standaloneThemeService = themeService;\n        this._register(themeDomRegistration);\n        let model;\n        if (typeof _model === 'undefined') {\n            const languageId = languageService.getLanguageIdByMimeType(options.language) || options.language || PLAINTEXT_LANGUAGE_ID;\n            model = createTextModel(modelService, languageService, options.value || '', languageId, undefined);\n            this._ownsModel = true;\n        }\n        else {\n            model = _model;\n            this._ownsModel = false;\n        }\n        this._attachModel(model);\n        if (model) {\n            const 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    _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(2, IInstantiationService),\n    __param(3, ICodeEditorService),\n    __param(4, ICommandService),\n    __param(5, IContextKeyService),\n    __param(6, IHoverService),\n    __param(7, IKeybindingService),\n    __param(8, IStandaloneThemeService),\n    __param(9, INotificationService),\n    __param(10, IConfigurationService),\n    __param(11, IAccessibilityService),\n    __param(12, IModelService),\n    __param(13, ILanguageService),\n    __param(14, ILanguageConfigurationService),\n    __param(15, ILanguageFeaturesService)\n], StandaloneEditor);\nexport { StandaloneEditor };\nlet StandaloneDiffEditor2 = class StandaloneDiffEditor2 extends DiffEditorWidget {\n    constructor(domElement, _options, instantiationService, contextKeyService, codeEditorService, themeService, notificationService, configurationService, contextMenuService, editorProgressService, clipboardService, accessibilitySignalService) {\n        const options = { ..._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, {}, contextKeyService, instantiationService, codeEditorService, accessibilitySignalService, editorProgressService);\n        this._configurationService = configurationService;\n        this._standaloneThemeService = themeService;\n        this._register(themeDomRegistration);\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};\nStandaloneDiffEditor2 = __decorate([\n    __param(2, IInstantiationService),\n    __param(3, IContextKeyService),\n    __param(4, ICodeEditorService),\n    __param(5, IStandaloneThemeService),\n    __param(6, INotificationService),\n    __param(7, IConfigurationService),\n    __param(8, IContextMenuService),\n    __param(9, IEditorProgressService),\n    __param(10, IClipboardService),\n    __param(11, IAccessibilitySignalService)\n], StandaloneDiffEditor2);\nexport { StandaloneDiffEditor2 };\n/**\n * @internal\n */\nexport function createTextModel(modelService, languageService, value, languageId, uri) {\n    value = value || '';\n    if (!languageId) {\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, languageService.createByFilepathOrFirstLine(uri || null, firstLine), uri);\n    }\n    return doCreateModel(modelService, value, languageService.createById(languageId), uri);\n}\n/**\n * @internal\n */\nfunction doCreateModel(modelService, value, languageSelection, uri) {\n    return modelService.createModel(value, languageSelection, uri);\n}\n","var __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};\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { h } from '../../../../base/browser/dom.js';\nimport { Button } from '../../../../base/browser/ui/button/button.js';\nimport { Codicon } from '../../../../base/common/codicons.js';\nimport { Disposable, DisposableStore } from '../../../../base/common/lifecycle.js';\nimport { autorun, derived } from '../../../../base/common/observable.js';\nimport { globalTransaction, observableValue } from '../../../../base/common/observableInternal/base.js';\nimport { observableCodeEditor } from '../../observableCodeEditor.js';\nimport { DiffEditorWidget } from '../diffEditor/diffEditorWidget.js';\nimport { createActionViewItem } from '../../../../platform/actions/browser/menuEntryActionViewItem.js';\nimport { MenuWorkbenchToolBar } from '../../../../platform/actions/browser/toolbar.js';\nimport { MenuId } from '../../../../platform/actions/common/actions.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { ActionRunnerWithContext } from './utils.js';\nimport { IContextKeyService } from '../../../../platform/contextkey/common/contextkey.js';\nimport { ServiceCollection } from '../../../../platform/instantiation/common/serviceCollection.js';\nexport class TemplateData {\n    constructor(viewModel, deltaScrollVertical) {\n        this.viewModel = viewModel;\n        this.deltaScrollVertical = deltaScrollVertical;\n    }\n    getId() {\n        return this.viewModel;\n    }\n}\nlet DiffEditorItemTemplate = class DiffEditorItemTemplate extends Disposable {\n    constructor(_container, _overflowWidgetsDomNode, _workbenchUIElementFactory, _instantiationService, _parentContextKeyService) {\n        super();\n        this._container = _container;\n        this._overflowWidgetsDomNode = _overflowWidgetsDomNode;\n        this._workbenchUIElementFactory = _workbenchUIElementFactory;\n        this._instantiationService = _instantiationService;\n        this._viewModel = observableValue(this, undefined);\n        this._collapsed = derived(this, reader => this._viewModel.read(reader)?.collapsed.read(reader));\n        this._editorContentHeight = observableValue(this, 500);\n        this.contentHeight = derived(this, reader => {\n            const h = this._collapsed.read(reader) ? 0 : this._editorContentHeight.read(reader);\n            return h + this._outerEditorHeight;\n        });\n        this._modifiedContentWidth = observableValue(this, 0);\n        this._modifiedWidth = observableValue(this, 0);\n        this._originalContentWidth = observableValue(this, 0);\n        this._originalWidth = observableValue(this, 0);\n        this.maxScroll = derived(this, reader => {\n            const scroll1 = this._modifiedContentWidth.read(reader) - this._modifiedWidth.read(reader);\n            const scroll2 = this._originalContentWidth.read(reader) - this._originalWidth.read(reader);\n            if (scroll1 > scroll2) {\n                return { maxScroll: scroll1, width: this._modifiedWidth.read(reader) };\n            }\n            else {\n                return { maxScroll: scroll2, width: this._originalWidth.read(reader) };\n            }\n        });\n        this._elements = h('div.multiDiffEntry', [\n            h('div.header@header', [\n                h('div.header-content', [\n                    h('div.collapse-button@collapseButton'),\n                    h('div.file-path', [\n                        h('div.title.modified.show-file-icons@primaryPath', []),\n                        h('div.status.deleted@status', ['R']),\n                        h('div.title.original.show-file-icons@secondaryPath', []),\n                    ]),\n                    h('div.actions@actions'),\n                ]),\n            ]),\n            h('div.editorParent', [\n                h('div.editorContainer@editor'),\n            ])\n        ]);\n        this.editor = this._register(this._instantiationService.createInstance(DiffEditorWidget, this._elements.editor, {\n            overflowWidgetsDomNode: this._overflowWidgetsDomNode,\n        }, {}));\n        this.isModifedFocused = observableCodeEditor(this.editor.getModifiedEditor()).isFocused;\n        this.isOriginalFocused = observableCodeEditor(this.editor.getOriginalEditor()).isFocused;\n        this.isFocused = derived(this, reader => this.isModifedFocused.read(reader) || this.isOriginalFocused.read(reader));\n        this._resourceLabel = this._workbenchUIElementFactory.createResourceLabel\n            ? this._register(this._workbenchUIElementFactory.createResourceLabel(this._elements.primaryPath))\n            : undefined;\n        this._resourceLabel2 = this._workbenchUIElementFactory.createResourceLabel\n            ? this._register(this._workbenchUIElementFactory.createResourceLabel(this._elements.secondaryPath))\n            : undefined;\n        this._dataStore = this._register(new DisposableStore());\n        this._headerHeight = 40;\n        this._lastScrollTop = -1;\n        this._isSettingScrollTop = false;\n        const btn = new Button(this._elements.collapseButton, {});\n        this._register(autorun(reader => {\n            btn.element.className = '';\n            btn.icon = this._collapsed.read(reader) ? Codicon.chevronRight : Codicon.chevronDown;\n        }));\n        this._register(btn.onDidClick(() => {\n            this._viewModel.get()?.collapsed.set(!this._collapsed.get(), undefined);\n        }));\n        this._register(autorun(reader => {\n            this._elements.editor.style.display = this._collapsed.read(reader) ? 'none' : 'block';\n        }));\n        this._register(this.editor.getModifiedEditor().onDidLayoutChange(e => {\n            const width = this.editor.getModifiedEditor().getLayoutInfo().contentWidth;\n            this._modifiedWidth.set(width, undefined);\n        }));\n        this._register(this.editor.getOriginalEditor().onDidLayoutChange(e => {\n            const width = this.editor.getOriginalEditor().getLayoutInfo().contentWidth;\n            this._originalWidth.set(width, undefined);\n        }));\n        this._register(this.editor.onDidContentSizeChange(e => {\n            globalTransaction(tx => {\n                this._editorContentHeight.set(e.contentHeight, tx);\n                this._modifiedContentWidth.set(this.editor.getModifiedEditor().getContentWidth(), tx);\n                this._originalContentWidth.set(this.editor.getOriginalEditor().getContentWidth(), tx);\n            });\n        }));\n        this._register(this.editor.getOriginalEditor().onDidScrollChange(e => {\n            if (this._isSettingScrollTop) {\n                return;\n            }\n            if (!e.scrollTopChanged || !this._data) {\n                return;\n            }\n            const delta = e.scrollTop - this._lastScrollTop;\n            this._data.deltaScrollVertical(delta);\n        }));\n        this._register(autorun(reader => {\n            const isActive = this._viewModel.read(reader)?.isActive.read(reader);\n            this._elements.root.classList.toggle('active', isActive);\n        }));\n        this._container.appendChild(this._elements.root);\n        this._outerEditorHeight = this._headerHeight;\n        this._contextKeyService = this._register(_parentContextKeyService.createScoped(this._elements.actions));\n        const instantiationService = this._register(this._instantiationService.createChild(new ServiceCollection([IContextKeyService, this._contextKeyService])));\n        this._register(instantiationService.createInstance(MenuWorkbenchToolBar, this._elements.actions, MenuId.MultiDiffEditorFileToolbar, {\n            actionRunner: this._register(new ActionRunnerWithContext(() => (this._viewModel.get()?.modifiedUri))),\n            menuOptions: {\n                shouldForwardArgs: true,\n            },\n            toolbarOptions: { primaryGroup: g => g.startsWith('navigation') },\n            actionViewItemProvider: (action, options) => createActionViewItem(instantiationService, action, options),\n        }));\n    }\n    setScrollLeft(left) {\n        if (this._modifiedContentWidth.get() - this._modifiedWidth.get() > this._originalContentWidth.get() - this._originalWidth.get()) {\n            this.editor.getModifiedEditor().setScrollLeft(left);\n        }\n        else {\n            this.editor.getOriginalEditor().setScrollLeft(left);\n        }\n    }\n    setData(data) {\n        this._data = data;\n        function updateOptions(options) {\n            return {\n                ...options,\n                scrollBeyondLastLine: false,\n                hideUnchangedRegions: {\n                    enabled: true,\n                },\n                scrollbar: {\n                    vertical: 'hidden',\n                    horizontal: 'hidden',\n                    handleMouseWheel: false,\n                    useShadows: false,\n                },\n                renderOverviewRuler: false,\n                fixedOverflowWidgets: true,\n                overviewRulerBorder: false,\n            };\n        }\n        if (!data) {\n            globalTransaction(tx => {\n                this._viewModel.set(undefined, tx);\n                this.editor.setDiffModel(null, tx);\n                this._dataStore.clear();\n            });\n            return;\n        }\n        const value = data.viewModel.documentDiffItem;\n        globalTransaction(tx => {\n            this._resourceLabel?.setUri(data.viewModel.modifiedUri ?? data.viewModel.originalUri, { strikethrough: data.viewModel.modifiedUri === undefined });\n            let isRenamed = false;\n            let isDeleted = false;\n            let isAdded = false;\n            let flag = '';\n            if (data.viewModel.modifiedUri && data.viewModel.originalUri && data.viewModel.modifiedUri.path !== data.viewModel.originalUri.path) {\n                flag = 'R';\n                isRenamed = true;\n            }\n            else if (!data.viewModel.modifiedUri) {\n                flag = 'D';\n                isDeleted = true;\n            }\n            else if (!data.viewModel.originalUri) {\n                flag = 'A';\n                isAdded = true;\n            }\n            this._elements.status.classList.toggle('renamed', isRenamed);\n            this._elements.status.classList.toggle('deleted', isDeleted);\n            this._elements.status.classList.toggle('added', isAdded);\n            this._elements.status.innerText = flag;\n            this._resourceLabel2?.setUri(isRenamed ? data.viewModel.originalUri : undefined, { strikethrough: true });\n            this._dataStore.clear();\n            this._viewModel.set(data.viewModel, tx);\n            this.editor.setDiffModel(data.viewModel.diffEditorViewModelRef, tx);\n            this.editor.updateOptions(updateOptions(value.options ?? {}));\n        });\n        if (value.onOptionsDidChange) {\n            this._dataStore.add(value.onOptionsDidChange(() => {\n                this.editor.updateOptions(updateOptions(value.options ?? {}));\n            }));\n        }\n        data.viewModel.isAlive.recomputeInitiallyAndOnChange(this._dataStore, value => {\n            if (!value) {\n                this.setData(undefined);\n            }\n        });\n        if (data.viewModel.documentDiffItem.contextKeys) {\n            for (const [key, value] of Object.entries(data.viewModel.documentDiffItem.contextKeys)) {\n                this._contextKeyService.createKey(key, value);\n            }\n        }\n    }\n    render(verticalRange, width, editorScroll, viewPort) {\n        this._elements.root.style.visibility = 'visible';\n        this._elements.root.style.top = `${verticalRange.start}px`;\n        this._elements.root.style.height = `${verticalRange.length}px`;\n        this._elements.root.style.width = `${width}px`;\n        this._elements.root.style.position = 'absolute';\n        // For sticky scroll\n        const maxDelta = verticalRange.length - this._headerHeight;\n        const delta = Math.max(0, Math.min(viewPort.start - verticalRange.start, maxDelta));\n        this._elements.header.style.transform = `translateY(${delta}px)`;\n        globalTransaction(tx => {\n            this.editor.layout({\n                width: width - 2 * 8 - 2 * 1,\n                height: verticalRange.length - this._outerEditorHeight,\n            });\n        });\n        try {\n            this._isSettingScrollTop = true;\n            this._lastScrollTop = editorScroll;\n            this.editor.getOriginalEditor().setScrollTop(editorScroll);\n        }\n        finally {\n            this._isSettingScrollTop = false;\n        }\n        this._elements.header.classList.toggle('shadow', delta > 0 || editorScroll > 0);\n        this._elements.header.classList.toggle('collapsed', delta === maxDelta);\n    }\n    hide() {\n        this._elements.root.style.top = `-100000px`;\n        this._elements.root.style.visibility = 'hidden'; // Some editor parts are still visible\n    }\n};\nDiffEditorItemTemplate = __decorate([\n    __param(3, IInstantiationService),\n    __param(4, IContextKeyService)\n], DiffEditorItemTemplate);\nexport { DiffEditorItemTemplate };\n","export class ObjectPool {\n    constructor(_create) {\n        this._create = _create;\n        this._unused = new Set();\n        this._used = new Set();\n        this._itemData = new Map();\n    }\n    getUnusedObj(data) {\n        let obj;\n        if (this._unused.size === 0) {\n            obj = this._create(data);\n            this._itemData.set(obj, data);\n        }\n        else {\n            const values = [...this._unused.values()];\n            obj = values.find(obj => this._itemData.get(obj).getId() === data.getId()) ?? values[0];\n            this._unused.delete(obj);\n            this._itemData.set(obj, data);\n            obj.setData(data);\n        }\n        this._used.add(obj);\n        return {\n            object: obj,\n            dispose: () => {\n                this._used.delete(obj);\n                if (this._unused.size > 5) {\n                    obj.dispose();\n                }\n                else {\n                    this._unused.add(obj);\n                }\n            }\n        };\n    }\n    dispose() {\n        for (const obj of this._used) {\n            obj.dispose();\n        }\n        for (const obj of this._unused) {\n            obj.dispose();\n        }\n        this._used.clear();\n        this._unused.clear();\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  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 { getWindow, h, scheduleAtNextAnimationFrame } from '../../../../base/browser/dom.js';\nimport { SmoothScrollableElement } from '../../../../base/browser/ui/scrollbar/scrollableElement.js';\nimport { compareBy, numberComparator } from '../../../../base/common/arrays.js';\nimport { findFirstMax } from '../../../../base/common/arraysFind.js';\nimport { BugIndicatingError } from '../../../../base/common/errors.js';\nimport { Disposable, toDisposable } from '../../../../base/common/lifecycle.js';\nimport { autorun, autorunWithStore, derived, derivedWithStore, observableFromEvent, observableValue } from '../../../../base/common/observable.js';\nimport { disposableObservableValue, globalTransaction, transaction } from '../../../../base/common/observableInternal/base.js';\nimport { Scrollable } from '../../../../base/common/scrollable.js';\nimport './style.css';\nimport { ObservableElementSizeObserver } from '../diffEditor/utils.js';\nimport { OffsetRange } from '../../../common/core/offsetRange.js';\nimport { Selection } from '../../../common/core/selection.js';\nimport { EditorContextKeys } from '../../../common/editorContextKeys.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 { DiffEditorItemTemplate, TemplateData } from './diffEditorItemTemplate.js';\nimport { ObjectPool } from './objectPool.js';\nimport { localize } from '../../../../nls.js';\nlet MultiDiffEditorWidgetImpl = class MultiDiffEditorWidgetImpl extends Disposable {\n    constructor(_element, _dimension, _viewModel, _workbenchUIElementFactory, _parentContextKeyService, _parentInstantiationService) {\n        super();\n        this._element = _element;\n        this._dimension = _dimension;\n        this._viewModel = _viewModel;\n        this._workbenchUIElementFactory = _workbenchUIElementFactory;\n        this._parentContextKeyService = _parentContextKeyService;\n        this._parentInstantiationService = _parentInstantiationService;\n        this._scrollableElements = h('div.scrollContent', [\n            h('div@content', {\n                style: {\n                    overflow: 'hidden',\n                }\n            }),\n            h('div.monaco-editor@overflowWidgetsDomNode', {}),\n        ]);\n        this._scrollable = this._register(new Scrollable({\n            forceIntegerValues: false,\n            scheduleAtNextAnimationFrame: (cb) => scheduleAtNextAnimationFrame(getWindow(this._element), cb),\n            smoothScrollDuration: 100,\n        }));\n        this._scrollableElement = this._register(new SmoothScrollableElement(this._scrollableElements.root, {\n            vertical: 1 /* ScrollbarVisibility.Auto */,\n            horizontal: 1 /* ScrollbarVisibility.Auto */,\n            useShadows: false,\n        }, this._scrollable));\n        this._elements = h('div.monaco-component.multiDiffEditor', {}, [\n            h('div', {}, [this._scrollableElement.getDomNode()]),\n            h('div.placeholder@placeholder', {}, [h('div', [localize('noChangedFiles', 'No Changed Files')])]),\n        ]);\n        this._sizeObserver = this._register(new ObservableElementSizeObserver(this._element, undefined));\n        this._objectPool = this._register(new ObjectPool((data) => {\n            const template = this._instantiationService.createInstance(DiffEditorItemTemplate, this._scrollableElements.content, this._scrollableElements.overflowWidgetsDomNode, this._workbenchUIElementFactory);\n            template.setData(data);\n            return template;\n        }));\n        this.scrollTop = observableFromEvent(this, this._scrollableElement.onScroll, () => /** @description scrollTop */ this._scrollableElement.getScrollPosition().scrollTop);\n        this.scrollLeft = observableFromEvent(this, this._scrollableElement.onScroll, () => /** @description scrollLeft */ this._scrollableElement.getScrollPosition().scrollLeft);\n        this._viewItemsInfo = derivedWithStore(this, (reader, store) => {\n            const vm = this._viewModel.read(reader);\n            if (!vm) {\n                return { items: [], getItem: _d => { throw new BugIndicatingError(); } };\n            }\n            const viewModels = vm.items.read(reader);\n            const map = new Map();\n            const items = viewModels.map(d => {\n                const item = store.add(new VirtualizedViewItem(d, this._objectPool, this.scrollLeft, delta => {\n                    this._scrollableElement.setScrollPosition({ scrollTop: this._scrollableElement.getScrollPosition().scrollTop + delta });\n                }));\n                const data = this._lastDocStates?.[item.getKey()];\n                if (data) {\n                    transaction(tx => {\n                        item.setViewState(data, tx);\n                    });\n                }\n                map.set(d, item);\n                return item;\n            });\n            return { items, getItem: d => map.get(d) };\n        });\n        this._viewItems = this._viewItemsInfo.map(this, items => items.items);\n        this._spaceBetweenPx = 0;\n        this._totalHeight = this._viewItems.map(this, (items, reader) => items.reduce((r, i) => r + i.contentHeight.read(reader) + this._spaceBetweenPx, 0));\n        this._contextKeyService = this._register(this._parentContextKeyService.createScoped(this._element));\n        this._instantiationService = this._register(this._parentInstantiationService.createChild(new ServiceCollection([IContextKeyService, this._contextKeyService])));\n        /** This accounts for documents that are not loaded yet. */\n        this._lastDocStates = {};\n        this._contextKeyService.createKey(EditorContextKeys.inMultiDiffEditor.key, true);\n        this._register(autorunWithStore((reader, store) => {\n            const viewModel = this._viewModel.read(reader);\n            if (viewModel && viewModel.contextKeys) {\n                for (const [key, value] of Object.entries(viewModel.contextKeys)) {\n                    const contextKey = this._contextKeyService.createKey(key, undefined);\n                    contextKey.set(value);\n                    store.add(toDisposable(() => contextKey.reset()));\n                }\n            }\n        }));\n        const ctxAllCollapsed = this._parentContextKeyService.createKey(EditorContextKeys.multiDiffEditorAllCollapsed.key, false);\n        this._register(autorun((reader) => {\n            const viewModel = this._viewModel.read(reader);\n            if (viewModel) {\n                const allCollapsed = viewModel.items.read(reader).every(item => item.collapsed.read(reader));\n                ctxAllCollapsed.set(allCollapsed);\n            }\n        }));\n        this._register(autorun((reader) => {\n            /** @description Update widget dimension */\n            const dimension = this._dimension.read(reader);\n            this._sizeObserver.observe(dimension);\n        }));\n        this._register(autorun((reader) => {\n            /** @description Update widget dimension */\n            const items = this._viewItems.read(reader);\n            this._elements.placeholder.classList.toggle('visible', items.length === 0);\n        }));\n        this._scrollableElements.content.style.position = 'relative';\n        this._register(autorun((reader) => {\n            /** @description Update scroll dimensions */\n            const height = this._sizeObserver.height.read(reader);\n            this._scrollableElements.root.style.height = `${height}px`;\n            const totalHeight = this._totalHeight.read(reader);\n            this._scrollableElements.content.style.height = `${totalHeight}px`;\n            const width = this._sizeObserver.width.read(reader);\n            let scrollWidth = width;\n            const viewItems = this._viewItems.read(reader);\n            const max = findFirstMax(viewItems, compareBy(i => i.maxScroll.read(reader).maxScroll, numberComparator));\n            if (max) {\n                const maxScroll = max.maxScroll.read(reader);\n                scrollWidth = width + maxScroll.maxScroll;\n            }\n            this._scrollableElement.setScrollDimensions({\n                width: width,\n                height: height,\n                scrollHeight: totalHeight,\n                scrollWidth,\n            });\n        }));\n        _element.replaceChildren(this._elements.root);\n        this._register(toDisposable(() => {\n            _element.replaceChildren();\n        }));\n        this._register(this._register(autorun(reader => {\n            /** @description Render all */\n            globalTransaction(tx => {\n                this.render(reader);\n            });\n        })));\n    }\n    render(reader) {\n        const scrollTop = this.scrollTop.read(reader);\n        let contentScrollOffsetToScrollOffset = 0;\n        let itemHeightSumBefore = 0;\n        let itemContentHeightSumBefore = 0;\n        const viewPortHeight = this._sizeObserver.height.read(reader);\n        const contentViewPort = OffsetRange.ofStartAndLength(scrollTop, viewPortHeight);\n        const width = this._sizeObserver.width.read(reader);\n        for (const v of this._viewItems.read(reader)) {\n            const itemContentHeight = v.contentHeight.read(reader);\n            const itemHeight = Math.min(itemContentHeight, viewPortHeight);\n            const itemRange = OffsetRange.ofStartAndLength(itemHeightSumBefore, itemHeight);\n            const itemContentRange = OffsetRange.ofStartAndLength(itemContentHeightSumBefore, itemContentHeight);\n            if (itemContentRange.isBefore(contentViewPort)) {\n                contentScrollOffsetToScrollOffset -= itemContentHeight - itemHeight;\n                v.hide();\n            }\n            else if (itemContentRange.isAfter(contentViewPort)) {\n                v.hide();\n            }\n            else {\n                const scroll = Math.max(0, Math.min(contentViewPort.start - itemContentRange.start, itemContentHeight - itemHeight));\n                contentScrollOffsetToScrollOffset -= scroll;\n                const viewPort = OffsetRange.ofStartAndLength(scrollTop + contentScrollOffsetToScrollOffset, viewPortHeight);\n                v.render(itemRange, scroll, width, viewPort);\n            }\n            itemHeightSumBefore += itemHeight + this._spaceBetweenPx;\n            itemContentHeightSumBefore += itemContentHeight + this._spaceBetweenPx;\n        }\n        this._scrollableElements.content.style.transform = `translateY(${-(scrollTop + contentScrollOffsetToScrollOffset)}px)`;\n    }\n};\nMultiDiffEditorWidgetImpl = __decorate([\n    __param(4, IContextKeyService),\n    __param(5, IInstantiationService)\n], MultiDiffEditorWidgetImpl);\nexport { MultiDiffEditorWidgetImpl };\nclass VirtualizedViewItem extends Disposable {\n    constructor(viewModel, _objectPool, _scrollLeft, _deltaScrollVertical) {\n        super();\n        this.viewModel = viewModel;\n        this._objectPool = _objectPool;\n        this._scrollLeft = _scrollLeft;\n        this._deltaScrollVertical = _deltaScrollVertical;\n        this._templateRef = this._register(disposableObservableValue(this, undefined));\n        this.contentHeight = derived(this, reader => this._templateRef.read(reader)?.object.contentHeight?.read(reader) ?? this.viewModel.lastTemplateData.read(reader).contentHeight);\n        this.maxScroll = derived(this, reader => this._templateRef.read(reader)?.object.maxScroll.read(reader) ?? { maxScroll: 0, scrollWidth: 0 });\n        this.template = derived(this, reader => this._templateRef.read(reader)?.object);\n        this._isHidden = observableValue(this, false);\n        this._isFocused = derived(this, reader => this.template.read(reader)?.isFocused.read(reader) ?? false);\n        this.viewModel.setIsFocused(this._isFocused, undefined);\n        this._register(autorun((reader) => {\n            const scrollLeft = this._scrollLeft.read(reader);\n            this._templateRef.read(reader)?.object.setScrollLeft(scrollLeft);\n        }));\n        this._register(autorun(reader => {\n            const ref = this._templateRef.read(reader);\n            if (!ref) {\n                return;\n            }\n            const isHidden = this._isHidden.read(reader);\n            if (!isHidden) {\n                return;\n            }\n            const isFocused = ref.object.isFocused.read(reader);\n            if (isFocused) {\n                return;\n            }\n            this._clear();\n        }));\n    }\n    dispose() {\n        this._clear();\n        super.dispose();\n    }\n    toString() {\n        return `VirtualViewItem(${this.viewModel.documentDiffItem.modified?.uri.toString()})`;\n    }\n    getKey() {\n        return this.viewModel.getKey();\n    }\n    setViewState(viewState, tx) {\n        this.viewModel.collapsed.set(viewState.collapsed, tx);\n        this._updateTemplateData(tx);\n        const data = this.viewModel.lastTemplateData.get();\n        const selections = viewState.selections?.map(Selection.liftSelection);\n        this.viewModel.lastTemplateData.set({\n            ...data,\n            selections,\n        }, tx);\n        const ref = this._templateRef.get();\n        if (ref) {\n            if (selections) {\n                ref.object.editor.setSelections(selections);\n            }\n        }\n    }\n    _updateTemplateData(tx) {\n        const ref = this._templateRef.get();\n        if (!ref) {\n            return;\n        }\n        this.viewModel.lastTemplateData.set({\n            contentHeight: ref.object.contentHeight.get(),\n            selections: ref.object.editor.getSelections() ?? undefined,\n        }, tx);\n    }\n    _clear() {\n        const ref = this._templateRef.get();\n        if (!ref) {\n            return;\n        }\n        transaction(tx => {\n            this._updateTemplateData(tx);\n            ref.object.hide();\n            this._templateRef.set(undefined, tx);\n        });\n    }\n    hide() {\n        this._isHidden.set(true, undefined);\n    }\n    render(verticalSpace, offset, width, viewPort) {\n        this._isHidden.set(false, undefined);\n        let ref = this._templateRef.get();\n        if (!ref) {\n            ref = this._objectPool.getUnusedObj(new TemplateData(this.viewModel, this._deltaScrollVertical));\n            this._templateRef.set(ref, undefined);\n            const selections = this.viewModel.lastTemplateData.get().selections;\n            if (selections) {\n                ref.object.editor.setSelections(selections);\n            }\n        }\n        ref.object.render(verticalSpace, width, offset, viewPort);\n    }\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 { registerColor, editorBackground } from '../../../../platform/theme/common/colorRegistry.js';\nexport const multiDiffEditorHeaderBackground = registerColor('multiDiffEditor.headerBackground', { dark: '#262626', light: 'tab.inactiveBackground', hcDark: 'tab.inactiveBackground', hcLight: 'tab.inactiveBackground', }, localize('multiDiffEditor.headerBackground', 'The background color of the diff editor\\'s header'));\nexport const multiDiffEditorBackground = registerColor('multiDiffEditor.background', editorBackground, localize('multiDiffEditor.background', 'The background color of the multi file diff editor'));\nexport const multiDiffEditorBorder = registerColor('multiDiffEditor.border', { dark: 'sideBarSectionHeader.border', light: '#cccccc', hcDark: 'sideBarSectionHeader.border', hcLight: '#cccccc', }, localize('multiDiffEditor.border', 'The border color of the multi file diff 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 *--------------------------------------------------------------------------------------------*/\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 { derivedWithStore, observableValue, recomputeInitiallyAndOnChange } from '../../../../base/common/observable.js';\nimport { readHotReloadableExport } from '../../../../base/common/hotReloadHelpers.js';\nimport { MultiDiffEditorWidgetImpl } from './multiDiffEditorWidgetImpl.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport './colors.js';\nimport { DiffEditorItemTemplate } from './diffEditorItemTemplate.js';\nlet MultiDiffEditorWidget = class MultiDiffEditorWidget extends Disposable {\n    constructor(_element, _workbenchUIElementFactory, _instantiationService) {\n        super();\n        this._element = _element;\n        this._workbenchUIElementFactory = _workbenchUIElementFactory;\n        this._instantiationService = _instantiationService;\n        this._dimension = observableValue(this, undefined);\n        this._viewModel = observableValue(this, undefined);\n        this._widgetImpl = derivedWithStore(this, (reader, store) => {\n            readHotReloadableExport(DiffEditorItemTemplate, reader);\n            return store.add(this._instantiationService.createInstance((readHotReloadableExport(MultiDiffEditorWidgetImpl, reader)), this._element, this._dimension, this._viewModel, this._workbenchUIElementFactory));\n        });\n        this._register(recomputeInitiallyAndOnChange(this._widgetImpl));\n    }\n};\nMultiDiffEditorWidget = __decorate([\n    __param(2, IInstantiationService)\n], MultiDiffEditorWidget);\nexport { MultiDiffEditorWidget };\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nimport { mainWindow } from '../../../base/browser/window.js';\nimport { Disposable, DisposableStore } from '../../../base/common/lifecycle.js';\nimport { splitLines } from '../../../base/common/strings.js';\nimport { URI } from '../../../base/common/uri.js';\nimport './standalone-tokens.css';\nimport { FontMeasurements } from '../../browser/config/fontMeasurements.js';\nimport { EditorCommand } from '../../browser/editorExtensions.js';\nimport { ICodeEditorService } from '../../browser/services/codeEditorService.js';\nimport { createWebWorker as actualCreateWebWorker } from './standaloneWebWorker.js';\nimport { ApplyUpdateResult, ConfigurationChangedEvent, EditorOptions } from '../../common/config/editorOptions.js';\nimport { EditorZoom } from '../../common/config/editorZoom.js';\nimport { BareFontInfo, FontInfo } from '../../common/config/fontInfo.js';\nimport { EditorType } from '../../common/editorCommon.js';\nimport * as languages from '../../common/languages.js';\nimport { ILanguageService } from '../../common/languages/language.js';\nimport { PLAINTEXT_LANGUAGE_ID } from '../../common/languages/modesRegistry.js';\nimport { NullState, nullTokenize } from '../../common/languages/nullTokenize.js';\nimport { FindMatch, TextModelResolvedOptions } from '../../common/model.js';\nimport { IModelService } from '../../common/services/model.js';\nimport * as standaloneEnums from '../../common/standalone/standaloneEnums.js';\nimport { Colorizer } from './colorizer.js';\nimport { StandaloneDiffEditor2, StandaloneEditor, createTextModel } from './standaloneCodeEditor.js';\nimport { StandaloneKeybindingService, StandaloneServices } from './standaloneServices.js';\nimport { IStandaloneThemeService } from '../common/standaloneTheme.js';\nimport { MenuId, MenuRegistry } from '../../../platform/actions/common/actions.js';\nimport { CommandsRegistry } from '../../../platform/commands/common/commands.js';\nimport { ContextKeyExpr } from '../../../platform/contextkey/common/contextkey.js';\nimport { IKeybindingService } from '../../../platform/keybinding/common/keybinding.js';\nimport { IMarkerService } from '../../../platform/markers/common/markers.js';\nimport { IOpenerService } from '../../../platform/opener/common/opener.js';\nimport { MultiDiffEditorWidget } from '../../browser/widget/multiDiffEditor/multiDiffEditorWidget.js';\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    const instantiationService = StandaloneServices.initialize(override || {});\n    return instantiationService.createInstance(StandaloneEditor, domElement, options);\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    const codeEditorService = StandaloneServices.get(ICodeEditorService);\n    return codeEditorService.onCodeEditorAdd((editor) => {\n        listener(editor);\n    });\n}\n/**\n * Emitted when an diff editor is created.\n * @event\n */\nexport function onDidCreateDiffEditor(listener) {\n    const codeEditorService = StandaloneServices.get(ICodeEditorService);\n    return codeEditorService.onDiffEditorAdd((editor) => {\n        listener(editor);\n    });\n}\n/**\n * Get all the created editors.\n */\nexport function getEditors() {\n    const codeEditorService = StandaloneServices.get(ICodeEditorService);\n    return codeEditorService.listCodeEditors();\n}\n/**\n * Get all the created diff editors.\n */\nexport function getDiffEditors() {\n    const codeEditorService = StandaloneServices.get(ICodeEditorService);\n    return codeEditorService.listDiffEditors();\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    const instantiationService = StandaloneServices.initialize(override || {});\n    return instantiationService.createInstance(StandaloneDiffEditor2, domElement, options);\n}\nexport function createMultiFileDiffEditor(domElement, override) {\n    const instantiationService = StandaloneServices.initialize(override || {});\n    return new MultiDiffEditorWidget(domElement, {}, instantiationService);\n}\n/**\n * Add a command.\n */\nexport function addCommand(descriptor) {\n    if ((typeof descriptor.id !== 'string') || (typeof descriptor.run !== 'function')) {\n        throw new Error('Invalid command descriptor, `id` and `run` are required properties!');\n    }\n    return CommandsRegistry.registerCommand(descriptor.id, descriptor.run);\n}\n/**\n * Add an action to all editors.\n */\nexport function addEditorAction(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    const precondition = ContextKeyExpr.deserialize(descriptor.precondition);\n    const run = (accessor, ...args) => {\n        return EditorCommand.runEditorCommand(accessor, args, precondition, (accessor, editor, args) => Promise.resolve(descriptor.run(editor, ...args)));\n    };\n    const toDispose = new DisposableStore();\n    // Register the command\n    toDispose.add(CommandsRegistry.registerCommand(descriptor.id, run));\n    // Register the context menu item\n    if (descriptor.contextMenuGroupId) {\n        const menuItem = {\n            command: {\n                id: descriptor.id,\n                title: descriptor.label\n            },\n            when: precondition,\n            group: descriptor.contextMenuGroupId,\n            order: descriptor.contextMenuOrder || 0\n        };\n        toDispose.add(MenuRegistry.appendMenuItem(MenuId.EditorContext, menuItem));\n    }\n    // Register the keybindings\n    if (Array.isArray(descriptor.keybindings)) {\n        const keybindingService = StandaloneServices.get(IKeybindingService);\n        if (!(keybindingService instanceof StandaloneKeybindingService)) {\n            console.warn('Cannot add keybinding because the editor is configured with an unrecognized KeybindingService');\n        }\n        else {\n            const keybindingsWhen = ContextKeyExpr.and(precondition, ContextKeyExpr.deserialize(descriptor.keybindingContext));\n            toDispose.add(keybindingService.addDynamicKeybindings(descriptor.keybindings.map((keybinding) => {\n                return {\n                    keybinding,\n                    command: descriptor.id,\n                    when: keybindingsWhen\n                };\n            })));\n        }\n    }\n    return toDispose;\n}\n/**\n * Add a keybinding rule.\n */\nexport function addKeybindingRule(rule) {\n    return addKeybindingRules([rule]);\n}\n/**\n * Add keybinding rules.\n */\nexport function addKeybindingRules(rules) {\n    const keybindingService = StandaloneServices.get(IKeybindingService);\n    if (!(keybindingService instanceof StandaloneKeybindingService)) {\n        console.warn('Cannot add keybinding because the editor is configured with an unrecognized KeybindingService');\n        return Disposable.None;\n    }\n    return keybindingService.addDynamicKeybindings(rules.map((rule) => {\n        return {\n            keybinding: rule.keybinding,\n            command: rule.command,\n            commandArgs: rule.commandArgs,\n            when: ContextKeyExpr.deserialize(rule.when),\n        };\n    }));\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    const languageService = StandaloneServices.get(ILanguageService);\n    const languageId = languageService.getLanguageIdByMimeType(language) || language;\n    return createTextModel(StandaloneServices.get(IModelService), languageService, value, languageId, uri);\n}\n/**\n * Change the language for a model.\n */\nexport function setModelLanguage(model, mimeTypeOrLanguageId) {\n    const languageService = StandaloneServices.get(ILanguageService);\n    const languageId = languageService.getLanguageIdByMimeType(mimeTypeOrLanguageId) || mimeTypeOrLanguageId || PLAINTEXT_LANGUAGE_ID;\n    model.setLanguage(languageService.createById(languageId));\n}\n/**\n * Set the markers for a model.\n */\nexport function setModelMarkers(model, owner, markers) {\n    if (model) {\n        const markerService = StandaloneServices.get(IMarkerService);\n        markerService.changeOne(owner, model.uri, markers);\n    }\n}\n/**\n * Remove all markers of an owner.\n */\nexport function removeAllMarkers(owner) {\n    const markerService = StandaloneServices.get(IMarkerService);\n    markerService.changeAll(owner, []);\n}\n/**\n * Get markers for owner and/or resource\n *\n * @returns list of markers\n */\nexport function getModelMarkers(filter) {\n    const markerService = StandaloneServices.get(IMarkerService);\n    return markerService.read(filter);\n}\n/**\n * Emitted when markers change for a model.\n * @event\n */\nexport function onDidChangeMarkers(listener) {\n    const markerService = StandaloneServices.get(IMarkerService);\n    return markerService.onMarkerChanged(listener);\n}\n/**\n * Get the model that has `uri` if it exists.\n */\nexport function getModel(uri) {\n    const modelService = StandaloneServices.get(IModelService);\n    return modelService.getModel(uri);\n}\n/**\n * Get all the created models.\n */\nexport function getModels() {\n    const modelService = StandaloneServices.get(IModelService);\n    return modelService.getModels();\n}\n/**\n * Emitted when a model is created.\n * @event\n */\nexport function onDidCreateModel(listener) {\n    const modelService = StandaloneServices.get(IModelService);\n    return modelService.onModelAdded(listener);\n}\n/**\n * Emitted right before a model is disposed.\n * @event\n */\nexport function onWillDisposeModel(listener) {\n    const modelService = StandaloneServices.get(IModelService);\n    return modelService.onModelRemoved(listener);\n}\n/**\n * Emitted when a different language is set to a model.\n * @event\n */\nexport function onDidChangeModelLanguage(listener) {\n    const modelService = StandaloneServices.get(IModelService);\n    return modelService.onModelLanguageChanged((e) => {\n        listener({\n            model: e.model,\n            oldLanguage: e.oldLanguageId\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(StandaloneServices.get(IModelService), opts);\n}\n/**\n * Colorize the contents of `domNode` using attribute `data-lang`.\n */\nexport function colorizeElement(domNode, options) {\n    const languageService = StandaloneServices.get(ILanguageService);\n    const themeService = StandaloneServices.get(IStandaloneThemeService);\n    return Colorizer.colorizeElement(themeService, languageService, domNode, options).then(() => {\n        themeService.registerEditorContainer(domNode);\n    });\n}\n/**\n * Colorize `text` using language `languageId`.\n */\nexport function colorize(text, languageId, options) {\n    const languageService = StandaloneServices.get(ILanguageService);\n    const themeService = StandaloneServices.get(IStandaloneThemeService);\n    themeService.registerEditorContainer(mainWindow.document.body);\n    return Colorizer.colorize(languageService, text, languageId, options);\n}\n/**\n * Colorize a line in a model.\n */\nexport function colorizeModelLine(model, lineNumber, tabSize = 4) {\n    const themeService = StandaloneServices.get(IStandaloneThemeService);\n    themeService.registerEditorContainer(mainWindow.document.body);\n    return Colorizer.colorizeModelLine(model, lineNumber, tabSize);\n}\n/**\n * @internal\n */\nfunction getSafeTokenizationSupport(language) {\n    const tokenizationSupport = languages.TokenizationRegistry.get(language);\n    if (tokenizationSupport) {\n        return tokenizationSupport;\n    }\n    return {\n        getInitialState: () => NullState,\n        tokenize: (line, hasEOL, state) => nullTokenize(language, state)\n    };\n}\n/**\n * Tokenize `text` using language `languageId`\n */\nexport function tokenize(text, languageId) {\n    // Needed in order to get the mode registered for subsequent look-ups\n    languages.TokenizationRegistry.getOrCreate(languageId);\n    const tokenizationSupport = getSafeTokenizationSupport(languageId);\n    const lines = splitLines(text);\n    const result = [];\n    let state = tokenizationSupport.getInitialState();\n    for (let i = 0, len = lines.length; i < len; i++) {\n        const line = lines[i];\n        const tokenizationResult = tokenizationSupport.tokenize(line, true, state);\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    const standaloneThemeService = StandaloneServices.get(IStandaloneThemeService);\n    standaloneThemeService.defineTheme(themeName, themeData);\n}\n/**\n * Switches to a theme.\n */\nexport function setTheme(themeName) {\n    const standaloneThemeService = StandaloneServices.get(IStandaloneThemeService);\n    standaloneThemeService.setTheme(themeName);\n}\n/**\n * Clears all cached font measurements and triggers re-measurement.\n */\nexport function remeasureFonts() {\n    FontMeasurements.clearAllFontInfos();\n}\n/**\n * Register a command.\n */\nexport function registerCommand(id, handler) {\n    return CommandsRegistry.registerCommand({ id, handler });\n}\n/**\n * Registers a handler that is called when a link is opened in any editor. The handler callback should return `true` if the link was handled and `false` otherwise.\n * The handler that was registered last will be called first when a link is opened.\n *\n * Returns a disposable that can unregister the opener again.\n */\nexport function registerLinkOpener(opener) {\n    const openerService = StandaloneServices.get(IOpenerService);\n    return openerService.registerOpener({\n        async open(resource) {\n            if (typeof resource === 'string') {\n                resource = URI.parse(resource);\n            }\n            return opener.open(resource);\n        }\n    });\n}\n/**\n * Registers a handler that is called when a resource other than the current model should be opened in the editor (e.g. \"go to definition\").\n * The handler callback should return `true` if the request was handled and `false` otherwise.\n *\n * Returns a disposable that can unregister the opener again.\n *\n * If no handler is registered the default behavior is to do nothing for models other than the currently attached one.\n */\nexport function registerEditorOpener(opener) {\n    const codeEditorService = StandaloneServices.get(ICodeEditorService);\n    return codeEditorService.registerCodeEditorOpenHandler(async (input, source, sideBySide) => {\n        if (!source) {\n            return null;\n        }\n        const selection = input.options?.selection;\n        let selectionOrPosition;\n        if (selection && typeof selection.endLineNumber === 'number' && typeof selection.endColumn === 'number') {\n            selectionOrPosition = selection;\n        }\n        else if (selection) {\n            selectionOrPosition = { lineNumber: selection.startLineNumber, column: selection.startColumn };\n        }\n        if (await opener.openCodeEditor(source, input.resource, selectionOrPosition)) {\n            return source; // return source editor to indicate that this handler has successfully handled the opening\n        }\n        return null; // fallback to other registered handlers\n    });\n}\n/**\n * @internal\n */\nexport function createMonacoEditorAPI() {\n    return {\n        // methods\n        create: create,\n        getEditors: getEditors,\n        getDiffEditors: getDiffEditors,\n        onDidCreateEditor: onDidCreateEditor,\n        onDidCreateDiffEditor: onDidCreateDiffEditor,\n        createDiffEditor: createDiffEditor,\n        addCommand: addCommand,\n        addEditorAction: addEditorAction,\n        addKeybindingRule: addKeybindingRule,\n        addKeybindingRules: addKeybindingRules,\n        createModel: createModel,\n        setModelLanguage: setModelLanguage,\n        setModelMarkers: setModelMarkers,\n        getModelMarkers: getModelMarkers,\n        removeAllMarkers: removeAllMarkers,\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        registerLinkOpener: registerLinkOpener,\n        registerEditorOpener: registerEditorOpener,\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        MinimapSectionHeaderStyle: standaloneEnums.MinimapSectionHeaderStyle,\n        MouseTargetType: standaloneEnums.MouseTargetType,\n        OverlayWidgetPositionPreference: standaloneEnums.OverlayWidgetPositionPreference,\n        OverviewRulerLane: standaloneEnums.OverviewRulerLane,\n        GlyphMarginLane: standaloneEnums.GlyphMarginLane,\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        InjectedTextCursorStops: standaloneEnums.InjectedTextCursorStops,\n        PositionAffinity: standaloneEnums.PositionAffinity,\n        ShowLightbulbIconMode: standaloneEnums.ShowLightbulbIconMode,\n        // classes\n        ConfigurationChangedEvent: ConfigurationChangedEvent,\n        BareFontInfo: BareFontInfo,\n        FontInfo: FontInfo,\n        TextModelResolvedOptions: TextModelResolvedOptions,\n        FindMatch: FindMatch,\n        ApplyUpdateResult: ApplyUpdateResult,\n        EditorZoom: EditorZoom,\n        createMultiFileDiffEditor: createMultiFileDiffEditor,\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}\nfunction compileRegExp(lexer, str, handleSn) {\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    const flags = (lexer.ignoreCase ? 'i' : '') + (lexer.unicode ? 'u' : '');\n    // handle $Sn\n    if (handleSn) {\n        const match = str.match(/\\$[sS](\\d\\d?)/g);\n        if (match) {\n            let lastState = null;\n            let lastRegEx = null;\n            return (state) => {\n                if (lastRegEx && lastState === state) {\n                    return lastRegEx;\n                }\n                lastState = state;\n                lastRegEx = new RegExp(monarchCommon.substituteMatchesRe(lexer, str, state), flags);\n                return lastRegEx;\n            };\n        }\n    }\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        const 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        const inWords = createKeywordMatcher(pat.split('|'), lexer.ignoreCase);\n        tester = function (s) { return (op === '~' ? inWords(s) : !inWords(s)); };\n    }\n    else if (op === '@' || op === '!@') {\n        const 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        const 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            const re = compileRegExp(lexer, '^' + pat + '$', false);\n            tester = function (s) { return (op === '~' ? re.test(s) : !re.test(s)); };\n        }\n        else {\n            tester = function (s, id, matches, state) {\n                const re = compileRegExp(lexer, '^' + monarchCommon.substituteMatches(lexer, pat, id, matches, state) + '$', false);\n                return re.test(s);\n            };\n        }\n    }\n    else { // if (op==='==' || op==='!=') {\n        if (pat.indexOf('$') < 0) {\n            const patx = monarchCommon.fixCase(lexer, pat);\n            tester = function (s) { return (op === '==' ? s === patx : s !== patx); };\n        }\n        else {\n            const patx = monarchCommon.fixCase(lexer, pat);\n            tester = function (s, id, matches, state, eos) {\n                const 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                const 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            const 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 /* monarchCommon.MonarchBracket.Open */;\n                }\n                else if (action.bracket === '@close') {\n                    newAction.bracket = -1 /* monarchCommon.MonarchBracket.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        const 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        const cases = [];\n        // for each case, push a test function and result value\n        for (const 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) + ')', true);\n    }\n    setAction(lexer, act) {\n        this.action = compileAction(lexer, this.name, act);\n    }\n    resolveRegex(state) {\n        if (this.regex instanceof RegExp) {\n            return this.regex;\n        }\n        else {\n            return this.regex(state);\n        }\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    const lexer = {\n        languageId: languageId,\n        includeLF: bool(json.includeLF, false),\n        noThrow: false, // raise exceptions during compilation\n        maxStack: 100,\n        start: (typeof json.start === 'string' ? json.start : null),\n        ignoreCase: bool(json.ignoreCase, false),\n        unicode: bool(json.unicode, false),\n        tokenPostfix: string(json.tokenPostfix, '.' + languageId),\n        defaultToken: string(json.defaultToken, 'source'),\n        usesEmbedded: false, // becomes true if we find a nextEmbedded action\n        stateNames: {},\n        tokenizer: {},\n        brackets: []\n    };\n    // For calling compileAction later on\n    const 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 (const 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    const brackets = [];\n    for (const 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 * as languages from '../../common/languages.js';\nimport { ILanguageService } from '../../common/languages/language.js';\nimport { ILanguageConfigurationService } from '../../common/languages/languageConfigurationRegistry.js';\nimport { ModesRegistry } from '../../common/languages/modesRegistry.js';\nimport { ILanguageFeaturesService } from '../../common/services/languageFeatures.js';\nimport * as standaloneEnums from '../../common/standalone/standaloneEnums.js';\nimport { StandaloneServices } from './standaloneServices.js';\nimport { compile } from '../common/monarch/monarchCompile.js';\nimport { MonarchTokenizer } from '../common/monarch/monarchLexer.js';\nimport { IStandaloneThemeService } from '../common/standaloneTheme.js';\nimport { IConfigurationService } from '../../../platform/configuration/common/configuration.js';\nimport { IMarkerService } from '../../../platform/markers/common/markers.js';\n/**\n * Register information about a new language.\n */\nexport function register(language) {\n    // Intentionally using the `ModesRegistry` here to avoid\n    // instantiating services too quickly in the standalone editor.\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    const languageService = StandaloneServices.get(ILanguageService);\n    return languageService.languageIdCodec.encodeLanguageId(languageId);\n}\n/**\n * An event emitted when a language is associated for the first time with a text model.\n * @event\n */\nexport function onLanguage(languageId, callback) {\n    return StandaloneServices.withServices(() => {\n        const languageService = StandaloneServices.get(ILanguageService);\n        const disposable = languageService.onDidRequestRichLanguageFeatures((encounteredLanguageId) => {\n            if (encounteredLanguageId === languageId) {\n                // stop listening\n                disposable.dispose();\n                // invoke actual listener\n                callback();\n            }\n        });\n        return disposable;\n    });\n}\n/**\n * An event emitted when a language is associated for the first time with a text model or\n * when a language is encountered during the tokenization of another language.\n * @event\n */\nexport function onLanguageEncountered(languageId, callback) {\n    return StandaloneServices.withServices(() => {\n        const languageService = StandaloneServices.get(ILanguageService);\n        const disposable = languageService.onDidRequestBasicLanguageFeatures((encounteredLanguageId) => {\n            if (encounteredLanguageId === languageId) {\n                // stop listening\n                disposable.dispose();\n                // invoke actual listener\n                callback();\n            }\n        });\n        return disposable;\n    });\n}\n/**\n * Set the editing configuration for a language.\n */\nexport function setLanguageConfiguration(languageId, configuration) {\n    const languageService = StandaloneServices.get(ILanguageService);\n    if (!languageService.isRegisteredLanguageId(languageId)) {\n        throw new Error(`Cannot set configuration for unknown language ${languageId}`);\n    }\n    const languageConfigurationService = StandaloneServices.get(ILanguageConfigurationService);\n    return languageConfigurationService.register(languageId, configuration, 100);\n}\n/**\n * @internal\n */\nexport class EncodedTokenizationSupportAdapter {\n    constructor(languageId, actual) {\n        this._languageId = languageId;\n        this._actual = actual;\n    }\n    dispose() {\n        // NOOP\n    }\n    getInitialState() {\n        return this._actual.getInitialState();\n    }\n    tokenize(line, hasEOL, state) {\n        if (typeof this._actual.tokenize === 'function') {\n            return TokenizationSupportAdapter.adaptTokenize(this._languageId, this._actual, line, state);\n        }\n        throw new Error('Not supported!');\n    }\n    tokenizeEncoded(line, hasEOL, state) {\n        const result = this._actual.tokenizeEncoded(line, state);\n        return new languages.EncodedTokenizationResult(result.tokens, result.endState);\n    }\n}\n/**\n * @internal\n */\nexport class TokenizationSupportAdapter {\n    constructor(_languageId, _actual, _languageService, _standaloneThemeService) {\n        this._languageId = _languageId;\n        this._actual = _actual;\n        this._languageService = _languageService;\n        this._standaloneThemeService = _standaloneThemeService;\n    }\n    dispose() {\n        // NOOP\n    }\n    getInitialState() {\n        return this._actual.getInitialState();\n    }\n    static _toClassicTokens(tokens, language) {\n        const 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 languages.Token(startIndex, t.scopes, language);\n            previousStartIndex = startIndex;\n        }\n        return result;\n    }\n    static adaptTokenize(language, actual, line, state) {\n        const actualResult = actual.tokenize(line, state);\n        const tokens = TokenizationSupportAdapter._toClassicTokens(actualResult.tokens, language);\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 languages.TokenizationResult(tokens, endState);\n    }\n    tokenize(line, hasEOL, state) {\n        return TokenizationSupportAdapter.adaptTokenize(this._languageId, this._actual, line, state);\n    }\n    _toBinaryTokens(languageIdCodec, tokens) {\n        const languageId = languageIdCodec.encodeLanguageId(this._languageId);\n        const tokenTheme = this._standaloneThemeService.getColorTheme().tokenTheme;\n        const result = [];\n        let 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) | 1024 /* MetadataConsts.BALANCED_BRACKETS_MASK */;\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;\n            result[resultLen++] = metadata;\n            previousStartIndex = startIndex;\n        }\n        const actualResult = new Uint32Array(resultLen);\n        for (let i = 0; i < resultLen; i++) {\n            actualResult[i] = result[i];\n        }\n        return actualResult;\n    }\n    tokenizeEncoded(line, hasEOL, state) {\n        const actualResult = this._actual.tokenize(line, state);\n        const tokens = this._toBinaryTokens(this._languageService.languageIdCodec, actualResult.tokens);\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 languages.EncodedTokenizationResult(tokens, endState);\n    }\n}\nfunction isATokensProvider(provider) {\n    return (typeof provider.getInitialState === 'function');\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    const standaloneThemeService = StandaloneServices.get(IStandaloneThemeService);\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        standaloneThemeService.setColorMapOverride(result);\n    }\n    else {\n        standaloneThemeService.setColorMapOverride(null);\n    }\n}\n/**\n * @internal\n */\nfunction createTokenizationSupportAdapter(languageId, provider) {\n    if (isEncodedTokensProvider(provider)) {\n        return new EncodedTokenizationSupportAdapter(languageId, provider);\n    }\n    else {\n        return new TokenizationSupportAdapter(languageId, provider, StandaloneServices.get(ILanguageService), StandaloneServices.get(IStandaloneThemeService));\n    }\n}\n/**\n * Register a tokens provider factory for a language. This tokenizer will be exclusive with a tokenizer\n * set using `setTokensProvider` or one created using `setMonarchTokensProvider`, but will work together\n * with a tokens provider set using `registerDocumentSemanticTokensProvider` or `registerDocumentRangeSemanticTokensProvider`.\n */\nexport function registerTokensProviderFactory(languageId, factory) {\n    const adaptedFactory = new languages.LazyTokenizationSupport(async () => {\n        const result = await Promise.resolve(factory.create());\n        if (!result) {\n            return null;\n        }\n        if (isATokensProvider(result)) {\n            return createTokenizationSupportAdapter(languageId, result);\n        }\n        return new MonarchTokenizer(StandaloneServices.get(ILanguageService), StandaloneServices.get(IStandaloneThemeService), languageId, compile(languageId, result), StandaloneServices.get(IConfigurationService));\n    });\n    return languages.TokenizationRegistry.registerFactory(languageId, adaptedFactory);\n}\n/**\n * Set the tokens provider for a language (manual implementation). This tokenizer will be exclusive\n * with a tokenizer created using `setMonarchTokensProvider`, or with `registerTokensProviderFactory`,\n * but will work together with a tokens provider set using `registerDocumentSemanticTokensProvider`\n * or `registerDocumentRangeSemanticTokensProvider`.\n */\nexport function setTokensProvider(languageId, provider) {\n    const languageService = StandaloneServices.get(ILanguageService);\n    if (!languageService.isRegisteredLanguageId(languageId)) {\n        throw new Error(`Cannot set tokens provider for unknown language ${languageId}`);\n    }\n    if (isThenable(provider)) {\n        return registerTokensProviderFactory(languageId, { create: () => provider });\n    }\n    return languages.TokenizationRegistry.register(languageId, createTokenizationSupportAdapter(languageId, provider));\n}\n/**\n * Set the tokens provider for a language (monarch implementation). This tokenizer will be exclusive\n * with a tokenizer set using `setTokensProvider`, or with `registerTokensProviderFactory`, but will\n * work together with a tokens provider set using `registerDocumentSemanticTokensProvider` or\n * `registerDocumentRangeSemanticTokensProvider`.\n */\nexport function setMonarchTokensProvider(languageId, languageDef) {\n    const create = (languageDef) => {\n        return new MonarchTokenizer(StandaloneServices.get(ILanguageService), StandaloneServices.get(IStandaloneThemeService), languageId, compile(languageId, languageDef), StandaloneServices.get(IConfigurationService));\n    };\n    if (isThenable(languageDef)) {\n        return registerTokensProviderFactory(languageId, { create: () => languageDef });\n    }\n    return languages.TokenizationRegistry.register(languageId, create(languageDef));\n}\n/**\n * Register a reference provider (used by e.g. reference search).\n */\nexport function registerReferenceProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.referenceProvider.register(languageSelector, provider);\n}\n/**\n * Register a rename provider (used by e.g. rename symbol).\n */\nexport function registerRenameProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.renameProvider.register(languageSelector, provider);\n}\n/**\n * Register a new symbol-name provider (e.g., when a symbol is being renamed, show new possible symbol-names)\n */\nexport function registerNewSymbolNameProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.newSymbolNamesProvider.register(languageSelector, provider);\n}\n/**\n * Register a signature help provider (used by e.g. parameter hints).\n */\nexport function registerSignatureHelpProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.signatureHelpProvider.register(languageSelector, provider);\n}\n/**\n * Register a hover provider (used by e.g. editor hover).\n */\nexport function registerHoverProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.hoverProvider.register(languageSelector, {\n        provideHover: async (model, position, token, context) => {\n            const word = model.getWordAtPosition(position);\n            return Promise.resolve(provider.provideHover(model, position, token, context)).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(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.documentSymbolProvider.register(languageSelector, provider);\n}\n/**\n * Register a document highlight provider (used by e.g. highlight occurrences).\n */\nexport function registerDocumentHighlightProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.documentHighlightProvider.register(languageSelector, provider);\n}\n/**\n * Register an linked editing range provider.\n */\nexport function registerLinkedEditingRangeProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.linkedEditingRangeProvider.register(languageSelector, provider);\n}\n/**\n * Register a definition provider (used by e.g. go to definition).\n */\nexport function registerDefinitionProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.definitionProvider.register(languageSelector, provider);\n}\n/**\n * Register a implementation provider (used by e.g. go to implementation).\n */\nexport function registerImplementationProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.implementationProvider.register(languageSelector, provider);\n}\n/**\n * Register a type definition provider (used by e.g. go to type definition).\n */\nexport function registerTypeDefinitionProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.typeDefinitionProvider.register(languageSelector, provider);\n}\n/**\n * Register a code lens provider (used by e.g. inline code lenses).\n */\nexport function registerCodeLensProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.codeLensProvider.register(languageSelector, provider);\n}\n/**\n * Register a code action provider (used by e.g. quick fix).\n */\nexport function registerCodeActionProvider(languageSelector, provider, metadata) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.codeActionProvider.register(languageSelector, {\n        providedCodeActionKinds: metadata?.providedCodeActionKinds,\n        documentation: metadata?.documentation,\n        provideCodeActions: (model, range, context, token) => {\n            const markerService = StandaloneServices.get(IMarkerService);\n            const markers = markerService.read({ resource: model.uri }).filter(m => {\n                return Range.areIntersectingOrTouching(m, range);\n            });\n            return provider.provideCodeActions(model, range, { markers, only: context.only, trigger: context.trigger }, token);\n        },\n        resolveCodeAction: provider.resolveCodeAction\n    });\n}\n/**\n * Register a formatter that can handle only entire models.\n */\nexport function registerDocumentFormattingEditProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.documentFormattingEditProvider.register(languageSelector, provider);\n}\n/**\n * Register a formatter that can handle a range inside a model.\n */\nexport function registerDocumentRangeFormattingEditProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.documentRangeFormattingEditProvider.register(languageSelector, provider);\n}\n/**\n * Register a formatter than can do formatting as the user types.\n */\nexport function registerOnTypeFormattingEditProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.onTypeFormattingEditProvider.register(languageSelector, provider);\n}\n/**\n * Register a link provider that can find links in text.\n */\nexport function registerLinkProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.linkProvider.register(languageSelector, provider);\n}\n/**\n * Register a completion item provider (use by e.g. suggestions).\n */\nexport function registerCompletionItemProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.completionProvider.register(languageSelector, provider);\n}\n/**\n * Register a document color provider (used by Color Picker, Color Decorator).\n */\nexport function registerColorProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.colorProvider.register(languageSelector, provider);\n}\n/**\n * Register a folding range provider\n */\nexport function registerFoldingRangeProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.foldingRangeProvider.register(languageSelector, provider);\n}\n/**\n * Register a declaration provider\n */\nexport function registerDeclarationProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.declarationProvider.register(languageSelector, provider);\n}\n/**\n * Register a selection range provider\n */\nexport function registerSelectionRangeProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.selectionRangeProvider.register(languageSelector, provider);\n}\n/**\n * Register a document semantic tokens provider. A semantic tokens provider will complement and enhance a\n * simple top-down tokenizer. Simple top-down tokenizers can be set either via `setMonarchTokensProvider`\n * or `setTokensProvider`.\n *\n * For the best user experience, register both a semantic tokens provider and a top-down tokenizer.\n */\nexport function registerDocumentSemanticTokensProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.documentSemanticTokensProvider.register(languageSelector, provider);\n}\n/**\n * Register a document range semantic tokens provider. A semantic tokens provider will complement and enhance a\n * simple top-down tokenizer. Simple top-down tokenizers can be set either via `setMonarchTokensProvider`\n * or `setTokensProvider`.\n *\n * For the best user experience, register both a semantic tokens provider and a top-down tokenizer.\n */\nexport function registerDocumentRangeSemanticTokensProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.documentRangeSemanticTokensProvider.register(languageSelector, provider);\n}\n/**\n * Register an inline completions provider.\n */\nexport function registerInlineCompletionsProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.inlineCompletionsProvider.register(languageSelector, provider);\n}\nexport function registerInlineEditProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.inlineEditProvider.register(languageSelector, provider);\n}\n/**\n * Register an inlay hints provider.\n */\nexport function registerInlayHintsProvider(languageSelector, provider) {\n    const languageFeaturesService = StandaloneServices.get(ILanguageFeaturesService);\n    return languageFeaturesService.inlayHintsProvider.register(languageSelector, provider);\n}\n/**\n * @internal\n */\nexport function createMonacoLanguagesAPI() {\n    return {\n        register: register,\n        getLanguages: getLanguages,\n        onLanguage: onLanguage,\n        onLanguageEncountered: onLanguageEncountered,\n        getEncodedLanguageId: getEncodedLanguageId,\n        // provider methods\n        setLanguageConfiguration: setLanguageConfiguration,\n        setColorMap: setColorMap,\n        registerTokensProviderFactory: registerTokensProviderFactory,\n        setTokensProvider: setTokensProvider,\n        setMonarchTokensProvider: setMonarchTokensProvider,\n        registerReferenceProvider: registerReferenceProvider,\n        registerRenameProvider: registerRenameProvider,\n        registerNewSymbolNameProvider: registerNewSymbolNameProvider,\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        registerInlineCompletionsProvider: registerInlineCompletionsProvider,\n        registerInlineEditProvider: registerInlineEditProvider,\n        registerInlayHintsProvider: registerInlayHintsProvider,\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        InlayHintKind: standaloneEnums.InlayHintKind,\n        InlineCompletionTriggerKind: standaloneEnums.InlineCompletionTriggerKind,\n        InlineEditTriggerKind: standaloneEnums.InlineEditTriggerKind,\n        CodeActionTriggerType: standaloneEnums.CodeActionTriggerType,\n        NewSymbolNameTag: standaloneEnums.NewSymbolNameTag,\n        NewSymbolNameTriggerKind: standaloneEnums.NewSymbolNameTriggerKind,\n        PartialAcceptTriggerKind: standaloneEnums.PartialAcceptTriggerKind,\n        HoverVerbosityAction: standaloneEnums.HoverVerbosityAction,\n        // classes\n        FoldingRangeKind: languages.FoldingRangeKind,\n        SelectedSuggestionInfo: languages.SelectedSuggestionInfo,\n    };\n}\n","/*---------------------------------------------------------------------------------------------\n *  Copyright (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 '../../../browser/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}, 1 /* InstantiationType.Delayed */);\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 /* KeybindingWeight.EditorContrib */,\n                primary: 9 /* KeyCode.Escape */\n            },\n            precondition: ctxCancellableOperation\n        });\n    }\n    runEditorCommand(accessor, editor) {\n        accessor.get(IEditorCancellationTokens).cancel(editor);\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}\nexport class ExtensionIdentifierSet {\n    constructor(iterable) {\n        this._set = new Set();\n        if (iterable) {\n            for (const value of iterable) {\n                this.add(value);\n            }\n        }\n    }\n    add(id) {\n        this._set.add(ExtensionIdentifier.toKey(id));\n    }\n    has(id) {\n        return this._set.has(ExtensionIdentifier.toKey(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 { asArray, isNonEmptyArray } from '../../../../base/common/arrays.js';\nimport { CancellationToken } from '../../../../base/common/cancellation.js';\nimport { onUnexpectedExternalError } from '../../../../base/common/errors.js';\nimport { Iterable } from '../../../../base/common/iterator.js';\nimport { LinkedList } from '../../../../base/common/linkedList.js';\nimport { assertType } from '../../../../base/common/types.js';\nimport { URI } from '../../../../base/common/uri.js';\nimport { EditorStateCancellationTokenSource, TextModelCancellationTokenSource } from '../../editorState/browser/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 { IEditorWorkerService } from '../../../common/services/editorWorker.js';\nimport { ITextModelService } from '../../../common/services/resolverService.js';\nimport { FormattingEdit } from './formattingEdit.js';\nimport { CommandsRegistry } from '../../../../platform/commands/common/commands.js';\nimport { ExtensionIdentifierSet } from '../../../../platform/extensions/common/extensions.js';\nimport { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';\nimport { ILanguageFeaturesService } from '../../../common/services/languageFeatures.js';\nimport { ILogService } from '../../../../platform/log/common/log.js';\nimport { AccessibilitySignal, IAccessibilitySignalService } from '../../../../platform/accessibilitySignal/browser/accessibilitySignalService.js';\nexport function getRealAndSyntheticDocumentFormattersOrdered(documentFormattingEditProvider, documentRangeFormattingEditProvider, model) {\n    const result = [];\n    const seen = new ExtensionIdentifierSet();\n    // (1) add all document formatter\n    const docFormatter = documentFormattingEditProvider.ordered(model);\n    for (const formatter of docFormatter) {\n        result.push(formatter);\n        if (formatter.extensionId) {\n            seen.add(formatter.extensionId);\n        }\n    }\n    // (2) add all range formatter as document formatter (unless the same extension already did that)\n    const rangeFormatter = documentRangeFormattingEditProvider.ordered(model);\n    for (const formatter of rangeFormatter) {\n        if (formatter.extensionId) {\n            if (seen.has(formatter.extensionId)) {\n                continue;\n            }\n            seen.add(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 { this._selectors = new LinkedList(); }\n    static setFormatterSelector(selector) {\n        const remove = FormattingConflicts._selectors.unshift(selector);\n        return { dispose: remove };\n    }\n    static async select(formatter, document, mode, kind) {\n        if (formatter.length === 0) {\n            return undefined;\n        }\n        const selector = Iterable.first(FormattingConflicts._selectors);\n        if (selector) {\n            return await selector(formatter, document, mode, kind);\n        }\n        return undefined;\n    }\n}\nexport async function formatDocumentRangesWithSelectedProvider(accessor, editorOrModel, rangeOrRanges, mode, progress, token, userGesture) {\n    const instaService = accessor.get(IInstantiationService);\n    const { documentRangeFormattingEditProvider: documentRangeFormattingEditProviderRegistry } = accessor.get(ILanguageFeaturesService);\n    const model = isCodeEditor(editorOrModel) ? editorOrModel.getModel() : editorOrModel;\n    const provider = documentRangeFormattingEditProviderRegistry.ordered(model);\n    const selected = await FormattingConflicts.select(provider, model, mode, 2 /* FormattingKind.Selection */);\n    if (selected) {\n        progress.report(selected);\n        await instaService.invokeFunction(formatDocumentRangesWithProvider, selected, editorOrModel, rangeOrRanges, token, userGesture);\n    }\n}\nexport async function formatDocumentRangesWithProvider(accessor, provider, editorOrModel, rangeOrRanges, token, userGesture) {\n    const workerService = accessor.get(IEditorWorkerService);\n    const logService = accessor.get(ILogService);\n    const accessibilitySignalService = accessor.get(IAccessibilitySignalService);\n    let model;\n    let cts;\n    if (isCodeEditor(editorOrModel)) {\n        model = editorOrModel.getModel();\n        cts = new EditorStateCancellationTokenSource(editorOrModel, 1 /* CodeEditorStateFlag.Value */ | 4 /* CodeEditorStateFlag.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    const ranges = [];\n    let len = 0;\n    for (const 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 computeEdits = async (range) => {\n        logService.trace(`[format][provideDocumentRangeFormattingEdits] (request)`, provider.extensionId?.value, range);\n        const result = (await provider.provideDocumentRangeFormattingEdits(model, range, model.getFormattingOptions(), cts.token)) || [];\n        logService.trace(`[format][provideDocumentRangeFormattingEdits] (response)`, provider.extensionId?.value, result);\n        return result;\n    };\n    const hasIntersectingEdit = (a, b) => {\n        if (!a.length || !b.length) {\n            return false;\n        }\n        // quick exit if the list of ranges are completely unrelated [O(n)]\n        const mergedA = a.reduce((acc, val) => { return Range.plusRange(acc, val.range); }, a[0].range);\n        if (!b.some(x => { return Range.intersectRanges(mergedA, x.range); })) {\n            return false;\n        }\n        // fallback to a complete check [O(n^2)]\n        for (const edit of a) {\n            for (const otherEdit of b) {\n                if (Range.intersectRanges(edit.range, otherEdit.range)) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    const allEdits = [];\n    const rawEditsList = [];\n    try {\n        if (typeof provider.provideDocumentRangesFormattingEdits === 'function') {\n            logService.trace(`[format][provideDocumentRangeFormattingEdits] (request)`, provider.extensionId?.value, ranges);\n            const result = (await provider.provideDocumentRangesFormattingEdits(model, ranges, model.getFormattingOptions(), cts.token)) || [];\n            logService.trace(`[format][provideDocumentRangeFormattingEdits] (response)`, provider.extensionId?.value, result);\n            rawEditsList.push(result);\n        }\n        else {\n            for (const range of ranges) {\n                if (cts.token.isCancellationRequested) {\n                    return true;\n                }\n                rawEditsList.push(await computeEdits(range));\n            }\n            for (let i = 0; i < ranges.length; ++i) {\n                for (let j = i + 1; j < ranges.length; ++j) {\n                    if (cts.token.isCancellationRequested) {\n                        return true;\n                    }\n                    if (hasIntersectingEdit(rawEditsList[i], rawEditsList[j])) {\n                        // Merge ranges i and j into a single range, recompute the associated edits\n                        const mergedRange = Range.plusRange(ranges[i], ranges[j]);\n                        const edits = await computeEdits(mergedRange);\n                        ranges.splice(j, 1);\n                        ranges.splice(i, 1);\n                        ranges.push(mergedRange);\n                        rawEditsList.splice(j, 1);\n                        rawEditsList.splice(i, 1);\n                        rawEditsList.push(edits);\n                        // Restart scanning\n                        i = 0;\n                        j = 0;\n                    }\n                }\n            }\n        }\n        for (const rawEdits of rawEditsList) {\n            if (cts.token.isCancellationRequested) {\n                return true;\n            }\n            const minimalEdits = await workerService.computeMoreMinimalEdits(model.uri, rawEdits);\n            if (minimalEdits) {\n                allEdits.push(...minimalEdits);\n            }\n        }\n    }\n    finally {\n        cts.dispose();\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        editorOrModel.revealPositionInCenterIfOutsideViewport(editorOrModel.getPosition(), 1 /* ScrollType.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    accessibilitySignalService.playSignal(AccessibilitySignal.format, { userGesture });\n    return true;\n}\nexport async function formatDocumentWithSelectedProvider(accessor, editorOrModel, mode, progress, token, userGesture) {\n    const instaService = accessor.get(IInstantiationService);\n    const languageFeaturesService = accessor.get(ILanguageFeaturesService);\n    const model = isCodeEditor(editorOrModel) ? editorOrModel.getModel() : editorOrModel;\n    const provider = getRealAndSyntheticDocumentFormattersOrdered(languageFeaturesService.documentFormattingEditProvider, languageFeaturesService.documentRangeFormattingEditProvider, model);\n    const selected = await FormattingConflicts.select(provider, model, mode, 1 /* FormattingKind.File */);\n    if (selected) {\n        progress.report(selected);\n        await instaService.invokeFunction(formatDocumentWithProvider, selected, editorOrModel, mode, token, userGesture);\n    }\n}\nexport async function formatDocumentWithProvider(accessor, provider, editorOrModel, mode, token, userGesture) {\n    const workerService = accessor.get(IEditorWorkerService);\n    const accessibilitySignalService = accessor.get(IAccessibilitySignalService);\n    let model;\n    let cts;\n    if (isCodeEditor(editorOrModel)) {\n        model = editorOrModel.getModel();\n        cts = new EditorStateCancellationTokenSource(editorOrModel, 1 /* CodeEditorStateFlag.Value */ | 4 /* CodeEditorStateFlag.Position */, undefined, token);\n    }\n    else {\n        model = editorOrModel;\n        cts = new TextModelCancellationTokenSource(editorOrModel, token);\n    }\n    let edits;\n    try {\n        const rawEdits = await provider.provideDocumentFormattingEdits(model, model.getFormattingOptions(), cts.token);\n        edits = await 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 /* FormattingMode.Silent */);\n        if (mode !== 2 /* FormattingMode.Silent */) {\n            editorOrModel.revealPositionInCenterIfOutsideViewport(editorOrModel.getPosition(), 1 /* ScrollType.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    accessibilitySignalService.playSignal(AccessibilitySignal.format, { userGesture });\n    return true;\n}\nexport async function getDocumentRangeFormattingEditsUntilResult(workerService, languageFeaturesService, model, range, options, token) {\n    const providers = languageFeaturesService.documentRangeFormattingEditProvider.ordered(model);\n    for (const provider of providers) {\n        const rawEdits = await Promise.resolve(provider.provideDocumentRangeFormattingEdits(model, range, options, token)).catch(onUnexpectedExternalError);\n        if (isNonEmptyArray(rawEdits)) {\n            return await workerService.computeMoreMinimalEdits(model.uri, rawEdits);\n        }\n    }\n    return undefined;\n}\nexport async function getDocumentFormattingEditsUntilResult(workerService, languageFeaturesService, model, options, token) {\n    const providers = getRealAndSyntheticDocumentFormattersOrdered(languageFeaturesService.documentFormattingEditProvider, languageFeaturesService.documentRangeFormattingEditProvider, model);\n    for (const provider of providers) {\n        const rawEdits = await Promise.resolve(provider.provideDocumentFormattingEdits(model, options, token)).catch(onUnexpectedExternalError);\n        if (isNonEmptyArray(rawEdits)) {\n            return await workerService.computeMoreMinimalEdits(model.uri, rawEdits);\n        }\n    }\n    return undefined;\n}\nexport function getOnTypeFormattingEdits(workerService, languageFeaturesService, model, position, ch, options, token) {\n    const providers = languageFeaturesService.onTypeFormattingEditProvider.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, token)).catch(onUnexpectedExternalError).then(edits => {\n        return workerService.computeMoreMinimalEdits(model.uri, edits);\n    });\n}\nCommandsRegistry.registerCommand('_executeFormatRangeProvider', async function (accessor, ...args) {\n    const [resource, range, options] = args;\n    assertType(URI.isUri(resource));\n    assertType(Range.isIRange(range));\n    const resolverService = accessor.get(ITextModelService);\n    const workerService = accessor.get(IEditorWorkerService);\n    const languageFeaturesService = accessor.get(ILanguageFeaturesService);\n    const reference = await resolverService.createModelReference(resource);\n    try {\n        return getDocumentRangeFormattingEditsUntilResult(workerService, languageFeaturesService, reference.object.textEditorModel, Range.lift(range), options, CancellationToken.None);\n    }\n    finally {\n        reference.dispose();\n    }\n});\nCommandsRegistry.registerCommand('_executeFormatDocumentProvider', async function (accessor, ...args) {\n    const [resource, options] = args;\n    assertType(URI.isUri(resource));\n    const resolverService = accessor.get(ITextModelService);\n    const workerService = accessor.get(IEditorWorkerService);\n    const languageFeaturesService = accessor.get(ILanguageFeaturesService);\n    const reference = await resolverService.createModelReference(resource);\n    try {\n        return getDocumentFormattingEditsUntilResult(workerService, languageFeaturesService, reference.object.textEditorModel, options, CancellationToken.None);\n    }\n    finally {\n        reference.dispose();\n    }\n});\nCommandsRegistry.registerCommand('_executeFormatOnTypeProvider', async 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 resolverService = accessor.get(ITextModelService);\n    const workerService = accessor.get(IEditorWorkerService);\n    const languageFeaturesService = accessor.get(ILanguageFeaturesService);\n    const reference = await resolverService.createModelReference(resource);\n    try {\n        return getOnTypeFormattingEdits(workerService, languageFeaturesService, reference.object.textEditorModel, Position.lift(position), ch, options, CancellationToken.None);\n    }\n    finally {\n        reference.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 { EditorOptions } from './common/config/editorOptions.js';\nimport { createMonacoBaseAPI } from './common/services/editorBaseApi.js';\nimport { createMonacoEditorAPI } from './standalone/browser/standaloneEditor.js';\nimport { createMonacoLanguagesAPI } from './standalone/browser/standaloneLanguages.js';\nimport { FormattingConflicts } from './contrib/format/browser/format.js';\n// Set defaults for standalone editor\nEditorOptions.wrappingIndent.defaultValue = 0 /* WrappingIndent.None */;\nEditorOptions.glyphMargin.defaultValue = false;\nEditorOptions.autoIndent.defaultValue = 3 /* EditorAutoIndentStrategy.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;\nconst monacoEnvironment = globalThis.MonacoEnvironment;\nif (monacoEnvironment?.globalAPI || (typeof define === 'function' && define.amd)) {\n    globalThis.monaco = api;\n}\nif (typeof globalThis.require !== 'undefined' && typeof globalThis.require.config === 'function') {\n    globalThis.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","import * as monaco from 'monaco-editor/esm/vs/editor/editor.api';\nimport { MergedOutputs } from \"./openscad-worker\";\n\nconst ignoredLogs = new Set([\n  'Could not initialize localization.'\n]);\n\ntype MergedOutputsOptions = {\n  shiftSourceLines?: {\n    sourcePath: string,\n    skipLines: number,\n  }\n}\n\nexport const processMergedOutputs = (outputs: MergedOutputs, opts: MergedOutputsOptions) => ({\n  logText: joinMergedOutputs(outputs, opts),\n  markers: parseMergedOutputs(outputs, opts)\n});\n\nexport function joinMergedOutputs(mergedOutputs: MergedOutputs, opts: MergedOutputsOptions) {\n  let allLines = [];\n  for (const {stderr, stdout, error} of mergedOutputs){\n    const line = stderr ?? stdout ?? `EXCEPTION: ${error}`;\n    if (ignoredLogs.has(line)) {\n      continue;\n    }\n    allLines.push(line);\n  }\n\n  return allLines.join(\"\\n\");\n}\n\nexport function parseMergedOutputs(mergedOutputs: MergedOutputs, opts: MergedOutputsOptions): monaco.editor.IMarkerData[] {\n  let unmatchedLines = [];\n\n  const markers = [];\n  let warningCount = 0, errorCount = 0;\n  const addError = (error: string, file: string, line: number) => {\n    markers.push({\n      startLineNumber: Number(line),\n      startColumn: 1,\n      endLineNumber: Number(line),\n      endColumn: 1000,\n      message: error,\n      severity: monaco.MarkerSeverity.Error\n    })\n  }\n  const shiftSourceName = opts.shiftSourceLines && opts.shiftSourceLines.sourcePath;\n  const getLine = (path: string, lineStr: string) => {\n    const line = Number(lineStr);\n    if (shiftSourceName && path.endsWith(shiftSourceName)) {\n      return line - opts.shiftSourceLines!.skipLines;\n    } else {\n      return line;\n    }\n  }\n  for (const {stderr, stdout, error} of mergedOutputs){\n    if (stderr) {\n      if (stderr.startsWith('ERROR:')) errorCount++;\n      if (stderr.startsWith('WARNING:')) warningCount++;\n\n      let m = /^ERROR: Parser error in file \"([^\"]+)\", line (\\d+): (.*)$/.exec(stderr)\n      if (m) {\n        const [_, file, line, error] = m\n        addError(error, file, getLine(file, line));\n        continue;\n      }\n\n      m = /^ERROR: Parser error: (.*?) in file ([^\",]+), line (\\d+)$/.exec(stderr)\n      if (m) {\n        const [_, error, file, line] = m\n        addError(error, file, getLine(file, line));\n        continue;\n      }\n\n      m = /^WARNING: (.*?),? in file ([^,]+), line (\\d+)\\.?/.exec(stderr);\n      if (m) {\n        const [_, warning, file, line] = m\n        markers.push({\n          startLineNumber: getLine(file, line),\n          startColumn: 1,\n          endLineNumber: getLine(file, line),\n          endColumn: 1000,\n          message: warning,\n          severity: monaco.MarkerSeverity.Warning\n        })\n        continue;\n      }\n    }\n    unmatchedLines.push(stderr ?? stdout ?? `EXCEPTION: ${error}`);\n  }\n  if (errorCount || warningCount) unmatchedLines = [`${errorCount} errors, ${warningCount} warnings!`, '', ...unmatchedLines];\n\n  // logsElement.innerText = unmatchedLines.join(\"\\n\")\n  \n  return markers;\n}","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport * as monaco from 'monaco-editor/esm/vs/editor/editor.api';\nimport { ProcessStreams, spawnOpenSCAD } from \"./openscad-runner.ts\";\nimport { processMergedOutputs } from \"./output-parser.ts\";\nimport { AbortablePromise, turnIntoDelayableExecution } from '../utils.ts';\nimport { Source } from '../state/app-state.ts';\nimport { VALID_EXPORT_FORMATS_2D, VALID_EXPORT_FORMATS_3D } from '../state/formats.ts';\nimport { ParameterSet } from '../state/customizer-types.ts';\n\nconst syntaxDelay = 300;\n\ntype SyntaxCheckArgs = {\n  activePath: string,\n  sources: Source[],\n}\ntype SyntaxCheckOutput = {logText: string, markers: monaco.editor.IMarkerData[], parameterSet?: ParameterSet};\nexport const checkSyntax =\n  turnIntoDelayableExecution(syntaxDelay, (sargs: SyntaxCheckArgs) => {\n    const {\n      activePath,\n      sources,\n    } = sargs;\n    \n    const content = '$preview=true;\\n' + sources[0].content;\n\n    const outFile = 'out.json';\n    const job = spawnOpenSCAD({\n      mountArchives: true,\n      inputs: sources,\n      args: [activePath, \"-o\", outFile, \"--export-format=param\"],\n      outputPaths: [outFile],\n    }, (streams) => {\n      console.log(JSON.stringify(streams));\n    });\n\n    return AbortablePromise<SyntaxCheckOutput>((res, rej) => {\n      (async () => {\n        try {\n          const result = await job;\n          // console.log(result);\n\n          let parameterSet: ParameterSet | undefined = undefined;\n          if (result.outputs && result.outputs.length == 1) {\n            let [[, content]] = result.outputs;\n            content = new TextDecoder().decode(content as any);\n            try {\n              parameterSet = JSON.parse(content)\n              // console.log('PARAMETER SET', JSON.stringify(parameterSet, null, 2))\n            } catch (e) {\n              console.error(`Error while parsing parameter set: ${e}\\n${content}`);\n            }\n          } else {\n            console.error('No output from runner!');\n          }\n\n          res({\n            ...processMergedOutputs(result.mergedOutputs, {shiftSourceLines: {\n              sourcePath: sources[0].path,\n              skipLines: 1,\n            }}),\n            parameterSet,\n          });\n        } catch (e) {\n          console.error(e);\n          rej(e);\n        }\n      })()\n      return () => job.kill();\n    });\n  });\n\nvar renderDelay = 1000;\nexport type RenderOutput = {\n  outFile: File,\n  logText: string,\n  markers: monaco.editor.IMarkerData[],\n  elapsedMillis: number}\n\nexport type RenderArgs = {\n  scadPath: string,\n  sources: Source[],\n  vars?: {[name: string]: any},\n  features?: string[],\n  extraArgs?: string[],\n  isPreview: boolean,\n  mountArchives: boolean,\n  renderFormat: keyof typeof VALID_EXPORT_FORMATS_2D | keyof typeof VALID_EXPORT_FORMATS_3D,\n  streamsCallback: (ps: ProcessStreams) => void,\n}\n\nfunction formatValue(any: any): string {\n  if (typeof any === 'string') {\n    return `\"${any}\"`;\n  } else if (any instanceof Array) {\n    return `[${any.map(formatValue).join(', ')}]`;\n  } else {\n    return `${any}`;\n  }\n}\nexport const render =\n turnIntoDelayableExecution(renderDelay, (renderArgs: RenderArgs) => {\n    const {\n      scadPath,\n      sources,\n      isPreview,\n      mountArchives,\n      vars,\n      features,\n      extraArgs,\n      renderFormat,\n      streamsCallback,\n    }  = renderArgs;\n\n    const prefixLines: string[] = [];\n    if (isPreview) {\n      // TODO: add render-modifiers feature to OpenSCAD.\n      prefixLines.push('$preview=true;');\n    }\n    if (!scadPath.endsWith('.scad')) throw new Error('First source must be a .scad file, got ' + sources[0].path + ' instead');\n    \n    const source = sources.filter(s => s.path === scadPath)[0];\n    if (!source) throw new Error('Active path not found in sources!');\n\n    if (source.content == null) throw new Error('Source content is null!');\n    const content = [...prefixLines, source.content].join('\\n');\n\n    const actualRenderFormat = renderFormat == 'glb' || renderFormat == '3mf' ? 'off' : renderFormat;\n    const stem = scadPath.replace(/\\.scad$/, '').split('/').pop();\n    const outFile = `${stem}.${actualRenderFormat}`;\n    const args = [\n      scadPath,\n      \"-o\", outFile,\n      \"--backend=manifold\",\n      \"--export-format=\" + (actualRenderFormat == 'stl' ? 'binstl' : actualRenderFormat),\n      ...(Object.entries(vars ?? {}).flatMap(([k, v]) => [`-D${k}=${formatValue(v)}`])),\n      ...(features ?? []).map(f => `--enable=${f}`),\n      ...(extraArgs ?? [])\n    ]\n    \n    const job = spawnOpenSCAD({\n      mountArchives: mountArchives,\n      inputs: sources.map(s => s.path === scadPath ? {path: s.path, content} : s),\n      args,\n      outputPaths: [outFile],\n    }, streamsCallback);\n\n    return AbortablePromise<RenderOutput>((resolve, reject) => {\n      (async () => {\n        try {\n          const result = await job;\n          // console.log(result);\n\n          const {logText, markers} = processMergedOutputs(result.mergedOutputs, {\n            shiftSourceLines: {\n              sourcePath: source.path,\n              skipLines: prefixLines.length\n            }\n          });\n    \n          if (result.error) {\n            reject(result.error);\n          }\n          \n          const [output] = result.outputs ?? [];\n          if (!output) {\n            reject(new Error('No output from runner!'));\n            return;\n          }\n          const [filePath, content] = output;\n          const filePathFragments = filePath.split('/');\n          let fileName = filePathFragments[filePathFragments.length - 1];\n\n          // TODO: have the runner accept and return files.\n          const type = filePath.endsWith('.svg') ? 'image/svg+xml' : 'application/octet-stream';\n          let blob = new Blob([content]);\n          let outFile = new File([blob], fileName, {type});\n          resolve({outFile, logText, markers, elapsedMillis: result.elapsedMillis});\n        } catch (e) {\n          console.error(e);\n          reject(e);\n        }\n      })();\n\n      return () => job.kill()\n    });\n  });\n\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\ntype KVObject = {[key: string]: any};\ntype KVEntriesMap = Map<KVObject, [string, any][]>;\n\n/**\n * \n * @param o the object we want to mutate\n * @param mutate a function that modifies any part of the object.\n * @returns an object tree in which each node is identical to its original if no value under its subtree truly changed. If any did, the node's identity is new.\n */\nexport function bubbleUpDeepMutations<T extends KVObject>(o: T, mutate: (o: T) => void): T {\n  const allOriginalEntries = collectObjectEntriesDeeply(o);\n  mutate(o);\n  return bubbleChangesUp(o, allOriginalEntries) as T;\n}\n\nfunction collectObjectEntriesDeeply(o: KVObject, out: KVEntriesMap = new Map()): KVEntriesMap {\n  if (out.get(o)) {\n    return out; // Graph cycle\n  }\n  \n  const entries = [...Object.entries(o)];\n  out.set(o, entries);\n  for (const [, v] of entries) {\n    if (typeof v !== 'object') {\n      continue;\n    }\n    if (v instanceof RegExp ||\n      v instanceof Blob) {\n      continue;\n    }\n    collectObjectEntriesDeeply(v, out);\n  }\n  return out;\n}\n\nfunction bubbleChangesUp(o: KVObject, allOriginalEntries: KVEntriesMap) {\n  if (o == null || typeof o !== 'object') {\n    return o;\n  }\n  const entries = Object.entries(o);\n  const originalEntries = allOriginalEntries.get(o);\n  if (!originalEntries) {\n    // the object has already changed as we can't find it, return it = new\n    return o;\n  }\n\n  let changed = false;\n  if (entries.length != originalEntries.length) {\n    changed = true;\n  } else {\n    for (let i = 0; i < entries.length; i++) {\n      const [originalName, originalValue] = originalEntries[i];\n      const [newName, newValue] = entries[i];\n      if (originalName !== newName) {\n        changed = true;\n        break;\n      }\n      const updatedValue = bubbleChangesUp(newValue, allOriginalEntries);\n      if (updatedValue !== originalValue) {\n        changed = true;\n        break;\n      }\n    }\n  }\n  return changed ? Object.fromEntries(entries) : o;\n}","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e<h.length;e++)u(h[e]);return u}({1:[function(e,t,r){\"use strict\";var d=e(\"./utils\"),c=e(\"./support\"),p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,n,i,s,a,o,h=[],u=0,l=e.length,f=l,c=\"string\"!==d.getTypeOf(e);u<e.length;)f=l-u,n=c?(t=e[u++],r=u<l?e[u++]:0,u<l?e[u++]:0):(t=e.charCodeAt(u++),r=u<l?e.charCodeAt(u++):0,u<l?e.charCodeAt(u++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<f?(15&r)<<2|n>>6:64,o=2<f?63&n:64,h.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join(\"\")},r.decode=function(e){var t,r,n,i,s,a,o=0,h=0,u=\"data:\";if(e.substr(0,u.length)===u)throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,\"\")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=c.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,n=function(e,t,r,n,i){var s=I.transformTo(\"string\",i(n));return R.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+A(e,2)+A(e,2)+A(t,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on(\"error\",function(e){t.error(e)}),this},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(e){var t=this._sources;if(!i.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},s.prototype.lock=function(){i.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=s},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(e,t,r){\"use strict\";var u=e(\"../compressions\"),n=e(\"./ZipFileWorker\");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),h=0;try{e.forEach(function(e,t){h++;var r=function(e,t){var r=e||t,n=u[r];if(!n)throw new Error(r+\" is not a valid compression method !\");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo(\"file\",{name:e,dir:i,date:s,comment:t.comment||\"\",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(e){o.error(e)}return o}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(e,t,r){\"use strict\";function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files=Object.create(null),this.comment=null,this.root=\"\",this.clone=function(){var e=new n;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e(\"./object\")).loadAsync=e(\"./load\"),n.support=e(\"./support\"),n.defaults=e(\"./defaults\"),n.version=\"3.10.1\",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e(\"./external\"),t.exports=n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(e,t,r){\"use strict\";var u=e(\"./utils\"),i=e(\"./external\"),n=e(\"./utf8\"),s=e(\"./zipEntries\"),a=e(\"./stream/Crc32Probe\"),l=e(\"./nodejsUtils\");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new a);r.on(\"error\",function(e){t(e)}).on(\"end\",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error(\"Corrupted zip : CRC32 mismatch\")):e()}).resume()})}t.exports=function(e,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:n.utf8decode}),l.isNode&&l.isStream(e)?i.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):u.prepareContent(\"the loaded zip file\",e,!0,o.optimizedBinaryString,o.base64).then(function(e){var t=new s(o);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(o.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n],s=i.fileNameStr,a=u.resolve(i.fileNameStr);h.file(a,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:o.createFolders}),i.dir||(h.file(a).unsafeOriginalName=s)}return t.zipComment.length&&(h.comment=t.zipComment),h})}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../stream/GenericWorker\");function s(e,t){i.call(this,\"Nodejs stream input adapter for \"+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(s,i),s.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on(\"data\",function(e){t.push({data:e,meta:{percent:0}})}).on(\"error\",function(e){t.isPaused?this.generatedError=e:t.error(e)}).on(\"end\",function(){t.isPaused?t._upstreamEnded=!0:t.end()})},s.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=s},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(e,t,r){\"use strict\";var i=e(\"readable-stream\").Readable;function n(e,t,r){i.call(this,t),this._helper=e;var n=this;e.on(\"data\",function(e,t){n.push(e)||n._helper.pause(),r&&r(t)}).on(\"error\",function(e){n.emit(\"error\",e)}).on(\"end\",function(){n.push(null)})}e(\"../utils\").inherits(n,i),n.prototype._read=function(){this._helper.resume()},t.exports=n},{\"../utils\":32,\"readable-stream\":16}],14:[function(e,t,r){\"use strict\";t.exports={isNode:\"undefined\"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if(\"number\"==typeof e)throw new Error('The \"data\" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.pause&&\"function\"==typeof e.resume}}},{}],15:[function(e,t,r){\"use strict\";function s(e,t,r){var n,i=u.getTypeOf(t),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),\"string\"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(e=g(e)),s.createFolders&&(n=_(e))&&b.call(this,n,!0);var a=\"string\"===i&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t=\"\",s.compression=\"STORE\",i=\"string\");var o=null;o=t instanceof c||t instanceof l?t:p.isNode&&p.isStream(t)?new m(e,t):u.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var h=new d(e,o,s);this.files[e]=h}var i=e(\"./utf8\"),u=e(\"./utils\"),l=e(\"./stream/GenericWorker\"),a=e(\"./stream/StreamHelper\"),f=e(\"./defaults\"),c=e(\"./compressedObject\"),d=e(\"./zipObject\"),o=e(\"./generate\"),p=e(\"./nodejsUtils\"),m=e(\"./nodejs/NodejsStreamInputAdapter\"),_=function(e){\"/\"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return 0<t?e.substring(0,t):\"\"},g=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},b=function(e,t){return t=void 0!==t?t:f.createFolders,e=g(e),this.files[e]||s.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function h(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var n={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(r){var n=[];return this.forEach(function(e,t){r(e,t)&&n.push(t)}),n},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,s.call(this,e,t,r),this;if(h(e)){var n=e;return this.filter(function(e,t){return!t.dir&&n.test(e)})}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(e,t){return t.dir&&r.test(e)});var e=this.root+r,t=b.call(this,e),n=this.clone();return n.root=t.name,n},remove:function(r){r=this.root+r;var e=this.files[r];if(e||(\"/\"!==r.slice(-1)&&(r+=\"/\"),e=this.files[r]),e&&!e.dir)delete this.files[r];else for(var t=this.filter(function(e,t){return t.name.slice(0,r.length)===r}),n=0;n<t.length;n++)delete this.files[t[n].name];return this},generate:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(e){var t,r={};try{if((r=u.extend(e||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:i.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");u.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var n=r.comment||this.comment||\"\";t=o.generateWorker(this,r,n)}catch(e){(t=new l(\"error\")).error(e)}return new a(t,r.type||\"string\",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type=\"nodebuffer\"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=n},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(e,t,r){\"use strict\";t.exports=e(\"stream\")},{stream:void 0}],17:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data[this.zero+e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===t&&this.data[s+1]===r&&this.data[s+2]===n&&this.data[s+3]===i)return s-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.readData(4);return t===s[0]&&r===s[1]&&n===s[2]&&i===s[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],18:[function(e,t,r){\"use strict\";var n=e(\"../utils\");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.end()}),e.on(\"error\",function(e){t.error(e)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r<t.length;r++)s+=t[r].length;switch(e){case\"string\":return t.join(\"\");case\"array\":return Array.prototype.concat.apply([],t);case\"uint8array\":for(i=new Uint8Array(s),r=0;r<t.length;r++)i.set(t[r],n),n+=t[r].length;return i;case\"nodebuffer\":return Buffer.concat(t);default:throw new Error(\"concat : unsupported type '\"+e+\"'\")}}(i,n),a);t(e)}catch(e){r(e)}n=[]}).resume()})}function f(e,t,r){var n=t;switch(t){case\"blob\":case\"arraybuffer\":n=\"uint8array\";break;case\"base64\":n=\"string\"}try{this._internalType=n,this._outputType=t,this._mimeType=r,h.checkSupport(n),this._worker=e.pipe(new i(n)),e.lock()}catch(e){this._worker=new s(\"error\"),this._worker.error(e)}}f.prototype={accumulate:function(e){return l(this,e)},on:function(e,t){var r=this;return\"data\"===e?this._worker.on(e,function(e){t.call(r,e.data,e.meta)}):this._worker.on(e,function(){h.delay(t,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(h.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new o(this,{objectMode:\"nodebuffer\"!==this._outputType},e)}},t.exports=f},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(e,t,r){\"use strict\";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=\"undefined\"!=typeof Buffer,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:\"application/zip\"}).size}catch(e){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(n),r.blob=0===i.getBlob(\"application/zip\").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e(\"readable-stream\").Readable}catch(e){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(e,t,s){\"use strict\";for(var o=e(\"./utils\"),h=e(\"./support\"),r=e(\"./nodejsUtils\"),n=e(\"./stream/GenericWorker\"),u=new Array(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;u[254]=u[254]=1;function a(){n.call(this,\"utf-8 decode\"),this.leftOver=null}function l(){n.call(this,\"utf-8 encode\")}s.utf8encode=function(e){return h.nodebuffer?r.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=h.uint8array?new Uint8Array(o):new Array(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t<s;)if((n=e[t++])<128)a[r++]=n;else if(4<(i=u[n]))a[r++]=65533,t+=i-1;else{for(n&=2===i?31:3===i?15:7;1<i&&t<s;)n=n<<6|63&e[t++],i--;1<i?a[r++]=65533:n<65536?a[r++]=n:(n-=65536,a[r++]=55296|n>>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}e(\"setimmediate\"),a.newBlob=function(t,r){a.checkSupport(\"blob\");try{return new Blob([t],{type:r})}catch(e){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(t),n.getBlob(r)}catch(e){throw new Error(\"Bug : can't construct the Blob.\")}}};var i={stringifyByChunk:function(e,t,r){var n=[],i=0,s=e.length;if(s<=r)return String.fromCharCode.apply(null,e);for(;i<s;)\"array\"===t||\"nodebuffer\"===t?n.push(String.fromCharCode.apply(null,e.slice(i,Math.min(i+r,s)))):n.push(String.fromCharCode.apply(null,e.subarray(i,Math.min(i+r,s)))),i+=r;return n.join(\"\")},stringifyByChar:function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(e){return!1}}()}};function s(e){var t=65536,r=a.getTypeOf(e),n=!0;if(\"uint8array\"===r?n=i.applyCanBeUsed.uint8array:\"nodebuffer\"===r&&(n=i.applyCanBeUsed.nodebuffer),n)for(;1<t;)try{return i.stringifyByChunk(e,r,t)}catch(e){t=Math.floor(t/2)}return i.stringifyByChar(e)}function f(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}a.applyFromCharCode=s;var c={};c.string={string:n,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return c.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,r.allocBuffer(e.length))}},c.array={string:s,array:n,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(e)}},c.arraybuffer={string:function(e){return s(new Uint8Array(e))},array:function(e){return f(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:n,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(new Uint8Array(e))}},c.uint8array={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:n,nodebuffer:function(e){return r.newBufferFrom(e)}},c.nodebuffer={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return c.nodebuffer.uint8array(e).buffer},uint8array:function(e){return f(e,new Uint8Array(e.length))},nodebuffer:n},a.transformTo=function(e,t){if(t=t||\"\",!e)return t;a.checkSupport(e);var r=a.getTypeOf(t);return c[r][e](t)},a.resolve=function(e){for(var t=e.split(\"/\"),r=[],n=0;n<t.length;n++){var i=t[n];\".\"===i||\"\"===i&&0!==n&&n!==t.length-1||(\"..\"===i?r.pop():r.push(i))}return r.join(\"/\")},a.getTypeOf=function(e){return\"string\"==typeof e?\"string\":\"[object Array]\"===Object.prototype.toString.call(e)?\"array\":o.nodebuffer&&r.isBuffer(e)?\"nodebuffer\":o.uint8array&&e instanceof Uint8Array?\"uint8array\":o.arraybuffer&&e instanceof ArrayBuffer?\"arraybuffer\":void 0},a.checkSupport=function(e){if(!o[e.toLowerCase()])throw new Error(e+\" is not supported by this platform\")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(e){var t,r,n=\"\";for(r=0;r<(e||\"\").length;r++)n+=\"\\\\x\"+((t=e.charCodeAt(r))<16?\"0\":\"\")+t.toString(16).toUpperCase();return n},a.delay=function(e,t,r){setImmediate(function(){e.apply(r||null,t||[])})},a.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},a.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},a.prepareContent=function(r,e,n,i,s){return u.Promise.resolve(e).then(function(n){return o.blob&&(n instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(n)))&&\"undefined\"!=typeof FileReader?new u.Promise(function(t,r){var e=new FileReader;e.onload=function(e){t(e.target.result)},e.onerror=function(e){r(e.target.error)},e.readAsArrayBuffer(n)}):n}).then(function(e){var t=a.getTypeOf(e);return t?(\"arraybuffer\"===t?e=a.transformTo(\"uint8array\",e):\"string\"===t&&(s?e=h.decode(e):n&&!0!==i&&(e=function(e){return l(e,o.uint8array?new Uint8Array(e.length):new Array(e.length))}(e))),e):u.Promise.reject(new Error(\"Can't read the data of '\"+r+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))})}},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,setimmediate:54}],33:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),i=e(\"./utils\"),s=e(\"./signature\"),a=e(\"./zipEntry\"),o=e(\"./support\");function h(e){this.files=[],this.loadOptions=e}h.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+i.pretty(t)+\", expected \"+i.pretty(e)+\")\")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=o.uint8array?\"uint8array\":\"array\",r=i.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(e<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip: can't find end of central directory\");this.reader.setIndex(e);var t=e;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(e),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(0<n)this.isSignature(t,s.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=h},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),s=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),o=e(\"./utf8\"),h=e(\"./compressions\"),u=e(\"./support\");function l(e,t){this.options=e,this.loadOptions=t}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(t=function(e){for(var t in h)if(Object.prototype.hasOwnProperty.call(h,t)&&h[t].magic===e)return h[t];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+s.pretty(this.compressionMethod)+\" unknown (inner file : \"+s.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<i;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(i)},handleUTF8:function(){var e=u.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=s.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=s.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null}},t.exports=l},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(e,t,r){\"use strict\";function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=e(\"./stream/StreamHelper\"),i=e(\"./stream/DataWorker\"),a=e(\"./utf8\"),o=e(\"./compressedObject\"),h=e(\"./stream/GenericWorker\");n.prototype={internalStream:function(e){var t=null,r=\"string\";try{if(!e)throw new Error(\"No output type specified.\");var n=\"string\"===(r=e.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new h(\"error\")).error(e)}return new s(t,r,\"\")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||\"nodebuffer\").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof o&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new i(this._data)}};for(var u=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],l=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},f=0;f<u.length;f++)n.prototype[u[f]]=l;t.exports=n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(e,l,t){(function(t){\"use strict\";var r,n,e=t.MutationObserver||t.WebKitMutationObserver;if(e){var i=0,s=new e(u),a=t.document.createTextNode(\"\");s.observe(a,{characterData:!0}),r=function(){a.data=i=++i%2}}else if(t.setImmediate||void 0===t.MessageChannel)r=\"document\"in t&&\"onreadystatechange\"in t.document.createElement(\"script\")?function(){var e=t.document.createElement(\"script\");e.onreadystatechange=function(){u(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(u,0)};else{var o=new t.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var e,t;n=!0;for(var r=h.length;r;){for(t=h,h=[],e=-1;++e<r;)t[e]();r=h.length}n=!1}l.exports=function(e){1!==h.push(e)||n||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(e,t,r){\"use strict\";var i=e(\"immediate\");function u(){}var l={},s=[\"REJECTED\"],a=[\"FULFILLED\"],n=[\"PENDING\"];function o(e){if(\"function\"!=typeof e)throw new TypeError(\"resolver must be a function\");this.state=n,this.queue=[],this.outcome=void 0,e!==u&&d(this,e)}function h(e,t,r){this.promise=e,\"function\"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(t,r,n){i(function(){var e;try{e=r(n)}catch(e){return l.reject(t,e)}e===t?l.reject(t,new TypeError(\"Cannot resolve promise with itself\")):l.resolve(t,e)})}function c(e){var t=e&&e.then;if(e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof t)return function(){t.apply(e,arguments)}}function d(t,e){var r=!1;function n(e){r||(r=!0,l.reject(t,e))}function i(e){r||(r=!0,l.resolve(t,e))}var s=p(function(){e(i,n)});\"error\"===s.status&&n(s.value)}function p(e,t){var r={};try{r.value=e(t),r.status=\"success\"}catch(e){r.status=\"error\",r.value=e}return r}(t.exports=o).prototype.finally=function(t){if(\"function\"!=typeof t)return this;var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if(\"function\"!=typeof e&&this.state===a||\"function\"!=typeof t&&this.state===s)return this;var r=new this.constructor(u);this.state!==n?f(r,this.state===a?e:t,this.outcome):this.queue.push(new h(r,e,t));return r},h.prototype.callFulfilled=function(e){l.resolve(this.promise,e)},h.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},h.prototype.callRejected=function(e){l.reject(this.promise,e)},h.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},l.resolve=function(e,t){var r=p(c,t);if(\"error\"===r.status)return l.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},l.reject=function(e,t){e.state=s,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},o.resolve=function(e){if(e instanceof this)return e;return l.resolve(new this(u),e)},o.reject=function(e){var t=new this(u);return l.reject(t,e)},o.all=function(e){var r=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var n=e.length,i=!1;if(!n)return this.resolve([]);var s=new Array(n),a=0,t=-1,o=new this(u);for(;++t<n;)h(e[t],t);return o;function h(e,t){r.resolve(e).then(function(e){s[t]=e,++a!==n||i||(i=!0,l.resolve(o,s))},function(e){i||(i=!0,l.reject(o,e))})}},o.race=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);var i=-1,s=new this(u);for(;++i<r;)a=e[i],t.resolve(a).then(function(e){n||(n=!0,l.resolve(s,e))},function(e){n||(n=!0,l.reject(s,e))});var a;return s}},{immediate:36}],38:[function(e,t,r){\"use strict\";var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(e,t,r){\"use strict\";var a=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),h=e(\"./utils/strings\"),i=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),u=Object.prototype.toString,l=0,f=-1,c=0,d=8;function p(e){if(!(this instanceof p))return new p(e);this.options=o.assign({level:f,method:d,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:\"\"},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==l)throw new Error(i[r]);if(t.header&&a.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(n=\"string\"==typeof t.dictionary?h.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=a.deflateSetDictionary(this.strm,n))!==l)throw new Error(i[r]);this._dict_set=!0}}function n(e,t){var r=new p(t);if(r.push(e,!0),r.err)throw r.msg||i[r.err];return r.result}p.prototype.push=function(e,t){var r,n,i=this.strm,s=this.options.chunkSize;if(this.ended)return!1;n=t===~~t?t:!0===t?4:0,\"string\"==typeof e?i.input=h.string2buf(e):\"[object ArrayBuffer]\"===u.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new o.Buf8(s),i.next_out=0,i.avail_out=s),1!==(r=a.deflate(i,n))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==i.avail_out&&(0!==i.avail_in||4!==n&&2!==n)||(\"string\"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(i.output,i.next_out))):this.onData(o.shrinkBuf(i.output,i.next_out)))}while((0<i.avail_in||0===i.avail_out)&&1!==r);return 4===n?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==n||(this.onEnd(l),!(i.avail_out=0))},p.prototype.onData=function(e){this.chunks.push(e)},p.prototype.onEnd=function(e){e===l&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=p,r.deflate=n,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,n(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,n(e,t)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(e,t,r){\"use strict\";var c=e(\"./zlib/inflate\"),d=e(\"./utils/common\"),p=e(\"./utils/strings\"),m=e(\"./zlib/constants\"),n=e(\"./zlib/messages\"),i=e(\"./zlib/zstream\"),s=e(\"./zlib/gzheader\"),_=Object.prototype.toString;function a(e){if(!(this instanceof a))return new a(e);this.options=d.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var r=c.inflateInit2(this.strm,t.windowBits);if(r!==m.Z_OK)throw new Error(n[r]);this.header=new s,c.inflateGetHeader(this.strm,this.header)}function o(e,t){var r=new a(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}a.prototype.push=function(e,t){var r,n,i,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?m.Z_FINISH:m.Z_NO_FLUSH,\"string\"==typeof e?h.input=p.binstring2buf(e):\"[object ArrayBuffer]\"===_.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new d.Buf8(u),h.next_out=0,h.avail_out=u),(r=c.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o=\"string\"==typeof l?p.string2buf(l):\"[object ArrayBuffer]\"===_.call(l)?new Uint8Array(l):l,r=c.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||n!==m.Z_FINISH&&n!==m.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(i=p.utf8border(h.output,h.next_out),s=h.next_out-i,a=p.buf2string(h.output,i),h.next_out=s,h.avail_out=u-s,s&&d.arraySet(h.output,h.output,i,s,0),this.onData(a)):this.onData(d.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(n=m.Z_FINISH),n===m.Z_FINISH?(r=c.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):n!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(e){this.chunks.push(e)},a.prototype.onEnd=function(e){e===m.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=d.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,o(e,t)},r.ungzip=o},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){var t,r,n,i,s,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=i=0,r=e.length;t<r;t++)s=e[t],a.set(s,i),i+=s.length;return a}},s={arraySet:function(e,t,r,n,i){for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],42:[function(e,t,r){\"use strict\";var h=e(\"./common\"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var u=new h.Buf8(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function l(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,h.shrinkBuf(e,t));for(var r=\"\",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}u[254]=u[254]=1,r.string2buf=function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new h.Buf8(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,i,s,a=t||e.length,o=new Array(2*a);for(r=n=0;r<a;)if((i=e[r++])<128)o[n++]=i;else if(4<(s=u[i]))o[n++]=65533,r+=s-1;else{for(i&=2===s?31:3===s?15:7;1<s&&r<a;)i=i<<6|63&e[r++],s--;1<s?o[n++]=65533:i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(i=i+t[n++]|0)|0,--a;);i%=65521,s%=65521}return i|s<<16|0}},{}],44:[function(e,t,r){\"use strict\";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(e,t,r){\"use strict\";var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4<e?9:0)}function D(e){for(var t=e.length;0<=--t;)e[t]=0}function F(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<c);if(n=S-(c-s),s=c-S,a<n){if(e.match_start=t,o<=(a=n))break;d=u[s+a-1],p=u[s+a]}}}while((t=f[t&l])>h&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,c.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=d(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),e.lookahead+=r,e.lookahead+e.insert>=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+x-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<x)););}while(e.lookahead<z&&0!==e.strm.avail_in)}function Z(e,t){for(var r,n;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r)),e.match_length>=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function W(e,t){for(var r,n,i;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=x-1,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r),e.match_length<=5&&(1===e.strategy||e.match_length===x&&4096<e.strstart-e.match_start)&&(e.match_length=x-1)),e.prev_length>=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=x-1,e.strstart++,n&&(N(e,!1),0===e.strm.avail_out))return A}else if(e.match_available){if((n=u._tr_tally(e,0,e.window[e.strstart-1]))&&N(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return A}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=u._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function M(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new c.Buf16(2*w),this.dyn_dtree=new c.Buf16(2*(2*a+1)),this.bl_tree=new c.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new c.Buf16(k+1),this.heap=new c.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new c.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=i,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?C:E,e.adler=2===t.wrap?0:1,t.last_flush=l,u._tr_init(t),m):R(e,_)}function K(e){var t=G(e);return t===m&&function(e){e.window_size=2*e.w_size,D(e.head),e.max_lazy_match=h[e.level].max_lazy,e.good_match=h[e.level].good_length,e.nice_match=h[e.level].nice_length,e.max_chain_length=h[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=x-1,e.match_available=0,e.ins_h=0}(e.state),t}function Y(e,t,r,n,i,s){if(!e)return _;var a=1;if(t===g&&(t=6),n<0?(a=0,n=-n):15<n&&(a=2,n-=16),i<1||y<i||r!==v||n<8||15<n||t<0||9<t||s<0||b<s)return R(e,_);8===n&&(n=9);var o=new H;return(e.state=o).strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new c.Buf8(2*o.w_size),o.head=new c.Buf16(o.hash_size),o.prev=new c.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new c.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,K(e)}h=[new M(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5<t||t<0)return e?R(e,_):_;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||666===n.status&&t!==f)return R(e,0===e.avail_out?-5:_);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===C)if(2===n.wrap)e.adler=0,U(n,31),U(n,139),U(n,8),n.gzhead?(U(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),U(n,255&n.gzhead.time),U(n,n.gzhead.time>>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0<e.strstart&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){s=e.strstart+S;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);e.match_length=S-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0<n.wrap&&(n.wrap=-n.wrap),0!==n.pending?m:1)},r.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==C&&69!==t&&73!==t&&91!==t&&103!==t&&t!==E&&666!==t?R(e,_):(e.state=null,t===E?R(e,-3):m):_},r.deflateSetDictionary=function(e,t){var r,n,i,s,a,o,h,u,l=t.length;if(!e||!e.state)return _;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(e.adler=d(e.adler,t,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+x-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,e.next_in=o,e.input=h,e.avail_in=a,r.wrap=s,m},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(e,t,r){\"use strict\";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],48:[function(e,t,r){\"use strict\";t.exports=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C;r=e.state,n=e.next_in,z=e.input,i=n+(e.avail_in-5),s=e.next_out,C=e.output,a=s-(t-e.avail_out),o=s+(e.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,c=r.window,d=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=m[d&g];t:for(;;){if(d>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<<y)-1)];continue t}if(32&y){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}w=65535&v,(y&=15)&&(p<y&&(d+=z[n++]<<p,p+=8),w+=d&(1<<y)-1,d>>>=y,p-=y),p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=_[d&b];r:for(;;){if(d>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<<y)-1)];continue r}e.msg=\"invalid distance code\",r.mode=30;break e}if(k=65535&v,p<(y&=15)&&(d+=z[n++]<<p,(p+=8)<y&&(d+=z[n++]<<p,p+=8)),h<(k+=d&(1<<y)-1)){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(d>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(S=c,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=c[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=c[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(n<i&&s<o);n-=w=p>>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?i-n+5:5-(n-i),e.avail_out=s<o?o-s+257:257-(s-o),r.hold=d,r.bits=p}},{}],49:[function(e,t,r){\"use strict\";var I=e(\"../utils/common\"),O=e(\"./adler32\"),B=e(\"./crc32\"),R=e(\"./inffast\"),T=e(\"./inftrees\"),D=1,F=2,N=0,U=-2,P=1,n=852,i=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,o(e))):U}function u(e,t){var r,n;return e?(n=new s,(e.state=n).window=null,(r=h(e,t))!==N&&(e.state=null),r):U}var l,f,c=!0;function j(e){if(c){var t;for(l=new I.Buf32(512),f=new I.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(T(D,e.lens,0,288,l,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;T(F,e.lens,0,32,f,0,e.work,{bits:5}),c=!1}e.lencode=l,e.lenbits=9,e.distcode=f,e.distbits=5}function Z(e,t,r,n){var i,s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),n>=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(e){return u(e,15)},r.inflateInit2=u,r.inflate=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(r=e.state).mode&&(r.mode=13),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,f=o,c=h,x=N;e:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}e.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o<d&&(d=o),h<d&&(d=h),0===d)break e;I.arraySet(i,n,s,d,a),o-=d,s+=d,h-=d,a+=d,r.length-=d;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){e.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(h<d&&(d=h),h-=d,r.length-=d;i[a++]=m[p++],--d;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break e;i[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break e;o--,u|=n[s++]<<l,l+=8}if(c-=h,e.total_out+=c,r.total+=c,c&&(e.adler=r.check=r.flags?B(r.check,i,c,a-c):O(r.check,i,c,a-c)),c=h,(r.flags?u:L(u))!==r.check){e.msg=\"incorrect data check\",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,(r.wsize||c!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&Z(e,e.output,e.next_out,c-e.avail_out)?(r.mode=31,-4):(f-=e.avail_in,c-=e.avail_out,e.total_in+=f,e.total_out+=c,r.total+=c,r.wrap&&c&&(e.adler=r.check=r.flags?B(r.check,i,c,e.next_out-c):O(r.check,i,c,e.next_out-c)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===c||4===t)&&x===N&&(x=-5),x)},r.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,N},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?U:((r.head=t).done=!1,N):U},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,t,n,0)!==r.check?-3:Z(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(e,t,r){\"use strict\";var D=e(\"../utils/common\"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,r,n,i,s,a,o){var h,u,l,f,c,d,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<n;v++)O[t[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===e||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<n;v++)0!==t[r+v]&&(a[B[t[r+v]]++]=v);if(d=0===e?(A=R=a,19):1===e?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,c=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===e&&852<C||2===e&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<d?(m=0,a[v]):a[v]>d?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;i[c+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),c+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===e&&852<C||2===e&&592<C)return 1;i[l=E&f]=k<<24|x<<16|c-s|0}}return 0!==E&&(i[c+E]=b-S<<24|64<<16|0),o.bits=k,0}},{\"../utils/common\":41}],51:[function(e,t,r){\"use strict\";t.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],52:[function(e,t,r){\"use strict\";var i=e(\"../utils/common\"),o=0,h=1;function n(e){for(var t=e.length;0<=--t;)e[t]=0}var s=0,a=29,u=256,l=u+1+a,f=30,c=19,_=2*l+1,g=15,d=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));n(z);var C=new Array(2*f);n(C);var E=new Array(512);n(E);var A=new Array(256);n(A);var I=new Array(a);n(I);var O,B,R,T=new Array(f);function D(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function F(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function N(e){return e<256?E[e]:E[256+(e>>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<<e.bi_valid&65535,U(e,e.bi_buf),e.bi_buf=t>>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function L(e,t,r){P(e,r[2*t],r[2*t+1])}function j(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t<l;t++)e.dyn_ltree[2*t]=0;for(t=0;t<f;t++)e.dyn_dtree[2*t]=0;for(t=0;t<c;t++)e.bl_tree[2*t]=0;e.dyn_ltree[2*m]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function M(e){8<e.bi_valid?U(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function H(e,t,r,n){var i=2*t,s=2*r;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]}function G(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&H(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!H(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function K(e,t,r){var n,i,s,a,o=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?L(e,i,t):(L(e,(s=A[i])+u+1,t),0!==(a=w[s])&&P(e,i-=I[s],a),L(e,s=N(--n),r),0!==(a=k[s])&&P(e,n-=T[s],a)),o<e.last_lit;);L(e,m,t)}function Y(e,t){var r,n,i,s=t.dyn_tree,a=t.stat_desc.static_tree,o=t.stat_desc.has_stree,h=t.stat_desc.elems,u=-1;for(e.heap_len=0,e.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(e.heap[++e.heap_len]=u=r,e.depth[r]=0):s[2*r+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=u<2?++u:0)]=1,e.depth[i]=0,e.opt_len--,o&&(e.static_len-=a[2*i+1]);for(t.max_code=u,r=e.heap_len>>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u<n||(e.bl_count[s]++,a=0,d<=n&&(a=c[n-d]),o=h[2*n],e.opt_len+=o*(s+a),f&&(e.static_len+=o*(l[2*n+1]+a)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)u<(i=e.heap[--r])||(h[2*i+1]!==s&&(e.opt_len+=(s-h[2*i+1])*h[2*i],h[2*i+1]=s),n--)}}(e,t),Z(s,u,e.bl_count)}function X(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o<h&&i===a||(o<u?e.bl_tree[2*i]+=o:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[2*b]++):o<=10?e.bl_tree[2*v]++:e.bl_tree[2*y]++,s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4))}function V(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o<h&&i===a)){if(o<u)for(;L(e,i,e.bl_tree),0!=--o;);else 0!==i?(i!==s&&(L(e,i,e.bl_tree),o--),L(e,b,e.bl_tree),P(e,o-3,2)):o<=10?(L(e,v,e.bl_tree),P(e,o-3,3)):(L(e,y,e.bl_tree),P(e,o-11,7));s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4)}}n(T);var q=!1;function J(e,t,r,n){P(e,(s<<1)+(n?1:0),3),function(e,t,r,n){M(e),n&&(U(e,r),U(e,~r)),i.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}r._tr_init=function(e){q||(function(){var e,t,r,n,i,s=new Array(g+1);for(n=r=0;n<a-1;n++)for(I[n]=r,e=0;e<1<<w[n];e++)A[r++]=n;for(A[r-1]=n,n=i=0;n<16;n++)for(T[n]=i,e=0;e<1<<k[n];e++)E[i++]=n;for(i>>=7;n<f;n++)for(T[n]=i<<7,e=0;e<1<<k[n]-7;e++)E[256+i++]=n;for(t=0;t<=g;t++)s[t]=0;for(e=0;e<=143;)z[2*e+1]=8,e++,s[8]++;for(;e<=255;)z[2*e+1]=9,e++,s[9]++;for(;e<=279;)z[2*e+1]=7,e++,s[7]++;for(;e<=287;)z[2*e+1]=8,e++,s[8]++;for(Z(z,l+1,s),e=0;e<f;e++)C[2*e+1]=5,C[2*e]=j(e,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,c,p)}(),q=!0),e.l_desc=new F(e.dyn_ltree,O),e.d_desc=new F(e.dyn_dtree,B),e.bl_desc=new F(e.bl_tree,R),e.bi_buf=0,e.bi_valid=0,W(e)},r._tr_stored_block=J,r._tr_flush_block=function(e,t,r,n){var i,s,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t<u;t++)if(0!==e.dyn_ltree[2*t])return h;return o}(e)),Y(e,e.l_desc),Y(e,e.d_desc),a=function(e){var t;for(X(e,e.dyn_ltree,e.l_desc.max_code),X(e,e.dyn_dtree,e.d_desc.max_code),Y(e,e.bl_desc),t=c-1;3<=t&&0===e.bl_tree[2*S[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i<n;i++)P(e,e.bl_tree[2*S[i]+1],3);V(e,e.dyn_ltree,t-1),V(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),K(e,e.dyn_ltree,e.dyn_dtree)),W(e),n&&M(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r<t.length;r++)t[r]=arguments[r+1];var n={callback:e,args:t};return h[o]=n,i(o),o++},e.clearImmediate=f}function f(e){delete h[e]}function c(e){if(u)setTimeout(c,0,e);else{var t=h[e];if(t){u=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{f(e),u=!1}}}}function d(e){e.source===r&&\"string\"==typeof e.data&&0===e.data.indexOf(a)&&c(+e.data.slice(a.length))}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}]},{},[10])(10)});","\nexport const VALID_RENDER_FORMATS = {\n  'off': true,\n  'svg': true,\n};\nexport const VALID_EXPORT_FORMATS_2D = {\n  'svg': true,\n  'dxf': true,\n};\nexport const VALID_EXPORT_FORMATS_3D = {\n  'stl': true,\n  'off': true,\n  'glb': true,\n  '3mf': true,\n};\n\nexport function is2DFormatExtension(ext: string) {\n  return ext === 'svg' || ext === 'dxf';\n}\n\nconst supportedImportExtensions = new Set([\n  'stl',\n  'off',\n  'dxf',\n  'nef3',\n  '3mf',\n  'amf',\n  'svg',\n  'obj',\n]);\n\nexport function isSupportedImportExtension(ext: string) {\n  return supportedImportExtensions.has(ext);\n}","export type Vertex = {\n    x: number;\n    y: number;\n    z: number;\n}\n\nexport type Color = [number, number, number, number];\n\nexport type Face = {\n    vertices: [number, number, number];\n    colorIndex: number;\n}\n\nexport type IndexedPolyhedron = {\n    vertices: Vertex[];\n    faces: Face[];\n    colors: Color[];\n}\n\nexport const DEFAULT_FACE_COLOR: Color = [0xf9 / 255, 0xd7 / 255, 0x2c / 255, 1];\n","import { Color, DEFAULT_FACE_COLOR, Face, IndexedPolyhedron, Vertex } from './common';\n\nexport function parseOff(content: string): IndexedPolyhedron {\n    const lines = content.split('\\n').map(line => line.trim()).filter(line => line.length > 0 && !line.startsWith('#'));\n    \n    if (lines.length === 0) throw new Error('Empty OFF file');\n\n    let counts: string;\n    let currentLine = 0;\n    if (lines[0].match(/^OFF(\\s|$)/)) {\n        counts = lines[0].substring(3).trim();\n        currentLine = 1;\n    } else if (lines[currentLine] === 'OFF' && lines.length > 1) {\n        counts = lines[1];\n        currentLine = 2;\n    } else {\n        throw new Error('Invalid OFF file: missing OFF header');\n    }\n\n    const [numVertices, numFaces] = counts.split(/\\s+/).map(Number);\n    if (isNaN(numVertices) || isNaN(numFaces)) throw new Error('Invalid OFF file: invalid vertex or face counts');\n\n    if (currentLine + numVertices + numFaces > lines.length) throw new Error('Invalid OFF file: not enough lines');\n\n    const vertices: Vertex[] = [];\n    for (let i = 0; i < numVertices; i++) {\n        const parts = lines[currentLine + i].split(/\\s+/).map(Number);\n        if (parts.length < 3 || parts.some(isNaN)) throw new Error(`Invalid OFF file: invalid vertex at line ${currentLine + i + 1}`);\n        vertices.push({ x: parts[0], y: parts[1], z: parts[2] });\n    }\n    currentLine += numVertices;\n\n    const colors: Color[] = [];\n    const colorMap = new Map<string, number>();\n\n    const faces: Face[] = [];\n    for (let i = 0; i < numFaces; i++) {\n        const parts = lines[currentLine + i].split(/\\s+/).map(Number);\n        const numVerts = parts[0];\n        const vertices = parts.slice(1, numVerts + 1);\n        const color = parts.length >= numVerts + 4\n            ? parts.slice(numVerts + 1, numVerts + 5).map(c => c / 255) as [number, number, number, number]\n            : DEFAULT_FACE_COLOR;\n        if (vertices.length < 3) throw new Error(`Invalid OFF file: face at line ${currentLine + i + 1} must have at least 3 vertices`);\n\n        const colorKey = color ? color.join(',') : '';\n        let colorIndex = colorMap.get(colorKey);\n        if (colorIndex == null) {\n            colorIndex = colors.length;\n            const [r, g, b, a] = color;\n            colors.push([r, g, b, a ?? 1]);\n            colorMap.set(colorKey, colorIndex);\n        }\n\n        if (vertices.length == 3) {\n            faces.push({\n                vertices: vertices as [number, number, number],\n                colorIndex\n            });\n        } else {\n            // Triangulate the face\n            for (let j = 1; j < vertices.length - 1; j++) {\n                faces.push({\n                    vertices: [vertices[0], vertices[j], vertices[j + 1]],\n                    colorIndex\n                });\n            }   \n        }\n    }\n\n    return { vertices, faces, colors };\n}\n","class EventDispatcher {\n  constructor() {\n    this._listeners = {};\n  }\n\n  addEventListener(type, listener) {\n    const listeners = this._listeners;\n\n    if (listeners[type] === undefined) {\n      listeners[type] = [];\n    }\n\n    if (listeners[type].indexOf(listener) === -1) {\n      listeners[type].push(listener);\n    }\n\n    return this;\n  }\n\n  removeEventListener(type, listener) {\n    const listeners = this._listeners;\n    const listenerArray = listeners[type];\n\n    if (listenerArray !== undefined) {\n      const index = listenerArray.indexOf(listener);\n\n      if (index !== -1) {\n        listenerArray.splice(index, 1);\n      }\n    }\n\n    return this;\n  }\n\n  dispatchEvent(event) {\n    const listeners = this._listeners;\n    const listenerArray = listeners[event.type];\n\n    if (listenerArray !== undefined) {\n      // Make a copy, in case listeners are removed while iterating.\n      const array = listenerArray.slice(0);\n\n      for (let i = 0, l = array.length; i < l; i++) {\n        array[i].call(this, event);\n      }\n    }\n\n    return this;\n  }\n\n  dispose() {\n    for (const key in this._listeners) {\n      delete this._listeners[key];\n    }\n  }\n\n}\n\n/**\n * Represents a connection between two {@link GraphNode} resources in a {@link Graph}.\n *\n * The left node is considered the owner, and the right node the resource. The\n * owner is responsible for being able find and remove a reference to a resource, given\n * that link. The resource does not hold a reference to the link or to the owner,\n * although that reverse lookup can be done on the graph.\n */\nclass GraphEdge {\n  constructor(_name, _parent, _child, _attributes = {}) {\n    this._name = void 0;\n    this._parent = void 0;\n    this._child = void 0;\n    this._attributes = void 0;\n    this._disposed = false;\n    this._name = _name;\n    this._parent = _parent;\n    this._child = _child;\n    this._attributes = _attributes;\n\n    if (!_parent.isOnGraph(_child)) {\n      throw new Error('Cannot connect disconnected graphs.');\n    }\n  }\n  /** Name (attribute name from parent {@link GraphNode}). */\n\n\n  getName() {\n    return this._name;\n  }\n  /** Owner node. */\n\n\n  getParent() {\n    return this._parent;\n  }\n  /** Resource node. */\n\n\n  getChild() {\n    return this._child;\n  }\n  /**\n   * Sets the child node.\n   *\n   * @internal Only {@link Graph} implementations may safely call this method directly. Use\n   * \t{@link Property.swap} or {@link Graph.swapChild} instead.\n   */\n\n\n  setChild(child) {\n    this._child = child;\n    return this;\n  }\n  /** Attributes of the graph node relationship. */\n\n\n  getAttributes() {\n    return this._attributes;\n  }\n  /** Destroys a (currently intact) edge, updating both the graph and the owner. */\n\n\n  dispose() {\n    if (this._disposed) return; // @ts-expect-error GraphEdge doesn't know types of parent GraphNode.\n\n    this._parent._destroyRef(this);\n\n    this._disposed = true;\n  }\n  /** Whether this link has been destroyed. */\n\n\n  isDisposed() {\n    return this._disposed;\n  }\n\n}\n\n/**\n * A graph manages a network of {@link GraphNode} nodes, connected\n * by {@link @Link} edges.\n */\n\nclass Graph extends EventDispatcher {\n  constructor(...args) {\n    super(...args);\n    this._emptySet = new Set();\n    this._edges = new Set();\n    this._parentEdges = new Map();\n    this._childEdges = new Map();\n  }\n\n  /** Returns a list of all parent->child edges on this graph. */\n  listEdges() {\n    return Array.from(this._edges);\n  }\n  /** Returns a list of all edges on the graph having the given node as their child. */\n\n\n  listParentEdges(node) {\n    return Array.from(this._childEdges.get(node) || this._emptySet);\n  }\n  /** Returns a list of parent nodes for the given child node. */\n\n\n  listParents(node) {\n    const parentSet = new Set();\n\n    for (const edge of this.listParentEdges(node)) {\n      parentSet.add(edge.getParent());\n    }\n\n    return Array.from(parentSet);\n  }\n  /** Returns a list of all edges on the graph having the given node as their parent. */\n\n\n  listChildEdges(node) {\n    return Array.from(this._parentEdges.get(node) || this._emptySet);\n  }\n  /** Returns a list of child nodes for the given parent node. */\n\n\n  listChildren(node) {\n    const childSet = new Set();\n\n    for (const edge of this.listChildEdges(node)) {\n      childSet.add(edge.getChild());\n    }\n\n    return Array.from(childSet);\n  }\n\n  disconnectParents(node, filter) {\n    for (const edge of this.listParentEdges(node)) {\n      if (!filter || filter(edge.getParent())) {\n        edge.dispose();\n      }\n    }\n\n    return this;\n  }\n  /**********************************************************************************************\n   * Internal.\n   */\n\n  /**\n   * Creates a {@link GraphEdge} connecting two {@link GraphNode} instances. Edge is returned\n   * for the caller to store.\n   * @param a Owner\n   * @param b Resource\n   * @hidden\n   * @internal\n   */\n\n\n  _createEdge(name, a, b, attributes) {\n    const edge = new GraphEdge(name, a, b, attributes);\n\n    this._edges.add(edge);\n\n    const parent = edge.getParent();\n    if (!this._parentEdges.has(parent)) this._parentEdges.set(parent, new Set());\n\n    this._parentEdges.get(parent).add(edge);\n\n    const child = edge.getChild();\n    if (!this._childEdges.has(child)) this._childEdges.set(child, new Set());\n\n    this._childEdges.get(child).add(edge);\n\n    return edge;\n  }\n  /**\n   * Detaches a {@link GraphEdge} from the {@link Graph}. Before calling this\n   * method, ensure that the GraphEdge has first been detached from any\n   * associated {@link GraphNode} attributes.\n   * @hidden\n   * @internal\n   */\n\n\n  _destroyEdge(edge) {\n    this._edges.delete(edge);\n\n    this._parentEdges.get(edge.getParent()).delete(edge);\n\n    this._childEdges.get(edge.getChild()).delete(edge);\n\n    return this;\n  }\n\n}\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\n/**\n * An ordered collection of {@link Ref Refs}, allowing duplicates. Removing\n * a Ref is an O(n) operation — use {@link RefSet} for faster removal, if\n * duplicates are not required.\n */\nclass RefList {\n  constructor(refs) {\n    this.list = [];\n\n    if (refs) {\n      for (const ref of refs) {\n        this.list.push(ref);\n      }\n    }\n  }\n\n  add(ref) {\n    this.list.push(ref);\n  }\n\n  remove(ref) {\n    const index = this.list.indexOf(ref);\n    if (index >= 0) this.list.splice(index, 1);\n  }\n\n  removeChild(child) {\n    const refs = [];\n\n    for (const ref of this.list) {\n      if (ref.getChild() === child) {\n        refs.push(ref);\n      }\n    }\n\n    for (const ref of refs) {\n      this.remove(ref);\n    }\n\n    return refs;\n  }\n\n  listRefsByChild(child) {\n    const refs = [];\n\n    for (const ref of this.list) {\n      if (ref.getChild() === child) {\n        refs.push(ref);\n      }\n    }\n\n    return refs;\n  }\n\n  values() {\n    return this.list;\n  }\n\n}\n/**\n * An ordered collection of {@link Ref Refs}, without duplicates. Adding or\n * removing a Ref is typically O(1) or O(log(n)), and faster than\n * {@link RefList}. If support for duplicates is required, use {@link RefList}.\n */\n\nclass RefSet {\n  constructor(refs) {\n    this.set = new Set();\n    this.map = new Map();\n\n    if (refs) {\n      for (const ref of refs) {\n        this.add(ref);\n      }\n    }\n  }\n\n  add(ref) {\n    const child = ref.getChild();\n    this.removeChild(child);\n    this.set.add(ref);\n    this.map.set(child, ref);\n  }\n\n  remove(ref) {\n    this.set.delete(ref);\n    this.map.delete(ref.getChild());\n  }\n\n  removeChild(child) {\n    const ref = this.map.get(child) || null;\n    if (ref) this.remove(ref);\n    return ref;\n  }\n\n  getRefByChild(child) {\n    return this.map.get(child) || null;\n  }\n\n  values() {\n    return Array.from(this.set);\n  }\n\n}\n/**\n * Map (or dictionary) from string keys to {@link Ref Refs}.\n */\n\nclass RefMap {\n  constructor(map) {\n    this.map = {};\n\n    if (map) {\n      Object.assign(this.map, map);\n    }\n  }\n\n  set(key, child) {\n    this.map[key] = child;\n  }\n\n  delete(key) {\n    delete this.map[key];\n  }\n\n  get(key) {\n    return this.map[key] || null;\n  }\n\n  keys() {\n    return Object.keys(this.map);\n  }\n\n  values() {\n    return Object.values(this.map);\n  }\n\n}\n\nconst $attributes = Symbol('attributes');\nconst $immutableKeys = Symbol('immutableKeys');\n/**\n * Represents a node in a {@link Graph}.\n */\n\nclass GraphNode extends EventDispatcher {\n  /**\n   * Internal graph used to search and maintain references.\n   * @hidden\n   */\n\n  /**\n   * Attributes (literal values and GraphNode references) associated with this instance. For each\n   * GraphNode reference, the attributes stores a {@link GraphEdge}. List and Map references are\n   * stored as arrays and dictionaries of edges.\n   * @internal\n   */\n\n  /**\n   * Attributes included with `getDefaultAttributes` are considered immutable, and cannot be\n   * modifed by `.setRef()`, `.copy()`, or other GraphNode methods. Both the edges and the\n   * properties will be disposed with the parent GraphNode.\n   *\n   * Currently, only single-edge references (getRef/setRef) are supported as immutables.\n   *\n   * @internal\n   */\n  constructor(graph) {\n    super();\n    this._disposed = false;\n    this.graph = void 0;\n    this[$attributes] = void 0;\n    this[$immutableKeys] = void 0;\n    this.graph = graph;\n    this[$immutableKeys] = new Set();\n    this[$attributes] = this._createAttributes();\n  }\n  /**\n   * Returns default attributes for the graph node. Subclasses having any attributes (either\n   * literal values or references to other graph nodes) must override this method. Literal\n   * attributes should be given their default values, if any. References should generally be\n   * initialized as empty (Ref → null, RefList → [], RefMap → {}) and then modified by setters.\n   *\n   * Any single-edge references (setRef) returned by this method will be considered immutable,\n   * to be owned by and disposed with the parent node. Multi-edge references (addRef, removeRef,\n   * setRefMap) cannot be returned as default attributes.\n   */\n\n\n  getDefaults() {\n    return {};\n  }\n  /**\n   * Constructs and returns an object used to store a graph nodes attributes. Compared to the\n   * default Attributes interface, this has two distinctions:\n   *\n   * 1. Slots for GraphNode<T> objects are replaced with slots for GraphEdge<this, GraphNode<T>>\n   * 2. GraphNode<T> objects provided as defaults are considered immutable\n   *\n   * @internal\n   */\n\n\n  _createAttributes() {\n    const defaultAttributes = this.getDefaults();\n    const attributes = {};\n\n    for (const key in defaultAttributes) {\n      const value = defaultAttributes[key]; // TODO(design): With Ref, RefList, and RefMap types, should users\n      // be able to pass them all here? Listeners must be added.\n\n      if (value instanceof GraphNode) {\n        const ref = this.graph._createEdge(key, this, value);\n\n        this[$immutableKeys].add(key);\n        attributes[key] = ref;\n      } else {\n        attributes[key] = value;\n      }\n    }\n\n    return attributes;\n  }\n  /** @internal Returns true if two nodes are on the same {@link Graph}. */\n\n\n  isOnGraph(other) {\n    return this.graph === other.graph;\n  }\n  /** Returns true if the node has been permanently removed from the graph. */\n\n\n  isDisposed() {\n    return this._disposed;\n  }\n  /**\n   * Removes both inbound references to and outbound references from this object. At the end\n   * of the process the object holds no references, and nothing holds references to it. A\n   * disposed object is not reusable.\n   */\n\n\n  dispose() {\n    if (this._disposed) return;\n    this.graph.listChildEdges(this).forEach(edge => edge.dispose());\n    this.graph.disconnectParents(this);\n    this._disposed = true;\n    this.dispatchEvent({\n      type: 'dispose'\n    });\n  }\n  /**\n   * Removes all inbound references to this object. At the end of the process the object is\n   * considered 'detached': it may hold references to child resources, but nothing holds\n   * references to it. A detached object may be re-attached.\n   */\n\n\n  detach() {\n    this.graph.disconnectParents(this);\n    return this;\n  }\n  /**\n   * Transfers this object's references from the old node to the new one. The old node is fully\n   * detached from this parent at the end of the process.\n   *\n   * @hidden\n   */\n\n\n  swap(prevValue, nextValue) {\n    for (const attribute in this[$attributes]) {\n      const value = this[$attributes][attribute];\n\n      if (value instanceof GraphEdge) {\n        const ref = value;\n\n        if (ref.getChild() === prevValue) {\n          this.setRef(attribute, nextValue, ref.getAttributes());\n        }\n      } else if (value instanceof RefList) {\n        for (const ref of value.listRefsByChild(prevValue)) {\n          const refAttributes = ref.getAttributes();\n          this.removeRef(attribute, prevValue);\n          this.addRef(attribute, nextValue, refAttributes);\n        }\n      } else if (value instanceof RefSet) {\n        const ref = value.getRefByChild(prevValue);\n\n        if (ref) {\n          const refAttributes = ref.getAttributes();\n          this.removeRef(attribute, prevValue);\n          this.addRef(attribute, nextValue, refAttributes);\n        }\n      } else if (value instanceof RefMap) {\n        for (const key of value.keys()) {\n          const ref = value.get(key);\n\n          if (ref.getChild() === prevValue) {\n            this.setRefMap(attribute, key, nextValue, ref.getAttributes());\n          }\n        }\n      }\n    }\n\n    return this;\n  }\n  /**********************************************************************************************\n   * Literal attributes.\n   */\n\n  /** @hidden */\n\n\n  get(attribute) {\n    return this[$attributes][attribute];\n  }\n  /** @hidden */\n\n\n  set(attribute, value) {\n    this[$attributes][attribute] = value;\n    return this.dispatchEvent({\n      type: 'change',\n      attribute\n    });\n  }\n  /**********************************************************************************************\n   * Ref: 1:1 graph node references.\n   */\n\n  /** @hidden */\n\n\n  getRef(attribute) {\n    const ref = this[$attributes][attribute];\n    return ref ? ref.getChild() : null;\n  }\n  /** @hidden */\n\n\n  setRef(attribute, value, attributes) {\n    if (this[$immutableKeys].has(attribute)) {\n      throw new Error(`Cannot overwrite immutable attribute, \"${attribute}\".`);\n    }\n\n    const prevRef = this[$attributes][attribute];\n    if (prevRef) prevRef.dispose(); // TODO(cleanup): Possible duplicate event.\n\n    if (!value) return this;\n\n    const ref = this.graph._createEdge(attribute, this, value, attributes);\n\n    this[$attributes][attribute] = ref;\n    return this.dispatchEvent({\n      type: 'change',\n      attribute\n    });\n  }\n  /**********************************************************************************************\n   * RefList: 1:many graph node references.\n   */\n\n  /** @hidden */\n\n\n  listRefs(attribute) {\n    const refs = this.assertRefList(attribute);\n    return refs.values().map(ref => ref.getChild());\n  }\n  /** @hidden */\n\n\n  addRef(attribute, value, attributes) {\n    const ref = this.graph._createEdge(attribute, this, value, attributes);\n\n    const refs = this.assertRefList(attribute);\n    refs.add(ref);\n    return this.dispatchEvent({\n      type: 'change',\n      attribute\n    });\n  }\n  /** @hidden */\n\n\n  removeRef(attribute, value) {\n    const refs = this.assertRefList(attribute);\n\n    if (refs instanceof RefList) {\n      for (const ref of refs.listRefsByChild(value)) {\n        ref.dispose();\n      }\n    } else {\n      const ref = refs.getRefByChild(value);\n      if (ref) ref.dispose();\n    }\n\n    return this;\n  }\n  /** @hidden */\n\n\n  assertRefList(attribute) {\n    const refs = this[$attributes][attribute];\n\n    if (refs instanceof RefList || refs instanceof RefSet) {\n      return refs;\n    } // TODO(v3) Remove warning.\n\n\n    throw new Error(`Expected RefList or RefSet for attribute \"${attribute}\"`);\n  }\n  /**********************************************************************************************\n   * RefMap: Named 1:many (map) graph node references.\n   */\n\n  /** @hidden */\n\n\n  listRefMapKeys(attribute) {\n    return this.assertRefMap(attribute).keys();\n  }\n  /** @hidden */\n\n\n  listRefMapValues(attribute) {\n    return this.assertRefMap(attribute).values().map(ref => ref.getChild());\n  }\n  /** @hidden */\n\n\n  getRefMap(attribute, key) {\n    const refMap = this.assertRefMap(attribute);\n    const ref = refMap.get(key);\n    return ref ? ref.getChild() : null;\n  }\n  /** @hidden */\n\n\n  setRefMap(attribute, key, value, metadata) {\n    const refMap = this.assertRefMap(attribute);\n    const prevRef = refMap.get(key);\n    if (prevRef) prevRef.dispose(); // TODO(cleanup): Possible duplicate event.\n\n    if (!value) return this;\n    metadata = Object.assign(metadata || {}, {\n      key: key\n    });\n\n    const ref = this.graph._createEdge(attribute, this, value, _extends({}, metadata, {\n      key\n    }));\n\n    refMap.set(key, ref);\n    return this.dispatchEvent({\n      type: 'change',\n      attribute,\n      key\n    });\n  }\n  /** @hidden */\n\n\n  assertRefMap(attribute) {\n    const map = this[$attributes][attribute];\n\n    if (map instanceof RefMap) {\n      return map;\n    } // TODO(v3) Remove warning.\n\n\n    throw new Error(`Expected RefMap for attribute \"${attribute}\"`);\n  }\n  /**********************************************************************************************\n   * Events.\n   */\n\n  /**\n   * Dispatches an event on the GraphNode, and on the associated\n   * Graph. Event types on the graph are prefixed, `\"node:[type]\"`.\n   */\n\n\n  dispatchEvent(event) {\n    super.dispatchEvent(_extends({}, event, {\n      target: this\n    }));\n    this.graph.dispatchEvent(_extends({}, event, {\n      target: this,\n      type: `node:${event.type}`\n    }));\n    return this;\n  }\n  /**********************************************************************************************\n   * Internal.\n   */\n\n  /** @hidden */\n\n\n  _destroyRef(ref) {\n    const attribute = ref.getName();\n\n    if (this[$attributes][attribute] === ref) {\n      this[$attributes][attribute] = null; // TODO(design): See _createAttributes().\n\n      if (this[$immutableKeys].has(attribute)) ref.getChild().dispose();\n    } else if (this[$attributes][attribute] instanceof RefList) {\n      this[$attributes][attribute].remove(ref);\n    } else if (this[$attributes][attribute] instanceof RefSet) {\n      this[$attributes][attribute].remove(ref);\n    } else if (this[$attributes][attribute] instanceof RefMap) {\n      const refMap = this[$attributes][attribute];\n\n      for (const key of refMap.keys()) {\n        if (refMap.get(key) === ref) {\n          refMap.delete(key);\n        }\n      }\n    } else {\n      return;\n    }\n\n    this.graph._destroyEdge(ref);\n\n    this.dispatchEvent({\n      type: 'change',\n      attribute\n    });\n  }\n\n}\n\nexport { $attributes, $immutableKeys, EventDispatcher, Graph, GraphEdge, GraphNode, RefList, RefMap, RefSet };\n//# sourceMappingURL=property-graph.modern.js.map\n","import { GraphNode, $attributes, GraphEdge, $immutableKeys, RefList, RefSet, RefMap, Graph } from 'property-graph';\nexport { Graph, GraphEdge, RefList, RefMap, RefSet } from 'property-graph';\n\n/**\n * Current version of the package.\n * @hidden\n */\nconst VERSION = `v${\"4.2.1\"}`;\n/** @hidden */\nconst GLB_BUFFER = '@glb.bin';\n/** String IDs for core {@link Property} types. */\nvar PropertyType;\n(function (PropertyType) {\n  PropertyType[\"ACCESSOR\"] = \"Accessor\";\n  PropertyType[\"ANIMATION\"] = \"Animation\";\n  PropertyType[\"ANIMATION_CHANNEL\"] = \"AnimationChannel\";\n  PropertyType[\"ANIMATION_SAMPLER\"] = \"AnimationSampler\";\n  PropertyType[\"BUFFER\"] = \"Buffer\";\n  PropertyType[\"CAMERA\"] = \"Camera\";\n  PropertyType[\"MATERIAL\"] = \"Material\";\n  PropertyType[\"MESH\"] = \"Mesh\";\n  PropertyType[\"PRIMITIVE\"] = \"Primitive\";\n  PropertyType[\"PRIMITIVE_TARGET\"] = \"PrimitiveTarget\";\n  PropertyType[\"NODE\"] = \"Node\";\n  PropertyType[\"ROOT\"] = \"Root\";\n  PropertyType[\"SCENE\"] = \"Scene\";\n  PropertyType[\"SKIN\"] = \"Skin\";\n  PropertyType[\"TEXTURE\"] = \"Texture\";\n  PropertyType[\"TEXTURE_INFO\"] = \"TextureInfo\";\n})(PropertyType || (PropertyType = {}));\n/** Vertex layout method. */\nvar VertexLayout;\n(function (VertexLayout) {\n  /**\n   * Stores vertex attributes in a single buffer view per mesh primitive. Interleaving vertex\n   * data may improve performance by reducing page-thrashing in GPU memory.\n   */\n  VertexLayout[\"INTERLEAVED\"] = \"interleaved\";\n  /**\n   * Stores each vertex attribute in a separate buffer view. May decrease performance by causing\n   * page-thrashing in GPU memory. Some 3D engines may prefer this layout, e.g. for simplicity.\n   */\n  VertexLayout[\"SEPARATE\"] = \"separate\";\n})(VertexLayout || (VertexLayout = {}));\n/** Accessor usage. */\nvar BufferViewUsage$1;\n(function (BufferViewUsage) {\n  BufferViewUsage[\"ARRAY_BUFFER\"] = \"ARRAY_BUFFER\";\n  BufferViewUsage[\"ELEMENT_ARRAY_BUFFER\"] = \"ELEMENT_ARRAY_BUFFER\";\n  BufferViewUsage[\"INVERSE_BIND_MATRICES\"] = \"INVERSE_BIND_MATRICES\";\n  BufferViewUsage[\"OTHER\"] = \"OTHER\";\n  BufferViewUsage[\"SPARSE\"] = \"SPARSE\";\n})(BufferViewUsage$1 || (BufferViewUsage$1 = {}));\n/** Texture channels. */\nvar TextureChannel;\n(function (TextureChannel) {\n  TextureChannel[TextureChannel[\"R\"] = 4096] = \"R\";\n  TextureChannel[TextureChannel[\"G\"] = 256] = \"G\";\n  TextureChannel[TextureChannel[\"B\"] = 16] = \"B\";\n  TextureChannel[TextureChannel[\"A\"] = 1] = \"A\";\n})(TextureChannel || (TextureChannel = {}));\nvar Format;\n(function (Format) {\n  Format[\"GLTF\"] = \"GLTF\";\n  Format[\"GLB\"] = \"GLB\";\n})(Format || (Format = {}));\nconst ComponentTypeToTypedArray = {\n  '5120': Int8Array,\n  '5121': Uint8Array,\n  '5122': Int16Array,\n  '5123': Uint16Array,\n  '5125': Uint32Array,\n  '5126': Float32Array\n};\n\n/**\n * *Common utilities for working with Uint8Array and Buffer objects.*\n *\n * @category Utilities\n */\nclass BufferUtils {\n  /** Creates a byte array from a Data URI. */\n  static createBufferFromDataURI(dataURI) {\n    if (typeof Buffer === 'undefined') {\n      // Browser.\n      const byteString = atob(dataURI.split(',')[1]);\n      const ia = new Uint8Array(byteString.length);\n      for (let i = 0; i < byteString.length; i++) {\n        ia[i] = byteString.charCodeAt(i);\n      }\n      return ia;\n    } else {\n      // Node.js.\n      const data = dataURI.split(',')[1];\n      const isBase64 = dataURI.indexOf('base64') >= 0;\n      return Buffer.from(data, isBase64 ? 'base64' : 'utf8');\n    }\n  }\n  /** Encodes text to a byte array. */\n  static encodeText(text) {\n    return new TextEncoder().encode(text);\n  }\n  /** Decodes a byte array to text. */\n  static decodeText(array) {\n    return new TextDecoder().decode(array);\n  }\n  /**\n   * Concatenates N byte arrays.\n   */\n  static concat(arrays) {\n    let totalByteLength = 0;\n    for (const array of arrays) {\n      totalByteLength += array.byteLength;\n    }\n    const result = new Uint8Array(totalByteLength);\n    let byteOffset = 0;\n    for (const array of arrays) {\n      result.set(array, byteOffset);\n      byteOffset += array.byteLength;\n    }\n    return result;\n  }\n  /**\n   * Pads a Uint8Array to the next 4-byte boundary.\n   *\n   * Reference: [glTF → Data Alignment](https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#data-alignment)\n   */\n  static pad(srcArray, paddingByte = 0) {\n    const paddedLength = this.padNumber(srcArray.byteLength);\n    if (paddedLength === srcArray.byteLength) return srcArray;\n    const dstArray = new Uint8Array(paddedLength);\n    dstArray.set(srcArray);\n    if (paddingByte !== 0) {\n      for (let i = srcArray.byteLength; i < paddedLength; i++) {\n        dstArray[i] = paddingByte;\n      }\n    }\n    return dstArray;\n  }\n  /** Pads a number to 4-byte boundaries. */\n  static padNumber(v) {\n    return Math.ceil(v / 4) * 4;\n  }\n  /** Returns true if given byte array instances are equal. */\n  static equals(a, b) {\n    if (a === b) return true;\n    if (a.byteLength !== b.byteLength) return false;\n    let i = a.byteLength;\n    while (i--) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n  /**\n   * Returns a Uint8Array view of a typed array, with the same underlying ArrayBuffer.\n   *\n   * A shorthand for:\n   *\n   * ```js\n   * const buffer = new Uint8Array(\n   * \tarray.buffer,\n   * \tarray.byteOffset + byteOffset,\n   * \tMath.min(array.byteLength, byteLength)\n   * );\n   * ```\n   *\n   */\n  static toView(a, byteOffset = 0, byteLength = Infinity) {\n    return new Uint8Array(a.buffer, a.byteOffset + byteOffset, Math.min(a.byteLength, byteLength));\n  }\n  static assertView(view) {\n    if (view && !ArrayBuffer.isView(view)) {\n      throw new Error(`Method requires Uint8Array parameter; received \"${typeof view}\".`);\n    }\n    return view;\n  }\n}\n\n/**\n * *Common utilities for working with colors in vec3, vec4, or hexadecimal form.*\n *\n * Provides methods to convert linear components (vec3, vec4) to sRGB hex values. All colors in\n * the glTF specification, excluding color textures, are linear. Hexadecimal values, in sRGB\n * colorspace, are accessible through helper functions in the API as a convenience.\n *\n * ```typescript\n * // Hex (sRGB) to factor (linear).\n * const factor = ColorUtils.hexToFactor(0xFFCCCC, []);\n *\n * // Factor (linear) to hex (sRGB).\n * const hex = ColorUtils.factorToHex([1, .25, .25])\n * ```\n *\n * @category Utilities\n */\nclass ColorUtils {\n  /**\n   * Converts sRGB hexadecimal to linear components.\n   * @typeParam T vec3 or vec4 linear components.\n   */\n  static hexToFactor(hex, target) {\n    hex = Math.floor(hex);\n    const _target = target;\n    _target[0] = (hex >> 16 & 255) / 255;\n    _target[1] = (hex >> 8 & 255) / 255;\n    _target[2] = (hex & 255) / 255;\n    return this.convertSRGBToLinear(target, target);\n  }\n  /**\n   * Converts linear components to sRGB hexadecimal.\n   * @typeParam T vec3 or vec4 linear components.\n   */\n  static factorToHex(factor) {\n    const target = [...factor];\n    const [r, g, b] = this.convertLinearToSRGB(factor, target);\n    return r * 255 << 16 ^ g * 255 << 8 ^ b * 255 << 0;\n  }\n  /**\n   * Converts sRGB components to linear components.\n   * @typeParam T vec3 or vec4 linear components.\n   */\n  static convertSRGBToLinear(source, target) {\n    const _source = source;\n    const _target = target;\n    for (let i = 0; i < 3; i++) {\n      _target[i] = _source[i] < 0.04045 ? _source[i] * 0.0773993808 : Math.pow(_source[i] * 0.9478672986 + 0.0521327014, 2.4);\n    }\n    return target;\n  }\n  /**\n   * Converts linear components to sRGB components.\n   * @typeParam T vec3 or vec4 linear components.\n   */\n  static convertLinearToSRGB(source, target) {\n    const _source = source;\n    const _target = target;\n    for (let i = 0; i < 3; i++) {\n      _target[i] = _source[i] < 0.0031308 ? _source[i] * 12.92 : 1.055 * Math.pow(_source[i], 0.41666) - 0.055;\n    }\n    return target;\n  }\n}\n\n/** JPEG image support. */\nclass JPEGImageUtils {\n  match(array) {\n    return array.length >= 3 && array[0] === 255 && array[1] === 216 && array[2] === 255;\n  }\n  getSize(array) {\n    // Skip 4 chars, they are for signature\n    let view = new DataView(array.buffer, array.byteOffset + 4);\n    let i, next;\n    while (view.byteLength) {\n      // read length of the next block\n      i = view.getUint16(0, false);\n      // i = buffer.readUInt16BE(0);\n      // ensure correct format\n      validateJPEGBuffer(view, i);\n      // 0xFFC0 is baseline standard(SOF)\n      // 0xFFC1 is baseline optimized(SOF)\n      // 0xFFC2 is progressive(SOF2)\n      next = view.getUint8(i + 1);\n      if (next === 0xc0 || next === 0xc1 || next === 0xc2) {\n        return [view.getUint16(i + 7, false), view.getUint16(i + 5, false)];\n      }\n      // move to the next block\n      view = new DataView(array.buffer, view.byteOffset + i + 2);\n    }\n    throw new TypeError('Invalid JPG, no size found');\n  }\n  getChannels(_buffer) {\n    return 3;\n  }\n}\n/**\n * PNG image support.\n *\n * PNG signature: 'PNG\\r\\n\\x1a\\n'\n * PNG image header chunk name: 'IHDR'\n */\nclass PNGImageUtils {\n  match(array) {\n    return array.length >= 8 && array[0] === 0x89 && array[1] === 0x50 && array[2] === 0x4e && array[3] === 0x47 && array[4] === 0x0d && array[5] === 0x0a && array[6] === 0x1a && array[7] === 0x0a;\n  }\n  getSize(array) {\n    const view = new DataView(array.buffer, array.byteOffset);\n    const magic = BufferUtils.decodeText(array.slice(12, 16));\n    if (magic === PNGImageUtils.PNG_FRIED_CHUNK_NAME) {\n      return [view.getUint32(32, false), view.getUint32(36, false)];\n    }\n    return [view.getUint32(16, false), view.getUint32(20, false)];\n  }\n  getChannels(_buffer) {\n    return 4;\n  }\n}\n/**\n * *Common utilities for working with image data.*\n *\n * @category Utilities\n */\n// Used to detect \"fried\" png's: http://www.jongware.com/pngdefry.html\nPNGImageUtils.PNG_FRIED_CHUNK_NAME = 'CgBI';\nclass ImageUtils {\n  /** Registers support for a new image format; useful for certain extensions. */\n  static registerFormat(mimeType, impl) {\n    this.impls[mimeType] = impl;\n  }\n  /**\n   * Returns detected MIME type of the given image buffer. Note that for image\n   * formats with support provided by extensions, the extension must be\n   * registered with an I/O class before it can be detected by ImageUtils.\n   */\n  static getMimeType(buffer) {\n    for (const mimeType in this.impls) {\n      if (this.impls[mimeType].match(buffer)) {\n        return mimeType;\n      }\n    }\n    return null;\n  }\n  /** Returns the dimensions of the image. */\n  static getSize(buffer, mimeType) {\n    if (!this.impls[mimeType]) return null;\n    return this.impls[mimeType].getSize(buffer);\n  }\n  /**\n   * Returns a conservative estimate of the number of channels in the image. For some image\n   * formats, the method may return 4 indicating the possibility of an alpha channel, without\n   * the ability to guarantee that an alpha channel is present.\n   */\n  static getChannels(buffer, mimeType) {\n    if (!this.impls[mimeType]) return null;\n    return this.impls[mimeType].getChannels(buffer);\n  }\n  /** Returns a conservative estimate of the GPU memory required by this image. */\n  static getVRAMByteLength(buffer, mimeType) {\n    if (!this.impls[mimeType]) return null;\n    if (this.impls[mimeType].getVRAMByteLength) {\n      return this.impls[mimeType].getVRAMByteLength(buffer);\n    }\n    let uncompressedBytes = 0;\n    const channels = 4; // See https://github.com/donmccurdy/glTF-Transform/issues/151.\n    const resolution = this.getSize(buffer, mimeType);\n    if (!resolution) return null;\n    while (resolution[0] > 1 || resolution[1] > 1) {\n      uncompressedBytes += resolution[0] * resolution[1] * channels;\n      resolution[0] = Math.max(Math.floor(resolution[0] / 2), 1);\n      resolution[1] = Math.max(Math.floor(resolution[1] / 2), 1);\n    }\n    uncompressedBytes += 1 * 1 * channels;\n    return uncompressedBytes;\n  }\n  /** Returns the preferred file extension for the given MIME type. */\n  static mimeTypeToExtension(mimeType) {\n    if (mimeType === 'image/jpeg') return 'jpg';\n    return mimeType.split('/').pop();\n  }\n  /** Returns the MIME type for the given file extension. */\n  static extensionToMimeType(extension) {\n    if (extension === 'jpg') return 'image/jpeg';\n    if (!extension) return '';\n    return `image/${extension}`;\n  }\n}\nImageUtils.impls = {\n  'image/jpeg': new JPEGImageUtils(),\n  'image/png': new PNGImageUtils()\n};\nfunction validateJPEGBuffer(view, i) {\n  // index should be within buffer limits\n  if (i > view.byteLength) {\n    throw new TypeError('Corrupt JPG, exceeded buffer limits');\n  }\n  // Every JPEG block must begin with a 0xFF\n  if (view.getUint8(i) !== 0xff) {\n    throw new TypeError('Invalid JPG, marker table corrupted');\n  }\n  return view;\n}\n\n/**\n * *Utility class for working with file systems and URI paths.*\n *\n * @category Utilities\n */\nclass FileUtils {\n  /**\n   * Extracts the basename from a file path, e.g. \"folder/model.glb\" -> \"model\".\n   * See: {@link HTTPUtils.basename}\n   */\n  static basename(uri) {\n    const fileName = uri.split(/[\\\\/]/).pop();\n    return fileName.substring(0, fileName.lastIndexOf('.'));\n  }\n  /**\n   * Extracts the extension from a file path, e.g. \"folder/model.glb\" -> \"glb\".\n   * See: {@link HTTPUtils.extension}\n   */\n  static extension(uri) {\n    if (uri.startsWith('data:image/')) {\n      const mimeType = uri.match(/data:(image\\/\\w+)/)[1];\n      return ImageUtils.mimeTypeToExtension(mimeType);\n    } else if (uri.startsWith('data:model/gltf+json')) {\n      return 'gltf';\n    } else if (uri.startsWith('data:model/gltf-binary')) {\n      return 'glb';\n    } else if (uri.startsWith('data:application/')) {\n      return 'bin';\n    }\n    return uri.split(/[\\\\/]/).pop().split(/[.]/).pop();\n  }\n}\n\n/**\n * Common utilities\n * @module glMatrix\n */\nvar ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nif (!Math.hypot) Math.hypot = function () {\n  var y = 0,\n      i = arguments.length;\n\n  while (i--) {\n    y += arguments[i] * arguments[i];\n  }\n\n  return Math.sqrt(y);\n};\n\n/**\n * 3 Dimensional Vector\n * @module vec3\n */\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\n\nfunction create() {\n  var out = new ARRAY_TYPE(3);\n\n  if (ARRAY_TYPE != Float32Array) {\n    out[0] = 0;\n    out[1] = 0;\n    out[2] = 0;\n  }\n\n  return out;\n}\n/**\n * Calculates the length of a vec3\n *\n * @param {ReadonlyVec3} a vector to calculate length of\n * @returns {Number} length of a\n */\n\nfunction length(a) {\n  var x = a[0];\n  var y = a[1];\n  var z = a[2];\n  return Math.hypot(x, y, z);\n}\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {ReadonlyVec3} a the vector to transform\n * @param {ReadonlyMat4} m matrix to transform with\n * @returns {vec3} out\n */\n\nfunction transformMat4(out, a, m) {\n  var x = a[0],\n      y = a[1],\n      z = a[2];\n  var w = m[3] * x + m[7] * y + m[11] * z + m[15];\n  w = w || 1.0;\n  out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;\n  out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;\n  out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;\n  return out;\n}\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\n\n(function () {\n  var vec = create();\n  return function (a, stride, offset, count, fn, arg) {\n    var i, l;\n\n    if (!stride) {\n      stride = 3;\n    }\n\n    if (!offset) {\n      offset = 0;\n    }\n\n    if (count) {\n      l = Math.min(count * stride + offset, a.length);\n    } else {\n      l = a.length;\n    }\n\n    for (i = offset; i < l; i += stride) {\n      vec[0] = a[i];\n      vec[1] = a[i + 1];\n      vec[2] = a[i + 2];\n      fn(vec, vec, arg);\n      a[i] = vec[0];\n      a[i + 1] = vec[1];\n      a[i + 2] = vec[2];\n    }\n\n    return a;\n  };\n})();\n\n/** @hidden Implemented in /core for use by /extensions, publicly exported from /functions. */\nfunction getBounds(node) {\n  const resultBounds = createBounds();\n  const parents = node.propertyType === PropertyType.NODE ? [node] : node.listChildren();\n  for (const parent of parents) {\n    parent.traverse(node => {\n      const mesh = node.getMesh();\n      if (!mesh) return;\n      // Compute mesh bounds and update result.\n      const meshBounds = getMeshBounds(mesh, node.getWorldMatrix());\n      if (meshBounds.min.every(isFinite) && meshBounds.max.every(isFinite)) {\n        expandBounds(meshBounds.min, resultBounds);\n        expandBounds(meshBounds.max, resultBounds);\n      }\n    });\n  }\n  return resultBounds;\n}\n/** Computes mesh bounds in world space. */\nfunction getMeshBounds(mesh, worldMatrix) {\n  const meshBounds = createBounds();\n  // We can't transform a local AABB into world space and still have a tight AABB in world space,\n  // so we need to compute the world AABB vertex by vertex here.\n  for (const prim of mesh.listPrimitives()) {\n    const position = prim.getAttribute('POSITION');\n    const indices = prim.getIndices();\n    if (!position) continue;\n    let localPos = [0, 0, 0];\n    let worldPos = [0, 0, 0];\n    for (let i = 0, il = indices ? indices.getCount() : position.getCount(); i < il; i++) {\n      const index = indices ? indices.getScalar(i) : i;\n      localPos = position.getElement(index, localPos);\n      worldPos = transformMat4(worldPos, localPos, worldMatrix);\n      expandBounds(worldPos, meshBounds);\n    }\n  }\n  return meshBounds;\n}\n/** Expands bounds of target by given source. */\nfunction expandBounds(point, target) {\n  for (let i = 0; i < 3; i++) {\n    target.min[i] = Math.min(point[i], target.min[i]);\n    target.max[i] = Math.max(point[i], target.max[i]);\n  }\n}\n/** Creates new bounds with min=Infinity, max=-Infinity. */\nfunction createBounds() {\n  return {\n    min: [Infinity, Infinity, Infinity],\n    max: [-Infinity, -Infinity, -Infinity]\n  };\n}\n\n// Need a placeholder domain to construct a URL from a relative path. We only\n// access `url.pathname`, so the domain doesn't matter.\nconst NULL_DOMAIN = 'https://null.example';\n/**\n * *Utility class for working with URLs.*\n *\n * @category Utilities\n */\nclass HTTPUtils {\n  static dirname(path) {\n    const index = path.lastIndexOf('/');\n    if (index === -1) return './';\n    return path.substring(0, index + 1);\n  }\n  /**\n   * Extracts the basename from a URL, e.g. \"folder/model.glb\" -> \"model\".\n   * See: {@link FileUtils.basename}\n   */\n  static basename(uri) {\n    return FileUtils.basename(new URL(uri, NULL_DOMAIN).pathname);\n  }\n  /**\n   * Extracts the extension from a URL, e.g. \"folder/model.glb\" -> \"glb\".\n   * See: {@link FileUtils.extension}\n   */\n  static extension(uri) {\n    return FileUtils.extension(new URL(uri, NULL_DOMAIN).pathname);\n  }\n  static resolve(base, path) {\n    if (!this.isRelativePath(path)) return path;\n    const stack = base.split('/');\n    const parts = path.split('/');\n    stack.pop();\n    for (let i = 0; i < parts.length; i++) {\n      if (parts[i] === '.') continue;\n      if (parts[i] === '..') {\n        stack.pop();\n      } else {\n        stack.push(parts[i]);\n      }\n    }\n    return stack.join('/');\n  }\n  /**\n   * Returns true for URLs containing a protocol, and false for both\n   * absolute and relative paths.\n   */\n  static isAbsoluteURL(path) {\n    return this.PROTOCOL_REGEXP.test(path);\n  }\n  /**\n   * Returns true for paths that are declared relative to some unknown base\n   * path. For example, \"foo/bar/\" is relative both \"/foo/bar/\" is not.\n   */\n  static isRelativePath(path) {\n    return !/^(?:[a-zA-Z]+:)?\\//.test(path);\n  }\n}\nHTTPUtils.DEFAULT_INIT = {};\nHTTPUtils.PROTOCOL_REGEXP = /^[a-zA-Z]+:\\/\\//;\n\n// Reference: https://github.com/jonschlinkert/is-plain-object\nfunction isObject(o) {\n  return Object.prototype.toString.call(o) === '[object Object]';\n}\nfunction isPlainObject(o) {\n  if (isObject(o) === false) return false;\n  // If has modified constructor\n  const ctor = o.constructor;\n  if (ctor === undefined) return true;\n  // If has modified prototype\n  const prot = ctor.prototype;\n  if (isObject(prot) === false) return false;\n  // If constructor does not have an Object-specific method\n  if (Object.hasOwn(prot, 'isPrototypeOf') === false) {\n    return false;\n  }\n  // Most likely a plain Object\n  return true;\n}\n\nvar _Logger;\n/** Logger verbosity thresholds. */\nvar Verbosity;\n(function (Verbosity) {\n  /** No events are logged. */\n  Verbosity[Verbosity[\"SILENT\"] = 4] = \"SILENT\";\n  /** Only error events are logged. */\n  Verbosity[Verbosity[\"ERROR\"] = 3] = \"ERROR\";\n  /** Only error and warn events are logged. */\n  Verbosity[Verbosity[\"WARN\"] = 2] = \"WARN\";\n  /** Only error, warn, and info events are logged. (DEFAULT) */\n  Verbosity[Verbosity[\"INFO\"] = 1] = \"INFO\";\n  /** All events are logged. */\n  Verbosity[Verbosity[\"DEBUG\"] = 0] = \"DEBUG\";\n})(Verbosity || (Verbosity = {}));\n/**\n * *Logger utility class.*\n *\n * @category Utilities\n */\nclass Logger {\n  /** Constructs a new Logger instance. */\n  constructor(verbosity) {\n    this.verbosity = void 0;\n    this.verbosity = verbosity;\n  }\n  /** Logs an event at level {@link Logger.Verbosity.DEBUG}. */\n  debug(text) {\n    if (this.verbosity <= Logger.Verbosity.DEBUG) {\n      console.debug(text);\n    }\n  }\n  /** Logs an event at level {@link Logger.Verbosity.INFO}. */\n  info(text) {\n    if (this.verbosity <= Logger.Verbosity.INFO) {\n      console.info(text);\n    }\n  }\n  /** Logs an event at level {@link Logger.Verbosity.WARN}. */\n  warn(text) {\n    if (this.verbosity <= Logger.Verbosity.WARN) {\n      console.warn(text);\n    }\n  }\n  /** Logs an event at level {@link Logger.Verbosity.ERROR}. */\n  error(text) {\n    if (this.verbosity <= Logger.Verbosity.ERROR) {\n      console.error(text);\n    }\n  }\n}\n_Logger = Logger;\n/** Logger verbosity thresholds. */\nLogger.Verbosity = Verbosity;\n/** Default logger instance. */\nLogger.DEFAULT_INSTANCE = new _Logger(_Logger.Verbosity.INFO);\n\n/**\n * Calculates the determinant of a mat4\n *\n * @param {ReadonlyMat4} a the source matrix\n * @returns {Number} determinant of a\n */\n\nfunction determinant(a) {\n  var a00 = a[0],\n      a01 = a[1],\n      a02 = a[2],\n      a03 = a[3];\n  var a10 = a[4],\n      a11 = a[5],\n      a12 = a[6],\n      a13 = a[7];\n  var a20 = a[8],\n      a21 = a[9],\n      a22 = a[10],\n      a23 = a[11];\n  var a30 = a[12],\n      a31 = a[13],\n      a32 = a[14],\n      a33 = a[15];\n  var b00 = a00 * a11 - a01 * a10;\n  var b01 = a00 * a12 - a02 * a10;\n  var b02 = a00 * a13 - a03 * a10;\n  var b03 = a01 * a12 - a02 * a11;\n  var b04 = a01 * a13 - a03 * a11;\n  var b05 = a02 * a13 - a03 * a12;\n  var b06 = a20 * a31 - a21 * a30;\n  var b07 = a20 * a32 - a22 * a30;\n  var b08 = a20 * a33 - a23 * a30;\n  var b09 = a21 * a32 - a22 * a31;\n  var b10 = a21 * a33 - a23 * a31;\n  var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n  return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n}\n/**\n * Multiplies two mat4s\n *\n * @param {mat4} out the receiving matrix\n * @param {ReadonlyMat4} a the first operand\n * @param {ReadonlyMat4} b the second operand\n * @returns {mat4} out\n */\n\nfunction multiply(out, a, b) {\n  var a00 = a[0],\n      a01 = a[1],\n      a02 = a[2],\n      a03 = a[3];\n  var a10 = a[4],\n      a11 = a[5],\n      a12 = a[6],\n      a13 = a[7];\n  var a20 = a[8],\n      a21 = a[9],\n      a22 = a[10],\n      a23 = a[11];\n  var a30 = a[12],\n      a31 = a[13],\n      a32 = a[14],\n      a33 = a[15]; // Cache only the current line of the second matrix\n\n  var b0 = b[0],\n      b1 = b[1],\n      b2 = b[2],\n      b3 = b[3];\n  out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n  out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n  out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n  out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n  b0 = b[4];\n  b1 = b[5];\n  b2 = b[6];\n  b3 = b[7];\n  out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n  out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n  out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n  out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n  b0 = b[8];\n  b1 = b[9];\n  b2 = b[10];\n  b3 = b[11];\n  out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n  out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n  out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n  out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n  b0 = b[12];\n  b1 = b[13];\n  b2 = b[14];\n  b3 = b[15];\n  out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;\n  out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;\n  out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;\n  out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;\n  return out;\n}\n/**\n * Returns the scaling factor component of a transformation\n *  matrix. If a matrix is built with fromRotationTranslationScale\n *  with a normalized Quaternion paramter, the returned vector will be\n *  the same as the scaling vector\n *  originally supplied.\n * @param  {vec3} out Vector to receive scaling factor component\n * @param  {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {vec3} out\n */\n\nfunction getScaling(out, mat) {\n  var m11 = mat[0];\n  var m12 = mat[1];\n  var m13 = mat[2];\n  var m21 = mat[4];\n  var m22 = mat[5];\n  var m23 = mat[6];\n  var m31 = mat[8];\n  var m32 = mat[9];\n  var m33 = mat[10];\n  out[0] = Math.hypot(m11, m12, m13);\n  out[1] = Math.hypot(m21, m22, m23);\n  out[2] = Math.hypot(m31, m32, m33);\n  return out;\n}\n/**\n * Returns a quaternion representing the rotational component\n *  of a transformation matrix. If a matrix is built with\n *  fromRotationTranslation, the returned quaternion will be the\n *  same as the quaternion originally supplied.\n * @param {quat} out Quaternion to receive the rotation component\n * @param {ReadonlyMat4} mat Matrix to be decomposed (input)\n * @return {quat} out\n */\n\nfunction getRotation(out, mat) {\n  var scaling = new ARRAY_TYPE(3);\n  getScaling(scaling, mat);\n  var is1 = 1 / scaling[0];\n  var is2 = 1 / scaling[1];\n  var is3 = 1 / scaling[2];\n  var sm11 = mat[0] * is1;\n  var sm12 = mat[1] * is2;\n  var sm13 = mat[2] * is3;\n  var sm21 = mat[4] * is1;\n  var sm22 = mat[5] * is2;\n  var sm23 = mat[6] * is3;\n  var sm31 = mat[8] * is1;\n  var sm32 = mat[9] * is2;\n  var sm33 = mat[10] * is3;\n  var trace = sm11 + sm22 + sm33;\n  var S = 0;\n\n  if (trace > 0) {\n    S = Math.sqrt(trace + 1.0) * 2;\n    out[3] = 0.25 * S;\n    out[0] = (sm23 - sm32) / S;\n    out[1] = (sm31 - sm13) / S;\n    out[2] = (sm12 - sm21) / S;\n  } else if (sm11 > sm22 && sm11 > sm33) {\n    S = Math.sqrt(1.0 + sm11 - sm22 - sm33) * 2;\n    out[3] = (sm23 - sm32) / S;\n    out[0] = 0.25 * S;\n    out[1] = (sm12 + sm21) / S;\n    out[2] = (sm31 + sm13) / S;\n  } else if (sm22 > sm33) {\n    S = Math.sqrt(1.0 + sm22 - sm11 - sm33) * 2;\n    out[3] = (sm31 - sm13) / S;\n    out[0] = (sm12 + sm21) / S;\n    out[1] = 0.25 * S;\n    out[2] = (sm23 + sm32) / S;\n  } else {\n    S = Math.sqrt(1.0 + sm33 - sm11 - sm22) * 2;\n    out[3] = (sm12 - sm21) / S;\n    out[0] = (sm31 + sm13) / S;\n    out[1] = (sm23 + sm32) / S;\n    out[2] = 0.25 * S;\n  }\n\n  return out;\n}\n\n/** @hidden */\nclass MathUtils {\n  static identity(v) {\n    return v;\n  }\n  static eq(a, b, tolerance = 10e-6) {\n    if (a.length !== b.length) return false;\n    for (let i = 0; i < a.length; i++) {\n      if (Math.abs(a[i] - b[i]) > tolerance) return false;\n    }\n    return true;\n  }\n  static clamp(value, min, max) {\n    if (value < min) return min;\n    if (value > max) return max;\n    return value;\n  }\n  // TODO(perf): Compare performance if we replace the switch with individual functions.\n  static decodeNormalizedInt(i, componentType) {\n    // Hardcode enums from accessor.ts to avoid a circular dependency.\n    switch (componentType) {\n      case 5126:\n        // FLOAT\n        return i;\n      case 5123:\n        // UNSIGNED_SHORT\n        return i / 65535.0;\n      case 5121:\n        // UNSIGNED_BYTE\n        return i / 255.0;\n      case 5122:\n        // SHORT\n        return Math.max(i / 32767.0, -1.0);\n      case 5120:\n        // BYTE\n        return Math.max(i / 127.0, -1.0);\n      default:\n        throw new Error('Invalid component type.');\n    }\n  }\n  // TODO(perf): Compare performance if we replace the switch with individual functions.\n  static encodeNormalizedInt(f, componentType) {\n    // Hardcode enums from accessor.ts to avoid a circular dependency.\n    switch (componentType) {\n      case 5126:\n        // FLOAT\n        return f;\n      case 5123:\n        // UNSIGNED_SHORT\n        return Math.round(MathUtils.clamp(f, 0, 1) * 65535.0);\n      case 5121:\n        // UNSIGNED_BYTE\n        return Math.round(MathUtils.clamp(f, 0, 1) * 255.0);\n      case 5122:\n        // SHORT\n        return Math.round(MathUtils.clamp(f, -1, 1) * 32767.0);\n      case 5120:\n        // BYTE\n        return Math.round(MathUtils.clamp(f, -1, 1) * 127.0);\n      default:\n        throw new Error('Invalid component type.');\n    }\n  }\n  /**\n   * Decompose a mat4 to TRS properties.\n   *\n   * Equivalent to the Matrix4 decompose() method in three.js, and intentionally not using the\n   * gl-matrix version. See: https://github.com/toji/gl-matrix/issues/408\n   *\n   * @param srcMat Matrix element, to be decomposed to TRS properties.\n   * @param dstTranslation Translation element, to be overwritten.\n   * @param dstRotation Rotation element, to be overwritten.\n   * @param dstScale Scale element, to be overwritten.\n   */\n  static decompose(srcMat, dstTranslation, dstRotation, dstScale) {\n    let sx = length([srcMat[0], srcMat[1], srcMat[2]]);\n    const sy = length([srcMat[4], srcMat[5], srcMat[6]]);\n    const sz = length([srcMat[8], srcMat[9], srcMat[10]]);\n    // if determine is negative, we need to invert one scale\n    const det = determinant(srcMat);\n    if (det < 0) sx = -sx;\n    dstTranslation[0] = srcMat[12];\n    dstTranslation[1] = srcMat[13];\n    dstTranslation[2] = srcMat[14];\n    // scale the rotation part\n    const _m1 = srcMat.slice();\n    const invSX = 1 / sx;\n    const invSY = 1 / sy;\n    const invSZ = 1 / sz;\n    _m1[0] *= invSX;\n    _m1[1] *= invSX;\n    _m1[2] *= invSX;\n    _m1[4] *= invSY;\n    _m1[5] *= invSY;\n    _m1[6] *= invSY;\n    _m1[8] *= invSZ;\n    _m1[9] *= invSZ;\n    _m1[10] *= invSZ;\n    getRotation(dstRotation, _m1);\n    dstScale[0] = sx;\n    dstScale[1] = sy;\n    dstScale[2] = sz;\n  }\n  /**\n   * Compose TRS properties to a mat4.\n   *\n   * Equivalent to the Matrix4 compose() method in three.js, and intentionally not using the\n   * gl-matrix version. See: https://github.com/toji/gl-matrix/issues/408\n   *\n   * @param srcTranslation Translation element of matrix.\n   * @param srcRotation Rotation element of matrix.\n   * @param srcScale Scale element of matrix.\n   * @param dstMat Matrix element, to be modified and returned.\n   * @returns dstMat, overwritten to mat4 equivalent of given TRS properties.\n   */\n  static compose(srcTranslation, srcRotation, srcScale, dstMat) {\n    const te = dstMat;\n    const x = srcRotation[0],\n      y = srcRotation[1],\n      z = srcRotation[2],\n      w = srcRotation[3];\n    const x2 = x + x,\n      y2 = y + y,\n      z2 = z + z;\n    const xx = x * x2,\n      xy = x * y2,\n      xz = x * z2;\n    const yy = y * y2,\n      yz = y * z2,\n      zz = z * z2;\n    const wx = w * x2,\n      wy = w * y2,\n      wz = w * z2;\n    const sx = srcScale[0],\n      sy = srcScale[1],\n      sz = srcScale[2];\n    te[0] = (1 - (yy + zz)) * sx;\n    te[1] = (xy + wz) * sx;\n    te[2] = (xz - wy) * sx;\n    te[3] = 0;\n    te[4] = (xy - wz) * sy;\n    te[5] = (1 - (xx + zz)) * sy;\n    te[6] = (yz + wx) * sy;\n    te[7] = 0;\n    te[8] = (xz + wy) * sz;\n    te[9] = (yz - wx) * sz;\n    te[10] = (1 - (xx + yy)) * sz;\n    te[11] = 0;\n    te[12] = srcTranslation[0];\n    te[13] = srcTranslation[1];\n    te[14] = srcTranslation[2];\n    te[15] = 1;\n    return te;\n  }\n}\n\nfunction equalsRef(refA, refB) {\n  if (!!refA !== !!refB) return false;\n  const a = refA.getChild();\n  const b = refB.getChild();\n  return a === b || a.equals(b);\n}\nfunction equalsRefSet(refSetA, refSetB) {\n  if (!!refSetA !== !!refSetB) return false;\n  const refValuesA = refSetA.values();\n  const refValuesB = refSetB.values();\n  if (refValuesA.length !== refValuesB.length) return false;\n  for (let i = 0; i < refValuesA.length; i++) {\n    const a = refValuesA[i];\n    const b = refValuesB[i];\n    if (a.getChild() === b.getChild()) continue;\n    if (!a.getChild().equals(b.getChild())) return false;\n  }\n  return true;\n}\nfunction equalsRefMap(refMapA, refMapB) {\n  if (!!refMapA !== !!refMapB) return false;\n  const keysA = refMapA.keys();\n  const keysB = refMapB.keys();\n  if (keysA.length !== keysB.length) return false;\n  for (const key of keysA) {\n    const refA = refMapA.get(key);\n    const refB = refMapB.get(key);\n    if (!!refA !== !!refB) return false;\n    const a = refA.getChild();\n    const b = refB.getChild();\n    if (a === b) continue;\n    if (!a.equals(b)) return false;\n  }\n  return true;\n}\nfunction equalsArray(a, b) {\n  if (a === b) return true;\n  if (!!a !== !!b || !a || !b) return false;\n  if (a.length !== b.length) return false;\n  for (let i = 0; i < a.length; i++) {\n    if (a[i] !== b[i]) return false;\n  }\n  return true;\n}\nfunction equalsObject(_a, _b) {\n  if (_a === _b) return true;\n  if (!!_a !== !!_b) return false;\n  if (!isPlainObject(_a) || !isPlainObject(_b)) {\n    return _a === _b;\n  }\n  const a = _a;\n  const b = _b;\n  let numKeysA = 0;\n  let numKeysB = 0;\n  let key;\n  for (key in a) numKeysA++;\n  for (key in b) numKeysB++;\n  if (numKeysA !== numKeysB) return false;\n  for (key in a) {\n    const valueA = a[key];\n    const valueB = b[key];\n    if (isArray(valueA) && isArray(valueB)) {\n      if (!equalsArray(valueA, valueB)) return false;\n    } else if (isPlainObject(valueA) && isPlainObject(valueB)) {\n      if (!equalsObject(valueA, valueB)) return false;\n    } else {\n      if (valueA !== valueB) return false;\n    }\n  }\n  return true;\n}\nfunction isArray(value) {\n  return Array.isArray(value) || ArrayBuffer.isView(value);\n}\n\nconst ALPHABET = '23456789abdegjkmnpqrvwxyzABDEGJKMNPQRVWXYZ';\nconst UNIQUE_RETRIES = 999;\nconst ID_LENGTH = 6;\nconst previousIDs = new Set();\nconst generateOne = function generateOne() {\n  let rtn = '';\n  for (let i = 0; i < ID_LENGTH; i++) {\n    rtn += ALPHABET.charAt(Math.floor(Math.random() * ALPHABET.length));\n  }\n  return rtn;\n};\n/**\n * Short ID generator.\n *\n * Generated IDs are short, easy to type, and unique for the duration of the program's execution.\n * Uniqueness across multiple program executions, or on other devices, is not guaranteed. Based on\n * [Short ID Generation in JavaScript](https://tomspencer.dev/blog/2014/11/16/short-id-generation-in-javascript/),\n * with alterations.\n *\n * @category Utilities\n * @hidden\n */\nconst uuid = function uuid() {\n  for (let retries = 0; retries < UNIQUE_RETRIES; retries++) {\n    const id = generateOne();\n    if (!previousIDs.has(id)) {\n      previousIDs.add(id);\n      return id;\n    }\n  }\n  return '';\n};\n\nconst COPY_IDENTITY = t => t;\nconst EMPTY_SET = new Set();\n/**\n * *Properties represent distinct resources in a glTF asset, referenced by other properties.*\n *\n * For example, each material and texture is a property, with material properties holding\n * references to the textures. All properties are created with factory methods on the\n * {@link Document} in which they should be constructed. Properties are destroyed by calling\n * {@link Property.dispose}().\n *\n * Usage:\n *\n * ```ts\n * const texture = doc.createTexture('myTexture');\n * doc.listTextures(); // → [texture x 1]\n *\n * // Attach a texture to a material.\n * material.setBaseColorTexture(texture);\n * material.getBaseColortexture(); // → texture\n *\n * // Detaching a texture removes any references to it, except from the doc.\n * texture.detach();\n * material.getBaseColorTexture(); // → null\n * doc.listTextures(); // → [texture x 1]\n *\n * // Disposing a texture removes all references to it, and its own references.\n * texture.dispose();\n * doc.listTextures(); // → []\n * ```\n *\n * Reference:\n * - [glTF → Concepts](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#concepts)\n *\n * @category Properties\n */\nclass Property extends GraphNode {\n  /** @hidden */\n  constructor(graph, name = '') {\n    super(graph);\n    this[$attributes]['name'] = name;\n    this.init();\n    this.dispatchEvent({\n      type: 'create'\n    });\n  }\n  /**\n   * Returns the Graph associated with this Property. For internal use.\n   * @hidden\n   * @experimental\n   */\n  getGraph() {\n    return this.graph;\n  }\n  /**\n   * Returns default attributes for the property. Empty lists and maps should be initialized\n   * to empty arrays and objects. Always invoke `super.getDefaults()` and extend the result.\n   */\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      name: '',\n      extras: {}\n    });\n  }\n  /** @hidden */\n  set(attribute, value) {\n    if (Array.isArray(value)) value = value.slice(); // copy vector, quat, color …\n    return super.set(attribute, value);\n  }\n  /**********************************************************************************************\n   * Name.\n   */\n  /**\n   * Returns the name of this property. While names are not required to be unique, this is\n   * encouraged, and non-unique names will be overwritten in some tools. For custom data about\n   * a property, prefer to use Extras.\n   */\n  getName() {\n    return this.get('name');\n  }\n  /**\n   * Sets the name of this property. While names are not required to be unique, this is\n   * encouraged, and non-unique names will be overwritten in some tools. For custom data about\n   * a property, prefer to use Extras.\n   */\n  setName(name) {\n    return this.set('name', name);\n  }\n  /**********************************************************************************************\n   * Extras.\n   */\n  /**\n   * Returns a reference to the Extras object, containing application-specific data for this\n   * Property. Extras should be an Object, not a primitive value, for best portability.\n   */\n  getExtras() {\n    return this.get('extras');\n  }\n  /**\n   * Updates the Extras object, containing application-specific data for this Property. Extras\n   * should be an Object, not a primitive value, for best portability.\n   */\n  setExtras(extras) {\n    return this.set('extras', extras);\n  }\n  /**********************************************************************************************\n   * Graph state.\n   */\n  /**\n   * Makes a copy of this property, with the same resources (by reference) as the original.\n   */\n  clone() {\n    const PropertyClass = this.constructor;\n    return new PropertyClass(this.graph).copy(this, COPY_IDENTITY);\n  }\n  /**\n   * Copies all data from another property to this one. Child properties are copied by reference,\n   * unless a 'resolve' function is given to override that.\n   * @param other Property to copy references from.\n   * @param resolve Function to resolve each Property being transferred. Default is identity.\n   */\n  copy(other, resolve = COPY_IDENTITY) {\n    // Remove previous references.\n    for (const key in this[$attributes]) {\n      const value = this[$attributes][key];\n      if (value instanceof GraphEdge) {\n        if (!this[$immutableKeys].has(key)) {\n          value.dispose();\n        }\n      } else if (value instanceof RefList || value instanceof RefSet) {\n        for (const ref of value.values()) {\n          ref.dispose();\n        }\n      } else if (value instanceof RefMap) {\n        for (const ref of value.values()) {\n          ref.dispose();\n        }\n      }\n    }\n    // Add new references.\n    for (const key in other[$attributes]) {\n      const thisValue = this[$attributes][key];\n      const otherValue = other[$attributes][key];\n      if (otherValue instanceof GraphEdge) {\n        if (this[$immutableKeys].has(key)) {\n          const ref = thisValue;\n          ref.getChild().copy(resolve(otherValue.getChild()), resolve);\n        } else {\n          // biome-ignore lint/suspicious/noExplicitAny: TODO\n          this.setRef(key, resolve(otherValue.getChild()), otherValue.getAttributes());\n        }\n      } else if (otherValue instanceof RefSet || otherValue instanceof RefList) {\n        for (const ref of otherValue.values()) {\n          // biome-ignore lint/suspicious/noExplicitAny: TODO\n          this.addRef(key, resolve(ref.getChild()), ref.getAttributes());\n        }\n      } else if (otherValue instanceof RefMap) {\n        for (const subkey of otherValue.keys()) {\n          const ref = otherValue.get(subkey);\n          // biome-ignore lint/suspicious/noExplicitAny: TODO\n          this.setRefMap(key, subkey, resolve(ref.getChild()), ref.getAttributes());\n        }\n      } else if (isPlainObject(otherValue)) {\n        this[$attributes][key] = JSON.parse(JSON.stringify(otherValue));\n      } else if (Array.isArray(otherValue) || otherValue instanceof ArrayBuffer || ArrayBuffer.isView(otherValue)) {\n        // biome-ignore lint/suspicious/noExplicitAny: TODO\n        this[$attributes][key] = otherValue.slice();\n      } else {\n        this[$attributes][key] = otherValue;\n      }\n    }\n    return this;\n  }\n  /**\n   * Returns true if two properties are deeply equivalent, recursively comparing the attributes\n   * of the properties. Optionally, a 'skip' set may be included, specifying attributes whose\n   * values should not be considered in the comparison.\n   *\n   * Example: Two {@link Primitive Primitives} are equivalent if they have accessors and\n   * materials with equivalent content — but not necessarily the same specific accessors\n   * and materials.\n   */\n  equals(other, skip = EMPTY_SET) {\n    if (this === other) return true;\n    if (this.propertyType !== other.propertyType) return false;\n    for (const key in this[$attributes]) {\n      if (skip.has(key)) continue;\n      const a = this[$attributes][key];\n      const b = other[$attributes][key];\n      if (a instanceof GraphEdge || b instanceof GraphEdge) {\n        if (!equalsRef(a, b)) {\n          return false;\n        }\n      } else if (a instanceof RefSet || b instanceof RefSet || a instanceof RefList || b instanceof RefList) {\n        if (!equalsRefSet(a, b)) {\n          return false;\n        }\n      } else if (a instanceof RefMap || b instanceof RefMap) {\n        if (!equalsRefMap(a, b)) {\n          return false;\n        }\n      } else if (isPlainObject(a) || isPlainObject(b)) {\n        if (!equalsObject(a, b)) return false;\n      } else if (isArray(a) || isArray(b)) {\n        if (!equalsArray(a, b)) return false;\n      } else {\n        // Literal.\n        if (a !== b) return false;\n      }\n    }\n    return true;\n  }\n  detach() {\n    // Detaching should keep properties in the same Document, and attached to its root.\n    this.graph.disconnectParents(this, n => n.propertyType !== 'Root');\n    return this;\n  }\n  /**\n   * Returns a list of all properties that hold a reference to this property. For example, a\n   * material may hold references to various textures, but a texture does not hold references\n   * to the materials that use it.\n   *\n   * It is often necessary to filter the results for a particular type: some resources, like\n   * {@link Accessor}s, may be referenced by different types of properties. Most properties\n   * include the {@link Root} as a parent, which is usually not of interest.\n   *\n   * Usage:\n   *\n   * ```ts\n   * const materials = texture\n   * \t.listParents()\n   * \t.filter((p) => p instanceof Material)\n   * ```\n   */\n  listParents() {\n    return this.graph.listParents(this);\n  }\n}\n\n/**\n * *A {@link Property} that can have {@link ExtensionProperty} instances attached.*\n *\n * Most properties are extensible. See the {@link Extension} documentation for information about\n * how to use extensions.\n *\n * @category Properties\n */\nclass ExtensibleProperty extends Property {\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      extensions: new RefMap()\n    });\n  }\n  /** Returns an {@link ExtensionProperty} attached to this Property, if any. */\n  getExtension(name) {\n    return this.getRefMap('extensions', name);\n  }\n  /**\n   * Attaches the given {@link ExtensionProperty} to this Property. For a given extension, only\n   * one ExtensionProperty may be attached to any one Property at a time.\n   */\n  setExtension(name, extensionProperty) {\n    if (extensionProperty) extensionProperty._validateParent(this);\n    return this.setRefMap('extensions', name, extensionProperty);\n  }\n  /** Lists all {@link ExtensionProperty} instances attached to this Property. */\n  listExtensions() {\n    return this.listRefMapValues('extensions');\n  }\n}\n\n/**\n * *Accessors store lists of numeric, vector, or matrix elements in a typed array.*\n *\n * All large data for {@link Mesh}, {@link Skin}, and {@link Animation} properties is stored in\n * {@link Accessor}s, organized into one or more {@link Buffer}s. Each accessor provides data in\n * typed arrays, with two abstractions:\n *\n * *Elements* are the logical divisions of the data into useful types: `\"SCALAR\"`, `\"VEC2\"`,\n * `\"VEC3\"`, `\"VEC4\"`, `\"MAT3\"`, or `\"MAT4\"`. The element type can be determined with the\n * {@link Accessor.getType getType}() method, and the number of elements in the accessor determine its\n * {@link Accessor.getCount getCount}(). The number of components in an element — e.g. 9 for `\"MAT3\"` — are its\n * {@link Accessor.getElementSize getElementSize}(). See {@link Accessor.Type}.\n *\n * *Components* are the numeric values within an element — e.g. `.x` and `.y` for `\"VEC2\"`. Various\n * component types are available: `BYTE`, `UNSIGNED_BYTE`, `SHORT`, `UNSIGNED_SHORT`,\n * `UNSIGNED_INT`, and `FLOAT`. The component type can be determined with the\n * {@link Accessor.getComponentType getComponentType} method, and the number of bytes in each component determine its\n * {@link Accessor.getComponentSize getComponentSize}. See {@link Accessor.ComponentType}.\n *\n * Usage:\n *\n * ```typescript\n * const accessor = doc.createAccessor('myData')\n * \t.setArray(new Float32Array([1,2,3,4,5,6,7,8,9,10,11,12]))\n * \t.setType(Accessor.Type.VEC3)\n * \t.setBuffer(doc.getRoot().listBuffers()[0]);\n *\n * accessor.getCount();        // → 4\n * accessor.getElementSize();  // → 3\n * accessor.getByteLength();   // → 48\n * accessor.getElement(1, []); // → [4, 5, 6]\n *\n * accessor.setElement(0, [10, 20, 30]);\n * ```\n *\n * Data access through the {@link Accessor.getElement getElement} and {@link Accessor.setElement setElement}\n * methods reads or overwrites the content of the underlying typed array. These methods use\n * element arrays intended to be compatible with the [gl-matrix](https://github.com/toji/gl-matrix)\n * library, or with the `toArray`/`fromArray` methods of libraries like three.js and babylon.js.\n *\n * Each Accessor must be assigned to a {@link Buffer}, which determines where the accessor's data\n * is stored in the final file. Assigning Accessors to different Buffers allows the data to be\n * written to different `.bin` files.\n *\n * glTF Transform does not expose many details of sparse, normalized, or interleaved accessors\n * through its API. It reads files using those techniques, presents a simplified view of the data\n * for editing, and attempts to write data back out with optimizations. For example, vertex\n * attributes will typically be interleaved by default, regardless of the input file.\n *\n * References:\n * - [glTF → Accessors](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#accessors)\n *\n * @category Properties\n */\nclass Accessor extends ExtensibleProperty {\n  /**********************************************************************************************\n   * Instance.\n   */\n  init() {\n    this.propertyType = PropertyType.ACCESSOR;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      array: null,\n      type: Accessor.Type.SCALAR,\n      componentType: Accessor.ComponentType.FLOAT,\n      normalized: false,\n      sparse: false,\n      buffer: null\n    });\n  }\n  /**********************************************************************************************\n   * Static.\n   */\n  /** Returns size of a given element type, in components. */\n  static getElementSize(type) {\n    switch (type) {\n      case Accessor.Type.SCALAR:\n        return 1;\n      case Accessor.Type.VEC2:\n        return 2;\n      case Accessor.Type.VEC3:\n        return 3;\n      case Accessor.Type.VEC4:\n        return 4;\n      case Accessor.Type.MAT2:\n        return 4;\n      case Accessor.Type.MAT3:\n        return 9;\n      case Accessor.Type.MAT4:\n        return 16;\n      default:\n        throw new Error('Unexpected type: ' + type);\n    }\n  }\n  /** Returns size of a given component type, in bytes. */\n  static getComponentSize(componentType) {\n    switch (componentType) {\n      case Accessor.ComponentType.BYTE:\n        return 1;\n      case Accessor.ComponentType.UNSIGNED_BYTE:\n        return 1;\n      case Accessor.ComponentType.SHORT:\n        return 2;\n      case Accessor.ComponentType.UNSIGNED_SHORT:\n        return 2;\n      case Accessor.ComponentType.UNSIGNED_INT:\n        return 4;\n      case Accessor.ComponentType.FLOAT:\n        return 4;\n      default:\n        throw new Error('Unexpected component type: ' + componentType);\n    }\n  }\n  /**********************************************************************************************\n   * Min/max bounds.\n   */\n  /**\n   * Minimum value of each component in this attribute. Unlike in a final glTF file, values\n   * returned by this method will reflect the minimum accounting for {@link .normalized}\n   * state.\n   */\n  getMinNormalized(target) {\n    const normalized = this.getNormalized();\n    const elementSize = this.getElementSize();\n    const componentType = this.getComponentType();\n    this.getMin(target);\n    if (normalized) {\n      for (let j = 0; j < elementSize; j++) {\n        target[j] = MathUtils.decodeNormalizedInt(target[j], componentType);\n      }\n    }\n    return target;\n  }\n  /**\n   * Minimum value of each component in this attribute. Values returned by this method do not\n   * reflect normalization: use {@link .getMinNormalized} in that case.\n   */\n  getMin(target) {\n    const array = this.getArray();\n    const count = this.getCount();\n    const elementSize = this.getElementSize();\n    for (let j = 0; j < elementSize; j++) target[j] = Infinity;\n    for (let i = 0; i < count * elementSize; i += elementSize) {\n      for (let j = 0; j < elementSize; j++) {\n        const value = array[i + j];\n        if (Number.isFinite(value)) {\n          target[j] = Math.min(target[j], value);\n        }\n      }\n    }\n    return target;\n  }\n  /**\n   * Maximum value of each component in this attribute. Unlike in a final glTF file, values\n   * returned by this method will reflect the minimum accounting for {@link .normalized}\n   * state.\n   */\n  getMaxNormalized(target) {\n    const normalized = this.getNormalized();\n    const elementSize = this.getElementSize();\n    const componentType = this.getComponentType();\n    this.getMax(target);\n    if (normalized) {\n      for (let j = 0; j < elementSize; j++) {\n        target[j] = MathUtils.decodeNormalizedInt(target[j], componentType);\n      }\n    }\n    return target;\n  }\n  /**\n   * Maximum value of each component in this attribute. Values returned by this method do not\n   * reflect normalization: use {@link .getMinNormalized} in that case.\n   */\n  getMax(target) {\n    const array = this.get('array');\n    const count = this.getCount();\n    const elementSize = this.getElementSize();\n    for (let j = 0; j < elementSize; j++) target[j] = -Infinity;\n    for (let i = 0; i < count * elementSize; i += elementSize) {\n      for (let j = 0; j < elementSize; j++) {\n        const value = array[i + j];\n        if (Number.isFinite(value)) {\n          target[j] = Math.max(target[j], value);\n        }\n      }\n    }\n    return target;\n  }\n  /**********************************************************************************************\n   * Layout.\n   */\n  /**\n   * Number of elements in the accessor. An array of length 30, containing 10 `VEC3` elements,\n   * will have a count of 10.\n   */\n  getCount() {\n    const array = this.get('array');\n    return array ? array.length / this.getElementSize() : 0;\n  }\n  /** Type of element stored in the accessor. `VEC2`, `VEC3`, etc. */\n  getType() {\n    return this.get('type');\n  }\n  /**\n   * Sets type of element stored in the accessor. `VEC2`, `VEC3`, etc. Array length must be a\n   * multiple of the component size (`VEC2` = 2, `VEC3` = 3, ...) for the selected type.\n   */\n  setType(type) {\n    return this.set('type', type);\n  }\n  /**\n   * Number of components in each element of the accessor. For example, the element size of a\n   * `VEC2` accessor is 2. This value is determined automatically based on array length and\n   * accessor type, specified with {@link Accessor.setType setType()}.\n   */\n  // biome-ignore lint/suspicious/useAdjacentOverloadSignatures: Static vs. non-static.\n  getElementSize() {\n    return Accessor.getElementSize(this.get('type'));\n  }\n  /**\n   * Size of each component (a value in the raw array), in bytes. For example, the\n   * `componentSize` of data backed by a `float32` array is 4 bytes.\n   */\n  getComponentSize() {\n    return this.get('array').BYTES_PER_ELEMENT;\n  }\n  /**\n   * Component type (float32, uint16, etc.). This value is determined automatically, and can only\n   * be modified by replacing the underlying array.\n   */\n  getComponentType() {\n    return this.get('componentType');\n  }\n  /**********************************************************************************************\n   * Normalization.\n   */\n  /**\n   * Specifies whether integer data values should be normalized (true) to [0, 1] (for unsigned\n   * types) or [-1, 1] (for signed types), or converted directly (false) when they are accessed.\n   * This property is defined only for accessors that contain vertex attributes or animation\n   * output data.\n   */\n  getNormalized() {\n    return this.get('normalized');\n  }\n  /**\n   * Specifies whether integer data values should be normalized (true) to [0, 1] (for unsigned\n   * types) or [-1, 1] (for signed types), or converted directly (false) when they are accessed.\n   * This property is defined only for accessors that contain vertex attributes or animation\n   * output data.\n   */\n  setNormalized(normalized) {\n    return this.set('normalized', normalized);\n  }\n  /**********************************************************************************************\n   * Data access.\n   */\n  /**\n   * Returns the scalar element value at the given index. For\n   * {@link Accessor.getNormalized normalized} integer accessors, values are\n   * decoded and returned in floating-point form.\n   */\n  getScalar(index) {\n    const elementSize = this.getElementSize();\n    const componentType = this.getComponentType();\n    const array = this.getArray();\n    if (this.getNormalized()) {\n      return MathUtils.decodeNormalizedInt(array[index * elementSize], componentType);\n    }\n    return array[index * elementSize];\n  }\n  /**\n   * Assigns the scalar element value at the given index. For\n   * {@link Accessor.getNormalized normalized} integer accessors, \"value\" should be\n   * given in floating-point form — it will be integer-encoded before writing\n   * to the underlying array.\n   */\n  setScalar(index, x) {\n    const elementSize = this.getElementSize();\n    const componentType = this.getComponentType();\n    const array = this.getArray();\n    if (this.getNormalized()) {\n      array[index * elementSize] = MathUtils.encodeNormalizedInt(x, componentType);\n    } else {\n      array[index * elementSize] = x;\n    }\n    return this;\n  }\n  /**\n   * Returns the vector or matrix element value at the given index. For\n   * {@link Accessor.getNormalized normalized} integer accessors, values are\n   * decoded and returned in floating-point form.\n   *\n   * Example:\n   *\n   * ```javascript\n   * import { add } from 'gl-matrix/add';\n   *\n   * const element = [];\n   * const offset = [1, 1, 1];\n   *\n   * for (let i = 0; i < accessor.getCount(); i++) {\n   * \taccessor.getElement(i, element);\n   * \tadd(element, element, offset);\n   * \taccessor.setElement(i, element);\n   * }\n   * ```\n   */\n  getElement(index, target) {\n    const normalized = this.getNormalized();\n    const elementSize = this.getElementSize();\n    const componentType = this.getComponentType();\n    const array = this.getArray();\n    for (let i = 0; i < elementSize; i++) {\n      if (normalized) {\n        target[i] = MathUtils.decodeNormalizedInt(array[index * elementSize + i], componentType);\n      } else {\n        target[i] = array[index * elementSize + i];\n      }\n    }\n    return target;\n  }\n  /**\n   * Assigns the vector or matrix element value at the given index. For\n   * {@link Accessor.getNormalized normalized} integer accessors, \"value\" should be\n   * given in floating-point form — it will be integer-encoded before writing\n   * to the underlying array.\n   *\n   * Example:\n   *\n   * ```javascript\n   * import { add } from 'gl-matrix/add';\n   *\n   * const element = [];\n   * const offset = [1, 1, 1];\n   *\n   * for (let i = 0; i < accessor.getCount(); i++) {\n   * \taccessor.getElement(i, element);\n   * \tadd(element, element, offset);\n   * \taccessor.setElement(i, element);\n   * }\n   * ```\n   */\n  setElement(index, value) {\n    const normalized = this.getNormalized();\n    const elementSize = this.getElementSize();\n    const componentType = this.getComponentType();\n    const array = this.getArray();\n    for (let i = 0; i < elementSize; i++) {\n      if (normalized) {\n        array[index * elementSize + i] = MathUtils.encodeNormalizedInt(value[i], componentType);\n      } else {\n        array[index * elementSize + i] = value[i];\n      }\n    }\n    return this;\n  }\n  /**********************************************************************************************\n   * Raw data storage.\n   */\n  /**\n   * Specifies whether the accessor should be stored sparsely. When written to a glTF file, sparse\n   * accessors store only values that differ from base values. When loaded in glTF Transform (or most\n   * runtimes) a sparse accessor can be treated like any other accessor. Currently, glTF Transform always\n   * uses zeroes for the base values when writing files.\n   * @experimental\n   */\n  getSparse() {\n    return this.get('sparse');\n  }\n  /**\n   * Specifies whether the accessor should be stored sparsely. When written to a glTF file, sparse\n   * accessors store only values that differ from base values. When loaded in glTF Transform (or most\n   * runtimes) a sparse accessor can be treated like any other accessor. Currently, glTF Transform always\n   * uses zeroes for the base values when writing files.\n   * @experimental\n   */\n  setSparse(sparse) {\n    return this.set('sparse', sparse);\n  }\n  /** Returns the {@link Buffer} into which this accessor will be organized. */\n  getBuffer() {\n    return this.getRef('buffer');\n  }\n  /** Assigns the {@link Buffer} into which this accessor will be organized. */\n  setBuffer(buffer) {\n    return this.setRef('buffer', buffer);\n  }\n  /** Returns the raw typed array underlying this accessor. */\n  getArray() {\n    return this.get('array');\n  }\n  /** Assigns the raw typed array underlying this accessor. */\n  setArray(array) {\n    this.set('componentType', array ? arrayToComponentType(array) : Accessor.ComponentType.FLOAT);\n    this.set('array', array);\n    return this;\n  }\n  /** Returns the total bytelength of this accessor, exclusive of padding. */\n  getByteLength() {\n    const array = this.get('array');\n    return array ? array.byteLength : 0;\n  }\n}\n/**************************************************************************************************\n * Accessor utilities.\n */\n/** @internal */\n/**********************************************************************************************\n * Constants.\n */\n/** Element type contained by the accessor (SCALAR, VEC2, ...). */\nAccessor.Type = {\n  /** Scalar, having 1 value per element. */\n  SCALAR: 'SCALAR',\n  /** 2-component vector, having 2 components per element. */\n  VEC2: 'VEC2',\n  /** 3-component vector, having 3 components per element. */\n  VEC3: 'VEC3',\n  /** 4-component vector, having 4 components per element. */\n  VEC4: 'VEC4',\n  /** 2x2 matrix, having 4 components per element. */\n  MAT2: 'MAT2',\n  /** 3x3 matrix, having 9 components per element. */\n  MAT3: 'MAT3',\n  /** 4x3 matrix, having 16 components per element. */\n  MAT4: 'MAT4'\n};\n/** Data type of the values composing each element in the accessor. */\nAccessor.ComponentType = {\n  /**\n   * 1-byte signed integer, stored as\n   * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int8Array Int8Array}.\n   */\n  BYTE: 5120,\n  /**\n   * 1-byte unsigned integer, stored as\n   * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array Uint8Array}.\n   */\n  UNSIGNED_BYTE: 5121,\n  /**\n   * 2-byte signed integer, stored as\n   * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array Int16Array}.\n   */\n  SHORT: 5122,\n  /**\n   * 2-byte unsigned integer, stored as\n   * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array Uint16Array}.\n   */\n  UNSIGNED_SHORT: 5123,\n  /**\n   * 4-byte unsigned integer, stored as\n   * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array Uint32Array}.\n   */\n  UNSIGNED_INT: 5125,\n  /**\n   * 4-byte floating point number, stored as\n   * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array}.\n   */\n  FLOAT: 5126\n};\nfunction arrayToComponentType(array) {\n  switch (array.constructor) {\n    case Float32Array:\n      return Accessor.ComponentType.FLOAT;\n    case Uint32Array:\n      return Accessor.ComponentType.UNSIGNED_INT;\n    case Uint16Array:\n      return Accessor.ComponentType.UNSIGNED_SHORT;\n    case Uint8Array:\n      return Accessor.ComponentType.UNSIGNED_BYTE;\n    case Int16Array:\n      return Accessor.ComponentType.SHORT;\n    case Int8Array:\n      return Accessor.ComponentType.BYTE;\n    default:\n      throw new Error('Unknown accessor componentType.');\n  }\n}\n\n/**\n * *Reusable collections of {@link AnimationChannel}s, together representing a discrete animation\n * clip.*\n *\n * One Animation represents one playable unit in an animation system. Each may contain channels\n * affecting multiple paths (`translation`, `rotation`, `scale`, or `weights`) on multiple\n * {@link Node}s. An Animation's channels must be played together, and do not have any meaning in\n * isolation.\n *\n * Multiple Animations _may_ be played together: for example, one character's _Walk_ animation\n * might play while another character's _Run_ animation plays. Or a single character might have\n * both an _Idle_ and a _Talk_ animation playing at the same time. However, glTF does not define\n * any particular relationship between top-level Animations, or any particular playback behavior\n * like looping or sequences of Animations. General-purpose viewers typically autoplay the first\n * animation and provide UI controls for choosing another. Game engines may have significantly\n * more advanced methods of playing and blending animations.\n *\n * For example, a very simple skinned {@link Mesh} might have two Animations, _Idle_ and _Walk_.\n * Each of those Animations might affect the rotations of two bones, _LegL_ and _LegR_, where the\n * keyframes for each target-path pair are stored in {@link AnimationChannel} instances. In  total,\n * this model would contain two Animations and Four {@link AnimationChannel}s.\n *\n * Usage:\n *\n * ```ts\n * const animation = doc.createAnimation('machineRun')\n * \t.addChannel(rotateCog1)\n * \t.addChannel(rotateCog2)\n * \t.addChannel(rotateCog3);\n * ```\n *\n * Reference\n * - [glTF → Animations](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#animations)\n *\n * @category Properties\n */\nclass Animation extends ExtensibleProperty {\n  init() {\n    this.propertyType = PropertyType.ANIMATION;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      channels: new RefSet(),\n      samplers: new RefSet()\n    });\n  }\n  /** Adds an {@link AnimationChannel} to this Animation. */\n  addChannel(channel) {\n    return this.addRef('channels', channel);\n  }\n  /** Removes an {@link AnimationChannel} from this Animation. */\n  removeChannel(channel) {\n    return this.removeRef('channels', channel);\n  }\n  /** Lists {@link AnimationChannel}s in this Animation. */\n  listChannels() {\n    return this.listRefs('channels');\n  }\n  /** Adds an {@link AnimationSampler} to this Animation. */\n  addSampler(sampler) {\n    return this.addRef('samplers', sampler);\n  }\n  /** Removes an {@link AnimationSampler} from this Animation. */\n  removeSampler(sampler) {\n    return this.removeRef('samplers', sampler);\n  }\n  /** Lists {@link AnimationSampler}s in this Animation. */\n  listSamplers() {\n    return this.listRefs('samplers');\n  }\n}\n\n/**\n * *A target-path pair within a larger {@link Animation}, which refers to an\n * {@link AnimationSampler} storing the keyframe data for that pair.*\n *\n * A _target_ is always a {@link Node}, in the core glTF spec. A _path_ is any property of that\n * Node that can be affected by animation: `translation`, `rotation`, `scale`, or `weights`. An\n * {@link Animation} affecting the positions and rotations of several {@link Node}s would contain\n * one channel for each Node-position or Node-rotation pair. The keyframe data for an\n * AnimationChannel is stored in an {@link AnimationSampler}, which must be attached to the same\n * {@link Animation}.\n *\n * Usage:\n *\n * ```ts\n * const node = doc.getRoot()\n * \t.listNodes()\n * \t.find((node) => node.getName() === 'Cog');\n *\n * const channel = doc.createAnimationChannel('cogRotation')\n * \t.setTargetPath('rotation')\n * \t.setTargetNode(node)\n * \t.setSampler(rotateSampler);\n * ```\n *\n * Reference\n * - [glTF → Animations](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#animations)\n *\n * @category Properties\n */\nclass AnimationChannel extends ExtensibleProperty {\n  /**********************************************************************************************\n   * Instance.\n   */\n  init() {\n    this.propertyType = PropertyType.ANIMATION_CHANNEL;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      targetPath: null,\n      targetNode: null,\n      sampler: null\n    });\n  }\n  /**********************************************************************************************\n   * Properties.\n   */\n  /**\n   * Path (property) animated on the target {@link Node}. Supported values include:\n   * `translation`, `rotation`, `scale`, or `weights`.\n   */\n  getTargetPath() {\n    return this.get('targetPath');\n  }\n  /**\n   * Path (property) animated on the target {@link Node}. Supported values include:\n   * `translation`, `rotation`, `scale`, or `weights`.\n   */\n  setTargetPath(targetPath) {\n    return this.set('targetPath', targetPath);\n  }\n  /** Target {@link Node} animated by the channel. */\n  getTargetNode() {\n    return this.getRef('targetNode');\n  }\n  /** Target {@link Node} animated by the channel. */\n  setTargetNode(targetNode) {\n    return this.setRef('targetNode', targetNode);\n  }\n  /**\n   * Keyframe data input/output values for the channel. Must be attached to the same\n   * {@link Animation}.\n   */\n  getSampler() {\n    return this.getRef('sampler');\n  }\n  /**\n   * Keyframe data input/output values for the channel. Must be attached to the same\n   * {@link Animation}.\n   */\n  setSampler(sampler) {\n    return this.setRef('sampler', sampler);\n  }\n}\n/**********************************************************************************************\n * Constants.\n */\n/** Name of the property to be modified by an animation channel. */\nAnimationChannel.TargetPath = {\n  /** Channel targets {@link Node.setTranslation}. */\n  TRANSLATION: 'translation',\n  /** Channel targets {@link Node.setRotation}. */\n  ROTATION: 'rotation',\n  /** Channel targets {@link Node.setScale}. */\n  SCALE: 'scale',\n  /** Channel targets {@link Node.setWeights}, affecting {@link PrimitiveTarget} weights. */\n  WEIGHTS: 'weights'\n};\n\n/**\n * *Reusable collection of keyframes affecting particular property of an object.*\n *\n * Each AnimationSampler refers to an input and an output {@link Accessor}. Input contains times\n * (in seconds) for each keyframe. Output contains values (of any {@link Accessor.Type}) for the\n * animated property at each keyframe. Samplers using `CUBICSPLINE` interpolation will also contain\n * in/out tangents in the output, with the layout:\n *\n * in<sub>1</sub>, value<sub>1</sub>, out<sub>1</sub>,\n * in<sub>2</sub>, value<sub>2</sub>, out<sub>2</sub>,\n * in<sub>3</sub>, value<sub>3</sub>, out<sub>3</sub>, ...\n *\n * Usage:\n *\n * ```ts\n * // Create accessor containing input times, in seconds.\n * const input = doc.createAccessor('bounceTimes')\n * \t.setArray(new Float32Array([0, 1, 2]))\n * \t.setType(Accessor.Type.SCALAR);\n *\n * // Create accessor containing output values, in local units.\n * const output = doc.createAccessor('bounceValues')\n * \t.setArray(new Float32Array([\n * \t\t0, 0, 0, // y = 0\n * \t\t0, 1, 0, // y = 1\n * \t\t0, 0, 0, // y = 0\n * \t]))\n * \t.setType(Accessor.Type.VEC3);\n *\n * // Create sampler.\n * const sampler = doc.createAnimationSampler('bounce')\n * \t.setInput(input)\n * \t.setOutput(output)\n * \t.setInterpolation('LINEAR');\n * ```\n *\n * Reference\n * - [glTF → Animations](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#animations)\n *\n * @category Properties\n */\nclass AnimationSampler extends ExtensibleProperty {\n  /**********************************************************************************************\n   * Instance.\n   */\n  init() {\n    this.propertyType = PropertyType.ANIMATION_SAMPLER;\n  }\n  getDefaultAttributes() {\n    return Object.assign(super.getDefaults(), {\n      interpolation: AnimationSampler.Interpolation.LINEAR,\n      input: null,\n      output: null\n    });\n  }\n  /**********************************************************************************************\n   * Static.\n   */\n  /** Interpolation mode: `STEP`, `LINEAR`, or `CUBICSPLINE`. */\n  getInterpolation() {\n    return this.get('interpolation');\n  }\n  /** Interpolation mode: `STEP`, `LINEAR`, or `CUBICSPLINE`. */\n  setInterpolation(interpolation) {\n    return this.set('interpolation', interpolation);\n  }\n  /** Times for each keyframe, in seconds. */\n  getInput() {\n    return this.getRef('input');\n  }\n  /** Times for each keyframe, in seconds. */\n  setInput(input) {\n    return this.setRef('input', input, {\n      usage: BufferViewUsage$1.OTHER\n    });\n  }\n  /**\n   * Values for each keyframe. For `CUBICSPLINE` interpolation, output also contains in/out\n   * tangents.\n   */\n  getOutput() {\n    return this.getRef('output');\n  }\n  /**\n   * Values for each keyframe. For `CUBICSPLINE` interpolation, output also contains in/out\n   * tangents.\n   */\n  setOutput(output) {\n    return this.setRef('output', output, {\n      usage: BufferViewUsage$1.OTHER\n    });\n  }\n}\n/**********************************************************************************************\n * Constants.\n */\n/** Interpolation method. */\nAnimationSampler.Interpolation = {\n  /** Animated values are linearly interpolated between keyframes. */\n  LINEAR: 'LINEAR',\n  /** Animated values remain constant from one keyframe until the next keyframe. */\n  STEP: 'STEP',\n  /** Animated values are interpolated according to given cubic spline tangents. */\n  CUBICSPLINE: 'CUBICSPLINE'\n};\n\n/**\n * *Buffers are low-level storage units for binary data.*\n *\n * glTF 2.0 has three concepts relevant to binary storage: accessors, buffer views, and buffers.\n * In glTF Transform, an {@link Accessor} is referenced by any property that requires numeric typed\n * array data. Meshes, Primitives, and Animations all reference Accessors. Buffers define how that\n * data is organized into transmitted file(s). A `.glb` file has only a single Buffer, and when\n * exporting to `.glb` your resources should be grouped accordingly. A `.gltf` file may reference\n * one or more `.bin` files — each `.bin` is a Buffer — and grouping Accessors under different\n * Buffers allow you to specify that structure.\n *\n * For engines that can dynamically load portions of a glTF file, splitting data into separate\n * buffers can allow you to avoid loading data until it is needed. For example, you might put\n * binary data for specific meshes into a different `.bin` buffer, or put each animation's binary\n * payload into its own `.bin`.\n *\n * Buffer Views define how Accessors are organized within a given Buffer. glTF Transform creates an\n * efficient Buffer View layout automatically at export: there is no Buffer View property exposed\n * by the glTF Transform API, simplifying data management.\n *\n * Usage:\n *\n * ```ts\n * // Create two buffers with custom filenames.\n * const buffer1 = doc.createBuffer('buffer1')\n * \t.setURI('part1.bin');\n * const buffer2 = doc.createBuffer('buffer2')\n * \t.setURI('part2.bin');\n *\n * // Assign the attributes of two meshes to different buffers. If the meshes\n * // had indices or morph target attributes, you would also want to relocate\n * // those accessors.\n * mesh1\n * \t.listPrimitives()\n * \t.forEach((primitive) => primitive.listAttributes()\n * \t\t.forEach((attribute) => attribute.setBuffer(buffer1)));\n * mesh2\n * \t.listPrimitives()\n * \t.forEach((primitive) => primitive.listAttributes()\n * \t\t.forEach((attribute) => attribute.setBuffer(buffer2)));\n *\n * // Write to disk. Each mesh's binary data will be in a separate binary file;\n * // any remaining accessors will be in a third (default) buffer.\n * await new NodeIO().write('scene.gltf', doc);\n * // → scene.gltf, part1.bin, part2.bin\n * ```\n *\n * References:\n * - [glTF → Buffers and Buffer Views](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#buffers-and-buffer-views)\n * - [glTF → Accessors](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#accessors)\n *\n * @category Properties\n */\nclass Buffer$1 extends ExtensibleProperty {\n  init() {\n    this.propertyType = PropertyType.BUFFER;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      uri: ''\n    });\n  }\n  /**\n   * Returns the URI (or filename) of this buffer (e.g. 'myBuffer.bin'). URIs are strongly\n   * encouraged to be relative paths, rather than absolute. Use of a protocol (like `file://`)\n   * is possible for custom applications, but will limit the compatibility of the asset with most\n   * tools.\n   *\n   * Buffers commonly use the extension `.bin`, though this is not required.\n   */\n  getURI() {\n    return this.get('uri');\n  }\n  /**\n   * Sets the URI (or filename) of this buffer (e.g. 'myBuffer.bin'). URIs are strongly\n   * encouraged to be relative paths, rather than absolute. Use of a protocol (like `file://`)\n   * is possible for custom applications, but will limit the compatibility of the asset with most\n   * tools.\n   *\n   * Buffers commonly use the extension `.bin`, though this is not required.\n   */\n  setURI(uri) {\n    return this.set('uri', uri);\n  }\n}\n\n/**\n * *Cameras are perspectives through which the {@link Scene} may be viewed.*\n *\n * Projection can be perspective or orthographic. Cameras are contained in nodes and thus can be\n * transformed. The camera is defined such that the local +X axis is to the right, the lens looks\n * towards the local -Z axis, and the top of the camera is aligned with the local +Y axis. If no\n * transformation is specified, the location of the camera is at the origin.\n *\n * Usage:\n *\n * ```typescript\n * const camera = doc.createCamera('myCamera')\n * \t.setType(GLTF.CameraType.PERSPECTIVE)\n * \t.setZNear(0.1)\n * \t.setZFar(100)\n * \t.setYFov(Math.PI / 4)\n * \t.setAspectRatio(1.5);\n *\n * node.setCamera(camera);\n * ```\n *\n * References:\n * - [glTF → Cameras](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#cameras)\n *\n * @category Properties\n */\nclass Camera extends ExtensibleProperty {\n  /**********************************************************************************************\n   * Instance.\n   */\n  init() {\n    this.propertyType = PropertyType.CAMERA;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      // Common.\n      type: Camera.Type.PERSPECTIVE,\n      znear: 0.1,\n      zfar: 100,\n      // Perspective.\n      aspectRatio: null,\n      yfov: Math.PI * 2 * 50 / 360,\n      // 50º\n      // Orthographic.\n      xmag: 1,\n      ymag: 1\n    });\n  }\n  /**********************************************************************************************\n   * Common.\n   */\n  /** Specifies if the camera uses a perspective or orthographic projection. */\n  getType() {\n    return this.get('type');\n  }\n  /** Specifies if the camera uses a perspective or orthographic projection. */\n  setType(type) {\n    return this.set('type', type);\n  }\n  /** Floating-point distance to the near clipping plane. */\n  getZNear() {\n    return this.get('znear');\n  }\n  /** Floating-point distance to the near clipping plane. */\n  setZNear(znear) {\n    return this.set('znear', znear);\n  }\n  /**\n   * Floating-point distance to the far clipping plane. When defined, zfar must be greater than\n   * znear. If zfar is undefined, runtime must use infinite projection matrix.\n   */\n  getZFar() {\n    return this.get('zfar');\n  }\n  /**\n   * Floating-point distance to the far clipping plane. When defined, zfar must be greater than\n   * znear. If zfar is undefined, runtime must use infinite projection matrix.\n   */\n  setZFar(zfar) {\n    return this.set('zfar', zfar);\n  }\n  /**********************************************************************************************\n   * Perspective.\n   */\n  /**\n   * Floating-point aspect ratio of the field of view. When undefined, the aspect ratio of the\n   * canvas is used.\n   */\n  getAspectRatio() {\n    return this.get('aspectRatio');\n  }\n  /**\n   * Floating-point aspect ratio of the field of view. When undefined, the aspect ratio of the\n   * canvas is used.\n   */\n  setAspectRatio(aspectRatio) {\n    return this.set('aspectRatio', aspectRatio);\n  }\n  /** Floating-point vertical field of view in radians. */\n  getYFov() {\n    return this.get('yfov');\n  }\n  /** Floating-point vertical field of view in radians. */\n  setYFov(yfov) {\n    return this.set('yfov', yfov);\n  }\n  /**********************************************************************************************\n   * Orthographic.\n   */\n  /**\n   * Floating-point horizontal magnification of the view, and half the view's width\n   * in world units.\n   */\n  getXMag() {\n    return this.get('xmag');\n  }\n  /**\n   * Floating-point horizontal magnification of the view, and half the view's width\n   * in world units.\n   */\n  setXMag(xmag) {\n    return this.set('xmag', xmag);\n  }\n  /**\n   * Floating-point vertical magnification of the view, and half the view's height\n   * in world units.\n   */\n  getYMag() {\n    return this.get('ymag');\n  }\n  /**\n   * Floating-point vertical magnification of the view, and half the view's height\n   * in world units.\n   */\n  setYMag(ymag) {\n    return this.set('ymag', ymag);\n  }\n}\n/**********************************************************************************************\n * Constants.\n */\nCamera.Type = {\n  /** A perspective camera representing a perspective projection matrix. */\n  PERSPECTIVE: 'perspective',\n  /** An orthographic camera representing an orthographic projection matrix. */\n  ORTHOGRAPHIC: 'orthographic'\n};\n\n/**\n * *Base class for all {@link Property} types that can be attached by an {@link Extension}.*\n *\n * After an {@link Extension} is attached to a glTF {@link Document}, the Extension may be used to\n * construct ExtensionProperty instances, to be referenced throughout the document as prescribed by\n * the Extension. For example, the `KHR_materials_clearcoat` Extension defines a `Clearcoat`\n * ExtensionProperty, which is referenced by {@link Material} Properties in the Document, and may\n * contain references to {@link Texture} properties of its own.\n *\n * For more information on available extensions and their usage, see [Extensions](/extensions).\n *\n * Reference:\n * - [glTF → Extensions](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#specifying-extensions)\n *\n * @category Properties\n */\nclass ExtensionProperty extends Property {\n  /** @hidden */\n  _validateParent(parent) {\n    if (!this.parentTypes.includes(parent.propertyType)) {\n      throw new Error(`Parent \"${parent.propertyType}\" invalid for child \"${this.propertyType}\".`);\n    }\n  }\n}\nExtensionProperty.EXTENSION_NAME = void 0;\n\n/**\n * *Settings associated with a particular use of a {@link Texture}.*\n *\n * Different materials may reuse the same texture but with different texture coordinates,\n * minFilter/magFilter, or wrapS/wrapT settings. The TextureInfo class contains settings\n * derived from both the \"TextureInfo\" and \"Sampler\" properties in the glTF specification,\n * consolidated here for simplicity.\n *\n * TextureInfo properties cannot be directly created. For any material texture slot, such as\n * baseColorTexture, there will be a corresponding method to obtain the TextureInfo for that slot.\n * For example, see {@link Material.getBaseColorTextureInfo}.\n *\n * References:\n * - [glTF → Texture Info](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#reference-textureinfo)\n *\n * @category Properties\n */\nclass TextureInfo extends ExtensibleProperty {\n  /**********************************************************************************************\n   * Instance.\n   */\n  init() {\n    this.propertyType = PropertyType.TEXTURE_INFO;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      texCoord: 0,\n      magFilter: null,\n      minFilter: null,\n      wrapS: TextureInfo.WrapMode.REPEAT,\n      wrapT: TextureInfo.WrapMode.REPEAT\n    });\n  }\n  /**********************************************************************************************\n   * Texture coordinates.\n   */\n  /** Returns the texture coordinate (UV set) index for the texture. */\n  getTexCoord() {\n    return this.get('texCoord');\n  }\n  /** Sets the texture coordinate (UV set) index for the texture. */\n  setTexCoord(texCoord) {\n    return this.set('texCoord', texCoord);\n  }\n  /**********************************************************************************************\n   * Min/mag filter.\n   */\n  /** Returns the magnification filter applied to the texture. */\n  getMagFilter() {\n    return this.get('magFilter');\n  }\n  /** Sets the magnification filter applied to the texture. */\n  setMagFilter(magFilter) {\n    return this.set('magFilter', magFilter);\n  }\n  /** Sets the minification filter applied to the texture. */\n  getMinFilter() {\n    return this.get('minFilter');\n  }\n  /** Returns the minification filter applied to the texture. */\n  setMinFilter(minFilter) {\n    return this.set('minFilter', minFilter);\n  }\n  /**********************************************************************************************\n   * UV wrapping.\n   */\n  /** Returns the S (U) wrapping mode for UVs used by the texture. */\n  getWrapS() {\n    return this.get('wrapS');\n  }\n  /** Sets the S (U) wrapping mode for UVs used by the texture. */\n  setWrapS(wrapS) {\n    return this.set('wrapS', wrapS);\n  }\n  /** Returns the T (V) wrapping mode for UVs used by the texture. */\n  getWrapT() {\n    return this.get('wrapT');\n  }\n  /** Sets the T (V) wrapping mode for UVs used by the texture. */\n  setWrapT(wrapT) {\n    return this.set('wrapT', wrapT);\n  }\n}\n/**********************************************************************************************\n * Constants.\n */\n/** UV wrapping mode. Values correspond to WebGL enums. */\nTextureInfo.WrapMode = {\n  /** */\n  CLAMP_TO_EDGE: 33071,\n  /** */\n  MIRRORED_REPEAT: 33648,\n  /** */\n  REPEAT: 10497\n};\n/** Magnification filter. Values correspond to WebGL enums. */\nTextureInfo.MagFilter = {\n  /** */\n  NEAREST: 9728,\n  /** */\n  LINEAR: 9729\n};\n/** Minification filter. Values correspond to WebGL enums. */\nTextureInfo.MinFilter = {\n  /** */\n  NEAREST: 9728,\n  /** */\n  LINEAR: 9729,\n  /** */\n  NEAREST_MIPMAP_NEAREST: 9984,\n  /** */\n  LINEAR_MIPMAP_NEAREST: 9985,\n  /** */\n  NEAREST_MIPMAP_LINEAR: 9986,\n  /** */\n  LINEAR_MIPMAP_LINEAR: 9987\n};\n\nconst {\n  R,\n  G,\n  B,\n  A\n} = TextureChannel;\n/**\n * *Materials describe a surface's appearance and response to light.*\n *\n * Each {@link Primitive} within a {@link Mesh} may be assigned a single Material. The number of\n * GPU draw calls typically increases with both the numbers of Primitives and of Materials in an\n * asset; Materials should be reused wherever possible. Techniques like texture atlasing and vertex\n * colors allow objects to have varied appearances while technically sharing a single Material.\n *\n * Material properties are modified by both scalars (like `baseColorFactor`) and textures (like\n * `baseColorTexture`). When both are available, factors are considered linear multipliers against\n * textures of the same name. In the case of base color, vertex colors (`COLOR_0` attributes) are\n * also multiplied.\n *\n * Textures containing color data (`baseColorTexture`, `emissiveTexture`) are sRGB. All other\n * textures are linear. Like other resources, textures should be reused when possible.\n *\n * Usage:\n *\n * ```typescript\n * const material = doc.createMaterial('myMaterial')\n * \t.setBaseColorFactor([1, 0.5, 0.5, 1]) // RGBA\n * \t.setOcclusionTexture(aoTexture)\n * \t.setOcclusionStrength(0.5);\n *\n * mesh.listPrimitives()\n * \t.forEach((prim) => prim.setMaterial(material));\n * ```\n *\n * @category Properties\n */\nclass Material extends ExtensibleProperty {\n  /**********************************************************************************************\n   * Instance.\n   */\n  init() {\n    this.propertyType = PropertyType.MATERIAL;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      alphaMode: Material.AlphaMode.OPAQUE,\n      alphaCutoff: 0.5,\n      doubleSided: false,\n      baseColorFactor: [1, 1, 1, 1],\n      baseColorTexture: null,\n      baseColorTextureInfo: new TextureInfo(this.graph, 'baseColorTextureInfo'),\n      emissiveFactor: [0, 0, 0],\n      emissiveTexture: null,\n      emissiveTextureInfo: new TextureInfo(this.graph, 'emissiveTextureInfo'),\n      normalScale: 1,\n      normalTexture: null,\n      normalTextureInfo: new TextureInfo(this.graph, 'normalTextureInfo'),\n      occlusionStrength: 1,\n      occlusionTexture: null,\n      occlusionTextureInfo: new TextureInfo(this.graph, 'occlusionTextureInfo'),\n      roughnessFactor: 1,\n      metallicFactor: 1,\n      metallicRoughnessTexture: null,\n      metallicRoughnessTextureInfo: new TextureInfo(this.graph, 'metallicRoughnessTextureInfo')\n    });\n  }\n  /**********************************************************************************************\n   * Double-sided / culling.\n   */\n  /** Returns true when both sides of triangles should be rendered. May impact performance. */\n  getDoubleSided() {\n    return this.get('doubleSided');\n  }\n  /** Sets whether to render both sides of triangles. May impact performance. */\n  setDoubleSided(doubleSided) {\n    return this.set('doubleSided', doubleSided);\n  }\n  /**********************************************************************************************\n   * Alpha.\n   */\n  /** Returns material alpha, equivalent to baseColorFactor[3]. */\n  getAlpha() {\n    return this.get('baseColorFactor')[3];\n  }\n  /** Sets material alpha, equivalent to baseColorFactor[3]. */\n  setAlpha(alpha) {\n    const baseColorFactor = this.get('baseColorFactor').slice();\n    baseColorFactor[3] = alpha;\n    return this.set('baseColorFactor', baseColorFactor);\n  }\n  /**\n   * Returns the mode of the material's alpha channels, which are provided by `baseColorFactor`\n   * and `baseColorTexture`.\n   *\n   * - `OPAQUE`: Alpha value is ignored and the rendered output is fully opaque.\n   * - `BLEND`: Alpha value is used to determine the transparency each pixel on a surface, and\n   * \tthe fraction of surface vs. background color in the final result. Alpha blending creates\n   *\tsignificant edge cases in realtime renderers, and some care when structuring the model is\n   * \tnecessary for good results. In particular, transparent geometry should be kept in separate\n   * \tmeshes or primitives from opaque geometry. The `depthWrite` or `zWrite` settings in engines\n   * \tshould usually be disabled on transparent materials.\n   * - `MASK`: Alpha value is compared against `alphaCutoff` threshold for each pixel on a\n   * \tsurface, and the pixel is either fully visible or fully discarded based on that cutoff.\n   * \tThis technique is useful for things like leafs/foliage, grass, fabric meshes, and other\n   * \tsurfaces where no semitransparency is needed. With a good choice of `alphaCutoff`, surfaces\n   * \tthat don't require semitransparency can avoid the performance penalties and visual issues\n   * \tinvolved with `BLEND` transparency.\n   *\n   * Reference:\n   * - [glTF → material.alphaMode](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#materialalphamode)\n   */\n  getAlphaMode() {\n    return this.get('alphaMode');\n  }\n  /** Sets the mode of the material's alpha channels. See {@link Material.getAlphaMode getAlphaMode} for details. */\n  setAlphaMode(alphaMode) {\n    return this.set('alphaMode', alphaMode);\n  }\n  /** Returns the visibility threshold; applied only when `.alphaMode='MASK'`. */\n  getAlphaCutoff() {\n    return this.get('alphaCutoff');\n  }\n  /** Sets the visibility threshold; applied only when `.alphaMode='MASK'`. */\n  setAlphaCutoff(alphaCutoff) {\n    return this.set('alphaCutoff', alphaCutoff);\n  }\n  /**********************************************************************************************\n   * Base color.\n   */\n  /**\n   * Base color / albedo factor; Linear-sRGB components.\n   * See {@link Material.getBaseColorTexture getBaseColorTexture}.\n   */\n  getBaseColorFactor() {\n    return this.get('baseColorFactor');\n  }\n  /**\n   * Base color / albedo factor; Linear-sRGB components.\n   * See {@link Material.getBaseColorTexture getBaseColorTexture}.\n   */\n  setBaseColorFactor(baseColorFactor) {\n    return this.set('baseColorFactor', baseColorFactor);\n  }\n  /**\n   * Base color / albedo. The visible color of a non-metallic surface under constant ambient\n   * light would be a linear combination (multiplication) of its vertex colors, base color\n   * factor, and base color texture. Lighting, and reflections in metallic or smooth surfaces,\n   * also effect the final color. The alpha (`.a`) channel of base color factors and textures\n   * will have varying effects, based on the setting of {@link Material.getAlphaMode getAlphaMode}.\n   *\n   * Reference:\n   * - [glTF → material.pbrMetallicRoughness.baseColorFactor](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#pbrmetallicroughnessbasecolorfactor)\n   */\n  getBaseColorTexture() {\n    return this.getRef('baseColorTexture');\n  }\n  /**\n   * Settings affecting the material's use of its base color texture. If no texture is attached,\n   * {@link TextureInfo} is `null`.\n   */\n  getBaseColorTextureInfo() {\n    return this.getRef('baseColorTexture') ? this.getRef('baseColorTextureInfo') : null;\n  }\n  /** Sets base color / albedo texture. See {@link Material.getBaseColorTexture getBaseColorTexture}. */\n  setBaseColorTexture(texture) {\n    return this.setRef('baseColorTexture', texture, {\n      channels: R | G | B | A,\n      isColor: true\n    });\n  }\n  /**********************************************************************************************\n   * Emissive.\n   */\n  /** Emissive color; Linear-sRGB components. See {@link Material.getEmissiveTexture getEmissiveTexture}. */\n  getEmissiveFactor() {\n    return this.get('emissiveFactor');\n  }\n  /** Emissive color; Linear-sRGB components. See {@link Material.getEmissiveTexture getEmissiveTexture}. */\n  setEmissiveFactor(emissiveFactor) {\n    return this.set('emissiveFactor', emissiveFactor);\n  }\n  /**\n   * Emissive texture. Emissive color is added to any base color of the material, after any\n   * lighting/shadowing are applied. An emissive color does not inherently \"glow\", or affect\n   * objects around it at all. To create that effect, most viewers must also enable a\n   * post-processing effect called \"bloom\".\n   *\n   * Reference:\n   * - [glTF → material.emissiveTexture](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#materialemissivetexture)\n   */\n  getEmissiveTexture() {\n    return this.getRef('emissiveTexture');\n  }\n  /**\n   * Settings affecting the material's use of its emissive texture. If no texture is attached,\n   * {@link TextureInfo} is `null`.\n   */\n  getEmissiveTextureInfo() {\n    return this.getRef('emissiveTexture') ? this.getRef('emissiveTextureInfo') : null;\n  }\n  /** Sets emissive texture. See {@link Material.getEmissiveTexture getEmissiveTexture}. */\n  setEmissiveTexture(texture) {\n    return this.setRef('emissiveTexture', texture, {\n      channels: R | G | B,\n      isColor: true\n    });\n  }\n  /**********************************************************************************************\n   * Normal.\n   */\n  /** Normal (surface detail) factor; linear multiplier. Affects `.normalTexture`. */\n  getNormalScale() {\n    return this.get('normalScale');\n  }\n  /** Normal (surface detail) factor; linear multiplier. Affects `.normalTexture`. */\n  setNormalScale(scale) {\n    return this.set('normalScale', scale);\n  }\n  /**\n   * Normal (surface detail) texture.\n   *\n   * A tangent space normal map. The texture contains RGB components. Each texel represents the\n   * XYZ components of a normal vector in tangent space. Red [0 to 255] maps to X [-1 to 1].\n   * Green [0 to 255] maps to Y [-1 to 1]. Blue [128 to 255] maps to Z [1/255 to 1]. The normal\n   * vectors use OpenGL conventions where +X is right and +Y is up. +Z points toward the viewer.\n   *\n   * Reference:\n   * - [glTF → material.normalTexture](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#materialnormaltexture)\n   */\n  getNormalTexture() {\n    return this.getRef('normalTexture');\n  }\n  /**\n   * Settings affecting the material's use of its normal texture. If no texture is attached,\n   * {@link TextureInfo} is `null`.\n   */\n  getNormalTextureInfo() {\n    return this.getRef('normalTexture') ? this.getRef('normalTextureInfo') : null;\n  }\n  /** Sets normal (surface detail) texture. See {@link Material.getNormalTexture getNormalTexture}. */\n  setNormalTexture(texture) {\n    return this.setRef('normalTexture', texture, {\n      channels: R | G | B\n    });\n  }\n  /**********************************************************************************************\n   * Occlusion.\n   */\n  /** (Ambient) Occlusion factor; linear multiplier. Affects `.occlusionTexture`. */\n  getOcclusionStrength() {\n    return this.get('occlusionStrength');\n  }\n  /** Sets (ambient) occlusion factor; linear multiplier. Affects `.occlusionTexture`. */\n  setOcclusionStrength(strength) {\n    return this.set('occlusionStrength', strength);\n  }\n  /**\n   * (Ambient) Occlusion texture, generally used for subtle 'baked' shadowing effects that are\n   * independent of an object's position, such as shading in inset areas and corners. Direct\n   * lighting is not affected by occlusion, so at least one indirect light source must be present\n   * in the scene for occlusion effects to be visible.\n   *\n   * The occlusion values are sampled from the R channel. Higher values indicate areas that\n   * should receive full indirect lighting and lower values indicate no indirect lighting.\n   *\n   * Reference:\n   * - [glTF → material.occlusionTexture](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#materialocclusiontexture)\n   */\n  getOcclusionTexture() {\n    return this.getRef('occlusionTexture');\n  }\n  /**\n   * Settings affecting the material's use of its occlusion texture. If no texture is attached,\n   * {@link TextureInfo} is `null`.\n   */\n  getOcclusionTextureInfo() {\n    return this.getRef('occlusionTexture') ? this.getRef('occlusionTextureInfo') : null;\n  }\n  /** Sets (ambient) occlusion texture. See {@link Material.getOcclusionTexture getOcclusionTexture}. */\n  setOcclusionTexture(texture) {\n    return this.setRef('occlusionTexture', texture, {\n      channels: R\n    });\n  }\n  /**********************************************************************************************\n   * Metallic / roughness.\n   */\n  /**\n   * Roughness factor; linear multiplier. Affects roughness channel of\n   * `metallicRoughnessTexture`. See {@link Material.getMetallicRoughnessTexture getMetallicRoughnessTexture}.\n   */\n  getRoughnessFactor() {\n    return this.get('roughnessFactor');\n  }\n  /**\n   * Sets roughness factor; linear multiplier. Affects roughness channel of\n   * `metallicRoughnessTexture`. See {@link Material.getMetallicRoughnessTexture getMetallicRoughnessTexture}.\n   */\n  setRoughnessFactor(factor) {\n    return this.set('roughnessFactor', factor);\n  }\n  /**\n   * Metallic factor; linear multiplier. Affects roughness channel of\n   * `metallicRoughnessTexture`. See {@link Material.getMetallicRoughnessTexture getMetallicRoughnessTexture}.\n   */\n  getMetallicFactor() {\n    return this.get('metallicFactor');\n  }\n  /**\n   * Sets metallic factor; linear multiplier. Affects roughness channel of\n   * `metallicRoughnessTexture`. See {@link Material.getMetallicRoughnessTexture getMetallicRoughnessTexture}.\n   */\n  setMetallicFactor(factor) {\n    return this.set('metallicFactor', factor);\n  }\n  /**\n   * Metallic roughness texture. The metalness values are sampled from the B channel. The\n   * roughness values are sampled from the G channel. When a material is fully metallic,\n   * or nearly so, it may require image-based lighting (i.e. an environment map) or global\n   * illumination to appear well-lit.\n   *\n   * Reference:\n   * - [glTF → material.pbrMetallicRoughness.metallicRoughnessTexture](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#pbrmetallicroughnessmetallicroughnesstexture)\n   */\n  getMetallicRoughnessTexture() {\n    return this.getRef('metallicRoughnessTexture');\n  }\n  /**\n   * Settings affecting the material's use of its metallic/roughness texture. If no texture is\n   * attached, {@link TextureInfo} is `null`.\n   */\n  getMetallicRoughnessTextureInfo() {\n    return this.getRef('metallicRoughnessTexture') ? this.getRef('metallicRoughnessTextureInfo') : null;\n  }\n  /**\n   * Sets metallic/roughness texture.\n   * See {@link Material.getMetallicRoughnessTexture getMetallicRoughnessTexture}.\n   */\n  setMetallicRoughnessTexture(texture) {\n    return this.setRef('metallicRoughnessTexture', texture, {\n      channels: G | B\n    });\n  }\n}\n/**********************************************************************************************\n * Constants.\n */\nMaterial.AlphaMode = {\n  /**\n   * The alpha value is ignored and the rendered output is fully opaque\n   */\n  OPAQUE: 'OPAQUE',\n  /**\n   * The rendered output is either fully opaque or fully transparent depending on the alpha\n   * value and the specified alpha cutoff value\n   */\n  MASK: 'MASK',\n  /**\n   * The alpha value is used to composite the source and destination areas. The rendered\n   * output is combined with the background using the normal painting operation (i.e. the\n   * Porter and Duff over operator)\n   */\n  BLEND: 'BLEND'\n};\n\n/**\n * *Meshes define reusable geometry (triangles, lines, or points) and are instantiated by\n * {@link Node}s.*\n *\n * Each draw call required to render a mesh is represented as a {@link Primitive}. Meshes typically\n * have only a single {@link Primitive}, but may have more for various reasons. A mesh manages only\n * a list of primitives — materials, morph targets, and other properties are managed on a per-\n * primitive basis.\n *\n * When the same geometry and material should be rendered at multiple places in the scene, reuse\n * the same Mesh instance and attach it to multiple nodes for better efficiency. Where the geometry\n * is shared but the material is not, reusing {@link Accessor}s under different meshes and\n * primitives can similarly improve transmission efficiency, although some rendering efficiency is\n * lost as the number of materials in a scene increases.\n *\n * Usage:\n *\n * ```ts\n * const primitive = doc.createPrimitive()\n * \t.setAttribute('POSITION', positionAccessor)\n * \t.setAttribute('TEXCOORD_0', uvAccessor);\n * const mesh = doc.createMesh('myMesh')\n * \t.addPrimitive(primitive);\n * node.setMesh(mesh);\n * ```\n *\n * References:\n * - [glTF → Geometry](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#geometry)\n *\n * @category Properties\n */\nclass Mesh extends ExtensibleProperty {\n  init() {\n    this.propertyType = PropertyType.MESH;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      weights: [],\n      primitives: new RefSet()\n    });\n  }\n  /** Adds a {@link Primitive} to the mesh's draw call list. */\n  addPrimitive(primitive) {\n    return this.addRef('primitives', primitive);\n  }\n  /** Removes a {@link Primitive} from the mesh's draw call list. */\n  removePrimitive(primitive) {\n    return this.removeRef('primitives', primitive);\n  }\n  /** Lists {@link Primitive} draw calls of the mesh. */\n  listPrimitives() {\n    return this.listRefs('primitives');\n  }\n  /**\n   * Initial weights of each {@link PrimitiveTarget} on this mesh. Each {@link Primitive} must\n   * have the same number of targets. Most engines only support 4-8 active morph targets at a\n   * time.\n   */\n  getWeights() {\n    return this.get('weights');\n  }\n  /**\n   * Initial weights of each {@link PrimitiveTarget} on this mesh. Each {@link Primitive} must\n   * have the same number of targets. Most engines only support 4-8 active morph targets at a\n   * time.\n   */\n  setWeights(weights) {\n    return this.set('weights', weights);\n  }\n}\n\n/**\n * *Nodes are the objects that comprise a {@link Scene}.*\n *\n * Each Node may have one or more children, and a transform (position, rotation, and scale) that\n * applies to all of its descendants. A Node may also reference (or \"instantiate\") other resources\n * at its location, including {@link Mesh}, Camera, Light, and Skin properties. A Node cannot be\n * part of more than one {@link Scene}.\n *\n * A Node's local transform is represented with array-like objects, intended to be compatible with\n * [gl-matrix](https://github.com/toji/gl-matrix), or with the `toArray`/`fromArray` methods of\n * libraries like three.js and babylon.js.\n *\n * Usage:\n *\n * ```ts\n * const node = doc.createNode('myNode')\n * \t.setMesh(mesh)\n * \t.setTranslation([0, 0, 0])\n * \t.addChild(otherNode);\n * ```\n *\n * References:\n * - [glTF → Nodes and Hierarchy](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#nodes-and-hierarchy)\n *\n * @category Properties\n */\nclass Node extends ExtensibleProperty {\n  init() {\n    this.propertyType = PropertyType.NODE;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      translation: [0, 0, 0],\n      rotation: [0, 0, 0, 1],\n      scale: [1, 1, 1],\n      weights: [],\n      camera: null,\n      mesh: null,\n      skin: null,\n      children: new RefSet()\n    });\n  }\n  copy(other, resolve = COPY_IDENTITY) {\n    // Node cannot be copied, only cloned. Copying is shallow, but Nodes cannot have more than\n    // one parent. Rather than leaving one of the two Nodes without children, throw an error here.\n    if (resolve === COPY_IDENTITY) throw new Error('Node cannot be copied.');\n    return super.copy(other, resolve);\n  }\n  /**********************************************************************************************\n   * Local transform.\n   */\n  /** Returns the translation (position) of this Node in local space. */\n  getTranslation() {\n    return this.get('translation');\n  }\n  /** Returns the rotation (quaternion) of this Node in local space. */\n  getRotation() {\n    return this.get('rotation');\n  }\n  /** Returns the scale of this Node in local space. */\n  getScale() {\n    return this.get('scale');\n  }\n  /** Sets the translation (position) of this Node in local space. */\n  setTranslation(translation) {\n    return this.set('translation', translation);\n  }\n  /** Sets the rotation (quaternion) of this Node in local space. */\n  setRotation(rotation) {\n    return this.set('rotation', rotation);\n  }\n  /** Sets the scale of this Node in local space. */\n  setScale(scale) {\n    return this.set('scale', scale);\n  }\n  /** Returns the local matrix of this Node. */\n  getMatrix() {\n    return MathUtils.compose(this.get('translation'), this.get('rotation'), this.get('scale'), []);\n  }\n  /** Sets the local matrix of this Node. Matrix will be decomposed to TRS properties. */\n  setMatrix(matrix) {\n    const translation = this.get('translation').slice();\n    const rotation = this.get('rotation').slice();\n    const scale = this.get('scale').slice();\n    MathUtils.decompose(matrix, translation, rotation, scale);\n    return this.set('translation', translation).set('rotation', rotation).set('scale', scale);\n  }\n  /**********************************************************************************************\n   * World transform.\n   */\n  /** Returns the translation (position) of this Node in world space. */\n  getWorldTranslation() {\n    const t = [0, 0, 0];\n    MathUtils.decompose(this.getWorldMatrix(), t, [0, 0, 0, 1], [1, 1, 1]);\n    return t;\n  }\n  /** Returns the rotation (quaternion) of this Node in world space. */\n  getWorldRotation() {\n    const r = [0, 0, 0, 1];\n    MathUtils.decompose(this.getWorldMatrix(), [0, 0, 0], r, [1, 1, 1]);\n    return r;\n  }\n  /** Returns the scale of this Node in world space. */\n  getWorldScale() {\n    const s = [1, 1, 1];\n    MathUtils.decompose(this.getWorldMatrix(), [0, 0, 0], [0, 0, 0, 1], s);\n    return s;\n  }\n  /** Returns the world matrix of this Node. */\n  getWorldMatrix() {\n    // Build ancestor chain.\n    const ancestors = [];\n    for (let node = this; node != null; node = node.getParentNode()) {\n      ancestors.push(node);\n    }\n    // Compute world matrix.\n    let ancestor;\n    const worldMatrix = ancestors.pop().getMatrix();\n    while (ancestor = ancestors.pop()) {\n      multiply(worldMatrix, worldMatrix, ancestor.getMatrix());\n    }\n    return worldMatrix;\n  }\n  /**********************************************************************************************\n   * Scene hierarchy.\n   */\n  /**\n   * Adds the given Node as a child of this Node.\n   *\n   * Requirements:\n   *\n   * 1. Nodes MAY be root children of multiple {@link Scene Scenes}\n   * 2. Nodes MUST NOT be children of >1 Node\n   * 3. Nodes MUST NOT be children of both Nodes and {@link Scene Scenes}\n   *\n   * The `addChild` method enforces these restrictions automatically, and will\n   * remove the new child from previous parents where needed. This behavior\n   * may change in future major releases of the library.\n   */\n  addChild(child) {\n    // Remove existing parents.\n    const parentNode = child.getParentNode();\n    if (parentNode) parentNode.removeChild(child);\n    for (const parent of child.listParents()) {\n      if (parent.propertyType === PropertyType.SCENE) {\n        parent.removeChild(child);\n      }\n    }\n    return this.addRef('children', child);\n  }\n  /** Removes a Node from this Node's child Node list. */\n  removeChild(child) {\n    return this.removeRef('children', child);\n  }\n  /** Lists all child Nodes of this Node. */\n  listChildren() {\n    return this.listRefs('children');\n  }\n  /**\n   * Returns the Node's unique parent Node within the scene graph. If the\n   * Node has no parents, or is a direct child of the {@link Scene}\n   * (\"root node\"), this method returns null.\n   *\n   * Unrelated to {@link Property.listParents}, which lists all resource\n   * references from properties of any type ({@link Skin}, {@link Root}, ...).\n   */\n  getParentNode() {\n    for (const parent of this.listParents()) {\n      if (parent.propertyType === PropertyType.NODE) {\n        return parent;\n      }\n    }\n    return null;\n  }\n  /**********************************************************************************************\n   * Attachments.\n   */\n  /** Returns the {@link Mesh}, if any, instantiated at this Node. */\n  getMesh() {\n    return this.getRef('mesh');\n  }\n  /**\n   * Sets a {@link Mesh} to be instantiated at this Node. A single mesh may be instantiated by\n   * multiple Nodes; reuse of this sort is strongly encouraged.\n   */\n  setMesh(mesh) {\n    return this.setRef('mesh', mesh);\n  }\n  /** Returns the {@link Camera}, if any, instantiated at this Node. */\n  getCamera() {\n    return this.getRef('camera');\n  }\n  /** Sets a {@link Camera} to be instantiated at this Node. */\n  setCamera(camera) {\n    return this.setRef('camera', camera);\n  }\n  /** Returns the {@link Skin}, if any, instantiated at this Node. */\n  getSkin() {\n    return this.getRef('skin');\n  }\n  /** Sets a {@link Skin} to be instantiated at this Node. */\n  setSkin(skin) {\n    return this.setRef('skin', skin);\n  }\n  /**\n   * Initial weights of each {@link PrimitiveTarget} for the mesh instance at this Node.\n   * Most engines only support 4-8 active morph targets at a time.\n   */\n  getWeights() {\n    return this.get('weights');\n  }\n  /**\n   * Initial weights of each {@link PrimitiveTarget} for the mesh instance at this Node.\n   * Most engines only support 4-8 active morph targets at a time.\n   */\n  setWeights(weights) {\n    return this.set('weights', weights);\n  }\n  /**********************************************************************************************\n   * Helpers.\n   */\n  /** Visits this {@link Node} and its descendants, top-down. */\n  traverse(fn) {\n    fn(this);\n    for (const child of this.listChildren()) child.traverse(fn);\n    return this;\n  }\n}\n\n/**\n * *Primitives are individual GPU draw calls comprising a {@link Mesh}.*\n *\n * Meshes typically have only a single Primitive, although various cases may require more. Each\n * primitive may be assigned vertex attributes, morph target attributes, and a material. Any of\n * these properties should be reused among multiple primitives where feasible.\n *\n * Primitives cannot be moved independently of other primitives within the same mesh, except\n * through the use of morph targets and skinning. If independent movement or other runtime\n * behavior is necessary (like raycasting or collisions) prefer to assign each primitive to a\n * different mesh. The number of GPU draw calls is typically not affected by grouping or\n * ungrouping primitives to a mesh.\n *\n * Each primitive may optionally be deformed by one or more morph targets, stored in a\n * {@link PrimitiveTarget}.\n *\n * Usage:\n *\n * ```ts\n * const primitive = doc.createPrimitive()\n * \t.setAttribute('POSITION', positionAccessor)\n * \t.setAttribute('TEXCOORD_0', uvAccessor)\n * \t.setMaterial(material);\n * mesh.addPrimitive(primitive);\n * node.setMesh(mesh);\n * ```\n *\n * References:\n * - [glTF → Geometry](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#geometry)\n *\n * @category Properties\n */\nclass Primitive extends ExtensibleProperty {\n  /**********************************************************************************************\n   * Instance.\n   */\n  init() {\n    this.propertyType = PropertyType.PRIMITIVE;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      mode: Primitive.Mode.TRIANGLES,\n      material: null,\n      indices: null,\n      attributes: new RefMap(),\n      targets: new RefSet()\n    });\n  }\n  /**********************************************************************************************\n   * Primitive data.\n   */\n  /** Returns an {@link Accessor} with indices of vertices to be drawn. */\n  getIndices() {\n    return this.getRef('indices');\n  }\n  /**\n   * Sets an {@link Accessor} with indices of vertices to be drawn. In `TRIANGLES` draw mode,\n   * each set of three indices define a triangle. The front face has a counter-clockwise (CCW)\n   * winding order.\n   */\n  setIndices(indices) {\n    return this.setRef('indices', indices, {\n      usage: BufferViewUsage$1.ELEMENT_ARRAY_BUFFER\n    });\n  }\n  /** Returns a vertex attribute as an {@link Accessor}. */\n  getAttribute(semantic) {\n    return this.getRefMap('attributes', semantic);\n  }\n  /**\n   * Sets a vertex attribute to an {@link Accessor}. All attributes must have the same vertex\n   * count.\n   */\n  setAttribute(semantic, accessor) {\n    return this.setRefMap('attributes', semantic, accessor, {\n      usage: BufferViewUsage$1.ARRAY_BUFFER\n    });\n  }\n  /**\n   * Lists all vertex attribute {@link Accessor}s associated with the primitive, excluding any\n   * attributes used for morph targets. For example, `[positionAccessor, normalAccessor,\n   * uvAccessor]`. Order will be consistent with the order returned by {@link .listSemantics}().\n   */\n  listAttributes() {\n    return this.listRefMapValues('attributes');\n  }\n  /**\n   * Lists all vertex attribute semantics associated with the primitive, excluding any semantics\n   * used for morph targets. For example, `['POSITION', 'NORMAL', 'TEXCOORD_0']`. Order will be\n   * consistent with the order returned by {@link .listAttributes}().\n   */\n  listSemantics() {\n    return this.listRefMapKeys('attributes');\n  }\n  /** Returns the material used to render the primitive. */\n  getMaterial() {\n    return this.getRef('material');\n  }\n  /** Sets the material used to render the primitive. */\n  setMaterial(material) {\n    return this.setRef('material', material);\n  }\n  /**********************************************************************************************\n   * Mode.\n   */\n  /**\n   * Returns the GPU draw mode (`TRIANGLES`, `LINES`, `POINTS`...) as a WebGL enum value.\n   *\n   * Reference:\n   * - [glTF → `primitive.mode`](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#primitivemode)\n   */\n  getMode() {\n    return this.get('mode');\n  }\n  /**\n   * Sets the GPU draw mode (`TRIANGLES`, `LINES`, `POINTS`...) as a WebGL enum value.\n   *\n   * Reference:\n   * - [glTF → `primitive.mode`](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#primitivemode)\n   */\n  setMode(mode) {\n    return this.set('mode', mode);\n  }\n  /**********************************************************************************************\n   * Morph targets.\n   */\n  /** Lists all morph targets associated with the primitive. */\n  listTargets() {\n    return this.listRefs('targets');\n  }\n  /**\n   * Adds a morph target to the primitive. All primitives in the same mesh must have the same\n   * number of targets.\n   */\n  addTarget(target) {\n    return this.addRef('targets', target);\n  }\n  /**\n   * Removes a morph target from the primitive. All primitives in the same mesh must have the same\n   * number of targets.\n   */\n  removeTarget(target) {\n    return this.removeRef('targets', target);\n  }\n}\n/**********************************************************************************************\n * Constants.\n */\n/** Type of primitives to render. All valid values correspond to WebGL enums. */\nPrimitive.Mode = {\n  /** Draw single points. */\n  POINTS: 0,\n  /** Draw lines. Each vertex connects to the one after it. */\n  LINES: 1,\n  /**\n   * Draw lines. Each set of two vertices is treated as a separate line segment.\n   * @deprecated See {@link https://github.com/KhronosGroup/glTF/issues/1883 KhronosGroup/glTF#1883}.\n   */\n  LINE_LOOP: 2,\n  /** Draw a connected group of line segments from the first vertex to the last,  */\n  LINE_STRIP: 3,\n  /** Draw triangles. Each set of three vertices creates a separate triangle. */\n  TRIANGLES: 4,\n  /** Draw a connected strip of triangles. */\n  TRIANGLE_STRIP: 5,\n  /**\n   * Draw a connected group of triangles. Each vertex connects to the previous and the first\n   * vertex in the fan.\n   * @deprecated See {@link https://github.com/KhronosGroup/glTF/issues/1883 KhronosGroup/glTF#1883}.\n   */\n  TRIANGLE_FAN: 6\n};\n\n/**\n * *Morph target or shape key used to deform one {@link Primitive} in a {@link Mesh}.*\n *\n * A PrimitiveTarget contains a `POSITION` attribute (and optionally `NORMAL` and `TANGENT`) that\n * can additively deform the base attributes on a {@link Mesh} {@link Primitive}. Vertex values\n * of `0, 0, 0` in the target will have no effect, whereas a value of `0, 1, 0` would offset that\n * vertex in the base geometry by y+=1. Morph targets can be fully or partially applied: their\n * default state is controlled by {@link Mesh.getWeights}, which can also be overridden for a\n * particular instantiation of a {@link Mesh}, using {@link Node.getWeights}.\n *\n * Reference:\n * - [glTF → Morph Targets](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#morph-targets)\n *\n * @category Properties\n */\nclass PrimitiveTarget extends Property {\n  init() {\n    this.propertyType = PropertyType.PRIMITIVE_TARGET;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      attributes: new RefMap()\n    });\n  }\n  /** Returns a morph target vertex attribute as an {@link Accessor}. */\n  getAttribute(semantic) {\n    return this.getRefMap('attributes', semantic);\n  }\n  /**\n   * Sets a morph target vertex attribute to an {@link Accessor}.\n   */\n  setAttribute(semantic, accessor) {\n    return this.setRefMap('attributes', semantic, accessor, {\n      usage: BufferViewUsage$1.ARRAY_BUFFER\n    });\n  }\n  /**\n   * Lists all morph target vertex attribute {@link Accessor}s associated. Order will be\n   * consistent with the order returned by {@link .listSemantics}().\n   */\n  listAttributes() {\n    return this.listRefMapValues('attributes');\n  }\n  /**\n   * Lists all morph target vertex attribute semantics associated. Order will be\n   * consistent with the order returned by {@link .listAttributes}().\n   */\n  listSemantics() {\n    return this.listRefMapKeys('attributes');\n  }\n}\n\nfunction _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\n\n/**\n * *Scenes represent a set of visual objects to render.*\n *\n * Typically a glTF file contains only a single Scene, although more are allowed and useful in some\n * cases. No particular meaning is associated with additional Scenes, except as defined by the\n * application. Scenes reference {@link Node}s, and a single Node cannot be a member of more than\n * one Scene.\n *\n * References:\n * - [glTF → Scenes](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#scenes)\n * - [glTF → Coordinate System and Units](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#coordinate-system-and-units)\n *\n * @category Properties\n */\nclass Scene extends ExtensibleProperty {\n  init() {\n    this.propertyType = PropertyType.SCENE;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      children: new RefSet()\n    });\n  }\n  copy(other, resolve = COPY_IDENTITY) {\n    // Scene cannot be copied, only cloned. Copying is shallow, but nodes cannot have more than\n    // one parent. Rather than leaving one of the two Scenes without children, throw an error here.\n    if (resolve === COPY_IDENTITY) throw new Error('Scene cannot be copied.');\n    return super.copy(other, resolve);\n  }\n  /**\n   * Adds a {@link Node} to the Scene.\n   *\n   * Requirements:\n   *\n   * 1. Nodes MAY be root children of multiple {@link Scene Scenes}\n   * 2. Nodes MUST NOT be children of >1 Node\n   * 3. Nodes MUST NOT be children of both Nodes and {@link Scene Scenes}\n   *\n   * The `addChild` method enforces these restrictions automatically, and will\n   * remove the new child from previous parents where needed. This behavior\n   * may change in future major releases of the library.\n   */\n  addChild(node) {\n    // Remove existing parent.\n    const parentNode = node.getParentNode();\n    if (parentNode) parentNode.removeChild(node);\n    return this.addRef('children', node);\n  }\n  /** Removes a {@link Node} from the Scene. */\n  removeChild(node) {\n    return this.removeRef('children', node);\n  }\n  /**\n   * Lists all direct child {@link Node Nodes} in the Scene. Indirect\n   * descendants (children of children) are not returned, but may be\n   * reached recursively or with {@link Scene.traverse} instead.\n   */\n  listChildren() {\n    return this.listRefs('children');\n  }\n  /** Visits each {@link Node} in the Scene, including descendants, top-down. */\n  traverse(fn) {\n    for (const node of this.listChildren()) node.traverse(fn);\n    return this;\n  }\n}\n\n/**\n * *Collection of {@link Node} joints and inverse bind matrices used with skinned {@link Mesh}\n * instances.*\n *\n * Reference\n * - [glTF → Skins](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#skins)\n *\n * @category Properties\n */\nclass Skin extends ExtensibleProperty {\n  init() {\n    this.propertyType = PropertyType.SKIN;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      skeleton: null,\n      inverseBindMatrices: null,\n      joints: new RefSet()\n    });\n  }\n  /**\n   * {@link Node} used as a skeleton root. The node must be the closest common root of the joints\n   * hierarchy or a direct or indirect parent node of the closest common root.\n   */\n  getSkeleton() {\n    return this.getRef('skeleton');\n  }\n  /**\n   * {@link Node} used as a skeleton root. The node must be the closest common root of the joints\n   * hierarchy or a direct or indirect parent node of the closest common root.\n   */\n  setSkeleton(skeleton) {\n    return this.setRef('skeleton', skeleton);\n  }\n  /**\n   * {@link Accessor} containing the floating-point 4x4 inverse-bind matrices. The default is\n   * that each matrix is a 4x4 identity matrix, which implies that inverse-bind matrices were\n   * pre-applied.\n   */\n  getInverseBindMatrices() {\n    return this.getRef('inverseBindMatrices');\n  }\n  /**\n   * {@link Accessor} containing the floating-point 4x4 inverse-bind matrices. The default is\n   * that each matrix is a 4x4 identity matrix, which implies that inverse-bind matrices were\n   * pre-applied.\n   */\n  setInverseBindMatrices(inverseBindMatrices) {\n    return this.setRef('inverseBindMatrices', inverseBindMatrices, {\n      usage: BufferViewUsage$1.INVERSE_BIND_MATRICES\n    });\n  }\n  /** Adds a joint {@link Node} to this {@link Skin}. */\n  addJoint(joint) {\n    return this.addRef('joints', joint);\n  }\n  /** Removes a joint {@link Node} from this {@link Skin}. */\n  removeJoint(joint) {\n    return this.removeRef('joints', joint);\n  }\n  /** Lists joints ({@link Node}s used as joints or bones) in this {@link Skin}. */\n  listJoints() {\n    return this.listRefs('joints');\n  }\n}\n\n/**\n * *Texture, or images, referenced by {@link Material} properties.*\n *\n * Textures in glTF Transform are a combination of glTF's `texture` and `image` properties, and\n * should be unique within a document, such that no other texture contains the same\n * {@link Texture.getImage getImage()} data. Where duplicates may already exist, the `dedup({textures: true})`\n * transform can remove them. A {@link Document} with N texture properties will be exported to a\n * glTF file with N `image` properties, and the minimum number of `texture` properties necessary\n * for the materials that use it.\n *\n * For properties associated with a particular _use_ of a texture, see {@link TextureInfo}.\n *\n * Reference:\n * - [glTF → Textures](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#textures)\n * - [glTF → Images](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#images)\n *\n * @category Properties\n */\nclass Texture extends ExtensibleProperty {\n  init() {\n    this.propertyType = PropertyType.TEXTURE;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      image: null,\n      mimeType: '',\n      uri: ''\n    });\n  }\n  /**********************************************************************************************\n   * MIME type / format.\n   */\n  /** Returns the MIME type for this texture ('image/jpeg' or 'image/png'). */\n  getMimeType() {\n    return this.get('mimeType') || ImageUtils.extensionToMimeType(FileUtils.extension(this.get('uri')));\n  }\n  /**\n   * Sets the MIME type for this texture ('image/jpeg' or 'image/png'). If the texture does not\n   * have a URI, a MIME type is required for correct export.\n   */\n  setMimeType(mimeType) {\n    return this.set('mimeType', mimeType);\n  }\n  /**********************************************************************************************\n   * URI / filename.\n   */\n  /** Returns the URI (e.g. 'path/to/file.png') for this texture. */\n  getURI() {\n    return this.get('uri');\n  }\n  /**\n   * Sets the URI (e.g. 'path/to/file.png') for this texture. If the texture does not have a MIME\n   * type, a URI is required for correct export.\n   */\n  setURI(uri) {\n    this.set('uri', uri);\n    const mimeType = ImageUtils.extensionToMimeType(FileUtils.extension(uri));\n    if (mimeType) this.set('mimeType', mimeType);\n    return this;\n  }\n  /**********************************************************************************************\n   * Image data.\n   */\n  /** Returns the raw image data for this texture. */\n  getImage() {\n    return this.get('image');\n  }\n  /** Sets the raw image data for this texture. */\n  setImage(image) {\n    return this.set('image', BufferUtils.assertView(image));\n  }\n  /** Returns the size, in pixels, of this texture. */\n  getSize() {\n    const image = this.get('image');\n    if (!image) return null;\n    return ImageUtils.getSize(image, this.getMimeType());\n  }\n}\n\n/**\n * *Root property of a glTF asset.*\n *\n * Any properties to be exported with a particular asset must be referenced (directly or\n * indirectly) by the root. Metadata about the asset's license, generator, and glTF specification\n * version are stored in the asset, accessible with {@link Root.getAsset}.\n *\n * Properties are added to the root with factory methods on its {@link Document}, and removed by\n * calling {@link Property.dispose}() on the resource. Any properties that have been created but\n * not disposed will be included when calling the various `root.list*()` methods.\n *\n * A document's root cannot be removed, and no other root may be created. Unlike other\n * {@link Property} types, the `.dispose()`, `.detach()` methods have no useful function on a\n * Root property.\n *\n * Usage:\n *\n * ```ts\n * const root = document.getRoot();\n * const scene = document.createScene('myScene');\n * const node = document.createNode('myNode');\n * scene.addChild(node);\n *\n * console.log(root.listScenes()); // → [scene x 1]\n * ```\n *\n * Reference: [glTF → Concepts](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#concepts)\n *\n * @category Properties\n */\nclass Root extends ExtensibleProperty {\n  init() {\n    this.propertyType = PropertyType.ROOT;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      asset: {\n        generator: `glTF-Transform ${VERSION}`,\n        version: '2.0'\n      },\n      defaultScene: null,\n      accessors: new RefSet(),\n      animations: new RefSet(),\n      buffers: new RefSet(),\n      cameras: new RefSet(),\n      materials: new RefSet(),\n      meshes: new RefSet(),\n      nodes: new RefSet(),\n      scenes: new RefSet(),\n      skins: new RefSet(),\n      textures: new RefSet()\n    });\n  }\n  /** @internal */\n  constructor(graph) {\n    super(graph);\n    this._extensions = new Set();\n    graph.addEventListener('node:create', event => {\n      this._addChildOfRoot(event.target);\n    });\n  }\n  clone() {\n    throw new Error('Root cannot be cloned.');\n  }\n  copy(other, resolve = COPY_IDENTITY) {\n    // Root cannot be cloned in isolation: only with its Document. Extensions are managed by\n    // the Document during cloning. The Root, and only the Root, should keep existing\n    // references while copying to avoid overwriting during a merge.\n    if (resolve === COPY_IDENTITY) throw new Error('Root cannot be copied.');\n    // IMPORTANT: Root cannot call super.copy(), which removes existing references.\n    this.set('asset', _extends({}, other.get('asset')));\n    this.setName(other.getName());\n    this.setExtras(_extends({}, other.getExtras()));\n    this.setDefaultScene(other.getDefaultScene() ? resolve(other.getDefaultScene()) : null);\n    for (const extensionName of other.listRefMapKeys('extensions')) {\n      const otherExtension = other.getExtension(extensionName);\n      this.setExtension(extensionName, resolve(otherExtension));\n    }\n    return this;\n  }\n  _addChildOfRoot(child) {\n    if (child instanceof Scene) {\n      this.addRef('scenes', child);\n    } else if (child instanceof Node) {\n      this.addRef('nodes', child);\n    } else if (child instanceof Camera) {\n      this.addRef('cameras', child);\n    } else if (child instanceof Skin) {\n      this.addRef('skins', child);\n    } else if (child instanceof Mesh) {\n      this.addRef('meshes', child);\n    } else if (child instanceof Material) {\n      this.addRef('materials', child);\n    } else if (child instanceof Texture) {\n      this.addRef('textures', child);\n    } else if (child instanceof Animation) {\n      this.addRef('animations', child);\n    } else if (child instanceof Accessor) {\n      this.addRef('accessors', child);\n    } else if (child instanceof Buffer$1) {\n      this.addRef('buffers', child);\n    }\n    // No error for untracked property types.\n    return this;\n  }\n  /**\n   * Returns the `asset` object, which specifies the target glTF version of the asset. Additional\n   * metadata can be stored in optional properties such as `generator` or `copyright`.\n   *\n   * Reference: [glTF → Asset](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#asset)\n   */\n  getAsset() {\n    return this.get('asset');\n  }\n  /**********************************************************************************************\n   * Extensions.\n   */\n  /** Lists all {@link Extension Extensions} enabled for this root. */\n  listExtensionsUsed() {\n    return Array.from(this._extensions);\n  }\n  /** Lists all {@link Extension Extensions} enabled and required for this root. */\n  listExtensionsRequired() {\n    return this.listExtensionsUsed().filter(extension => extension.isRequired());\n  }\n  /** @internal */\n  _enableExtension(extension) {\n    this._extensions.add(extension);\n    return this;\n  }\n  /** @internal */\n  _disableExtension(extension) {\n    this._extensions.delete(extension);\n    return this;\n  }\n  /**********************************************************************************************\n   * Properties.\n   */\n  /** Lists all {@link Scene} properties associated with this root. */\n  listScenes() {\n    return this.listRefs('scenes');\n  }\n  /** Default {@link Scene} associated with this root. */\n  setDefaultScene(defaultScene) {\n    return this.setRef('defaultScene', defaultScene);\n  }\n  /** Default {@link Scene} associated with this root. */\n  getDefaultScene() {\n    return this.getRef('defaultScene');\n  }\n  /** Lists all {@link Node} properties associated with this root. */\n  listNodes() {\n    return this.listRefs('nodes');\n  }\n  /** Lists all {@link Camera} properties associated with this root. */\n  listCameras() {\n    return this.listRefs('cameras');\n  }\n  /** Lists all {@link Skin} properties associated with this root. */\n  listSkins() {\n    return this.listRefs('skins');\n  }\n  /** Lists all {@link Mesh} properties associated with this root. */\n  listMeshes() {\n    return this.listRefs('meshes');\n  }\n  /** Lists all {@link Material} properties associated with this root. */\n  listMaterials() {\n    return this.listRefs('materials');\n  }\n  /** Lists all {@link Texture} properties associated with this root. */\n  listTextures() {\n    return this.listRefs('textures');\n  }\n  /** Lists all {@link Animation} properties associated with this root. */\n  listAnimations() {\n    return this.listRefs('animations');\n  }\n  /** Lists all {@link Accessor} properties associated with this root. */\n  listAccessors() {\n    return this.listRefs('accessors');\n  }\n  /** Lists all {@link Buffer} properties associated with this root. */\n  listBuffers() {\n    return this.listRefs('buffers');\n  }\n}\n\n/**\n * *Wraps a glTF asset and its resources for easier modification.*\n *\n * Documents manage glTF assets and the relationships among dependencies. The document wrapper\n * allow tools to read and write changes without dealing with array indices or byte offsets, which\n * would otherwise require careful management over the course of a file modification. An internal\n * graph structure allows any property in the glTF file to maintain references to its dependencies,\n * and makes it easy to determine where a particular property dependency is being used. For\n * example, finding a list of materials that use a particular texture is as simple as calling\n * {@link Texture.listParents}().\n *\n * A new resource {@link Property} (e.g. a {@link Mesh} or {@link Material}) is created by calling\n * 'create' methods on the document. Resources are destroyed by calling {@link Property.dispose}().\n *\n * ```ts\n * import fs from 'fs/promises';\n * import { Document } from '@gltf-transform/core';\n * import { dedup } from '@gltf-transform/functions';\n *\n * const document = new Document();\n *\n * const texture1 = document.createTexture('myTexture')\n * \t.setImage(await fs.readFile('path/to/image.png'))\n * \t.setMimeType('image/png');\n * const texture2 = document.createTexture('myTexture2')\n * \t.setImage(await fs.readFile('path/to/image2.png'))\n * \t.setMimeType('image/png');\n *\n * // Document containing duplicate copies of the same texture.\n * document.getRoot().listTextures(); // → [texture x 2]\n *\n * await document.transform(\n * \tdedup({textures: true}),\n * \t// ...\n * );\n *\n * // Document with duplicate textures removed.\n * document.getRoot().listTextures(); // → [texture x 1]\n * ```\n *\n * Reference:\n * - [glTF → Basics](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#gltf-basics)\n * - [glTF → Concepts](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#concepts)\n *\n * @category Documents\n */\nclass Document {\n  /**\n   * Returns the Document associated with a given Graph, if any.\n   * @hidden\n   * @experimental\n   */\n  static fromGraph(graph) {\n    return Document._GRAPH_DOCUMENTS.get(graph) || null;\n  }\n  /** Creates a new Document, representing an empty glTF asset. */\n  constructor() {\n    this._graph = new Graph();\n    this._root = new Root(this._graph);\n    this._logger = Logger.DEFAULT_INSTANCE;\n    Document._GRAPH_DOCUMENTS.set(this._graph, this);\n  }\n  /** Returns the glTF {@link Root} property. */\n  getRoot() {\n    return this._root;\n  }\n  /**\n   * Returns the {@link Graph} representing connectivity of resources within this document.\n   * @hidden\n   */\n  getGraph() {\n    return this._graph;\n  }\n  /** Returns the {@link Logger} instance used for any operations performed on this document. */\n  getLogger() {\n    return this._logger;\n  }\n  /**\n   * Overrides the {@link Logger} instance used for any operations performed on this document.\n   *\n   * Usage:\n   *\n   * ```ts\n   * doc\n   * \t.setLogger(new Logger(Logger.Verbosity.SILENT))\n   * \t.transform(dedup(), weld());\n   * ```\n   */\n  setLogger(logger) {\n    this._logger = logger;\n    return this;\n  }\n  /**\n   * Clones this Document, copying all resources within it.\n   * @deprecated Use 'cloneDocument(document)' from '@gltf-transform/functions'.\n   * @hidden\n   * @internal\n   */\n  clone() {\n    throw new Error(`Use 'cloneDocument(source)' from '@gltf-transform/functions'.`);\n  }\n  /**\n   * Merges the content of another Document into this one, without affecting the original.\n   * @deprecated Use 'mergeDocuments(target, source)' from '@gltf-transform/functions'.\n   * @hidden\n   * @internal\n   */\n  merge(_other) {\n    throw new Error(`Use 'mergeDocuments(target, source)' from '@gltf-transform/functions'.`);\n  }\n  /**\n   * Applies a series of modifications to this document. Each transformation is asynchronous,\n   * takes the {@link Document} as input, and returns nothing. Transforms are applied in the\n   * order given, which may affect the final result.\n   *\n   * Usage:\n   *\n   * ```ts\n   * await doc.transform(\n   * \tdedup(),\n   * \tprune()\n   * );\n   * ```\n   *\n   * @param transforms List of synchronous transformation functions to apply.\n   */\n  async transform(...transforms) {\n    const stack = transforms.map(fn => fn.name);\n    for (const transform of transforms) {\n      await transform(this, {\n        stack\n      });\n    }\n    return this;\n  }\n  /**********************************************************************************************\n   * Extension factory method.\n   */\n  /**\n   * Creates a new {@link Extension}, for the extension type of the given constructor. If the\n   * extension is already enabled for this Document, the previous Extension reference is reused.\n   */\n  createExtension(ctor) {\n    const extensionName = ctor.EXTENSION_NAME;\n    const prevExtension = this.getRoot().listExtensionsUsed().find(ext => ext.extensionName === extensionName);\n    return prevExtension || new ctor(this);\n  }\n  /**********************************************************************************************\n   * Property factory methods.\n   */\n  /** Creates a new {@link Scene} attached to this document's {@link Root}. */\n  createScene(name = '') {\n    return new Scene(this._graph, name);\n  }\n  /** Creates a new {@link Node} attached to this document's {@link Root}. */\n  createNode(name = '') {\n    return new Node(this._graph, name);\n  }\n  /** Creates a new {@link Camera} attached to this document's {@link Root}. */\n  createCamera(name = '') {\n    return new Camera(this._graph, name);\n  }\n  /** Creates a new {@link Skin} attached to this document's {@link Root}. */\n  createSkin(name = '') {\n    return new Skin(this._graph, name);\n  }\n  /** Creates a new {@link Mesh} attached to this document's {@link Root}. */\n  createMesh(name = '') {\n    return new Mesh(this._graph, name);\n  }\n  /**\n   * Creates a new {@link Primitive}. Primitives must be attached to a {@link Mesh}\n   * for use and export; they are not otherwise associated with a {@link Root}.\n   */\n  createPrimitive() {\n    return new Primitive(this._graph);\n  }\n  /**\n   * Creates a new {@link PrimitiveTarget}, or morph target. Targets must be attached to a\n   * {@link Primitive} for use and export; they are not otherwise associated with a {@link Root}.\n   */\n  createPrimitiveTarget(name = '') {\n    return new PrimitiveTarget(this._graph, name);\n  }\n  /** Creates a new {@link Material} attached to this document's {@link Root}. */\n  createMaterial(name = '') {\n    return new Material(this._graph, name);\n  }\n  /** Creates a new {@link Texture} attached to this document's {@link Root}. */\n  createTexture(name = '') {\n    return new Texture(this._graph, name);\n  }\n  /** Creates a new {@link Animation} attached to this document's {@link Root}. */\n  createAnimation(name = '') {\n    return new Animation(this._graph, name);\n  }\n  /**\n   * Creates a new {@link AnimationChannel}. Channels must be attached to an {@link Animation}\n   * for use and export; they are not otherwise associated with a {@link Root}.\n   */\n  createAnimationChannel(name = '') {\n    return new AnimationChannel(this._graph, name);\n  }\n  /**\n   * Creates a new {@link AnimationSampler}. Samplers must be attached to an {@link Animation}\n   * for use and export; they are not otherwise associated with a {@link Root}.\n   */\n  createAnimationSampler(name = '') {\n    return new AnimationSampler(this._graph, name);\n  }\n  /** Creates a new {@link Accessor} attached to this document's {@link Root}. */\n  createAccessor(name = '', buffer = null) {\n    if (!buffer) {\n      buffer = this.getRoot().listBuffers()[0];\n    }\n    return new Accessor(this._graph, name).setBuffer(buffer);\n  }\n  /** Creates a new {@link Buffer} attached to this document's {@link Root}. */\n  createBuffer(name = '') {\n    return new Buffer$1(this._graph, name);\n  }\n}\n/**\n * Enables lookup of a Document from its Graph. For internal use, only.\n * @internal\n * @experimental\n */\nDocument._GRAPH_DOCUMENTS = new WeakMap();\n\n/**\n * *Base class for all Extensions.*\n *\n * Extensions enhance a glTF {@link Document} with additional features and schema, beyond the core\n * glTF specification. Common extensions may be imported from the `@gltf-transform/extensions`\n * package, or custom extensions may be created by extending this base class.\n *\n * An extension is added to a Document by calling {@link Document.createExtension} with the\n * extension constructor. The extension object may then be used to construct\n * {@link ExtensionProperty} instances, which are attached to properties throughout the Document\n * as prescribed by the extension itself.\n *\n * For more information on available extensions and their usage, see [Extensions](/extensions).\n *\n * Reference:\n * - [glTF → Extensions](https://github.com/KhronosGroup/gltf/blob/main/specification/2.0/README.md#specifying-extensions)\n * - [glTF Extension Registry](https://github.com/KhronosGroup/gltf/blob/main/extensions)\n *\n * @category Extensions\n */\nclass Extension {\n  /** @hidden */\n  constructor(document) {\n    /** Official name of the extension. */\n    this.extensionName = '';\n    /**\n     * Before reading, extension should be called for these {@link Property} types. *Most\n     * extensions don't need to implement this.*\n     * @hidden\n     */\n    this.prereadTypes = [];\n    /**\n     * Before writing, extension should be called for these {@link Property} types. *Most\n     * extensions don't need to implement this.*\n     * @hidden\n     */\n    this.prewriteTypes = [];\n    /** @hidden Dependency IDs needed to read this extension, to be installed before I/O. */\n    this.readDependencies = [];\n    /** @hidden Dependency IDs needed to write this extension, to be installed before I/O. */\n    this.writeDependencies = [];\n    /** @hidden */\n    this.document = void 0;\n    /** @hidden */\n    this.required = false;\n    /** @hidden */\n    this.properties = new Set();\n    /** @hidden */\n    this._listener = void 0;\n    this.document = document;\n    document.getRoot()._enableExtension(this);\n    this._listener = _event => {\n      const event = _event;\n      const target = event.target;\n      if (target instanceof ExtensionProperty && target.extensionName === this.extensionName) {\n        if (event.type === 'node:create') this._addExtensionProperty(target);\n        if (event.type === 'node:dispose') this._removeExtensionProperty(target);\n      }\n    };\n    const graph = document.getGraph();\n    graph.addEventListener('node:create', this._listener);\n    graph.addEventListener('node:dispose', this._listener);\n  }\n  /** Disables and removes the extension from the Document. */\n  dispose() {\n    this.document.getRoot()._disableExtension(this);\n    const graph = this.document.getGraph();\n    graph.removeEventListener('node:create', this._listener);\n    graph.removeEventListener('node:dispose', this._listener);\n    for (const property of this.properties) {\n      property.dispose();\n    }\n  }\n  /** @hidden Performs first-time setup for the extension. Must be idempotent. */\n  static register() {}\n  /**\n   * Indicates to the client whether it is OK to load the asset when this extension is not\n   * recognized. Optional extensions are generally preferred, if there is not a good reason\n   * to require a client to completely fail when an extension isn't known.\n   */\n  isRequired() {\n    return this.required;\n  }\n  /**\n   * Indicates to the client whether it is OK to load the asset when this extension is not\n   * recognized. Optional extensions are generally preferred, if there is not a good reason\n   * to require a client to completely fail when an extension isn't known.\n   */\n  setRequired(required) {\n    this.required = required;\n    return this;\n  }\n  /**\n   * Lists all {@link ExtensionProperty} instances associated with, or created by, this\n   * extension. Includes only instances that are attached to the Document's graph; detached\n   * instances will be excluded.\n   */\n  listProperties() {\n    return Array.from(this.properties);\n  }\n  /**********************************************************************************************\n   * ExtensionProperty management.\n   */\n  /** @internal */\n  _addExtensionProperty(property) {\n    this.properties.add(property);\n    return this;\n  }\n  /** @internal */\n  _removeExtensionProperty(property) {\n    this.properties.delete(property);\n    return this;\n  }\n  /**********************************************************************************************\n   * I/O implementation.\n   */\n  /** @hidden Installs dependencies required by the extension. */\n  install(_key, _dependency) {\n    return this;\n  }\n  /**\n   * Used by the {@link PlatformIO} utilities when reading a glTF asset. This method may\n   * optionally be implemented by an extension, and should then support any property type\n   * declared by the Extension's {@link Extension.prereadTypes} list. The Extension will\n   * be given a ReaderContext instance, and is expected to update either the context or its\n   * {@link JSONDocument} with resources known to the Extension. *Most extensions don't need to\n   * implement this.*\n   * @hidden\n   */\n  preread(_readerContext, _propertyType) {\n    return this;\n  }\n  /**\n   * Used by the {@link PlatformIO} utilities when writing a glTF asset. This method may\n   * optionally be implemented by an extension, and should then support any property type\n   * declared by the Extension's {@link Extension.prewriteTypes} list. The Extension will\n   * be given a WriterContext instance, and is expected to update either the context or its\n   * {@link JSONDocument} with resources known to the Extension. *Most extensions don't need to\n   * implement this.*\n   * @hidden\n   */\n  prewrite(_writerContext, _propertyType) {\n    return this;\n  }\n}\n/** Official name of the extension. */\nExtension.EXTENSION_NAME = void 0;\n\n/**\n * Model class providing glTF Transform objects representing each definition in the glTF file, used\n * by a {@link GLTFReader} and its {@link Extension} implementations. Indices of all properties will be\n * consistent with the glTF file.\n *\n * @hidden\n */\nclass ReaderContext {\n  constructor(jsonDoc) {\n    this.jsonDoc = void 0;\n    this.buffers = [];\n    this.bufferViews = [];\n    this.bufferViewBuffers = [];\n    this.accessors = [];\n    this.textures = [];\n    this.textureInfos = new Map();\n    this.materials = [];\n    this.meshes = [];\n    this.cameras = [];\n    this.nodes = [];\n    this.skins = [];\n    this.animations = [];\n    this.scenes = [];\n    this.jsonDoc = jsonDoc;\n  }\n  setTextureInfo(textureInfo, textureInfoDef) {\n    this.textureInfos.set(textureInfo, textureInfoDef);\n    if (textureInfoDef.texCoord !== undefined) {\n      textureInfo.setTexCoord(textureInfoDef.texCoord);\n    }\n    if (textureInfoDef.extras !== undefined) {\n      textureInfo.setExtras(textureInfoDef.extras);\n    }\n    const textureDef = this.jsonDoc.json.textures[textureInfoDef.index];\n    if (textureDef.sampler === undefined) return;\n    const samplerDef = this.jsonDoc.json.samplers[textureDef.sampler];\n    if (samplerDef.magFilter !== undefined) {\n      textureInfo.setMagFilter(samplerDef.magFilter);\n    }\n    if (samplerDef.minFilter !== undefined) {\n      textureInfo.setMinFilter(samplerDef.minFilter);\n    }\n    if (samplerDef.wrapS !== undefined) {\n      textureInfo.setWrapS(samplerDef.wrapS);\n    }\n    if (samplerDef.wrapT !== undefined) {\n      textureInfo.setWrapT(samplerDef.wrapT);\n    }\n  }\n}\n\nconst DEFAULT_OPTIONS = {\n  logger: Logger.DEFAULT_INSTANCE,\n  extensions: [],\n  dependencies: {}\n};\nconst SUPPORTED_PREREAD_TYPES = new Set([PropertyType.BUFFER, PropertyType.TEXTURE, PropertyType.MATERIAL, PropertyType.MESH, PropertyType.PRIMITIVE, PropertyType.NODE, PropertyType.SCENE]);\n/** @internal */\nclass GLTFReader {\n  static read(jsonDoc, _options = DEFAULT_OPTIONS) {\n    const options = _extends({}, DEFAULT_OPTIONS, _options);\n    const {\n      json\n    } = jsonDoc;\n    const document = new Document().setLogger(options.logger);\n    this.validate(jsonDoc, options);\n    /* Reader context. */\n    const context = new ReaderContext(jsonDoc);\n    /** Asset. */\n    const assetDef = json.asset;\n    const asset = document.getRoot().getAsset();\n    if (assetDef.copyright) asset.copyright = assetDef.copyright;\n    if (assetDef.extras) asset.extras = assetDef.extras;\n    if (json.extras !== undefined) {\n      document.getRoot().setExtras(_extends({}, json.extras));\n    }\n    /** Extensions (1/2). */\n    const extensionsUsed = json.extensionsUsed || [];\n    const extensionsRequired = json.extensionsRequired || [];\n    options.extensions.sort((a, b) => a.EXTENSION_NAME > b.EXTENSION_NAME ? 1 : -1);\n    for (const Extension of options.extensions) {\n      if (extensionsUsed.includes(Extension.EXTENSION_NAME)) {\n        // Create extension.\n        const extension = document.createExtension(Extension).setRequired(extensionsRequired.includes(Extension.EXTENSION_NAME));\n        // Warn on unsupported preread hooks.\n        const unsupportedHooks = extension.prereadTypes.filter(type => !SUPPORTED_PREREAD_TYPES.has(type));\n        if (unsupportedHooks.length) {\n          options.logger.warn(`Preread hooks for some types (${unsupportedHooks.join()}), requested by extension ` + `${extension.extensionName}, are unsupported. Please file an issue or a PR.`);\n        }\n        // Install dependencies.\n        for (const key of extension.readDependencies) {\n          extension.install(key, options.dependencies[key]);\n        }\n      }\n    }\n    /** Buffers. */\n    const bufferDefs = json.buffers || [];\n    document.getRoot().listExtensionsUsed().filter(extension => extension.prereadTypes.includes(PropertyType.BUFFER)).forEach(extension => extension.preread(context, PropertyType.BUFFER));\n    context.buffers = bufferDefs.map(bufferDef => {\n      const buffer = document.createBuffer(bufferDef.name);\n      if (bufferDef.extras) buffer.setExtras(bufferDef.extras);\n      if (bufferDef.uri && bufferDef.uri.indexOf('__') !== 0) {\n        buffer.setURI(bufferDef.uri);\n      }\n      return buffer;\n    });\n    /** Buffer views. */\n    const bufferViewDefs = json.bufferViews || [];\n    context.bufferViewBuffers = bufferViewDefs.map((bufferViewDef, index) => {\n      if (!context.bufferViews[index]) {\n        const bufferDef = jsonDoc.json.buffers[bufferViewDef.buffer];\n        const resource = bufferDef.uri ? jsonDoc.resources[bufferDef.uri] : jsonDoc.resources[GLB_BUFFER];\n        const byteOffset = bufferViewDef.byteOffset || 0;\n        context.bufferViews[index] = BufferUtils.toView(resource, byteOffset, bufferViewDef.byteLength);\n      }\n      return context.buffers[bufferViewDef.buffer];\n    });\n    /** Accessors. */\n    // Accessor .count and .componentType properties are inferred dynamically.\n    const accessorDefs = json.accessors || [];\n    context.accessors = accessorDefs.map(accessorDef => {\n      const buffer = context.bufferViewBuffers[accessorDef.bufferView];\n      const accessor = document.createAccessor(accessorDef.name, buffer).setType(accessorDef.type);\n      if (accessorDef.extras) accessor.setExtras(accessorDef.extras);\n      if (accessorDef.normalized !== undefined) {\n        accessor.setNormalized(accessorDef.normalized);\n      }\n      // Sparse accessors, KHR_draco_mesh_compression, and EXT_meshopt_compression.\n      if (accessorDef.bufferView === undefined) return accessor;\n      // NOTICE: We mark sparse accessors at the end of the I/O reading process. Consider an\n      // accessor to be 'sparse' if it (A) includes sparse value overrides, or (B) does not\n      // define .bufferView _and_ no extension provides that data.\n      accessor.setArray(getAccessorArray(accessorDef, context));\n      return accessor;\n    });\n    /** Textures. */\n    // glTF Transform's \"Texture\" properties correspond 1:1 with glTF \"Image\" properties, and\n    // with image files. The glTF file may contain more one texture per image, where images\n    // are reused with different sampler properties.\n    const imageDefs = json.images || [];\n    const textureDefs = json.textures || [];\n    document.getRoot().listExtensionsUsed().filter(extension => extension.prereadTypes.includes(PropertyType.TEXTURE)).forEach(extension => extension.preread(context, PropertyType.TEXTURE));\n    context.textures = imageDefs.map(imageDef => {\n      const texture = document.createTexture(imageDef.name);\n      // glTF Image corresponds 1:1 with glTF Transform Texture. See `writer.ts`.\n      if (imageDef.extras) texture.setExtras(imageDef.extras);\n      if (imageDef.bufferView !== undefined) {\n        const bufferViewDef = json.bufferViews[imageDef.bufferView];\n        const bufferDef = jsonDoc.json.buffers[bufferViewDef.buffer];\n        const bufferData = bufferDef.uri ? jsonDoc.resources[bufferDef.uri] : jsonDoc.resources[GLB_BUFFER];\n        const byteOffset = bufferViewDef.byteOffset || 0;\n        const byteLength = bufferViewDef.byteLength;\n        const imageData = bufferData.slice(byteOffset, byteOffset + byteLength);\n        texture.setImage(imageData);\n      } else if (imageDef.uri !== undefined) {\n        texture.setImage(jsonDoc.resources[imageDef.uri]);\n        if (imageDef.uri.indexOf('__') !== 0) {\n          texture.setURI(imageDef.uri);\n        }\n      }\n      if (imageDef.mimeType !== undefined) {\n        texture.setMimeType(imageDef.mimeType);\n      } else if (imageDef.uri) {\n        const extension = FileUtils.extension(imageDef.uri);\n        texture.setMimeType(ImageUtils.extensionToMimeType(extension));\n      }\n      return texture;\n    });\n    /** Materials. */\n    document.getRoot().listExtensionsUsed().filter(extension => extension.prereadTypes.includes(PropertyType.MATERIAL)).forEach(extension => extension.preread(context, PropertyType.MATERIAL));\n    const materialDefs = json.materials || [];\n    context.materials = materialDefs.map(materialDef => {\n      const material = document.createMaterial(materialDef.name);\n      if (materialDef.extras) material.setExtras(materialDef.extras);\n      // Program state & blending.\n      if (materialDef.alphaMode !== undefined) {\n        material.setAlphaMode(materialDef.alphaMode);\n      }\n      if (materialDef.alphaCutoff !== undefined) {\n        material.setAlphaCutoff(materialDef.alphaCutoff);\n      }\n      if (materialDef.doubleSided !== undefined) {\n        material.setDoubleSided(materialDef.doubleSided);\n      }\n      // Factors.\n      const pbrDef = materialDef.pbrMetallicRoughness || {};\n      if (pbrDef.baseColorFactor !== undefined) {\n        material.setBaseColorFactor(pbrDef.baseColorFactor);\n      }\n      if (materialDef.emissiveFactor !== undefined) {\n        material.setEmissiveFactor(materialDef.emissiveFactor);\n      }\n      if (pbrDef.metallicFactor !== undefined) {\n        material.setMetallicFactor(pbrDef.metallicFactor);\n      }\n      if (pbrDef.roughnessFactor !== undefined) {\n        material.setRoughnessFactor(pbrDef.roughnessFactor);\n      }\n      // Textures.\n      if (pbrDef.baseColorTexture !== undefined) {\n        const textureInfoDef = pbrDef.baseColorTexture;\n        const texture = context.textures[textureDefs[textureInfoDef.index].source];\n        material.setBaseColorTexture(texture);\n        context.setTextureInfo(material.getBaseColorTextureInfo(), textureInfoDef);\n      }\n      if (materialDef.emissiveTexture !== undefined) {\n        const textureInfoDef = materialDef.emissiveTexture;\n        const texture = context.textures[textureDefs[textureInfoDef.index].source];\n        material.setEmissiveTexture(texture);\n        context.setTextureInfo(material.getEmissiveTextureInfo(), textureInfoDef);\n      }\n      if (materialDef.normalTexture !== undefined) {\n        const textureInfoDef = materialDef.normalTexture;\n        const texture = context.textures[textureDefs[textureInfoDef.index].source];\n        material.setNormalTexture(texture);\n        context.setTextureInfo(material.getNormalTextureInfo(), textureInfoDef);\n        if (materialDef.normalTexture.scale !== undefined) {\n          material.setNormalScale(materialDef.normalTexture.scale);\n        }\n      }\n      if (materialDef.occlusionTexture !== undefined) {\n        const textureInfoDef = materialDef.occlusionTexture;\n        const texture = context.textures[textureDefs[textureInfoDef.index].source];\n        material.setOcclusionTexture(texture);\n        context.setTextureInfo(material.getOcclusionTextureInfo(), textureInfoDef);\n        if (materialDef.occlusionTexture.strength !== undefined) {\n          material.setOcclusionStrength(materialDef.occlusionTexture.strength);\n        }\n      }\n      if (pbrDef.metallicRoughnessTexture !== undefined) {\n        const textureInfoDef = pbrDef.metallicRoughnessTexture;\n        const texture = context.textures[textureDefs[textureInfoDef.index].source];\n        material.setMetallicRoughnessTexture(texture);\n        context.setTextureInfo(material.getMetallicRoughnessTextureInfo(), textureInfoDef);\n      }\n      return material;\n    });\n    /** Meshes. */\n    document.getRoot().listExtensionsUsed().filter(extension => extension.prereadTypes.includes(PropertyType.MESH)).forEach(extension => extension.preread(context, PropertyType.MESH));\n    const meshDefs = json.meshes || [];\n    document.getRoot().listExtensionsUsed().filter(extension => extension.prereadTypes.includes(PropertyType.PRIMITIVE)).forEach(extension => extension.preread(context, PropertyType.PRIMITIVE));\n    context.meshes = meshDefs.map(meshDef => {\n      const mesh = document.createMesh(meshDef.name);\n      if (meshDef.extras) mesh.setExtras(meshDef.extras);\n      if (meshDef.weights !== undefined) {\n        mesh.setWeights(meshDef.weights);\n      }\n      const primitiveDefs = meshDef.primitives || [];\n      primitiveDefs.forEach(primitiveDef => {\n        const primitive = document.createPrimitive();\n        if (primitiveDef.extras) primitive.setExtras(primitiveDef.extras);\n        if (primitiveDef.material !== undefined) {\n          primitive.setMaterial(context.materials[primitiveDef.material]);\n        }\n        if (primitiveDef.mode !== undefined) {\n          primitive.setMode(primitiveDef.mode);\n        }\n        for (const [semantic, index] of Object.entries(primitiveDef.attributes || {})) {\n          primitive.setAttribute(semantic, context.accessors[index]);\n        }\n        if (primitiveDef.indices !== undefined) {\n          primitive.setIndices(context.accessors[primitiveDef.indices]);\n        }\n        const targetNames = meshDef.extras && meshDef.extras.targetNames || [];\n        const targetDefs = primitiveDef.targets || [];\n        targetDefs.forEach((targetDef, targetIndex) => {\n          const targetName = targetNames[targetIndex] || targetIndex.toString();\n          const target = document.createPrimitiveTarget(targetName);\n          for (const [semantic, accessorIndex] of Object.entries(targetDef)) {\n            target.setAttribute(semantic, context.accessors[accessorIndex]);\n          }\n          primitive.addTarget(target);\n        });\n        mesh.addPrimitive(primitive);\n      });\n      return mesh;\n    });\n    /** Cameras. */\n    const cameraDefs = json.cameras || [];\n    context.cameras = cameraDefs.map(cameraDef => {\n      const camera = document.createCamera(cameraDef.name).setType(cameraDef.type);\n      if (cameraDef.extras) camera.setExtras(cameraDef.extras);\n      if (cameraDef.type === Camera.Type.PERSPECTIVE) {\n        const perspectiveDef = cameraDef.perspective;\n        camera.setYFov(perspectiveDef.yfov);\n        camera.setZNear(perspectiveDef.znear);\n        if (perspectiveDef.zfar !== undefined) {\n          camera.setZFar(perspectiveDef.zfar);\n        }\n        if (perspectiveDef.aspectRatio !== undefined) {\n          camera.setAspectRatio(perspectiveDef.aspectRatio);\n        }\n      } else {\n        const orthoDef = cameraDef.orthographic;\n        camera.setZNear(orthoDef.znear).setZFar(orthoDef.zfar).setXMag(orthoDef.xmag).setYMag(orthoDef.ymag);\n      }\n      return camera;\n    });\n    /** Nodes. */\n    const nodeDefs = json.nodes || [];\n    document.getRoot().listExtensionsUsed().filter(extension => extension.prereadTypes.includes(PropertyType.NODE)).forEach(extension => extension.preread(context, PropertyType.NODE));\n    context.nodes = nodeDefs.map(nodeDef => {\n      const node = document.createNode(nodeDef.name);\n      if (nodeDef.extras) node.setExtras(nodeDef.extras);\n      if (nodeDef.translation !== undefined) {\n        node.setTranslation(nodeDef.translation);\n      }\n      if (nodeDef.rotation !== undefined) {\n        node.setRotation(nodeDef.rotation);\n      }\n      if (nodeDef.scale !== undefined) {\n        node.setScale(nodeDef.scale);\n      }\n      if (nodeDef.matrix !== undefined) {\n        const translation = [0, 0, 0];\n        const rotation = [0, 0, 0, 1];\n        const scale = [1, 1, 1];\n        MathUtils.decompose(nodeDef.matrix, translation, rotation, scale);\n        node.setTranslation(translation);\n        node.setRotation(rotation);\n        node.setScale(scale);\n      }\n      if (nodeDef.weights !== undefined) {\n        node.setWeights(nodeDef.weights);\n      }\n      // Attachments (mesh, camera, skin) defined later in reading process.\n      return node;\n    });\n    /** Skins. */\n    const skinDefs = json.skins || [];\n    context.skins = skinDefs.map(skinDef => {\n      const skin = document.createSkin(skinDef.name);\n      if (skinDef.extras) skin.setExtras(skinDef.extras);\n      if (skinDef.inverseBindMatrices !== undefined) {\n        skin.setInverseBindMatrices(context.accessors[skinDef.inverseBindMatrices]);\n      }\n      if (skinDef.skeleton !== undefined) {\n        skin.setSkeleton(context.nodes[skinDef.skeleton]);\n      }\n      for (const nodeIndex of skinDef.joints) {\n        skin.addJoint(context.nodes[nodeIndex]);\n      }\n      return skin;\n    });\n    /** Node attachments. */\n    nodeDefs.map((nodeDef, nodeIndex) => {\n      const node = context.nodes[nodeIndex];\n      const children = nodeDef.children || [];\n      children.forEach(childIndex => node.addChild(context.nodes[childIndex]));\n      if (nodeDef.mesh !== undefined) node.setMesh(context.meshes[nodeDef.mesh]);\n      if (nodeDef.camera !== undefined) node.setCamera(context.cameras[nodeDef.camera]);\n      if (nodeDef.skin !== undefined) node.setSkin(context.skins[nodeDef.skin]);\n    });\n    /** Animations. */\n    const animationDefs = json.animations || [];\n    context.animations = animationDefs.map(animationDef => {\n      const animation = document.createAnimation(animationDef.name);\n      if (animationDef.extras) animation.setExtras(animationDef.extras);\n      const samplerDefs = animationDef.samplers || [];\n      const samplers = samplerDefs.map(samplerDef => {\n        const sampler = document.createAnimationSampler().setInput(context.accessors[samplerDef.input]).setOutput(context.accessors[samplerDef.output]).setInterpolation(samplerDef.interpolation || AnimationSampler.Interpolation.LINEAR);\n        if (samplerDef.extras) sampler.setExtras(samplerDef.extras);\n        animation.addSampler(sampler);\n        return sampler;\n      });\n      const channels = animationDef.channels || [];\n      channels.forEach(channelDef => {\n        const channel = document.createAnimationChannel().setSampler(samplers[channelDef.sampler]).setTargetPath(channelDef.target.path);\n        if (channelDef.target.node !== undefined) channel.setTargetNode(context.nodes[channelDef.target.node]);\n        if (channelDef.extras) channel.setExtras(channelDef.extras);\n        animation.addChannel(channel);\n      });\n      return animation;\n    });\n    /** Scenes. */\n    const sceneDefs = json.scenes || [];\n    document.getRoot().listExtensionsUsed().filter(extension => extension.prereadTypes.includes(PropertyType.SCENE)).forEach(extension => extension.preread(context, PropertyType.SCENE));\n    context.scenes = sceneDefs.map(sceneDef => {\n      const scene = document.createScene(sceneDef.name);\n      if (sceneDef.extras) scene.setExtras(sceneDef.extras);\n      const children = sceneDef.nodes || [];\n      children.map(nodeIndex => context.nodes[nodeIndex]).forEach(node => scene.addChild(node));\n      return scene;\n    });\n    if (json.scene !== undefined) {\n      document.getRoot().setDefaultScene(context.scenes[json.scene]);\n    }\n    /** Extensions (2/2). */\n    document.getRoot().listExtensionsUsed().forEach(extension => extension.read(context));\n    /** Post-processing. */\n    // Consider an accessor to be 'sparse' if it (A) includes sparse value overrides,\n    // or (B) does not define .bufferView _and_ no extension provides that data. Case\n    // (B) represents a zero-filled accessor.\n    accessorDefs.forEach((accessorDef, index) => {\n      const accessor = context.accessors[index];\n      const hasSparseValues = !!accessorDef.sparse;\n      const isZeroFilled = !accessorDef.bufferView && !accessor.getArray();\n      if (hasSparseValues || isZeroFilled) {\n        accessor.setSparse(true).setArray(getSparseArray(accessorDef, context));\n      }\n    });\n    return document;\n  }\n  static validate(jsonDoc, options) {\n    const json = jsonDoc.json;\n    if (json.asset.version !== '2.0') {\n      throw new Error(`Unsupported glTF version, \"${json.asset.version}\".`);\n    }\n    if (json.extensionsRequired) {\n      for (const extensionName of json.extensionsRequired) {\n        if (!options.extensions.find(extension => extension.EXTENSION_NAME === extensionName)) {\n          throw new Error(`Missing required extension, \"${extensionName}\".`);\n        }\n      }\n    }\n    if (json.extensionsUsed) {\n      for (const extensionName of json.extensionsUsed) {\n        if (!options.extensions.find(extension => extension.EXTENSION_NAME === extensionName)) {\n          options.logger.warn(`Missing optional extension, \"${extensionName}\".`);\n        }\n      }\n    }\n  }\n}\n/**\n * Returns the contents of an interleaved accessor, as a typed array.\n * @internal\n */\nfunction getInterleavedArray(accessorDef, context) {\n  const jsonDoc = context.jsonDoc;\n  const bufferView = context.bufferViews[accessorDef.bufferView];\n  const bufferViewDef = jsonDoc.json.bufferViews[accessorDef.bufferView];\n  const TypedArray = ComponentTypeToTypedArray[accessorDef.componentType];\n  const elementSize = Accessor.getElementSize(accessorDef.type);\n  const componentSize = TypedArray.BYTES_PER_ELEMENT;\n  const accessorByteOffset = accessorDef.byteOffset || 0;\n  const array = new TypedArray(accessorDef.count * elementSize);\n  const view = new DataView(bufferView.buffer, bufferView.byteOffset, bufferView.byteLength);\n  const byteStride = bufferViewDef.byteStride;\n  for (let i = 0; i < accessorDef.count; i++) {\n    for (let j = 0; j < elementSize; j++) {\n      const byteOffset = accessorByteOffset + i * byteStride + j * componentSize;\n      let value;\n      switch (accessorDef.componentType) {\n        case Accessor.ComponentType.FLOAT:\n          value = view.getFloat32(byteOffset, true);\n          break;\n        case Accessor.ComponentType.UNSIGNED_INT:\n          value = view.getUint32(byteOffset, true);\n          break;\n        case Accessor.ComponentType.UNSIGNED_SHORT:\n          value = view.getUint16(byteOffset, true);\n          break;\n        case Accessor.ComponentType.UNSIGNED_BYTE:\n          value = view.getUint8(byteOffset);\n          break;\n        case Accessor.ComponentType.SHORT:\n          value = view.getInt16(byteOffset, true);\n          break;\n        case Accessor.ComponentType.BYTE:\n          value = view.getInt8(byteOffset);\n          break;\n        default:\n          throw new Error(`Unexpected componentType \"${accessorDef.componentType}\".`);\n      }\n      array[i * elementSize + j] = value;\n    }\n  }\n  return array;\n}\n/**\n * Returns the contents of an accessor, as a typed array.\n * @internal\n */\nfunction getAccessorArray(accessorDef, context) {\n  const jsonDoc = context.jsonDoc;\n  const bufferView = context.bufferViews[accessorDef.bufferView];\n  const bufferViewDef = jsonDoc.json.bufferViews[accessorDef.bufferView];\n  const TypedArray = ComponentTypeToTypedArray[accessorDef.componentType];\n  const elementSize = Accessor.getElementSize(accessorDef.type);\n  const componentSize = TypedArray.BYTES_PER_ELEMENT;\n  const elementStride = elementSize * componentSize;\n  // Interleaved buffer view.\n  if (bufferViewDef.byteStride !== undefined && bufferViewDef.byteStride !== elementStride) {\n    return getInterleavedArray(accessorDef, context);\n  }\n  const byteOffset = bufferView.byteOffset + (accessorDef.byteOffset || 0);\n  const byteLength = accessorDef.count * elementSize * componentSize;\n  // Might optimize this to avoid deep copy later, but it's useful for now and not a known\n  // bottleneck. See https://github.com/donmccurdy/glTF-Transform/issues/256.\n  return new TypedArray(bufferView.buffer.slice(byteOffset, byteOffset + byteLength));\n}\n/**\n * Returns the contents of a sparse accessor, as a typed array.\n * @internal\n */\nfunction getSparseArray(accessorDef, context) {\n  const TypedArray = ComponentTypeToTypedArray[accessorDef.componentType];\n  const elementSize = Accessor.getElementSize(accessorDef.type);\n  let array;\n  if (accessorDef.bufferView !== undefined) {\n    array = getAccessorArray(accessorDef, context);\n  } else {\n    array = new TypedArray(accessorDef.count * elementSize);\n  }\n  const sparseDef = accessorDef.sparse;\n  if (!sparseDef) return array; // Zero-filled accessor.\n  const count = sparseDef.count;\n  const indicesDef = _extends({}, accessorDef, sparseDef.indices, {\n    count,\n    type: 'SCALAR'\n  });\n  const valuesDef = _extends({}, accessorDef, sparseDef.values, {\n    count\n  });\n  const indices = getAccessorArray(indicesDef, context);\n  const values = getAccessorArray(valuesDef, context);\n  // Override indices given in the sparse data.\n  for (let i = 0; i < indicesDef.count; i++) {\n    for (let j = 0; j < elementSize; j++) {\n      array[indices[i] * elementSize + j] = values[i * elementSize + j];\n    }\n  }\n  return array;\n}\n\nvar BufferViewTarget;\n(function (BufferViewTarget) {\n  BufferViewTarget[BufferViewTarget[\"ARRAY_BUFFER\"] = 34962] = \"ARRAY_BUFFER\";\n  BufferViewTarget[BufferViewTarget[\"ELEMENT_ARRAY_BUFFER\"] = 34963] = \"ELEMENT_ARRAY_BUFFER\";\n})(BufferViewTarget || (BufferViewTarget = {}));\n/**\n * Model class providing writing state to a {@link GLTFWriter} and its {@link Extension}\n * implementations.\n *\n * @hidden\n */\nclass WriterContext {\n  constructor(_doc, jsonDoc, options) {\n    this._doc = void 0;\n    this.jsonDoc = void 0;\n    this.options = void 0;\n    this.accessorIndexMap = new Map();\n    this.animationIndexMap = new Map();\n    this.bufferIndexMap = new Map();\n    this.cameraIndexMap = new Map();\n    this.skinIndexMap = new Map();\n    this.materialIndexMap = new Map();\n    this.meshIndexMap = new Map();\n    this.nodeIndexMap = new Map();\n    this.imageIndexMap = new Map();\n    this.textureDefIndexMap = new Map();\n    // textureDef JSON -> index\n    this.textureInfoDefMap = new Map();\n    this.samplerDefIndexMap = new Map();\n    // samplerDef JSON -> index\n    this.sceneIndexMap = new Map();\n    this.imageBufferViews = [];\n    this.otherBufferViews = new Map();\n    this.otherBufferViewsIndexMap = new Map();\n    this.extensionData = {};\n    this.bufferURIGenerator = void 0;\n    this.imageURIGenerator = void 0;\n    this.logger = void 0;\n    this._accessorUsageMap = new Map();\n    this.accessorUsageGroupedByParent = new Set(['ARRAY_BUFFER']);\n    this.accessorParents = new Map();\n    this._doc = _doc;\n    this.jsonDoc = jsonDoc;\n    this.options = options;\n    const root = _doc.getRoot();\n    const numBuffers = root.listBuffers().length;\n    const numImages = root.listTextures().length;\n    this.bufferURIGenerator = new UniqueURIGenerator(numBuffers > 1, () => options.basename || 'buffer');\n    this.imageURIGenerator = new UniqueURIGenerator(numImages > 1, texture => getSlot(_doc, texture) || options.basename || 'texture');\n    this.logger = _doc.getLogger();\n  }\n  /**\n   * Creates a TextureInfo definition, and any Texture or Sampler definitions it requires. If\n   * possible, Texture and Sampler definitions are shared.\n   */\n  createTextureInfoDef(texture, textureInfo) {\n    const samplerDef = {\n      magFilter: textureInfo.getMagFilter() || undefined,\n      minFilter: textureInfo.getMinFilter() || undefined,\n      wrapS: textureInfo.getWrapS(),\n      wrapT: textureInfo.getWrapT()\n    };\n    const samplerKey = JSON.stringify(samplerDef);\n    if (!this.samplerDefIndexMap.has(samplerKey)) {\n      this.samplerDefIndexMap.set(samplerKey, this.jsonDoc.json.samplers.length);\n      this.jsonDoc.json.samplers.push(samplerDef);\n    }\n    const textureDef = {\n      source: this.imageIndexMap.get(texture),\n      sampler: this.samplerDefIndexMap.get(samplerKey)\n    };\n    const textureKey = JSON.stringify(textureDef);\n    if (!this.textureDefIndexMap.has(textureKey)) {\n      this.textureDefIndexMap.set(textureKey, this.jsonDoc.json.textures.length);\n      this.jsonDoc.json.textures.push(textureDef);\n    }\n    const textureInfoDef = {\n      index: this.textureDefIndexMap.get(textureKey)\n    };\n    if (textureInfo.getTexCoord() !== 0) {\n      textureInfoDef.texCoord = textureInfo.getTexCoord();\n    }\n    if (Object.keys(textureInfo.getExtras()).length > 0) {\n      textureInfoDef.extras = textureInfo.getExtras();\n    }\n    this.textureInfoDefMap.set(textureInfo, textureInfoDef);\n    return textureInfoDef;\n  }\n  createPropertyDef(property) {\n    const def = {};\n    if (property.getName()) {\n      def.name = property.getName();\n    }\n    if (Object.keys(property.getExtras()).length > 0) {\n      def.extras = property.getExtras();\n    }\n    return def;\n  }\n  createAccessorDef(accessor) {\n    const accessorDef = this.createPropertyDef(accessor);\n    accessorDef.type = accessor.getType();\n    accessorDef.componentType = accessor.getComponentType();\n    accessorDef.count = accessor.getCount();\n    const needsBounds = this._doc.getGraph().listParentEdges(accessor).some(edge => edge.getName() === 'attributes' && edge.getAttributes().key === 'POSITION' || edge.getName() === 'input');\n    if (needsBounds) {\n      accessorDef.max = accessor.getMax([]).map(Math.fround);\n      accessorDef.min = accessor.getMin([]).map(Math.fround);\n    }\n    if (accessor.getNormalized()) {\n      accessorDef.normalized = accessor.getNormalized();\n    }\n    return accessorDef;\n  }\n  createImageData(imageDef, data, texture) {\n    if (this.options.format === Format.GLB) {\n      this.imageBufferViews.push(data);\n      imageDef.bufferView = this.jsonDoc.json.bufferViews.length;\n      this.jsonDoc.json.bufferViews.push({\n        buffer: 0,\n        byteOffset: -1,\n        // determined while iterating buffers, in Writer.ts.\n        byteLength: data.byteLength\n      });\n    } else {\n      const extension = ImageUtils.mimeTypeToExtension(texture.getMimeType());\n      imageDef.uri = this.imageURIGenerator.createURI(texture, extension);\n      this.assignResourceURI(imageDef.uri, data, false);\n    }\n  }\n  assignResourceURI(uri, data, throwOnConflict) {\n    const resources = this.jsonDoc.resources;\n    // https://github.com/KhronosGroup/glTF/issues/2446\n    if (!(uri in resources)) {\n      resources[uri] = data;\n      return;\n    }\n    if (data === resources[uri]) {\n      this.logger.warn(`Duplicate resource URI, \"${uri}\".`);\n      return;\n    }\n    const conflictMessage = `Resource URI \"${uri}\" already assigned to different data.`;\n    if (!throwOnConflict) {\n      this.logger.warn(conflictMessage);\n      return;\n    }\n    throw new Error(conflictMessage);\n  }\n  /**\n   * Returns implicit usage type of the given accessor, related to grouping accessors into\n   * buffer views. Usage is a superset of buffer view target, including ARRAY_BUFFER and\n   * ELEMENT_ARRAY_BUFFER, but also usages that do not match GPU buffer view targets such as\n   * IBMs. Additional usages are defined by extensions, like `EXT_mesh_gpu_instancing`.\n   */\n  getAccessorUsage(accessor) {\n    const cachedUsage = this._accessorUsageMap.get(accessor);\n    if (cachedUsage) return cachedUsage;\n    if (accessor.getSparse()) return BufferViewUsage$1.SPARSE;\n    for (const edge of this._doc.getGraph().listParentEdges(accessor)) {\n      const {\n        usage\n      } = edge.getAttributes();\n      if (usage) return usage;\n      if (edge.getParent().propertyType !== PropertyType.ROOT) {\n        this.logger.warn(`Missing attribute \".usage\" on edge, \"${edge.getName()}\".`);\n      }\n    }\n    // Group accessors with no specified usage into a miscellaneous buffer view.\n    return BufferViewUsage$1.OTHER;\n  }\n  /**\n   * Sets usage for the given accessor. Some accessor types must be grouped into\n   * buffer views with like accessors. This includes the specified buffer view \"targets\", but\n   * also implicit usage like IBMs or instanced mesh attributes. If unspecified, an accessor\n   * will be grouped with other accessors of unspecified usage.\n   */\n  addAccessorToUsageGroup(accessor, usage) {\n    const prevUsage = this._accessorUsageMap.get(accessor);\n    if (prevUsage && prevUsage !== usage) {\n      throw new Error(`Accessor with usage \"${prevUsage}\" cannot be reused as \"${usage}\".`);\n    }\n    this._accessorUsageMap.set(accessor, usage);\n    return this;\n  }\n}\n/** Explicit buffer view targets defined by glTF specification. */\nWriterContext.BufferViewTarget = BufferViewTarget;\n/**\n * Implicit buffer view usage, not required by glTF specification, but nonetheless useful for\n * proper grouping of accessors into buffer views. Additional usages are defined by extensions,\n * like `EXT_mesh_gpu_instancing`.\n */\nWriterContext.BufferViewUsage = BufferViewUsage$1;\n/** Maps usage type to buffer view target. Usages not mapped have undefined targets. */\nWriterContext.USAGE_TO_TARGET = {\n  [BufferViewUsage$1.ARRAY_BUFFER]: BufferViewTarget.ARRAY_BUFFER,\n  [BufferViewUsage$1.ELEMENT_ARRAY_BUFFER]: BufferViewTarget.ELEMENT_ARRAY_BUFFER\n};\nclass UniqueURIGenerator {\n  constructor(multiple, basename) {\n    this.multiple = void 0;\n    this.basename = void 0;\n    this.counter = {};\n    this.multiple = multiple;\n    this.basename = basename;\n  }\n  createURI(object, extension) {\n    if (object.getURI()) {\n      return object.getURI();\n    } else if (!this.multiple) {\n      return `${this.basename(object)}.${extension}`;\n    } else {\n      const basename = this.basename(object);\n      this.counter[basename] = this.counter[basename] || 1;\n      return `${basename}_${this.counter[basename]++}.${extension}`;\n    }\n  }\n}\n/** Returns the first slot (by name) to which the texture is assigned. */\nfunction getSlot(document, texture) {\n  const edge = document.getGraph().listParentEdges(texture).find(edge => edge.getParent() !== document.getRoot());\n  return edge ? edge.getName().replace(/texture$/i, '') : '';\n}\n\nconst {\n  BufferViewUsage\n} = WriterContext;\nconst {\n  UNSIGNED_INT,\n  UNSIGNED_SHORT,\n  UNSIGNED_BYTE\n} = Accessor.ComponentType;\nconst SUPPORTED_PREWRITE_TYPES = new Set([PropertyType.ACCESSOR, PropertyType.BUFFER, PropertyType.MATERIAL, PropertyType.MESH]);\n/**\n * @internal\n * @hidden\n */\nclass GLTFWriter {\n  static write(doc, options) {\n    const graph = doc.getGraph();\n    const root = doc.getRoot();\n    const json = {\n      asset: _extends({\n        generator: `glTF-Transform ${VERSION}`\n      }, root.getAsset()),\n      extras: _extends({}, root.getExtras())\n    };\n    const jsonDoc = {\n      json,\n      resources: {}\n    };\n    const context = new WriterContext(doc, jsonDoc, options);\n    const logger = options.logger || Logger.DEFAULT_INSTANCE;\n    /* Extensions (1/2). */\n    // Extensions present on the Document are not written unless they are also registered with\n    // the I/O class. This ensures that setup in `extension.register()` is completed, and\n    // allows a Document to be written with specific extensions disabled.\n    const extensionsRegistered = new Set(options.extensions.map(ext => ext.EXTENSION_NAME));\n    const extensionsUsed = doc.getRoot().listExtensionsUsed().filter(ext => extensionsRegistered.has(ext.extensionName)).sort((a, b) => a.extensionName > b.extensionName ? 1 : -1);\n    const extensionsRequired = doc.getRoot().listExtensionsRequired().filter(ext => extensionsRegistered.has(ext.extensionName)).sort((a, b) => a.extensionName > b.extensionName ? 1 : -1);\n    if (extensionsUsed.length < doc.getRoot().listExtensionsUsed().length) {\n      logger.warn('Some extensions were not registered for I/O, and will not be written.');\n    }\n    for (const extension of extensionsUsed) {\n      // Warn on unsupported prewrite hooks.\n      const unsupportedHooks = extension.prewriteTypes.filter(type => !SUPPORTED_PREWRITE_TYPES.has(type));\n      if (unsupportedHooks.length) {\n        logger.warn(`Prewrite hooks for some types (${unsupportedHooks.join()}), requested by extension ` + `${extension.extensionName}, are unsupported. Please file an issue or a PR.`);\n      }\n      // Install dependencies.\n      for (const key of extension.writeDependencies) {\n        extension.install(key, options.dependencies[key]);\n      }\n    }\n    /**\n     * Pack a group of accessors into a sequential buffer view. Appends accessor and buffer view\n     * definitions to the root JSON lists.\n     *\n     * @param accessors Accessors to be included.\n     * @param bufferIndex Buffer to write to.\n     * @param bufferByteOffset Current offset into the buffer, accounting for other buffer views.\n     * @param bufferViewTarget (Optional) target use of the buffer view.\n     */\n    function concatAccessors(accessors, bufferIndex, bufferByteOffset, bufferViewTarget) {\n      const buffers = [];\n      let byteLength = 0;\n      // Create accessor definitions, determining size of final buffer view.\n      for (const accessor of accessors) {\n        const accessorDef = context.createAccessorDef(accessor);\n        accessorDef.bufferView = json.bufferViews.length;\n        const accessorArray = accessor.getArray();\n        const data = BufferUtils.pad(BufferUtils.toView(accessorArray));\n        accessorDef.byteOffset = byteLength;\n        byteLength += data.byteLength;\n        buffers.push(data);\n        context.accessorIndexMap.set(accessor, json.accessors.length);\n        json.accessors.push(accessorDef);\n      }\n      // Create buffer view definition.\n      const bufferViewData = BufferUtils.concat(buffers);\n      const bufferViewDef = {\n        buffer: bufferIndex,\n        byteOffset: bufferByteOffset,\n        byteLength: bufferViewData.byteLength\n      };\n      if (bufferViewTarget) bufferViewDef.target = bufferViewTarget;\n      json.bufferViews.push(bufferViewDef);\n      return {\n        buffers,\n        byteLength\n      };\n    }\n    /**\n     * Pack a group of accessors into an interleaved buffer view. Appends accessor and buffer\n     * view definitions to the root JSON lists. Buffer view target is implicitly attribute data.\n     *\n     * References:\n     * - [Apple • Best Practices for Working with Vertex Data](https://developer.apple.com/library/archive/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html)\n     * - [Khronos • Vertex Specification Best Practices](https://www.khronos.org/opengl/wiki/Vertex_Specification_Best_Practices)\n     *\n     * @param accessors Accessors to be included.\n     * @param bufferIndex Buffer to write to.\n     * @param bufferByteOffset Offset into the buffer, accounting for other buffer views.\n     */\n    function interleaveAccessors(accessors, bufferIndex, bufferByteOffset) {\n      const vertexCount = accessors[0].getCount();\n      let byteStride = 0;\n      // Create accessor definitions, determining size and stride of final buffer view.\n      for (const accessor of accessors) {\n        const accessorDef = context.createAccessorDef(accessor);\n        accessorDef.bufferView = json.bufferViews.length;\n        accessorDef.byteOffset = byteStride;\n        const elementSize = accessor.getElementSize();\n        const componentSize = accessor.getComponentSize();\n        byteStride += BufferUtils.padNumber(elementSize * componentSize);\n        context.accessorIndexMap.set(accessor, json.accessors.length);\n        json.accessors.push(accessorDef);\n      }\n      // Allocate interleaved buffer view.\n      const byteLength = vertexCount * byteStride;\n      const buffer = new ArrayBuffer(byteLength);\n      const view = new DataView(buffer);\n      // Write interleaved accessor data to the buffer view.\n      for (let i = 0; i < vertexCount; i++) {\n        let vertexByteOffset = 0;\n        for (const accessor of accessors) {\n          const elementSize = accessor.getElementSize();\n          const componentSize = accessor.getComponentSize();\n          const componentType = accessor.getComponentType();\n          const array = accessor.getArray();\n          for (let j = 0; j < elementSize; j++) {\n            const viewByteOffset = i * byteStride + vertexByteOffset + j * componentSize;\n            const value = array[i * elementSize + j];\n            switch (componentType) {\n              case Accessor.ComponentType.FLOAT:\n                view.setFloat32(viewByteOffset, value, true);\n                break;\n              case Accessor.ComponentType.BYTE:\n                view.setInt8(viewByteOffset, value);\n                break;\n              case Accessor.ComponentType.SHORT:\n                view.setInt16(viewByteOffset, value, true);\n                break;\n              case Accessor.ComponentType.UNSIGNED_BYTE:\n                view.setUint8(viewByteOffset, value);\n                break;\n              case Accessor.ComponentType.UNSIGNED_SHORT:\n                view.setUint16(viewByteOffset, value, true);\n                break;\n              case Accessor.ComponentType.UNSIGNED_INT:\n                view.setUint32(viewByteOffset, value, true);\n                break;\n              default:\n                throw new Error('Unexpected component type: ' + componentType);\n            }\n          }\n          vertexByteOffset += BufferUtils.padNumber(elementSize * componentSize);\n        }\n      }\n      // Create buffer view definition.\n      const bufferViewDef = {\n        buffer: bufferIndex,\n        byteOffset: bufferByteOffset,\n        byteLength: byteLength,\n        byteStride: byteStride,\n        target: WriterContext.BufferViewTarget.ARRAY_BUFFER\n      };\n      json.bufferViews.push(bufferViewDef);\n      return {\n        byteLength,\n        buffers: [new Uint8Array(buffer)]\n      };\n    }\n    /**\n     * Pack a group of sparse accessors. Appends accessor and buffer view\n     * definitions to the root JSON lists.\n     *\n     * @param accessors Accessors to be included.\n     * @param bufferIndex Buffer to write to.\n     * @param bufferByteOffset Current offset into the buffer, accounting for other buffer views.\n     */\n    function concatSparseAccessors(accessors, bufferIndex, bufferByteOffset) {\n      const buffers = [];\n      let byteLength = 0;\n      const sparseData = new Map();\n      let maxIndex = -Infinity;\n      let needSparseWarning = false;\n      // (1) Write accessor definitions, gathering indices and values.\n      for (const accessor of accessors) {\n        const accessorDef = context.createAccessorDef(accessor);\n        json.accessors.push(accessorDef);\n        context.accessorIndexMap.set(accessor, json.accessors.length - 1);\n        const indices = [];\n        const values = [];\n        const el = [];\n        const base = new Array(accessor.getElementSize()).fill(0);\n        for (let i = 0, il = accessor.getCount(); i < il; i++) {\n          accessor.getElement(i, el);\n          if (MathUtils.eq(el, base, 0)) continue;\n          maxIndex = Math.max(i, maxIndex);\n          indices.push(i);\n          for (let j = 0; j < el.length; j++) values.push(el[j]);\n        }\n        const count = indices.length;\n        const data = {\n          accessorDef,\n          count\n        };\n        sparseData.set(accessor, data);\n        if (count === 0) continue;\n        if (count > accessor.getCount() / 2) {\n          needSparseWarning = true;\n        }\n        const ValueArray = ComponentTypeToTypedArray[accessor.getComponentType()];\n        data.indices = indices;\n        data.values = new ValueArray(values);\n      }\n      // (2) Early exit if all sparse accessors are just zero-filled arrays.\n      if (!Number.isFinite(maxIndex)) {\n        return {\n          buffers,\n          byteLength\n        };\n      }\n      if (needSparseWarning) {\n        logger.warn(`Some sparse accessors have >50% non-zero elements, which may increase file size.`);\n      }\n      // (3) Write index buffer view.\n      const IndexArray = maxIndex < 255 ? Uint8Array : maxIndex < 65535 ? Uint16Array : Uint32Array;\n      const IndexComponentType = maxIndex < 255 ? UNSIGNED_BYTE : maxIndex < 65535 ? UNSIGNED_SHORT : UNSIGNED_INT;\n      const indicesBufferViewDef = {\n        buffer: bufferIndex,\n        byteOffset: bufferByteOffset + byteLength,\n        byteLength: 0\n      };\n      for (const accessor of accessors) {\n        const data = sparseData.get(accessor);\n        if (data.count === 0) continue;\n        data.indicesByteOffset = indicesBufferViewDef.byteLength;\n        const buffer = BufferUtils.pad(BufferUtils.toView(new IndexArray(data.indices)));\n        buffers.push(buffer);\n        byteLength += buffer.byteLength;\n        indicesBufferViewDef.byteLength += buffer.byteLength;\n      }\n      json.bufferViews.push(indicesBufferViewDef);\n      const indicesBufferViewIndex = json.bufferViews.length - 1;\n      // (4) Write value buffer view.\n      const valuesBufferViewDef = {\n        buffer: bufferIndex,\n        byteOffset: bufferByteOffset + byteLength,\n        byteLength: 0\n      };\n      for (const accessor of accessors) {\n        const data = sparseData.get(accessor);\n        if (data.count === 0) continue;\n        data.valuesByteOffset = valuesBufferViewDef.byteLength;\n        const buffer = BufferUtils.pad(BufferUtils.toView(data.values));\n        buffers.push(buffer);\n        byteLength += buffer.byteLength;\n        valuesBufferViewDef.byteLength += buffer.byteLength;\n      }\n      json.bufferViews.push(valuesBufferViewDef);\n      const valuesBufferViewIndex = json.bufferViews.length - 1;\n      // (5) Write accessor sparse entries.\n      for (const accessor of accessors) {\n        const data = sparseData.get(accessor);\n        if (data.count === 0) continue;\n        data.accessorDef.sparse = {\n          count: data.count,\n          indices: {\n            bufferView: indicesBufferViewIndex,\n            byteOffset: data.indicesByteOffset,\n            componentType: IndexComponentType\n          },\n          values: {\n            bufferView: valuesBufferViewIndex,\n            byteOffset: data.valuesByteOffset\n          }\n        };\n      }\n      return {\n        buffers,\n        byteLength\n      };\n    }\n    json.accessors = [];\n    json.bufferViews = [];\n    /* Textures. */\n    // glTF Transform's \"Texture\" properties correspond 1:1 with glTF \"Image\" properties, and\n    // with image files. The glTF file may contain more one texture per image, where images\n    // are reused with different sampler properties.\n    json.samplers = [];\n    json.textures = [];\n    json.images = root.listTextures().map((texture, textureIndex) => {\n      const imageDef = context.createPropertyDef(texture);\n      if (texture.getMimeType()) {\n        imageDef.mimeType = texture.getMimeType();\n      }\n      const image = texture.getImage();\n      if (image) {\n        context.createImageData(imageDef, image, texture);\n      }\n      context.imageIndexMap.set(texture, textureIndex);\n      return imageDef;\n    });\n    /* Accessors. */\n    extensionsUsed.filter(extension => extension.prewriteTypes.includes(PropertyType.ACCESSOR)).forEach(extension => extension.prewrite(context, PropertyType.ACCESSOR));\n    root.listAccessors().forEach(accessor => {\n      // Attributes are grouped and interleaved in one buffer view per mesh primitive.\n      // Indices for all primitives are grouped into a single buffer view. IBMs are grouped\n      // into a single buffer view. Other usage (if specified by extensions) also goes into\n      // a dedicated buffer view. Everything else goes into a miscellaneous buffer view.\n      // Certain accessor usage should group data into buffer views by the accessor parent.\n      // The `accessorParents` map uses the first parent of each accessor for this purpose.\n      const groupByParent = context.accessorUsageGroupedByParent;\n      const accessorParents = context.accessorParents;\n      // Skip if already written by an extension.\n      if (context.accessorIndexMap.has(accessor)) return;\n      // Assign usage for core accessor usage types (explicit targets and implicit usage).\n      const usage = context.getAccessorUsage(accessor);\n      context.addAccessorToUsageGroup(accessor, usage);\n      // For accessor usage that requires grouping by parent (vertex and instance\n      // attributes) organize buffer views accordingly.\n      if (groupByParent.has(usage)) {\n        const parent = graph.listParents(accessor).find(parent => parent.propertyType !== PropertyType.ROOT);\n        accessorParents.set(accessor, parent);\n      }\n    });\n    /* Buffers, buffer views. */\n    extensionsUsed.filter(extension => extension.prewriteTypes.includes(PropertyType.BUFFER)).forEach(extension => extension.prewrite(context, PropertyType.BUFFER));\n    const needsBuffer = root.listAccessors().length > 0 || context.otherBufferViews.size > 0 || root.listTextures().length > 0 && options.format === Format.GLB;\n    if (needsBuffer && root.listBuffers().length === 0) {\n      throw new Error('Buffer required for Document resources, but none was found.');\n    }\n    json.buffers = [];\n    root.listBuffers().forEach((buffer, index) => {\n      const bufferDef = context.createPropertyDef(buffer);\n      const groupByParent = context.accessorUsageGroupedByParent;\n      const accessors = buffer.listParents().filter(property => property instanceof Accessor);\n      const uniqueParents = new Set(accessors.map(accessor => context.accessorParents.get(accessor)));\n      const parentToIndex = new Map(Array.from(uniqueParents).map((parent, index) => [parent, index]));\n      const accessorGroups = {};\n      for (const accessor of accessors) {\n        var _key;\n        // Skip if already written by an extension.\n        if (context.accessorIndexMap.has(accessor)) continue;\n        const usage = context.getAccessorUsage(accessor);\n        let key = usage;\n        if (groupByParent.has(usage)) {\n          const parent = context.accessorParents.get(accessor);\n          key += `:${parentToIndex.get(parent)}`;\n        }\n        accessorGroups[_key = key] || (accessorGroups[_key] = {\n          usage,\n          accessors: []\n        });\n        accessorGroups[key].accessors.push(accessor);\n      }\n      // Write accessor groups to buffer views.\n      const buffers = [];\n      const bufferIndex = json.buffers.length;\n      let bufferByteLength = 0;\n      for (const {\n        usage,\n        accessors: groupAccessors\n      } of Object.values(accessorGroups)) {\n        if (usage === BufferViewUsage.ARRAY_BUFFER && options.vertexLayout === VertexLayout.INTERLEAVED) {\n          // (1) Interleaved vertex attributes.\n          const result = interleaveAccessors(groupAccessors, bufferIndex, bufferByteLength);\n          bufferByteLength += result.byteLength;\n          for (const _buffer of result.buffers) {\n            buffers.push(_buffer);\n          }\n        } else if (usage === BufferViewUsage.ARRAY_BUFFER) {\n          // (2) Non-interleaved vertex attributes.\n          for (const accessor of groupAccessors) {\n            // We 'interleave' a single accessor because the method pads to\n            // 4-byte boundaries, which concatAccessors() does not.\n            const result = interleaveAccessors([accessor], bufferIndex, bufferByteLength);\n            bufferByteLength += result.byteLength;\n            for (const _buffer2 of result.buffers) {\n              buffers.push(_buffer2);\n            }\n          }\n        } else if (usage === BufferViewUsage.SPARSE) {\n          // (3) Sparse accessors.\n          const result = concatSparseAccessors(groupAccessors, bufferIndex, bufferByteLength);\n          bufferByteLength += result.byteLength;\n          for (const _buffer3 of result.buffers) {\n            buffers.push(_buffer3);\n          }\n        } else if (usage === BufferViewUsage.ELEMENT_ARRAY_BUFFER) {\n          // (4) Indices.\n          const target = WriterContext.BufferViewTarget.ELEMENT_ARRAY_BUFFER;\n          const result = concatAccessors(groupAccessors, bufferIndex, bufferByteLength, target);\n          bufferByteLength += result.byteLength;\n          for (const _buffer4 of result.buffers) {\n            buffers.push(_buffer4);\n          }\n        } else {\n          // (5) Other.\n          const result = concatAccessors(groupAccessors, bufferIndex, bufferByteLength);\n          bufferByteLength += result.byteLength;\n          for (const _buffer5 of result.buffers) {\n            buffers.push(_buffer5);\n          }\n        }\n      }\n      // We only support embedded images in GLB, where the embedded buffer must be the first.\n      // Additional buffers are currently left empty (see EXT_meshopt_compression fallback).\n      if (context.imageBufferViews.length && index === 0) {\n        for (let i = 0; i < context.imageBufferViews.length; i++) {\n          json.bufferViews[json.images[i].bufferView].byteOffset = bufferByteLength;\n          bufferByteLength += context.imageBufferViews[i].byteLength;\n          buffers.push(context.imageBufferViews[i]);\n          if (bufferByteLength % 8) {\n            // See: https://github.com/KhronosGroup/glTF/issues/1935\n            const imagePadding = 8 - bufferByteLength % 8;\n            bufferByteLength += imagePadding;\n            buffers.push(new Uint8Array(imagePadding));\n          }\n        }\n      }\n      if (context.otherBufferViews.has(buffer)) {\n        for (const data of context.otherBufferViews.get(buffer)) {\n          json.bufferViews.push({\n            buffer: bufferIndex,\n            byteOffset: bufferByteLength,\n            byteLength: data.byteLength\n          });\n          context.otherBufferViewsIndexMap.set(data, json.bufferViews.length - 1);\n          bufferByteLength += data.byteLength;\n          buffers.push(data);\n        }\n      }\n      if (bufferByteLength) {\n        // Assign buffer URI.\n        let uri;\n        if (options.format === Format.GLB) {\n          uri = GLB_BUFFER;\n        } else {\n          uri = context.bufferURIGenerator.createURI(buffer, 'bin');\n          bufferDef.uri = uri;\n        }\n        // Write buffer views to buffer.\n        bufferDef.byteLength = bufferByteLength;\n        context.assignResourceURI(uri, BufferUtils.concat(buffers), true);\n      }\n      json.buffers.push(bufferDef);\n      context.bufferIndexMap.set(buffer, index);\n    });\n    if (root.listAccessors().find(a => !a.getBuffer())) {\n      logger.warn('Skipped writing one or more Accessors: no Buffer assigned.');\n    }\n    /* Materials. */\n    extensionsUsed.filter(extension => extension.prewriteTypes.includes(PropertyType.MATERIAL)).forEach(extension => extension.prewrite(context, PropertyType.MATERIAL));\n    json.materials = root.listMaterials().map((material, index) => {\n      const materialDef = context.createPropertyDef(material);\n      // Program state & blending.\n      if (material.getAlphaMode() !== Material.AlphaMode.OPAQUE) {\n        materialDef.alphaMode = material.getAlphaMode();\n      }\n      if (material.getAlphaMode() === Material.AlphaMode.MASK) {\n        materialDef.alphaCutoff = material.getAlphaCutoff();\n      }\n      if (material.getDoubleSided()) materialDef.doubleSided = true;\n      // Factors.\n      materialDef.pbrMetallicRoughness = {};\n      if (!MathUtils.eq(material.getBaseColorFactor(), [1, 1, 1, 1])) {\n        materialDef.pbrMetallicRoughness.baseColorFactor = material.getBaseColorFactor();\n      }\n      if (!MathUtils.eq(material.getEmissiveFactor(), [0, 0, 0])) {\n        materialDef.emissiveFactor = material.getEmissiveFactor();\n      }\n      if (material.getRoughnessFactor() !== 1) {\n        materialDef.pbrMetallicRoughness.roughnessFactor = material.getRoughnessFactor();\n      }\n      if (material.getMetallicFactor() !== 1) {\n        materialDef.pbrMetallicRoughness.metallicFactor = material.getMetallicFactor();\n      }\n      // Textures.\n      if (material.getBaseColorTexture()) {\n        const texture = material.getBaseColorTexture();\n        const textureInfo = material.getBaseColorTextureInfo();\n        materialDef.pbrMetallicRoughness.baseColorTexture = context.createTextureInfoDef(texture, textureInfo);\n      }\n      if (material.getEmissiveTexture()) {\n        const texture = material.getEmissiveTexture();\n        const textureInfo = material.getEmissiveTextureInfo();\n        materialDef.emissiveTexture = context.createTextureInfoDef(texture, textureInfo);\n      }\n      if (material.getNormalTexture()) {\n        const texture = material.getNormalTexture();\n        const textureInfo = material.getNormalTextureInfo();\n        const textureInfoDef = context.createTextureInfoDef(texture, textureInfo);\n        if (material.getNormalScale() !== 1) {\n          textureInfoDef.scale = material.getNormalScale();\n        }\n        materialDef.normalTexture = textureInfoDef;\n      }\n      if (material.getOcclusionTexture()) {\n        const texture = material.getOcclusionTexture();\n        const textureInfo = material.getOcclusionTextureInfo();\n        const textureInfoDef = context.createTextureInfoDef(texture, textureInfo);\n        if (material.getOcclusionStrength() !== 1) {\n          textureInfoDef.strength = material.getOcclusionStrength();\n        }\n        materialDef.occlusionTexture = textureInfoDef;\n      }\n      if (material.getMetallicRoughnessTexture()) {\n        const texture = material.getMetallicRoughnessTexture();\n        const textureInfo = material.getMetallicRoughnessTextureInfo();\n        materialDef.pbrMetallicRoughness.metallicRoughnessTexture = context.createTextureInfoDef(texture, textureInfo);\n      }\n      context.materialIndexMap.set(material, index);\n      return materialDef;\n    });\n    /* Meshes. */\n    extensionsUsed.filter(extension => extension.prewriteTypes.includes(PropertyType.MESH)).forEach(extension => extension.prewrite(context, PropertyType.MESH));\n    json.meshes = root.listMeshes().map((mesh, index) => {\n      const meshDef = context.createPropertyDef(mesh);\n      let targetNames = null;\n      meshDef.primitives = mesh.listPrimitives().map(primitive => {\n        const primitiveDef = {\n          attributes: {}\n        };\n        primitiveDef.mode = primitive.getMode();\n        const material = primitive.getMaterial();\n        if (material) {\n          primitiveDef.material = context.materialIndexMap.get(material);\n        }\n        if (Object.keys(primitive.getExtras()).length) {\n          primitiveDef.extras = primitive.getExtras();\n        }\n        const indices = primitive.getIndices();\n        if (indices) {\n          primitiveDef.indices = context.accessorIndexMap.get(indices);\n        }\n        for (const semantic of primitive.listSemantics()) {\n          primitiveDef.attributes[semantic] = context.accessorIndexMap.get(primitive.getAttribute(semantic));\n        }\n        for (const target of primitive.listTargets()) {\n          const targetDef = {};\n          for (const semantic of target.listSemantics()) {\n            targetDef[semantic] = context.accessorIndexMap.get(target.getAttribute(semantic));\n          }\n          primitiveDef.targets = primitiveDef.targets || [];\n          primitiveDef.targets.push(targetDef);\n        }\n        if (primitive.listTargets().length && !targetNames) {\n          targetNames = primitive.listTargets().map(target => target.getName());\n        }\n        return primitiveDef;\n      });\n      if (mesh.getWeights().length) {\n        meshDef.weights = mesh.getWeights();\n      }\n      if (targetNames) {\n        meshDef.extras = meshDef.extras || {};\n        meshDef.extras['targetNames'] = targetNames;\n      }\n      context.meshIndexMap.set(mesh, index);\n      return meshDef;\n    });\n    /** Cameras. */\n    json.cameras = root.listCameras().map((camera, index) => {\n      const cameraDef = context.createPropertyDef(camera);\n      cameraDef.type = camera.getType();\n      if (cameraDef.type === Camera.Type.PERSPECTIVE) {\n        cameraDef.perspective = {\n          znear: camera.getZNear(),\n          zfar: camera.getZFar(),\n          yfov: camera.getYFov()\n        };\n        const aspectRatio = camera.getAspectRatio();\n        if (aspectRatio !== null) {\n          cameraDef.perspective.aspectRatio = aspectRatio;\n        }\n      } else {\n        cameraDef.orthographic = {\n          znear: camera.getZNear(),\n          zfar: camera.getZFar(),\n          xmag: camera.getXMag(),\n          ymag: camera.getYMag()\n        };\n      }\n      context.cameraIndexMap.set(camera, index);\n      return cameraDef;\n    });\n    /* Nodes. */\n    json.nodes = root.listNodes().map((node, index) => {\n      const nodeDef = context.createPropertyDef(node);\n      if (!MathUtils.eq(node.getTranslation(), [0, 0, 0])) {\n        nodeDef.translation = node.getTranslation();\n      }\n      if (!MathUtils.eq(node.getRotation(), [0, 0, 0, 1])) {\n        nodeDef.rotation = node.getRotation();\n      }\n      if (!MathUtils.eq(node.getScale(), [1, 1, 1])) {\n        nodeDef.scale = node.getScale();\n      }\n      if (node.getWeights().length) {\n        nodeDef.weights = node.getWeights();\n      }\n      // Attachments (mesh, camera, skin) defined later in writing process.\n      context.nodeIndexMap.set(node, index);\n      return nodeDef;\n    });\n    /** Skins. */\n    json.skins = root.listSkins().map((skin, index) => {\n      const skinDef = context.createPropertyDef(skin);\n      const inverseBindMatrices = skin.getInverseBindMatrices();\n      if (inverseBindMatrices) {\n        skinDef.inverseBindMatrices = context.accessorIndexMap.get(inverseBindMatrices);\n      }\n      const skeleton = skin.getSkeleton();\n      if (skeleton) {\n        skinDef.skeleton = context.nodeIndexMap.get(skeleton);\n      }\n      skinDef.joints = skin.listJoints().map(joint => context.nodeIndexMap.get(joint));\n      context.skinIndexMap.set(skin, index);\n      return skinDef;\n    });\n    /** Node attachments. */\n    root.listNodes().forEach((node, index) => {\n      const nodeDef = json.nodes[index];\n      const mesh = node.getMesh();\n      if (mesh) {\n        nodeDef.mesh = context.meshIndexMap.get(mesh);\n      }\n      const camera = node.getCamera();\n      if (camera) {\n        nodeDef.camera = context.cameraIndexMap.get(camera);\n      }\n      const skin = node.getSkin();\n      if (skin) {\n        nodeDef.skin = context.skinIndexMap.get(skin);\n      }\n      if (node.listChildren().length > 0) {\n        nodeDef.children = node.listChildren().map(node => context.nodeIndexMap.get(node));\n      }\n    });\n    /** Animations. */\n    json.animations = root.listAnimations().map((animation, index) => {\n      const animationDef = context.createPropertyDef(animation);\n      const samplerIndexMap = new Map();\n      animationDef.samplers = animation.listSamplers().map((sampler, samplerIndex) => {\n        const samplerDef = context.createPropertyDef(sampler);\n        samplerDef.input = context.accessorIndexMap.get(sampler.getInput());\n        samplerDef.output = context.accessorIndexMap.get(sampler.getOutput());\n        samplerDef.interpolation = sampler.getInterpolation();\n        samplerIndexMap.set(sampler, samplerIndex);\n        return samplerDef;\n      });\n      animationDef.channels = animation.listChannels().map(channel => {\n        const channelDef = context.createPropertyDef(channel);\n        channelDef.sampler = samplerIndexMap.get(channel.getSampler());\n        channelDef.target = {\n          node: context.nodeIndexMap.get(channel.getTargetNode()),\n          path: channel.getTargetPath()\n        };\n        return channelDef;\n      });\n      context.animationIndexMap.set(animation, index);\n      return animationDef;\n    });\n    /* Scenes. */\n    json.scenes = root.listScenes().map((scene, index) => {\n      const sceneDef = context.createPropertyDef(scene);\n      sceneDef.nodes = scene.listChildren().map(node => context.nodeIndexMap.get(node));\n      context.sceneIndexMap.set(scene, index);\n      return sceneDef;\n    });\n    const defaultScene = root.getDefaultScene();\n    if (defaultScene) {\n      json.scene = root.listScenes().indexOf(defaultScene);\n    }\n    /* Extensions (2/2). */\n    json.extensionsUsed = extensionsUsed.map(ext => ext.extensionName);\n    json.extensionsRequired = extensionsRequired.map(ext => ext.extensionName);\n    extensionsUsed.forEach(extension => extension.write(context));\n    //\n    clean(json);\n    return jsonDoc;\n  }\n}\n/**\n * Removes empty and null values from an object.\n * @param object\n * @internal\n */\nfunction clean(object) {\n  const unused = [];\n  for (const key in object) {\n    const value = object[key];\n    if (Array.isArray(value) && value.length === 0) {\n      unused.push(key);\n    } else if (value === null || value === '') {\n      unused.push(key);\n    } else if (value && typeof value === 'object' && Object.keys(value).length === 0) {\n      unused.push(key);\n    }\n  }\n  for (const key of unused) {\n    delete object[key];\n  }\n}\n\nvar ChunkType;\n(function (ChunkType) {\n  ChunkType[ChunkType[\"JSON\"] = 1313821514] = \"JSON\";\n  ChunkType[ChunkType[\"BIN\"] = 5130562] = \"BIN\";\n})(ChunkType || (ChunkType = {}));\n/**\n * *Abstract I/O service.*\n *\n * The most common use of the I/O service is to read/write a {@link Document} with a given path.\n * Methods are also available for converting in-memory representations of raw glTF files, both\n * binary (*Uint8Array*) and JSON ({@link JSONDocument}).\n *\n * For platform-specific implementations, see {@link NodeIO}, {@link WebIO}, and {@link DenoIO}.\n *\n * @category I/O\n */\nclass PlatformIO {\n  constructor() {\n    this._logger = Logger.DEFAULT_INSTANCE;\n    this._extensions = new Set();\n    this._dependencies = {};\n    this._vertexLayout = VertexLayout.INTERLEAVED;\n    /** @hidden */\n    this.lastReadBytes = 0;\n    /** @hidden */\n    this.lastWriteBytes = 0;\n  }\n  /** Sets the {@link Logger} used by this I/O instance. Defaults to Logger.DEFAULT_INSTANCE. */\n  setLogger(logger) {\n    this._logger = logger;\n    return this;\n  }\n  /** Registers extensions, enabling I/O class to read and write glTF assets requiring them. */\n  registerExtensions(extensions) {\n    for (const extension of extensions) {\n      this._extensions.add(extension);\n      extension.register();\n    }\n    return this;\n  }\n  /** Registers dependencies used (e.g. by extensions) in the I/O process. */\n  registerDependencies(dependencies) {\n    Object.assign(this._dependencies, dependencies);\n    return this;\n  }\n  /**\n   * Sets the vertex layout method used by this I/O instance. Defaults to\n   * VertexLayout.INTERLEAVED.\n   */\n  setVertexLayout(layout) {\n    this._vertexLayout = layout;\n    return this;\n  }\n  /**********************************************************************************************\n   * Public Read API.\n   */\n  /** Reads a {@link Document} from the given URI. */\n  async read(uri) {\n    return await this.readJSON(await this.readAsJSON(uri));\n  }\n  /** Loads a URI and returns a {@link JSONDocument} struct, without parsing. */\n  async readAsJSON(uri) {\n    const view = await this.readURI(uri, 'view');\n    this.lastReadBytes = view.byteLength;\n    const jsonDoc = isGLB(view) ? this._binaryToJSON(view) : {\n      json: JSON.parse(BufferUtils.decodeText(view)),\n      resources: {}\n    };\n    // Read external resources first, before Data URIs are replaced.\n    await this._readResourcesExternal(jsonDoc, this.dirname(uri));\n    this._readResourcesInternal(jsonDoc);\n    return jsonDoc;\n  }\n  /** Converts glTF-formatted JSON and a resource map to a {@link Document}. */\n  async readJSON(jsonDoc) {\n    jsonDoc = this._copyJSON(jsonDoc);\n    this._readResourcesInternal(jsonDoc);\n    return GLTFReader.read(jsonDoc, {\n      extensions: Array.from(this._extensions),\n      dependencies: this._dependencies,\n      logger: this._logger\n    });\n  }\n  /** Converts a GLB-formatted Uint8Array to a {@link JSONDocument}. */\n  async binaryToJSON(glb) {\n    const jsonDoc = this._binaryToJSON(BufferUtils.assertView(glb));\n    this._readResourcesInternal(jsonDoc);\n    const json = jsonDoc.json;\n    // Check for external references, which can't be resolved by this method.\n    if (json.buffers && json.buffers.some(bufferDef => isExternalBuffer(jsonDoc, bufferDef))) {\n      throw new Error('Cannot resolve external buffers with binaryToJSON().');\n    } else if (json.images && json.images.some(imageDef => isExternalImage(jsonDoc, imageDef))) {\n      throw new Error('Cannot resolve external images with binaryToJSON().');\n    }\n    return jsonDoc;\n  }\n  /** Converts a GLB-formatted Uint8Array to a {@link Document}. */\n  async readBinary(glb) {\n    return this.readJSON(await this.binaryToJSON(BufferUtils.assertView(glb)));\n  }\n  /**********************************************************************************************\n   * Public Write API.\n   */\n  /** Converts a {@link Document} to glTF-formatted JSON and a resource map. */\n  async writeJSON(doc, _options = {}) {\n    if (_options.format === Format.GLB && doc.getRoot().listBuffers().length > 1) {\n      throw new Error('GLB must have 0–1 buffers.');\n    }\n    return GLTFWriter.write(doc, {\n      format: _options.format || Format.GLTF,\n      basename: _options.basename || '',\n      logger: this._logger,\n      vertexLayout: this._vertexLayout,\n      dependencies: _extends({}, this._dependencies),\n      extensions: Array.from(this._extensions)\n    });\n  }\n  /** Converts a {@link Document} to a GLB-formatted Uint8Array. */\n  async writeBinary(doc) {\n    const {\n      json,\n      resources\n    } = await this.writeJSON(doc, {\n      format: Format.GLB\n    });\n    const header = new Uint32Array([0x46546c67, 2, 12]);\n    const jsonText = JSON.stringify(json);\n    const jsonChunkData = BufferUtils.pad(BufferUtils.encodeText(jsonText), 0x20);\n    const jsonChunkHeader = BufferUtils.toView(new Uint32Array([jsonChunkData.byteLength, 0x4e4f534a]));\n    const jsonChunk = BufferUtils.concat([jsonChunkHeader, jsonChunkData]);\n    header[header.length - 1] += jsonChunk.byteLength;\n    const binBuffer = Object.values(resources)[0];\n    if (!binBuffer || !binBuffer.byteLength) {\n      return BufferUtils.concat([BufferUtils.toView(header), jsonChunk]);\n    }\n    const binChunkData = BufferUtils.pad(binBuffer, 0x00);\n    const binChunkHeader = BufferUtils.toView(new Uint32Array([binChunkData.byteLength, 0x004e4942]));\n    const binChunk = BufferUtils.concat([binChunkHeader, binChunkData]);\n    header[header.length - 1] += binChunk.byteLength;\n    return BufferUtils.concat([BufferUtils.toView(header), jsonChunk, binChunk]);\n  }\n  /**********************************************************************************************\n   * Internal.\n   */\n  async _readResourcesExternal(jsonDoc, base) {\n    var _this = this;\n    const images = jsonDoc.json.images || [];\n    const buffers = jsonDoc.json.buffers || [];\n    const pendingResources = [...images, ...buffers].map(async function (resource) {\n      const uri = resource.uri;\n      if (!uri || uri.match(/data:/)) return Promise.resolve();\n      jsonDoc.resources[uri] = await _this.readURI(_this.resolve(base, uri), 'view');\n      _this.lastReadBytes += jsonDoc.resources[uri].byteLength;\n    });\n    await Promise.all(pendingResources);\n  }\n  _readResourcesInternal(jsonDoc) {\n    // NOTICE: This method may be called more than once during the loading\n    // process (e.g. WebIO.read) and should handle that safely.\n    function resolveResource(resource) {\n      if (!resource.uri) return;\n      if (resource.uri in jsonDoc.resources) {\n        BufferUtils.assertView(jsonDoc.resources[resource.uri]);\n        return;\n      }\n      if (resource.uri.match(/data:/)) {\n        // Rewrite Data URIs to something short and unique.\n        const resourceUUID = `__${uuid()}.${FileUtils.extension(resource.uri)}`;\n        jsonDoc.resources[resourceUUID] = BufferUtils.createBufferFromDataURI(resource.uri);\n        resource.uri = resourceUUID;\n      }\n    }\n    // Unpack images.\n    const images = jsonDoc.json.images || [];\n    images.forEach(image => {\n      if (image.bufferView === undefined && image.uri === undefined) {\n        throw new Error('Missing resource URI or buffer view.');\n      }\n      resolveResource(image);\n    });\n    // Unpack buffers.\n    const buffers = jsonDoc.json.buffers || [];\n    buffers.forEach(resolveResource);\n  }\n  /**\n   * Creates a shallow copy of glTF-formatted {@link JSONDocument}.\n   *\n   * Images, Buffers, and Resources objects are deep copies so that PlatformIO can safely\n   * modify them during the parsing process. Other properties are shallow copies, and buffers\n   * are passed by reference.\n   */\n  _copyJSON(jsonDoc) {\n    const {\n      images,\n      buffers\n    } = jsonDoc.json;\n    jsonDoc = {\n      json: _extends({}, jsonDoc.json),\n      resources: _extends({}, jsonDoc.resources)\n    };\n    if (images) {\n      jsonDoc.json.images = images.map(image => _extends({}, image));\n    }\n    if (buffers) {\n      jsonDoc.json.buffers = buffers.map(buffer => _extends({}, buffer));\n    }\n    return jsonDoc;\n  }\n  /** Internal version of binaryToJSON; does not warn about external resources. */\n  _binaryToJSON(glb) {\n    // Decode and verify GLB header.\n    if (!isGLB(glb)) {\n      throw new Error('Invalid glTF 2.0 binary.');\n    }\n    // Decode JSON chunk.\n    const jsonChunkHeader = new Uint32Array(glb.buffer, glb.byteOffset + 12, 2);\n    if (jsonChunkHeader[1] !== ChunkType.JSON) {\n      throw new Error('Missing required GLB JSON chunk.');\n    }\n    const jsonByteOffset = 20;\n    const jsonByteLength = jsonChunkHeader[0];\n    const jsonText = BufferUtils.decodeText(BufferUtils.toView(glb, jsonByteOffset, jsonByteLength));\n    const json = JSON.parse(jsonText);\n    // Decode BIN chunk.\n    const binByteOffset = jsonByteOffset + jsonByteLength;\n    if (glb.byteLength <= binByteOffset) {\n      return {\n        json,\n        resources: {}\n      };\n    }\n    const binChunkHeader = new Uint32Array(glb.buffer, glb.byteOffset + binByteOffset, 2);\n    if (binChunkHeader[1] !== ChunkType.BIN) {\n      // Allow GLB files without BIN chunk, but with unknown chunk\n      // Spec: https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#chunks-overview\n      return {\n        json,\n        resources: {}\n      };\n    }\n    const binByteLength = binChunkHeader[0];\n    const binBuffer = BufferUtils.toView(glb, binByteOffset + 8, binByteLength);\n    return {\n      json,\n      resources: {\n        [GLB_BUFFER]: binBuffer\n      }\n    };\n  }\n}\nfunction isExternalBuffer(jsonDocument, bufferDef) {\n  return bufferDef.uri !== undefined && !(bufferDef.uri in jsonDocument.resources);\n}\nfunction isExternalImage(jsonDocument, imageDef) {\n  return imageDef.uri !== undefined && !(imageDef.uri in jsonDocument.resources) && imageDef.bufferView === undefined;\n}\nfunction isGLB(view) {\n  if (view.byteLength < 3 * Uint32Array.BYTES_PER_ELEMENT) return false;\n  const header = new Uint32Array(view.buffer, view.byteOffset, 3);\n  return header[0] === 0x46546c67 && header[1] === 2;\n}\n\n/**\n * *I/O service for [Deno](https://deno.land/).*\n *\n * The most common use of the I/O service is to read/write a {@link Document} with a given path.\n * Methods are also available for converting in-memory representations of raw glTF files, both\n * binary (*Uint8Array*) and JSON ({@link JSONDocument}).\n *\n * _*NOTICE:* Support for the Deno environment is currently experimental. See\n * [glTF-Transform#457](https://github.com/donmccurdy/glTF-Transform/issues/457)._\n *\n * Usage:\n *\n * ```typescript\n * import { DenoIO } from 'https://esm.sh/@gltf-transform/core';\n * import * as path from 'https://deno.land/std/path/mod.ts';\n *\n * const io = new DenoIO(path);\n *\n * // Read.\n * let document;\n * document = io.read('model.glb');  // → Document\n * document = io.readBinary(glb);    // Uint8Array → Document\n *\n * // Write.\n * const glb = io.writeBinary(document);  // Document → Uint8Array\n * ```\n *\n * @category I/O\n */\nclass DenoIO extends PlatformIO {\n  constructor(path) {\n    super();\n    this._path = void 0;\n    this._path = path;\n  }\n  async readURI(uri, type) {\n    switch (type) {\n      case 'view':\n        return Deno.readFile(uri);\n      case 'text':\n        return Deno.readTextFile(uri);\n    }\n  }\n  resolve(base, path) {\n    // https://github.com/KhronosGroup/glTF/issues/1449\n    // https://stackoverflow.com/a/27278490/1314762\n    return this._path.resolve(base, decodeURIComponent(path));\n  }\n  dirname(uri) {\n    return this._path.dirname(uri);\n  }\n}\n\n/**\n * *I/O service for Node.js.*\n *\n * The most common use of the I/O service is to read/write a {@link Document} with a given path.\n * Methods are also available for converting in-memory representations of raw glTF files, both\n * binary (*Uint8Array*) and JSON ({@link JSONDocument}).\n *\n * Usage:\n *\n * ```typescript\n * import { NodeIO } from '@gltf-transform/core';\n *\n * const io = new NodeIO();\n *\n * // Read.\n * let document;\n * document = await io.read('model.glb'); // → Document\n * document = await io.readBinary(glb);   // Uint8Array → Document\n *\n * // Write.\n * await io.write('model.glb', document);      // → void\n * const glb = await io.writeBinary(document); // Document → Uint8Array\n * ```\n *\n * By default, NodeIO can only read/write paths on disk. To enable network requests, provide a Fetch\n * API implementation (global [`fetch()`](https://nodejs.org/api/globals.html#fetch) is stable in\n * Node.js v21+, or [`node-fetch`](https://www.npmjs.com/package/node-fetch) may be installed) and enable\n * {@link NodeIO.setAllowNetwork setAllowNetwork}. Network requests may optionally be configured with\n * [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/fetch#parameters) parameters.\n *\n * ```typescript\n * const io = new NodeIO(fetch, {headers: {...}}).setAllowNetwork(true);\n *\n * const document = await io.read('https://example.com/path/to/model.glb');\n * ```\n *\n * @category I/O\n */\nclass NodeIO extends PlatformIO {\n  /**\n   * Constructs a new NodeIO service. Instances are reusable. By default, only NodeIO can only\n   * read/write paths on disk. To enable HTTP requests, provide a Fetch API implementation and\n   * enable {@link NodeIO.setAllowNetwork setAllowNetwork}.\n   *\n   * @param fetch Implementation of Fetch API.\n   * @param fetchConfig Configuration object for Fetch API.\n   */\n  constructor(_fetch = null, _fetchConfig = HTTPUtils.DEFAULT_INIT) {\n    super();\n    this._fetch = void 0;\n    this._fetchConfig = void 0;\n    this._init = void 0;\n    this._fetchEnabled = false;\n    this._fetch = _fetch;\n    this._fetchConfig = _fetchConfig;\n    this._init = this.init();\n  }\n  async init() {\n    if (this._init) return this._init;\n    return Promise.all([import('fs'), import('path')]).then(([fs, path]) => {\n      this._fs = fs.promises;\n      this._path = path;\n    });\n  }\n  setAllowNetwork(allow) {\n    if (allow && !this._fetch) {\n      throw new Error('NodeIO requires a Fetch API implementation for HTTP requests.');\n    }\n    this._fetchEnabled = allow;\n    return this;\n  }\n  async readURI(uri, type) {\n    await this.init();\n    if (HTTPUtils.isAbsoluteURL(uri)) {\n      if (!this._fetchEnabled || !this._fetch) {\n        throw new Error('Network request blocked. Allow HTTP requests explicitly, if needed.');\n      }\n      const response = await this._fetch(uri, this._fetchConfig);\n      switch (type) {\n        case 'view':\n          return new Uint8Array(await response.arrayBuffer());\n        case 'text':\n          return response.text();\n      }\n    } else {\n      switch (type) {\n        case 'view':\n          return this._fs.readFile(uri);\n        case 'text':\n          return this._fs.readFile(uri, 'utf8');\n      }\n    }\n  }\n  resolve(base, path) {\n    if (HTTPUtils.isAbsoluteURL(base) || HTTPUtils.isAbsoluteURL(path)) {\n      return HTTPUtils.resolve(base, path);\n    }\n    // https://github.com/KhronosGroup/glTF/issues/1449\n    // https://stackoverflow.com/a/27278490/1314762\n    return this._path.resolve(base, decodeURIComponent(path));\n  }\n  dirname(uri) {\n    if (HTTPUtils.isAbsoluteURL(uri)) {\n      return HTTPUtils.dirname(uri);\n    }\n    return this._path.dirname(uri);\n  }\n  /**********************************************************************************************\n   * Public.\n   */\n  /** Writes a {@link Document} instance to a local path. */\n  async write(uri, doc) {\n    await this.init();\n    const isGLB = !!uri.match(/\\.glb$/);\n    await (isGLB ? this._writeGLB(uri, doc) : this._writeGLTF(uri, doc));\n  }\n  /**********************************************************************************************\n   * Private.\n   */\n  /** @internal */\n  async _writeGLTF(uri, doc) {\n    var _this = this;\n    this.lastWriteBytes = 0;\n    const {\n      json,\n      resources\n    } = await this.writeJSON(doc, {\n      format: Format.GLTF,\n      basename: FileUtils.basename(uri)\n    });\n    const {\n      _fs: fs,\n      _path: path\n    } = this;\n    const dir = path.dirname(uri);\n    // write json\n    const jsonContent = JSON.stringify(json, null, 2);\n    await fs.writeFile(uri, jsonContent);\n    this.lastWriteBytes += jsonContent.length;\n    // write resources\n    for (const batch of listBatches(Object.keys(resources), 10)) {\n      await Promise.all(batch.map(async function (resourceURI) {\n        if (HTTPUtils.isAbsoluteURL(resourceURI)) {\n          if (HTTPUtils.extension(resourceURI) === 'bin') {\n            throw new Error(`Cannot write buffer to path \"${resourceURI}\".`);\n          }\n          return;\n        }\n        const resourcePath = path.join(dir, decodeURIComponent(resourceURI));\n        await fs.mkdir(path.dirname(resourcePath), {\n          recursive: true\n        });\n        await fs.writeFile(resourcePath, resources[resourceURI]);\n        _this.lastWriteBytes += resources[resourceURI].byteLength;\n      }));\n    }\n  }\n  /** @internal */\n  async _writeGLB(uri, doc) {\n    const buffer = await this.writeBinary(doc);\n    await this._fs.writeFile(uri, buffer);\n    this.lastWriteBytes = buffer.byteLength;\n  }\n}\n/** Divides a flat input array into batches of size `batchSize`. */\nfunction listBatches(array, batchSize) {\n  const batches = [];\n  for (let i = 0, il = array.length; i < il; i += batchSize) {\n    const batch = [];\n    for (let j = 0; j < batchSize && i + j < il; j++) {\n      batch.push(array[i + j]);\n    }\n    batches.push(batch);\n  }\n  return batches;\n}\n\n/**\n * *I/O service for Web.*\n *\n * The most common use of the I/O service is to read/write a {@link Document} with a given path.\n * Methods are also available for converting in-memory representations of raw glTF files, both\n * binary (*Uint8Array*) and JSON ({@link JSONDocument}).\n *\n * Usage:\n *\n * ```typescript\n * import { WebIO } from '@gltf-transform/core';\n *\n * const io = new WebIO({credentials: 'include'});\n *\n * // Read.\n * let document;\n * document = await io.read('model.glb');  // → Document\n * document = await io.readBinary(glb);    // Uint8Array → Document\n *\n * // Write.\n * const glb = await io.writeBinary(document); // Document → Uint8Array\n * ```\n *\n * @category I/O\n */\nclass WebIO extends PlatformIO {\n  /**\n   * Constructs a new WebIO service. Instances are reusable.\n   * @param fetchConfig Configuration object for Fetch API.\n   */\n  constructor(fetchConfig = HTTPUtils.DEFAULT_INIT) {\n    super();\n    this._fetchConfig = void 0;\n    this._fetchConfig = fetchConfig;\n  }\n  async readURI(uri, type) {\n    const response = await fetch(uri, this._fetchConfig);\n    switch (type) {\n      case 'view':\n        return new Uint8Array(await response.arrayBuffer());\n      case 'text':\n        return response.text();\n    }\n  }\n  resolve(base, path) {\n    return HTTPUtils.resolve(base, path);\n  }\n  dirname(uri) {\n    return HTTPUtils.dirname(uri);\n  }\n}\n\nexport { Accessor, Animation, AnimationChannel, AnimationSampler, Buffer$1 as Buffer, BufferUtils, COPY_IDENTITY, Camera, ColorUtils, ComponentTypeToTypedArray, DenoIO, Document, ExtensibleProperty, Extension, ExtensionProperty, FileUtils, Format, GLB_BUFFER, HTTPUtils, ImageUtils, Logger, Material, MathUtils, Mesh, Node, NodeIO, PlatformIO, Primitive, PrimitiveTarget, Property, PropertyType, ReaderContext, Root, Scene, Skin, Texture, TextureChannel, TextureInfo, VERSION, Verbosity, VertexLayout, WebIO, WriterContext, getBounds, uuid };\n//# sourceMappingURL=index.modern.js.map\n","///////////////////////////////////////////////////\n// KTX2 Header.\n///////////////////////////////////////////////////\nconst KHR_SUPERCOMPRESSION_NONE = 0;\nconst KHR_SUPERCOMPRESSION_BASISLZ = 1;\nconst KHR_SUPERCOMPRESSION_ZSTD = 2;\nconst KHR_SUPERCOMPRESSION_ZLIB = 3;\n///////////////////////////////////////////////////\n// Data Format Descriptor (DFD).\n///////////////////////////////////////////////////\nconst KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT = 0;\nconst KHR_DF_VENDORID_KHRONOS = 0;\nconst KHR_DF_VERSION = 2;\nconst KHR_DF_MODEL_UNSPECIFIED = 0;\nconst KHR_DF_MODEL_RGBSDA = 1;\n// ...\nconst KHR_DF_MODEL_ETC1 = 160;\nconst KHR_DF_MODEL_ETC2 = 161;\nconst KHR_DF_MODEL_ASTC = 162;\nconst KHR_DF_MODEL_ETC1S = 163;\nconst KHR_DF_MODEL_UASTC = 166;\nconst KHR_DF_FLAG_ALPHA_STRAIGHT = 0;\nconst KHR_DF_FLAG_ALPHA_PREMULTIPLIED = 1;\nconst KHR_DF_TRANSFER_UNSPECIFIED = 0;\nconst KHR_DF_TRANSFER_LINEAR = 1;\nconst KHR_DF_TRANSFER_SRGB = 2;\nconst KHR_DF_TRANSFER_ITU = 3;\nconst KHR_DF_TRANSFER_NTSC = 4;\nconst KHR_DF_TRANSFER_SLOG = 5;\nconst KHR_DF_TRANSFER_SLOG2 = 6;\nconst KHR_DF_TRANSFER_BT1886 = 7;\nconst KHR_DF_TRANSFER_HLG_OETF = 8;\nconst KHR_DF_TRANSFER_HLG_EOTF = 9;\nconst KHR_DF_TRANSFER_PQ_EOTF = 10;\nconst KHR_DF_TRANSFER_PQ_OETF = 11;\nconst KHR_DF_TRANSFER_DCIP3 = 12;\nconst KHR_DF_TRANSFER_PAL_OETF = 13;\nconst KHR_DF_TRANSFER_PAL625_EOTF = 14;\nconst KHR_DF_TRANSFER_ST240 = 15;\nconst KHR_DF_TRANSFER_ACESCC = 16;\nconst KHR_DF_TRANSFER_ACESCCT = 17;\nconst KHR_DF_TRANSFER_ADOBERGB = 18;\nconst KHR_DF_PRIMARIES_UNSPECIFIED = 0;\nconst KHR_DF_PRIMARIES_BT709 = 1;\nconst KHR_DF_PRIMARIES_BT601_EBU = 2;\nconst KHR_DF_PRIMARIES_BT601_SMPTE = 3;\nconst KHR_DF_PRIMARIES_BT2020 = 4;\nconst KHR_DF_PRIMARIES_CIEXYZ = 5;\nconst KHR_DF_PRIMARIES_ACES = 6;\nconst KHR_DF_PRIMARIES_ACESCC = 7;\nconst KHR_DF_PRIMARIES_NTSC1953 = 8;\nconst KHR_DF_PRIMARIES_PAL525 = 9;\nconst KHR_DF_PRIMARIES_DISPLAYP3 = 10;\nconst KHR_DF_PRIMARIES_ADOBERGB = 11;\nconst KHR_DF_CHANNEL_RGBSDA_RED = 0;\nconst KHR_DF_CHANNEL_RGBSDA_GREEN = 1;\nconst KHR_DF_CHANNEL_RGBSDA_BLUE = 2;\nconst KHR_DF_CHANNEL_RGBSDA_STENCIL = 13;\nconst KHR_DF_CHANNEL_RGBSDA_DEPTH = 14;\nconst KHR_DF_CHANNEL_RGBSDA_ALPHA = 15;\nconst KHR_DF_SAMPLE_DATATYPE_FLOAT = 0x80;\nconst KHR_DF_SAMPLE_DATATYPE_SIGNED = 0x40;\nconst KHR_DF_SAMPLE_DATATYPE_EXPONENT = 0x20;\nconst KHR_DF_SAMPLE_DATATYPE_LINEAR = 0x10;\n///////////////////////////////////////////////////\n// VK FORMAT.\n///////////////////////////////////////////////////\nconst VK_FORMAT_UNDEFINED = 0;\nconst VK_FORMAT_R4G4_UNORM_PACK8 = 1;\nconst VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2;\nconst VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3;\nconst VK_FORMAT_R5G6B5_UNORM_PACK16 = 4;\nconst VK_FORMAT_B5G6R5_UNORM_PACK16 = 5;\nconst VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6;\nconst VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7;\nconst VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8;\nconst VK_FORMAT_R8_UNORM = 9;\nconst VK_FORMAT_R8_SNORM = 10;\nconst VK_FORMAT_R8_UINT = 13;\nconst VK_FORMAT_R8_SINT = 14;\nconst VK_FORMAT_R8_SRGB = 15;\nconst VK_FORMAT_R8G8_UNORM = 16;\nconst VK_FORMAT_R8G8_SNORM = 17;\nconst VK_FORMAT_R8G8_UINT = 20;\nconst VK_FORMAT_R8G8_SINT = 21;\nconst VK_FORMAT_R8G8_SRGB = 22;\nconst VK_FORMAT_R8G8B8_UNORM = 23;\nconst VK_FORMAT_R8G8B8_SNORM = 24;\nconst VK_FORMAT_R8G8B8_UINT = 27;\nconst VK_FORMAT_R8G8B8_SINT = 28;\nconst VK_FORMAT_R8G8B8_SRGB = 29;\nconst VK_FORMAT_B8G8R8_UNORM = 30;\nconst VK_FORMAT_B8G8R8_SNORM = 31;\nconst VK_FORMAT_B8G8R8_UINT = 34;\nconst VK_FORMAT_B8G8R8_SINT = 35;\nconst VK_FORMAT_B8G8R8_SRGB = 36;\nconst VK_FORMAT_R8G8B8A8_UNORM = 37;\nconst VK_FORMAT_R8G8B8A8_SNORM = 38;\nconst VK_FORMAT_R8G8B8A8_UINT = 41;\nconst VK_FORMAT_R8G8B8A8_SINT = 42;\nconst VK_FORMAT_R8G8B8A8_SRGB = 43;\nconst VK_FORMAT_B8G8R8A8_UNORM = 44;\nconst VK_FORMAT_B8G8R8A8_SNORM = 45;\nconst VK_FORMAT_B8G8R8A8_UINT = 48;\nconst VK_FORMAT_B8G8R8A8_SINT = 49;\nconst VK_FORMAT_B8G8R8A8_SRGB = 50;\nconst VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58;\nconst VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59;\nconst VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62;\nconst VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63;\nconst VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64;\nconst VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65;\nconst VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68;\nconst VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69;\nconst VK_FORMAT_R16_UNORM = 70;\nconst VK_FORMAT_R16_SNORM = 71;\nconst VK_FORMAT_R16_UINT = 74;\nconst VK_FORMAT_R16_SINT = 75;\nconst VK_FORMAT_R16_SFLOAT = 76;\nconst VK_FORMAT_R16G16_UNORM = 77;\nconst VK_FORMAT_R16G16_SNORM = 78;\nconst VK_FORMAT_R16G16_UINT = 81;\nconst VK_FORMAT_R16G16_SINT = 82;\nconst VK_FORMAT_R16G16_SFLOAT = 83;\nconst VK_FORMAT_R16G16B16_UNORM = 84;\nconst VK_FORMAT_R16G16B16_SNORM = 85;\nconst VK_FORMAT_R16G16B16_UINT = 88;\nconst VK_FORMAT_R16G16B16_SINT = 89;\nconst VK_FORMAT_R16G16B16_SFLOAT = 90;\nconst VK_FORMAT_R16G16B16A16_UNORM = 91;\nconst VK_FORMAT_R16G16B16A16_SNORM = 92;\nconst VK_FORMAT_R16G16B16A16_UINT = 95;\nconst VK_FORMAT_R16G16B16A16_SINT = 96;\nconst VK_FORMAT_R16G16B16A16_SFLOAT = 97;\nconst VK_FORMAT_R32_UINT = 98;\nconst VK_FORMAT_R32_SINT = 99;\nconst VK_FORMAT_R32_SFLOAT = 100;\nconst VK_FORMAT_R32G32_UINT = 101;\nconst VK_FORMAT_R32G32_SINT = 102;\nconst VK_FORMAT_R32G32_SFLOAT = 103;\nconst VK_FORMAT_R32G32B32_UINT = 104;\nconst VK_FORMAT_R32G32B32_SINT = 105;\nconst VK_FORMAT_R32G32B32_SFLOAT = 106;\nconst VK_FORMAT_R32G32B32A32_UINT = 107;\nconst VK_FORMAT_R32G32B32A32_SINT = 108;\nconst VK_FORMAT_R32G32B32A32_SFLOAT = 109;\nconst VK_FORMAT_R64_UINT = 110;\nconst VK_FORMAT_R64_SINT = 111;\nconst VK_FORMAT_R64_SFLOAT = 112;\nconst VK_FORMAT_R64G64_UINT = 113;\nconst VK_FORMAT_R64G64_SINT = 114;\nconst VK_FORMAT_R64G64_SFLOAT = 115;\nconst VK_FORMAT_R64G64B64_UINT = 116;\nconst VK_FORMAT_R64G64B64_SINT = 117;\nconst VK_FORMAT_R64G64B64_SFLOAT = 118;\nconst VK_FORMAT_R64G64B64A64_UINT = 119;\nconst VK_FORMAT_R64G64B64A64_SINT = 120;\nconst VK_FORMAT_R64G64B64A64_SFLOAT = 121;\nconst VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122;\nconst VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123;\nconst VK_FORMAT_D16_UNORM = 124;\nconst VK_FORMAT_X8_D24_UNORM_PACK32 = 125;\nconst VK_FORMAT_D32_SFLOAT = 126;\nconst VK_FORMAT_S8_UINT = 127;\nconst VK_FORMAT_D16_UNORM_S8_UINT = 128;\nconst VK_FORMAT_D24_UNORM_S8_UINT = 129;\nconst VK_FORMAT_D32_SFLOAT_S8_UINT = 130;\nconst VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131;\nconst VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132;\nconst VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133;\nconst VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134;\nconst VK_FORMAT_BC2_UNORM_BLOCK = 135;\nconst VK_FORMAT_BC2_SRGB_BLOCK = 136;\nconst VK_FORMAT_BC3_UNORM_BLOCK = 137;\nconst VK_FORMAT_BC3_SRGB_BLOCK = 138;\nconst VK_FORMAT_BC4_UNORM_BLOCK = 139;\nconst VK_FORMAT_BC4_SNORM_BLOCK = 140;\nconst VK_FORMAT_BC5_UNORM_BLOCK = 141;\nconst VK_FORMAT_BC5_SNORM_BLOCK = 142;\nconst VK_FORMAT_BC6H_UFLOAT_BLOCK = 143;\nconst VK_FORMAT_BC6H_SFLOAT_BLOCK = 144;\nconst VK_FORMAT_BC7_UNORM_BLOCK = 145;\nconst VK_FORMAT_BC7_SRGB_BLOCK = 146;\nconst VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147;\nconst VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148;\nconst VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149;\nconst VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150;\nconst VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151;\nconst VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152;\nconst VK_FORMAT_EAC_R11_UNORM_BLOCK = 153;\nconst VK_FORMAT_EAC_R11_SNORM_BLOCK = 154;\nconst VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155;\nconst VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156;\nconst VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157;\nconst VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158;\nconst VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159;\nconst VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160;\nconst VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161;\nconst VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162;\nconst VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163;\nconst VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164;\nconst VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165;\nconst VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166;\nconst VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167;\nconst VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168;\nconst VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169;\nconst VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170;\nconst VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171;\nconst VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172;\nconst VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173;\nconst VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174;\nconst VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175;\nconst VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176;\nconst VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177;\nconst VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178;\nconst VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179;\nconst VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180;\nconst VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181;\nconst VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182;\nconst VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183;\nconst VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184;\nconst VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007;\nconst VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008;\nconst VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009;\nconst VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010;\nconst VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011;\nconst VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017;\nconst VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018;\nconst VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019;\nconst VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020;\nconst VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021;\nconst VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000;\nconst VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001;\nconst VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002;\nconst VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003;\nconst VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004;\nconst VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005;\nconst VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006;\nconst VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007;\nconst VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = 1000066000;\nconst VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = 1000066001;\nconst VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = 1000066002;\nconst VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = 1000066003;\nconst VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = 1000066004;\nconst VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = 1000066005;\nconst VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = 1000066006;\nconst VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = 1000066007;\nconst VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = 1000066008;\nconst VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = 1000066009;\nconst VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = 1000066010;\nconst VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = 1000066011;\nconst VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = 1000066012;\nconst VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = 1000066013;\nconst VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = 1000340000;\nconst VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = 1000340001;\n\n/**\n * Creates a 'default' {@link KTX2Container} object, initialized with common\n * configuration wfor BT709 primaries and sRGB transfer, without pixel data.\n * There's nothing particularly special about the 'default' container; creating\n * the KTX2Container object explicitly is also fine.\n */\nfunction createDefaultContainer() {\n  return {\n    vkFormat: VK_FORMAT_UNDEFINED,\n    typeSize: 1,\n    pixelWidth: 0,\n    pixelHeight: 0,\n    pixelDepth: 0,\n    layerCount: 0,\n    faceCount: 1,\n    levelCount: 0,\n    supercompressionScheme: KHR_SUPERCOMPRESSION_NONE,\n    levels: [],\n    dataFormatDescriptor: [{\n      vendorId: KHR_DF_VENDORID_KHRONOS,\n      descriptorType: KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT,\n      versionNumber: KHR_DF_VERSION,\n      colorModel: KHR_DF_MODEL_UNSPECIFIED,\n      colorPrimaries: KHR_DF_PRIMARIES_BT709,\n      transferFunction: KHR_DF_TRANSFER_SRGB,\n      flags: KHR_DF_FLAG_ALPHA_STRAIGHT,\n      texelBlockDimension: [0, 0, 0, 0],\n      bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0],\n      samples: []\n    }],\n    keyValue: {},\n    globalData: null\n  };\n}\n\nclass BufferReader {\n  constructor(data, byteOffset, byteLength, littleEndian) {\n    this._dataView = void 0;\n    this._littleEndian = void 0;\n    this._offset = void 0;\n    this._dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength);\n    this._littleEndian = littleEndian;\n    this._offset = 0;\n  }\n  _nextUint8() {\n    const value = this._dataView.getUint8(this._offset);\n    this._offset += 1;\n    return value;\n  }\n  _nextUint16() {\n    const value = this._dataView.getUint16(this._offset, this._littleEndian);\n    this._offset += 2;\n    return value;\n  }\n  _nextUint32() {\n    const value = this._dataView.getUint32(this._offset, this._littleEndian);\n    this._offset += 4;\n    return value;\n  }\n  _nextUint64() {\n    const left = this._dataView.getUint32(this._offset, this._littleEndian);\n    const right = this._dataView.getUint32(this._offset + 4, this._littleEndian);\n    // TODO(cleanup): Just test this...\n    // const value = this._littleEndian ? left + (2 ** 32 * right) : (2 ** 32 * left) + right;\n    const value = left + 2 ** 32 * right;\n    this._offset += 8;\n    return value;\n  }\n  _nextInt32() {\n    const value = this._dataView.getInt32(this._offset, this._littleEndian);\n    this._offset += 4;\n    return value;\n  }\n  _nextUint8Array(len) {\n    const value = new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + this._offset, len);\n    this._offset += len;\n    return value;\n  }\n  _skip(bytes) {\n    this._offset += bytes;\n    return this;\n  }\n  _scan(maxByteLength, term = 0x00) {\n    const byteOffset = this._offset;\n    let byteLength = 0;\n    while (this._dataView.getUint8(this._offset) !== term && byteLength < maxByteLength) {\n      byteLength++;\n      this._offset++;\n    }\n    if (byteLength < maxByteLength) this._offset++;\n    return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength);\n  }\n}\n\n///////////////////////////////////////////////////\n// Common.\n///////////////////////////////////////////////////\nconst KTX_WRITER = `KTX-Parse v${\"1.1.0\"}`;\nconst NUL = new Uint8Array([0x00]);\n///////////////////////////////////////////////////\n// KTX2 Header.\n///////////////////////////////////////////////////\nconst KTX2_ID = [\n// '´', 'K', 'T', 'X', '2', '0', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a];\nconst HEADER_BYTE_LENGTH = 68; // 13 * 4 + 2 * 8\n\n/** Encodes text to an ArrayBuffer. */\nfunction encodeText(text) {\n  return new TextEncoder().encode(text);\n}\n/** Decodes an ArrayBuffer to text. */\nfunction decodeText(buffer) {\n  return new TextDecoder().decode(buffer);\n}\n/** Concatenates N ArrayBuffers. */\nfunction concat(buffers) {\n  let totalByteLength = 0;\n  for (const buffer of buffers) {\n    totalByteLength += buffer.byteLength;\n  }\n  const result = new Uint8Array(totalByteLength);\n  let byteOffset = 0;\n  for (const buffer of buffers) {\n    result.set(new Uint8Array(buffer), byteOffset);\n    byteOffset += buffer.byteLength;\n  }\n  return result;\n}\n/** Returns the least common multiple (LCM) for two positive integers. */\nfunction leastCommonMultiple(a, b) {\n  const max = Math.max(a, b);\n  const min = Math.min(a, b);\n  let lcm = max;\n  while (lcm % min !== 0) {\n    lcm += max;\n  }\n  return lcm;\n}\n/**\n * Returns amount of padding, in bytes, required to pad a value V to N-byte\n * boundaries. Both V and N must be positive integers.\n */\nfunction getPadding(v, n = 4) {\n  return Math.ceil(v / n) * n - v;\n}\n/** Returns byte length per texel block. */\nfunction getBlockByteLength(container) {\n  return container.levels[0].levelData.byteLength / getBlockCount(container, 0);\n}\n/**\n * Returns total number of blocks for given level. For VK_FORMAT_UNDEFINED, DFD is required.\n *\n * References:\n * - https://github.khronos.org/KTX-Specification/ktxspec.v2.html#levelImages\n */\nfunction getBlockCount(container, levelIndex) {\n  let blockCount = 1;\n  const pixelDimensions = [container.pixelWidth, container.pixelHeight, container.pixelDepth];\n  const blockDimensions = getBlockDimensions(container);\n  for (let i = 0; i < 3; i++) {\n    if (pixelDimensions[i] > 0) {\n      const dimBlockCount = Math.ceil(Math.floor(pixelDimensions[i] * 2 ** -levelIndex) / blockDimensions[i]);\n      blockCount *= Math.max(1, dimBlockCount);\n    }\n  }\n  if (container.layerCount > 0) {\n    blockCount *= container.layerCount;\n  }\n  if (container.faceCount > 0) {\n    blockCount *= container.faceCount;\n  }\n  return blockCount;\n}\n/**\n * Given a KTX2 container, returns block dimensions as [width, height, depth]. Requires valid DFD.\n */\nfunction getBlockDimensions(container) {\n  const [x, y, z] = container.dataFormatDescriptor[0].texelBlockDimension;\n  return [x + 1, y + 1, z + 1];\n}\n\n/**\n * Parses a KTX 2.0 file, returning an unpacked {@link KTX2Container} instance with all associated\n * data. The container's mip levels and other binary data are pointers into the original file, not\n * copies, so the original file should not be overwritten after reading.\n *\n * @param data Bytes of KTX 2.0 file, as Uint8Array or Buffer.\n */\nfunction read(data) {\n  ///////////////////////////////////////////////////\n  // KTX 2.0 Identifier.\n  ///////////////////////////////////////////////////\n  const id = new Uint8Array(data.buffer, data.byteOffset, KTX2_ID.length);\n  if (id[0] !== KTX2_ID[0] ||\n  // '´'\n  id[1] !== KTX2_ID[1] ||\n  // 'K'\n  id[2] !== KTX2_ID[2] ||\n  // 'T'\n  id[3] !== KTX2_ID[3] ||\n  // 'X'\n  id[4] !== KTX2_ID[4] ||\n  // ' '\n  id[5] !== KTX2_ID[5] ||\n  // '2'\n  id[6] !== KTX2_ID[6] ||\n  // '0'\n  id[7] !== KTX2_ID[7] ||\n  // 'ª'\n  id[8] !== KTX2_ID[8] ||\n  // '\\r'\n  id[9] !== KTX2_ID[9] ||\n  // '\\n'\n  id[10] !== KTX2_ID[10] ||\n  // '\\x1A'\n  id[11] !== KTX2_ID[11] // '\\n'\n  ) {\n    throw new Error('Missing KTX 2.0 identifier.');\n  }\n  const container = createDefaultContainer();\n  ///////////////////////////////////////////////////\n  // Header.\n  ///////////////////////////////////////////////////\n  const headerByteLength = 17 * Uint32Array.BYTES_PER_ELEMENT;\n  const headerReader = new BufferReader(data, KTX2_ID.length, headerByteLength, true);\n  container.vkFormat = headerReader._nextUint32();\n  container.typeSize = headerReader._nextUint32();\n  container.pixelWidth = headerReader._nextUint32();\n  container.pixelHeight = headerReader._nextUint32();\n  container.pixelDepth = headerReader._nextUint32();\n  container.layerCount = headerReader._nextUint32();\n  container.faceCount = headerReader._nextUint32();\n  container.levelCount = headerReader._nextUint32();\n  container.supercompressionScheme = headerReader._nextUint32();\n  const dfdByteOffset = headerReader._nextUint32();\n  const dfdByteLength = headerReader._nextUint32();\n  const kvdByteOffset = headerReader._nextUint32();\n  const kvdByteLength = headerReader._nextUint32();\n  const sgdByteOffset = headerReader._nextUint64();\n  const sgdByteLength = headerReader._nextUint64();\n  ///////////////////////////////////////////////////\n  // Level Index.\n  ///////////////////////////////////////////////////\n  const levelByteLength = Math.max(container.levelCount, 1) * 3 * 8;\n  const levelReader = new BufferReader(data, KTX2_ID.length + headerByteLength, levelByteLength, true);\n  for (let i = 0, il = Math.max(container.levelCount, 1); i < il; i++) {\n    container.levels.push({\n      levelData: new Uint8Array(data.buffer, data.byteOffset + levelReader._nextUint64(), levelReader._nextUint64()),\n      uncompressedByteLength: levelReader._nextUint64()\n    });\n  }\n  ///////////////////////////////////////////////////\n  // Data Format Descriptor (DFD).\n  ///////////////////////////////////////////////////\n  const dfdReader = new BufferReader(data, dfdByteOffset, dfdByteLength, true);\n  dfdReader._skip(4); // totalSize\n  const vendorId = dfdReader._nextUint16();\n  const descriptorType = dfdReader._nextUint16();\n  const versionNumber = dfdReader._nextUint16();\n  const descriptorBlockSize = dfdReader._nextUint16();\n  const colorModel = dfdReader._nextUint8();\n  const colorPrimaries = dfdReader._nextUint8();\n  const transferFunction = dfdReader._nextUint8();\n  const flags = dfdReader._nextUint8();\n  const texelBlockDimension = [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()];\n  const bytesPlane = [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()];\n  const samples = [];\n  const dfd = {\n    vendorId,\n    descriptorType,\n    versionNumber,\n    colorModel,\n    colorPrimaries,\n    transferFunction,\n    flags,\n    texelBlockDimension,\n    bytesPlane,\n    samples\n  };\n  const sampleStart = 6;\n  const sampleWords = 4;\n  const numSamples = (descriptorBlockSize / 4 - sampleStart) / sampleWords;\n  for (let i = 0; i < numSamples; i++) {\n    const sample = {\n      bitOffset: dfdReader._nextUint16(),\n      bitLength: dfdReader._nextUint8(),\n      channelType: dfdReader._nextUint8(),\n      samplePosition: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()],\n      sampleLower: Number.NEGATIVE_INFINITY,\n      sampleUpper: Number.POSITIVE_INFINITY\n    };\n    if (sample.channelType & KHR_DF_SAMPLE_DATATYPE_SIGNED) {\n      sample.sampleLower = dfdReader._nextInt32();\n      sample.sampleUpper = dfdReader._nextInt32();\n    } else {\n      sample.sampleLower = dfdReader._nextUint32();\n      sample.sampleUpper = dfdReader._nextUint32();\n    }\n    dfd.samples[i] = sample;\n  }\n  container.dataFormatDescriptor.length = 0;\n  container.dataFormatDescriptor.push(dfd);\n  ///////////////////////////////////////////////////\n  // Key/Value Data (KVD).\n  ///////////////////////////////////////////////////\n  const kvdReader = new BufferReader(data, kvdByteOffset, kvdByteLength, true);\n  while (kvdReader._offset < kvdByteLength) {\n    const keyValueByteLength = kvdReader._nextUint32();\n    const keyData = kvdReader._scan(keyValueByteLength);\n    const key = decodeText(keyData);\n    container.keyValue[key] = kvdReader._nextUint8Array(keyValueByteLength - keyData.byteLength - 1);\n    if (key.match(/^ktx/i)) {\n      const text = decodeText(container.keyValue[key]);\n      container.keyValue[key] = text.substring(0, text.lastIndexOf('\\x00'));\n    }\n    const kvPadding = keyValueByteLength % 4 ? 4 - keyValueByteLength % 4 : 0; // align(4)\n    // 4-byte alignment.\n    kvdReader._skip(kvPadding);\n  }\n  ///////////////////////////////////////////////////\n  // Supercompression Global Data (SGD).\n  ///////////////////////////////////////////////////\n  if (sgdByteLength <= 0) return container;\n  const sgdReader = new BufferReader(data, sgdByteOffset, sgdByteLength, true);\n  const endpointCount = sgdReader._nextUint16();\n  const selectorCount = sgdReader._nextUint16();\n  const endpointsByteLength = sgdReader._nextUint32();\n  const selectorsByteLength = sgdReader._nextUint32();\n  const tablesByteLength = sgdReader._nextUint32();\n  const extendedByteLength = sgdReader._nextUint32();\n  const imageDescs = [];\n  for (let i = 0, il = Math.max(container.levelCount, 1); i < il; i++) {\n    imageDescs.push({\n      imageFlags: sgdReader._nextUint32(),\n      rgbSliceByteOffset: sgdReader._nextUint32(),\n      rgbSliceByteLength: sgdReader._nextUint32(),\n      alphaSliceByteOffset: sgdReader._nextUint32(),\n      alphaSliceByteLength: sgdReader._nextUint32()\n    });\n  }\n  const endpointsByteOffset = sgdByteOffset + sgdReader._offset;\n  const selectorsByteOffset = endpointsByteOffset + endpointsByteLength;\n  const tablesByteOffset = selectorsByteOffset + selectorsByteLength;\n  const extendedByteOffset = tablesByteOffset + tablesByteLength;\n  const endpointsData = new Uint8Array(data.buffer, data.byteOffset + endpointsByteOffset, endpointsByteLength);\n  const selectorsData = new Uint8Array(data.buffer, data.byteOffset + selectorsByteOffset, selectorsByteLength);\n  const tablesData = new Uint8Array(data.buffer, data.byteOffset + tablesByteOffset, tablesByteLength);\n  const extendedData = new Uint8Array(data.buffer, data.byteOffset + extendedByteOffset, extendedByteLength);\n  container.globalData = {\n    endpointCount,\n    selectorCount,\n    imageDescs,\n    endpointsData,\n    selectorsData,\n    tablesData,\n    extendedData\n  };\n  return container;\n}\n\nfunction _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\n\nconst DEFAULT_OPTIONS = {\n  keepWriter: false\n};\n/**\n * Serializes a {@link KTX2Container} instance to a KTX 2.0 file. Mip levels and other binary data\n * are copied into the resulting Uint8Array, so the original container can safely be edited or\n * destroyed after it is serialized.\n *\n * Options:\n * - keepWriter: If true, 'KTXWriter' key/value field is written as provided by the container.\n * \t\tOtherwise, a string for the current ktx-parse version is generated. Default: false.\n *\n * @param container\n * @param options\n */\nfunction write(container, options = {}) {\n  // biome-ignore lint/style/noParameterAssign: Merging defaults only.\n  options = _extends({}, DEFAULT_OPTIONS, options);\n  ///////////////////////////////////////////////////\n  // Supercompression Global Data (SGD).\n  ///////////////////////////////////////////////////\n  let sgdBuffer = new ArrayBuffer(0);\n  if (container.globalData) {\n    const sgdHeaderBuffer = new ArrayBuffer(20 + container.globalData.imageDescs.length * 5 * 4);\n    const sgdHeaderView = new DataView(sgdHeaderBuffer);\n    sgdHeaderView.setUint16(0, container.globalData.endpointCount, true);\n    sgdHeaderView.setUint16(2, container.globalData.selectorCount, true);\n    sgdHeaderView.setUint32(4, container.globalData.endpointsData.byteLength, true);\n    sgdHeaderView.setUint32(8, container.globalData.selectorsData.byteLength, true);\n    sgdHeaderView.setUint32(12, container.globalData.tablesData.byteLength, true);\n    sgdHeaderView.setUint32(16, container.globalData.extendedData.byteLength, true);\n    for (let i = 0; i < container.globalData.imageDescs.length; i++) {\n      const imageDesc = container.globalData.imageDescs[i];\n      sgdHeaderView.setUint32(20 + i * 5 * 4 + 0, imageDesc.imageFlags, true);\n      sgdHeaderView.setUint32(20 + i * 5 * 4 + 4, imageDesc.rgbSliceByteOffset, true);\n      sgdHeaderView.setUint32(20 + i * 5 * 4 + 8, imageDesc.rgbSliceByteLength, true);\n      sgdHeaderView.setUint32(20 + i * 5 * 4 + 12, imageDesc.alphaSliceByteOffset, true);\n      sgdHeaderView.setUint32(20 + i * 5 * 4 + 16, imageDesc.alphaSliceByteLength, true);\n    }\n    sgdBuffer = concat([sgdHeaderBuffer, container.globalData.endpointsData, container.globalData.selectorsData, container.globalData.tablesData, container.globalData.extendedData]);\n  }\n  ///////////////////////////////////////////////////\n  // Key/Value Data (KVD).\n  ///////////////////////////////////////////////////\n  const keyValueData = [];\n  const keyValueList = Object.entries(_extends({}, container.keyValue, !options.keepWriter && {\n    KTXwriter: KTX_WRITER\n  }));\n  keyValueList.sort((a, b) => a[0] > b[0] ? 1 : -1);\n  for (const [key, value] of keyValueList) {\n    const keyData = encodeText(key);\n    const valueData = typeof value === 'string' ? concat([encodeText(value), NUL]) : value;\n    const kvByteLength = keyData.byteLength + 1 + valueData.byteLength;\n    const kvPadding = getPadding(kvByteLength, 4); // align(4)\n    keyValueData.push(concat([new Uint32Array([kvByteLength]), keyData, NUL, valueData, new Uint8Array(kvPadding).fill(0x00) // align(4)\n    ]));\n  }\n  const kvdBuffer = concat(keyValueData);\n  ///////////////////////////////////////////////////\n  // Data Format Descriptor (DFD).\n  ///////////////////////////////////////////////////\n  if (container.dataFormatDescriptor.length !== 1 || container.dataFormatDescriptor[0].descriptorType !== KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT) {\n    throw new Error('Only BASICFORMAT Data Format Descriptor output supported.');\n  }\n  const dfd = container.dataFormatDescriptor[0];\n  const dfdBuffer = new ArrayBuffer(28 + dfd.samples.length * 16);\n  const dfdView = new DataView(dfdBuffer);\n  const descriptorBlockSize = 24 + dfd.samples.length * 16;\n  dfdView.setUint32(0, dfdBuffer.byteLength, true);\n  dfdView.setUint16(4, dfd.vendorId, true);\n  dfdView.setUint16(6, dfd.descriptorType, true);\n  dfdView.setUint16(8, dfd.versionNumber, true);\n  dfdView.setUint16(10, descriptorBlockSize, true);\n  dfdView.setUint8(12, dfd.colorModel);\n  dfdView.setUint8(13, dfd.colorPrimaries);\n  dfdView.setUint8(14, dfd.transferFunction);\n  dfdView.setUint8(15, dfd.flags);\n  if (!Array.isArray(dfd.texelBlockDimension)) {\n    throw new Error('texelBlockDimension is now an array. For dimensionality `d`, set `d - 1`.');\n  }\n  dfdView.setUint8(16, dfd.texelBlockDimension[0]);\n  dfdView.setUint8(17, dfd.texelBlockDimension[1]);\n  dfdView.setUint8(18, dfd.texelBlockDimension[2]);\n  dfdView.setUint8(19, dfd.texelBlockDimension[3]);\n  for (let i = 0; i < 8; i++) dfdView.setUint8(20 + i, dfd.bytesPlane[i]);\n  for (let i = 0; i < dfd.samples.length; i++) {\n    const sample = dfd.samples[i];\n    const sampleByteOffset = 28 + i * 16;\n    dfdView.setUint16(sampleByteOffset + 0, sample.bitOffset, true);\n    dfdView.setUint8(sampleByteOffset + 2, sample.bitLength);\n    dfdView.setUint8(sampleByteOffset + 3, sample.channelType);\n    dfdView.setUint8(sampleByteOffset + 4, sample.samplePosition[0]);\n    dfdView.setUint8(sampleByteOffset + 5, sample.samplePosition[1]);\n    dfdView.setUint8(sampleByteOffset + 6, sample.samplePosition[2]);\n    dfdView.setUint8(sampleByteOffset + 7, sample.samplePosition[3]);\n    if (sample.channelType & KHR_DF_SAMPLE_DATATYPE_SIGNED) {\n      dfdView.setInt32(sampleByteOffset + 8, sample.sampleLower, true);\n      dfdView.setInt32(sampleByteOffset + 12, sample.sampleUpper, true);\n    } else {\n      dfdView.setUint32(sampleByteOffset + 8, sample.sampleLower, true);\n      dfdView.setUint32(sampleByteOffset + 12, sample.sampleUpper, true);\n    }\n  }\n  ///////////////////////////////////////////////////\n  // Data alignment.\n  ///////////////////////////////////////////////////\n  const dfdByteOffset = KTX2_ID.length + HEADER_BYTE_LENGTH + container.levels.length * 3 * 8;\n  const kvdByteOffset = dfdByteOffset + dfdBuffer.byteLength;\n  let sgdByteOffset = sgdBuffer.byteLength > 0 ? kvdByteOffset + kvdBuffer.byteLength : 0;\n  if (sgdByteOffset % 8) sgdByteOffset += 8 - sgdByteOffset % 8; // align(8)\n  ///////////////////////////////////////////////////\n  // Level Index.\n  ///////////////////////////////////////////////////\n  const levelData = [];\n  const levelIndex = new DataView(new ArrayBuffer(container.levels.length * 3 * 8));\n  const levelDataByteOffsets = new Uint32Array(container.levels.length);\n  let levelAlign = 0;\n  if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE) {\n    levelAlign = leastCommonMultiple(getBlockByteLength(container), 4);\n  }\n  // Level data is ordered small → large.\n  let levelDataByteOffset = (sgdByteOffset || kvdByteOffset + kvdBuffer.byteLength) + sgdBuffer.byteLength;\n  for (let i = container.levels.length - 1; i >= 0; i--) {\n    // Level padding.\n    if (levelDataByteOffset % levelAlign) {\n      const paddingBytes = getPadding(levelDataByteOffset, levelAlign);\n      levelData.push(new Uint8Array(paddingBytes));\n      levelDataByteOffset += paddingBytes;\n    }\n    // Level data.\n    const level = container.levels[i];\n    levelData.push(level.levelData);\n    levelDataByteOffsets[i] = levelDataByteOffset;\n    levelDataByteOffset += level.levelData.byteLength;\n  }\n  // Level index is ordered large → small.\n  for (let i = 0; i < container.levels.length; i++) {\n    const level = container.levels[i];\n    levelIndex.setBigUint64(i * 24 + 0, BigInt(levelDataByteOffsets[i]), true);\n    levelIndex.setBigUint64(i * 24 + 8, BigInt(level.levelData.byteLength), true);\n    levelIndex.setBigUint64(i * 24 + 16, BigInt(level.uncompressedByteLength), true);\n  }\n  ///////////////////////////////////////////////////\n  // Header.\n  ///////////////////////////////////////////////////\n  const headerBuffer = new ArrayBuffer(HEADER_BYTE_LENGTH);\n  const headerView = new DataView(headerBuffer);\n  headerView.setUint32(0, container.vkFormat, true);\n  headerView.setUint32(4, container.typeSize, true);\n  headerView.setUint32(8, container.pixelWidth, true);\n  headerView.setUint32(12, container.pixelHeight, true);\n  headerView.setUint32(16, container.pixelDepth, true);\n  headerView.setUint32(20, container.layerCount, true);\n  headerView.setUint32(24, container.faceCount, true);\n  headerView.setUint32(28, container.levelCount, true);\n  headerView.setUint32(32, container.supercompressionScheme, true);\n  headerView.setUint32(36, dfdByteOffset, true);\n  headerView.setUint32(40, dfdBuffer.byteLength, true);\n  headerView.setUint32(44, kvdByteOffset, true);\n  headerView.setUint32(48, kvdBuffer.byteLength, true);\n  headerView.setBigUint64(52, BigInt(sgdBuffer.byteLength > 0 ? sgdByteOffset : 0), true);\n  headerView.setBigUint64(60, BigInt(sgdBuffer.byteLength), true);\n  ///////////////////////////////////////////////////\n  // Compose.\n  ///////////////////////////////////////////////////\n  return new Uint8Array(concat([new Uint8Array(KTX2_ID).buffer, headerBuffer, levelIndex.buffer, dfdBuffer, kvdBuffer, sgdByteOffset > 0 ? new ArrayBuffer(sgdByteOffset - (kvdByteOffset + kvdBuffer.byteLength)) // align(8)\n  : new ArrayBuffer(0), sgdBuffer, ...levelData]));\n}\n\nexport { KHR_DF_CHANNEL_RGBSDA_ALPHA, KHR_DF_CHANNEL_RGBSDA_BLUE, KHR_DF_CHANNEL_RGBSDA_DEPTH, KHR_DF_CHANNEL_RGBSDA_GREEN, KHR_DF_CHANNEL_RGBSDA_RED, KHR_DF_CHANNEL_RGBSDA_STENCIL, KHR_DF_FLAG_ALPHA_PREMULTIPLIED, KHR_DF_FLAG_ALPHA_STRAIGHT, KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT, KHR_DF_MODEL_ASTC, KHR_DF_MODEL_ETC1, KHR_DF_MODEL_ETC1S, KHR_DF_MODEL_ETC2, KHR_DF_MODEL_RGBSDA, KHR_DF_MODEL_UASTC, KHR_DF_MODEL_UNSPECIFIED, KHR_DF_PRIMARIES_ACES, KHR_DF_PRIMARIES_ACESCC, KHR_DF_PRIMARIES_ADOBERGB, KHR_DF_PRIMARIES_BT2020, KHR_DF_PRIMARIES_BT601_EBU, KHR_DF_PRIMARIES_BT601_SMPTE, KHR_DF_PRIMARIES_BT709, KHR_DF_PRIMARIES_CIEXYZ, KHR_DF_PRIMARIES_DISPLAYP3, KHR_DF_PRIMARIES_NTSC1953, KHR_DF_PRIMARIES_PAL525, KHR_DF_PRIMARIES_UNSPECIFIED, KHR_DF_SAMPLE_DATATYPE_EXPONENT, KHR_DF_SAMPLE_DATATYPE_FLOAT, KHR_DF_SAMPLE_DATATYPE_LINEAR, KHR_DF_SAMPLE_DATATYPE_SIGNED, KHR_DF_TRANSFER_ACESCC, KHR_DF_TRANSFER_ACESCCT, KHR_DF_TRANSFER_ADOBERGB, KHR_DF_TRANSFER_BT1886, KHR_DF_TRANSFER_DCIP3, KHR_DF_TRANSFER_HLG_EOTF, KHR_DF_TRANSFER_HLG_OETF, KHR_DF_TRANSFER_ITU, KHR_DF_TRANSFER_LINEAR, KHR_DF_TRANSFER_NTSC, KHR_DF_TRANSFER_PAL625_EOTF, KHR_DF_TRANSFER_PAL_OETF, KHR_DF_TRANSFER_PQ_EOTF, KHR_DF_TRANSFER_PQ_OETF, KHR_DF_TRANSFER_SLOG, KHR_DF_TRANSFER_SLOG2, KHR_DF_TRANSFER_SRGB, KHR_DF_TRANSFER_ST240, KHR_DF_TRANSFER_UNSPECIFIED, KHR_DF_VENDORID_KHRONOS, KHR_DF_VERSION, KHR_SUPERCOMPRESSION_BASISLZ, KHR_SUPERCOMPRESSION_NONE, KHR_SUPERCOMPRESSION_ZLIB, KHR_SUPERCOMPRESSION_ZSTD, VK_FORMAT_A1R5G5B5_UNORM_PACK16, VK_FORMAT_A2B10G10R10_SINT_PACK32, VK_FORMAT_A2B10G10R10_SNORM_PACK32, VK_FORMAT_A2B10G10R10_UINT_PACK32, VK_FORMAT_A2B10G10R10_UNORM_PACK32, VK_FORMAT_A2R10G10B10_SINT_PACK32, VK_FORMAT_A2R10G10B10_SNORM_PACK32, VK_FORMAT_A2R10G10B10_UINT_PACK32, VK_FORMAT_A2R10G10B10_UNORM_PACK32, VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT, VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT, VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_10x10_SRGB_BLOCK, VK_FORMAT_ASTC_10x10_UNORM_BLOCK, VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_10x5_SRGB_BLOCK, VK_FORMAT_ASTC_10x5_UNORM_BLOCK, VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_10x6_SRGB_BLOCK, VK_FORMAT_ASTC_10x6_UNORM_BLOCK, VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_10x8_SRGB_BLOCK, VK_FORMAT_ASTC_10x8_UNORM_BLOCK, VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_12x10_SRGB_BLOCK, VK_FORMAT_ASTC_12x10_UNORM_BLOCK, VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_12x12_SRGB_BLOCK, VK_FORMAT_ASTC_12x12_UNORM_BLOCK, VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_4x4_SRGB_BLOCK, VK_FORMAT_ASTC_4x4_UNORM_BLOCK, VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_5x4_SRGB_BLOCK, VK_FORMAT_ASTC_5x4_UNORM_BLOCK, VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_5x5_SRGB_BLOCK, VK_FORMAT_ASTC_5x5_UNORM_BLOCK, VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_6x5_SRGB_BLOCK, VK_FORMAT_ASTC_6x5_UNORM_BLOCK, VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_6x6_SRGB_BLOCK, VK_FORMAT_ASTC_6x6_UNORM_BLOCK, VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_8x5_SRGB_BLOCK, VK_FORMAT_ASTC_8x5_UNORM_BLOCK, VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_8x6_SRGB_BLOCK, VK_FORMAT_ASTC_8x6_UNORM_BLOCK, VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_8x8_SRGB_BLOCK, VK_FORMAT_ASTC_8x8_UNORM_BLOCK, VK_FORMAT_B10G11R11_UFLOAT_PACK32, VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16, VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16, VK_FORMAT_B4G4R4A4_UNORM_PACK16, VK_FORMAT_B5G5R5A1_UNORM_PACK16, VK_FORMAT_B5G6R5_UNORM_PACK16, VK_FORMAT_B8G8R8A8_SINT, VK_FORMAT_B8G8R8A8_SNORM, VK_FORMAT_B8G8R8A8_SRGB, VK_FORMAT_B8G8R8A8_UINT, VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_B8G8R8_SINT, VK_FORMAT_B8G8R8_SNORM, VK_FORMAT_B8G8R8_SRGB, VK_FORMAT_B8G8R8_UINT, VK_FORMAT_B8G8R8_UNORM, VK_FORMAT_BC1_RGBA_SRGB_BLOCK, VK_FORMAT_BC1_RGBA_UNORM_BLOCK, VK_FORMAT_BC1_RGB_SRGB_BLOCK, VK_FORMAT_BC1_RGB_UNORM_BLOCK, VK_FORMAT_BC2_SRGB_BLOCK, VK_FORMAT_BC2_UNORM_BLOCK, VK_FORMAT_BC3_SRGB_BLOCK, VK_FORMAT_BC3_UNORM_BLOCK, VK_FORMAT_BC4_SNORM_BLOCK, VK_FORMAT_BC4_UNORM_BLOCK, VK_FORMAT_BC5_SNORM_BLOCK, VK_FORMAT_BC5_UNORM_BLOCK, VK_FORMAT_BC6H_SFLOAT_BLOCK, VK_FORMAT_BC6H_UFLOAT_BLOCK, VK_FORMAT_BC7_SRGB_BLOCK, VK_FORMAT_BC7_UNORM_BLOCK, VK_FORMAT_D16_UNORM, VK_FORMAT_D16_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, VK_FORMAT_EAC_R11G11_SNORM_BLOCK, VK_FORMAT_EAC_R11G11_UNORM_BLOCK, VK_FORMAT_EAC_R11_SNORM_BLOCK, VK_FORMAT_EAC_R11_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16, VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16, VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG, VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, VK_FORMAT_R10X6G10X6_UNORM_2PACK16, VK_FORMAT_R10X6_UNORM_PACK16, VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16, VK_FORMAT_R12X4G12X4_UNORM_2PACK16, VK_FORMAT_R12X4_UNORM_PACK16, VK_FORMAT_R16G16B16A16_SFLOAT, VK_FORMAT_R16G16B16A16_SINT, VK_FORMAT_R16G16B16A16_SNORM, VK_FORMAT_R16G16B16A16_UINT, VK_FORMAT_R16G16B16A16_UNORM, VK_FORMAT_R16G16B16_SFLOAT, VK_FORMAT_R16G16B16_SINT, VK_FORMAT_R16G16B16_SNORM, VK_FORMAT_R16G16B16_UINT, VK_FORMAT_R16G16B16_UNORM, VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_R16G16_SINT, VK_FORMAT_R16G16_SNORM, VK_FORMAT_R16G16_UINT, VK_FORMAT_R16G16_UNORM, VK_FORMAT_R16_SFLOAT, VK_FORMAT_R16_SINT, VK_FORMAT_R16_SNORM, VK_FORMAT_R16_UINT, VK_FORMAT_R16_UNORM, VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_R32G32B32A32_SINT, VK_FORMAT_R32G32B32A32_UINT, VK_FORMAT_R32G32B32_SFLOAT, VK_FORMAT_R32G32B32_SINT, VK_FORMAT_R32G32B32_UINT, VK_FORMAT_R32G32_SFLOAT, VK_FORMAT_R32G32_SINT, VK_FORMAT_R32G32_UINT, VK_FORMAT_R32_SFLOAT, VK_FORMAT_R32_SINT, VK_FORMAT_R32_UINT, VK_FORMAT_R4G4B4A4_UNORM_PACK16, VK_FORMAT_R4G4_UNORM_PACK8, VK_FORMAT_R5G5B5A1_UNORM_PACK16, VK_FORMAT_R5G6B5_UNORM_PACK16, VK_FORMAT_R64G64B64A64_SFLOAT, VK_FORMAT_R64G64B64A64_SINT, VK_FORMAT_R64G64B64A64_UINT, VK_FORMAT_R64G64B64_SFLOAT, VK_FORMAT_R64G64B64_SINT, VK_FORMAT_R64G64B64_UINT, VK_FORMAT_R64G64_SFLOAT, VK_FORMAT_R64G64_SINT, VK_FORMAT_R64G64_UINT, VK_FORMAT_R64_SFLOAT, VK_FORMAT_R64_SINT, VK_FORMAT_R64_UINT, VK_FORMAT_R8G8B8A8_SINT, VK_FORMAT_R8G8B8A8_SNORM, VK_FORMAT_R8G8B8A8_SRGB, VK_FORMAT_R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_R8G8B8_SINT, VK_FORMAT_R8G8B8_SNORM, VK_FORMAT_R8G8B8_SRGB, VK_FORMAT_R8G8B8_UINT, VK_FORMAT_R8G8B8_UNORM, VK_FORMAT_R8G8_SINT, VK_FORMAT_R8G8_SNORM, VK_FORMAT_R8G8_SRGB, VK_FORMAT_R8G8_UINT, VK_FORMAT_R8G8_UNORM, VK_FORMAT_R8_SINT, VK_FORMAT_R8_SNORM, VK_FORMAT_R8_SRGB, VK_FORMAT_R8_UINT, VK_FORMAT_R8_UNORM, VK_FORMAT_S8_UINT, VK_FORMAT_UNDEFINED, VK_FORMAT_X8_D24_UNORM_PACK32, createDefaultContainer, read, write };\n//# sourceMappingURL=ktx-parse.modern.js.map\n","import { ExtensionProperty, PropertyType, RefMap, Extension, BufferUtils, WriterContext, Primitive, Root, AnimationSampler, AnimationChannel, Accessor, MathUtils, GLB_BUFFER, ImageUtils, getBounds, TextureInfo, TextureChannel, RefSet } from '@gltf-transform/core';\nimport { read, KHR_DF_MODEL_ETC1S, KHR_DF_MODEL_UASTC } from 'ktx-parse';\n\nconst EXT_MESH_GPU_INSTANCING = 'EXT_mesh_gpu_instancing';\nconst EXT_MESHOPT_COMPRESSION = 'EXT_meshopt_compression';\nconst EXT_TEXTURE_WEBP = 'EXT_texture_webp';\nconst EXT_TEXTURE_AVIF = 'EXT_texture_avif';\nconst KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';\nconst KHR_LIGHTS_PUNCTUAL = 'KHR_lights_punctual';\nconst KHR_MATERIALS_ANISOTROPY = 'KHR_materials_anisotropy';\nconst KHR_MATERIALS_CLEARCOAT = 'KHR_materials_clearcoat';\nconst KHR_MATERIALS_DIFFUSE_TRANSMISSION = 'KHR_materials_diffuse_transmission';\nconst KHR_MATERIALS_DISPERSION = 'KHR_materials_dispersion';\nconst KHR_MATERIALS_EMISSIVE_STRENGTH = 'KHR_materials_emissive_strength';\nconst KHR_MATERIALS_IOR = 'KHR_materials_ior';\nconst KHR_MATERIALS_IRIDESCENCE = 'KHR_materials_iridescence';\nconst KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS = 'KHR_materials_pbrSpecularGlossiness';\nconst KHR_MATERIALS_SHEEN = 'KHR_materials_sheen';\nconst KHR_MATERIALS_SPECULAR = 'KHR_materials_specular';\nconst KHR_MATERIALS_TRANSMISSION = 'KHR_materials_transmission';\nconst KHR_MATERIALS_UNLIT = 'KHR_materials_unlit';\nconst KHR_MATERIALS_VOLUME = 'KHR_materials_volume';\nconst KHR_MATERIALS_VARIANTS = 'KHR_materials_variants';\nconst KHR_MESH_QUANTIZATION = 'KHR_mesh_quantization';\nconst KHR_TEXTURE_BASISU = 'KHR_texture_basisu';\nconst KHR_TEXTURE_TRANSFORM = 'KHR_texture_transform';\nconst KHR_XMP_JSON_LD = 'KHR_xmp_json_ld';\n\n// See BufferViewUsage in `writer-context.ts`.\nconst INSTANCE_ATTRIBUTE = 'INSTANCE_ATTRIBUTE';\n/**\n * Defines GPU instances of a {@link Mesh} under one {@link Node}. See {@link EXTMeshGPUInstancing}.\n */\nclass InstancedMesh extends ExtensionProperty {\n  init() {\n    this.extensionName = EXT_MESH_GPU_INSTANCING;\n    this.propertyType = 'InstancedMesh';\n    this.parentTypes = [PropertyType.NODE];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      attributes: new RefMap()\n    });\n  }\n  /** Returns an instance attribute as an {@link Accessor}. */\n  getAttribute(semantic) {\n    return this.getRefMap('attributes', semantic);\n  }\n  /**\n   * Sets an instance attribute to an {@link Accessor}. All attributes must have the same\n   * instance count.\n   */\n  setAttribute(semantic, accessor) {\n    return this.setRefMap('attributes', semantic, accessor, {\n      usage: INSTANCE_ATTRIBUTE\n    });\n  }\n  /**\n   * Lists all instance attributes {@link Accessor}s associated with the InstancedMesh. Order\n   * will be consistent with the order returned by {@link .listSemantics}().\n   */\n  listAttributes() {\n    return this.listRefMapValues('attributes');\n  }\n  /**\n   * Lists all instance attribute semantics associated with the primitive. Order will be\n   * consistent with the order returned by {@link .listAttributes}().\n   */\n  listSemantics() {\n    return this.listRefMapKeys('attributes');\n  }\n}\nInstancedMesh.EXTENSION_NAME = EXT_MESH_GPU_INSTANCING;\n\n/**\n * [`EXT_mesh_gpu_instancing`](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing/)\n * prepares mesh data for efficient GPU instancing.\n *\n * GPU instancing allows engines to render many copies of a single mesh at once using a small number\n * of draw calls. Instancing is particularly useful for things like trees, grass, road signs, etc.\n * Keep in mind that predefined batches, as used in this extension, may prevent frustum culling\n * within a batch. Dividing batches into collocated cells may be preferable to using a single large\n * batch.\n *\n * > _**NOTICE:** While this extension stores mesh data optimized for GPU instancing, it\n * > is important to note that (1) GPU instancing and other optimizations are possible — and\n * > encouraged — even without this extension, and (2) other common meanings of the term\n * > \"instancing\" exist, distinct from this extension. See\n * > [Appendix: Motivation and Purpose](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_mesh_gpu_instancing#appendix-motivation-and-purpose)\n * > of the `EXT_mesh_gpu_instancing` specification._\n *\n * Properties:\n * - {@link InstancedMesh}\n *\n * ### Example\n *\n * The `EXTMeshGPUInstancing` class provides a single {@link ExtensionProperty} type, `InstancedMesh`,\n * which may be attached to any {@link Node} instance. For example:\n *\n * ```typescript\n * import { EXTMeshGPUInstancing } from '@gltf-transform/extensions';\n *\n * // Create standard mesh, node, and scene hierarchy.\n * // ...\n *\n * // Assign positions for each instance.\n * const batchPositions = doc.createAccessor('instance_positions')\n * \t.setArray(new Float32Array([\n * \t\t0, 0, 0,\n * \t\t1, 0, 0,\n * \t\t2, 0, 0,\n * \t]))\n * \t.setType(Accessor.Type.VEC3)\n * \t.setBuffer(buffer);\n *\n * // Assign IDs for each instance.\n * const batchIDs = doc.createAccessor('instance_ids')\n * \t.setArray(new Uint8Array([0, 1, 2]))\n * \t.setType(Accessor.Type.SCALAR)\n * \t.setBuffer(buffer);\n *\n * // Create an Extension attached to the Document.\n * const batchExtension = document.createExtension(EXTMeshGPUInstancing)\n * \t.setRequired(true);\n * const batch = batchExtension.createInstancedMesh()\n * \t.setAttribute('TRANSLATION', batchPositions)\n * \t.setAttribute('_ID', batchIDs);\n *\n * node\n * \t.setMesh(mesh)\n * \t.setExtension('EXT_mesh_gpu_instancing', batch);\n * ```\n *\n * Standard instance attributes are `TRANSLATION`, `ROTATION`, and `SCALE`, and support the accessor\n * types allowed by the extension specification. Custom instance attributes are allowed, and should\n * be prefixed with an underscore (`_*`).\n */\nclass EXTMeshGPUInstancing extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = EXT_MESH_GPU_INSTANCING;\n    /** @hidden */\n    this.provideTypes = [PropertyType.NODE];\n    /** @hidden */\n    this.prewriteTypes = [PropertyType.ACCESSOR];\n  }\n  /** Creates a new InstancedMesh property for use on a {@link Node}. */\n  createInstancedMesh() {\n    return new InstancedMesh(this.document.getGraph());\n  }\n  /** @hidden */\n  read(context) {\n    const jsonDoc = context.jsonDoc;\n    const nodeDefs = jsonDoc.json.nodes || [];\n    nodeDefs.forEach((nodeDef, nodeIndex) => {\n      if (!nodeDef.extensions || !nodeDef.extensions[EXT_MESH_GPU_INSTANCING]) return;\n      const instancedMeshDef = nodeDef.extensions[EXT_MESH_GPU_INSTANCING];\n      const instancedMesh = this.createInstancedMesh();\n      for (const semantic in instancedMeshDef.attributes) {\n        instancedMesh.setAttribute(semantic, context.accessors[instancedMeshDef.attributes[semantic]]);\n      }\n      context.nodes[nodeIndex].setExtension(EXT_MESH_GPU_INSTANCING, instancedMesh);\n    });\n    return this;\n  }\n  /** @hidden */\n  prewrite(context) {\n    // Set usage for instance attribute accessors, so they are stored in separate buffer\n    // views grouped by parent reference.\n    context.accessorUsageGroupedByParent.add(INSTANCE_ATTRIBUTE);\n    for (const prop of this.properties) {\n      for (const attribute of prop.listAttributes()) {\n        context.addAccessorToUsageGroup(attribute, INSTANCE_ATTRIBUTE);\n      }\n    }\n    return this;\n  }\n  /** @hidden */\n  write(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listNodes().forEach(node => {\n      const instancedMesh = node.getExtension(EXT_MESH_GPU_INSTANCING);\n      if (instancedMesh) {\n        const nodeIndex = context.nodeIndexMap.get(node);\n        const nodeDef = jsonDoc.json.nodes[nodeIndex];\n        const instancedMeshDef = {\n          attributes: {}\n        };\n        instancedMesh.listSemantics().forEach(semantic => {\n          const attribute = instancedMesh.getAttribute(semantic);\n          instancedMeshDef.attributes[semantic] = context.accessorIndexMap.get(attribute);\n        });\n        nodeDef.extensions = nodeDef.extensions || {};\n        nodeDef.extensions[EXT_MESH_GPU_INSTANCING] = instancedMeshDef;\n      }\n    });\n    return this;\n  }\n}\nEXTMeshGPUInstancing.EXTENSION_NAME = EXT_MESH_GPU_INSTANCING;\n\nfunction _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\n\nvar EncoderMethod$1;\n(function (EncoderMethod) {\n  EncoderMethod[\"QUANTIZE\"] = \"quantize\";\n  EncoderMethod[\"FILTER\"] = \"filter\";\n})(EncoderMethod$1 || (EncoderMethod$1 = {}));\nvar MeshoptMode;\n(function (MeshoptMode) {\n  MeshoptMode[\"ATTRIBUTES\"] = \"ATTRIBUTES\";\n  MeshoptMode[\"TRIANGLES\"] = \"TRIANGLES\";\n  MeshoptMode[\"INDICES\"] = \"INDICES\";\n})(MeshoptMode || (MeshoptMode = {}));\nvar MeshoptFilter;\n(function (MeshoptFilter) {\n  /** No filter — quantize only. */\n  MeshoptFilter[\"NONE\"] = \"NONE\";\n  /** Four 8- or 16-bit normalized values. */\n  MeshoptFilter[\"OCTAHEDRAL\"] = \"OCTAHEDRAL\";\n  /** Four 16-bit normalized values. */\n  MeshoptFilter[\"QUATERNION\"] = \"QUATERNION\";\n  /** K single-precision floating point values. */\n  MeshoptFilter[\"EXPONENTIAL\"] = \"EXPONENTIAL\";\n})(MeshoptFilter || (MeshoptFilter = {}));\n\n/**\n * Returns true for a fallback buffer, else false.\n *\n *   - All references to the fallback buffer must come from bufferViews that\n *     have a EXT_meshopt_compression extension specified.\n *   - No references to the fallback buffer may come from\n *     EXT_meshopt_compression extension JSON.\n */\nfunction isFallbackBuffer(bufferDef) {\n  if (!bufferDef.extensions || !bufferDef.extensions[EXT_MESHOPT_COMPRESSION]) return false;\n  const fallbackDef = bufferDef.extensions[EXT_MESHOPT_COMPRESSION];\n  return !!fallbackDef.fallback;\n}\n\nconst {\n  BYTE,\n  SHORT,\n  FLOAT\n} = Accessor.ComponentType;\nconst {\n  encodeNormalizedInt,\n  decodeNormalizedInt\n} = MathUtils;\n/** Pre-processes array with required filters or padding. */\nfunction prepareAccessor(accessor, encoder, mode, filterOptions) {\n  const {\n    filter,\n    bits\n  } = filterOptions;\n  const result = {\n    array: accessor.getArray(),\n    byteStride: accessor.getElementSize() * accessor.getComponentSize(),\n    componentType: accessor.getComponentType(),\n    normalized: accessor.getNormalized()\n  };\n  if (mode !== MeshoptMode.ATTRIBUTES) return result;\n  if (filter !== MeshoptFilter.NONE) {\n    let array = accessor.getNormalized() ? decodeNormalizedIntArray(accessor) : new Float32Array(result.array);\n    switch (filter) {\n      case MeshoptFilter.EXPONENTIAL:\n        // → K single-precision floating point values.\n        result.byteStride = accessor.getElementSize() * 4;\n        result.componentType = FLOAT;\n        result.normalized = false;\n        result.array = encoder.encodeFilterExp(array, accessor.getCount(), result.byteStride, bits);\n        break;\n      case MeshoptFilter.OCTAHEDRAL:\n        // → four 8- or 16-bit normalized values.\n        result.byteStride = bits > 8 ? 8 : 4;\n        result.componentType = bits > 8 ? SHORT : BYTE;\n        result.normalized = true;\n        array = accessor.getElementSize() === 3 ? padNormals(array) : array;\n        result.array = encoder.encodeFilterOct(array, accessor.getCount(), result.byteStride, bits);\n        break;\n      case MeshoptFilter.QUATERNION:\n        // → four 16-bit normalized values.\n        result.byteStride = 8;\n        result.componentType = SHORT;\n        result.normalized = true;\n        result.array = encoder.encodeFilterQuat(array, accessor.getCount(), result.byteStride, bits);\n        break;\n      default:\n        throw new Error('Invalid filter.');\n    }\n    result.min = accessor.getMin([]);\n    result.max = accessor.getMax([]);\n    if (accessor.getNormalized()) {\n      result.min = result.min.map(v => decodeNormalizedInt(v, accessor.getComponentType()));\n      result.max = result.max.map(v => decodeNormalizedInt(v, accessor.getComponentType()));\n    }\n    if (result.normalized) {\n      result.min = result.min.map(v => encodeNormalizedInt(v, result.componentType));\n      result.max = result.max.map(v => encodeNormalizedInt(v, result.componentType));\n    }\n  } else if (result.byteStride % 4) {\n    result.array = padArrayElements(result.array, accessor.getElementSize());\n    result.byteStride = result.array.byteLength / accessor.getCount();\n  }\n  return result;\n}\nfunction decodeNormalizedIntArray(attribute) {\n  const componentType = attribute.getComponentType();\n  const srcArray = attribute.getArray();\n  const dstArray = new Float32Array(srcArray.length);\n  for (let i = 0; i < srcArray.length; i++) {\n    dstArray[i] = decodeNormalizedInt(srcArray[i], componentType);\n  }\n  return dstArray;\n}\n/** Pads array to 4 byte alignment, required for Meshopt ATTRIBUTE buffer views. */\nfunction padArrayElements(srcArray, elementSize) {\n  const byteStride = BufferUtils.padNumber(srcArray.BYTES_PER_ELEMENT * elementSize);\n  const elementStride = byteStride / srcArray.BYTES_PER_ELEMENT;\n  const elementCount = srcArray.length / elementSize;\n  const dstArray = new srcArray.constructor(elementCount * elementStride);\n  for (let i = 0; i * elementSize < srcArray.length; i++) {\n    for (let j = 0; j < elementSize; j++) {\n      dstArray[i * elementStride + j] = srcArray[i * elementSize + j];\n    }\n  }\n  return dstArray;\n}\n/** Pad normals with a .w component for octahedral encoding. */\nfunction padNormals(srcArray) {\n  const dstArray = new Float32Array(srcArray.length * 4 / 3);\n  for (let i = 0, il = srcArray.length / 3; i < il; i++) {\n    dstArray[i * 4] = srcArray[i * 3];\n    dstArray[i * 4 + 1] = srcArray[i * 3 + 1];\n    dstArray[i * 4 + 2] = srcArray[i * 3 + 2];\n  }\n  return dstArray;\n}\nfunction getMeshoptMode(accessor, usage) {\n  if (usage === WriterContext.BufferViewUsage.ELEMENT_ARRAY_BUFFER) {\n    const isTriangles = accessor.listParents().some(parent => {\n      return parent instanceof Primitive && parent.getMode() === Primitive.Mode.TRIANGLES;\n    });\n    return isTriangles ? MeshoptMode.TRIANGLES : MeshoptMode.INDICES;\n  }\n  return MeshoptMode.ATTRIBUTES;\n}\nfunction getMeshoptFilter(accessor, doc) {\n  const refs = doc.getGraph().listParentEdges(accessor).filter(edge => !(edge.getParent() instanceof Root));\n  for (const ref of refs) {\n    const refName = ref.getName();\n    const refKey = ref.getAttributes().key || '';\n    const isDelta = ref.getParent().propertyType === PropertyType.PRIMITIVE_TARGET;\n    // Indices.\n    if (refName === 'indices') return {\n      filter: MeshoptFilter.NONE\n    };\n    // Attributes.\n    //\n    // NOTES:\n    // - Vertex attributes should be filtered IFF they are _not_ quantized in\n    //   'packages/cli/src/transforms/meshopt.ts'.\n    // - POSITION and TEXCOORD_0 could use exponential filtering, but this produces broken\n    //   output in some cases (e.g. Matilda.glb), for unknown reasons. gltfpack uses manual\n    //   quantization for these attributes.\n    // - NORMAL and TANGENT attributes use Octahedral filters, but deltas in morphs do not.\n    // - When specifying bit depth for vertex attributes, check the defaults in `quantize.ts`\n    //\t and overrides in `meshopt.ts`. Don't store deltas at higher precision than base.\n    if (refName === 'attributes') {\n      if (refKey === 'POSITION') return {\n        filter: MeshoptFilter.NONE\n      };\n      if (refKey === 'TEXCOORD_0') return {\n        filter: MeshoptFilter.NONE\n      };\n      if (refKey.startsWith('JOINTS_')) return {\n        filter: MeshoptFilter.NONE\n      };\n      if (refKey.startsWith('WEIGHTS_')) return {\n        filter: MeshoptFilter.NONE\n      };\n      if (refKey === 'NORMAL' || refKey === 'TANGENT') {\n        return isDelta ? {\n          filter: MeshoptFilter.NONE\n        } : {\n          filter: MeshoptFilter.OCTAHEDRAL,\n          bits: 8\n        };\n      }\n    }\n    // Animation.\n    if (refName === 'output') {\n      const targetPath = getTargetPath(accessor);\n      if (targetPath === 'rotation') return {\n        filter: MeshoptFilter.QUATERNION,\n        bits: 16\n      };\n      if (targetPath === 'translation') return {\n        filter: MeshoptFilter.EXPONENTIAL,\n        bits: 12\n      };\n      if (targetPath === 'scale') return {\n        filter: MeshoptFilter.EXPONENTIAL,\n        bits: 12\n      };\n      return {\n        filter: MeshoptFilter.NONE\n      };\n    }\n    // See: https://github.com/donmccurdy/glTF-Transform/issues/489\n    if (refName === 'input') return {\n      filter: MeshoptFilter.NONE\n    };\n    if (refName === 'inverseBindMatrices') return {\n      filter: MeshoptFilter.NONE\n    };\n  }\n  return {\n    filter: MeshoptFilter.NONE\n  };\n}\nfunction getTargetPath(accessor) {\n  for (const sampler of accessor.listParents()) {\n    if (!(sampler instanceof AnimationSampler)) continue;\n    for (const channel of sampler.listParents()) {\n      if (!(channel instanceof AnimationChannel)) continue;\n      return channel.getTargetPath();\n    }\n  }\n  return null;\n}\n\nconst DEFAULT_ENCODER_OPTIONS$1 = {\n  method: EncoderMethod$1.QUANTIZE\n};\n/**\n * [`EXT_meshopt_compression`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Vendor/EXT_meshopt_compression/)\n * provides compression and fast decoding for geometry, morph targets, and animations.\n *\n * Meshopt compression (based on the [meshoptimizer](https://github.com/zeux/meshoptimizer)\n * library) offers a lightweight decoder with very fast runtime decompression, and is\n * appropriate for models of any size. Meshopt can reduce the transmission sizes of geometry,\n * morph targets, animation, and other numeric data stored in buffer views. When textures are\n * large, other complementary compression methods should be used as well.\n *\n * For the full benefits of meshopt compression, **apply gzip, brotli, or another lossless\n * compression method** to the resulting .glb, .gltf, or .bin files. Meshopt specifically\n * pre-optimizes assets for this purpose — without this secondary compression, the size\n * reduction is considerably less.\n *\n * Be aware that decompression happens before uploading to the GPU. While Meshopt decoding is\n * considerably faster than Draco decoding, neither compression method will improve runtime\n * performance directly. To improve framerate, you'll need to simplify the geometry by reducing\n * vertex count or draw calls — not just compress it. Finally, be aware that Meshopt compression is\n * lossy: repeatedly compressing and decompressing a model in a pipeline will lose precision, so\n * compression should generally be the last stage of an art workflow, and uncompressed original\n * files should be kept.\n *\n * The meshoptimizer library ([github](https://github.com/zeux/meshoptimizer/tree/master/js),\n * [npm](https://www.npmjs.com/package/meshoptimizer)) is a required dependency for reading or\n * writing files, and must be provided by the application. Compression may alternatively be applied\n * with the [gltfpack](https://github.com/zeux/meshoptimizer/tree/master/gltf) tool.\n *\n * ### Example — Read\n *\n * To read glTF files using Meshopt compression, ensure that the extension\n * and a decoder are registered. Geometry and other data are decompressed\n * while reading the file.\n *\n * ```typescript\n * import { NodeIO } from '@gltf-transform/core';\n * import { EXTMeshoptCompression } from '@gltf-transform/extensions';\n * import { MeshoptDecoder } from 'meshoptimizer';\n *\n * await MeshoptDecoder.ready;\n *\n * const io = new NodeIO()\n * \t.registerExtensions([EXTMeshoptCompression])\n * \t.registerDependencies({ 'meshopt.decoder': MeshoptDecoder });\n *\n * // Read and decode.\n * const document = await io.read('compressed.glb');\n * ```\n *\n * ### Example — Write\n *\n * The simplest way to apply Meshopt compression is with the {@link meshopt}\n * transform. The extension and an encoder must be registered.\n *\n * ```typescript\n * import { NodeIO } from '@gltf-transform/core';\n * import { EXTMeshoptCompression } from '@gltf-transform/extensions';\n * import { meshopt } from '@gltf-transform/functions';\n * import { MeshoptEncoder } from 'meshoptimizer';\n *\n * await MeshoptEncoder.ready;\n *\n * const io = new NodeIO()\n * \t.registerExtensions([EXTMeshoptCompression])\n * \t.registerDependencies({ 'meshopt.encoder': MeshoptEncoder });\n *\n * await document.transform(\n *   meshopt({encoder: MeshoptEncoder, level: 'medium'})\n * );\n *\n * await io.write('compressed-medium.glb', document);\n * ```\n *\n * ### Example — Advanced\n *\n * Internally, the {@link meshopt} transform reorders and quantizes vertex data\n * to preparate for compression. If you prefer different pre-processing, the\n * EXTMeshoptCompression extension can be added to the document manually:\n *\n * ```typescript\n * import { reorder, quantize } from '@gltf-transform/functions';\n * import { EXTMeshoptCompression } from '@gltf-transform/extensions';\n * import { MeshoptEncoder } from 'meshoptimizer';\n *\n * await document.transform(\n * \treorder({encoder: MeshoptEncoder}),\n * \tquantize()\n * );\n *\n * document.createExtension(EXTMeshoptCompression)\n * \t.setRequired(true)\n * \t.setEncoderOptions({ method: EXTMeshoptCompression.EncoderMethod.QUANTIZE });\n * ```\n *\n * In either case, compression is deferred until generating output with an I/O\n * class.\n */\nclass EXTMeshoptCompression extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = EXT_MESHOPT_COMPRESSION;\n    /** @hidden */\n    this.prereadTypes = [PropertyType.BUFFER, PropertyType.PRIMITIVE];\n    /** @hidden */\n    this.prewriteTypes = [PropertyType.BUFFER, PropertyType.ACCESSOR];\n    /** @hidden */\n    this.readDependencies = ['meshopt.decoder'];\n    /** @hidden */\n    this.writeDependencies = ['meshopt.encoder'];\n    this._decoder = null;\n    this._decoderFallbackBufferMap = new Map();\n    this._encoder = null;\n    this._encoderOptions = DEFAULT_ENCODER_OPTIONS$1;\n    this._encoderFallbackBuffer = null;\n    this._encoderBufferViews = {};\n    this._encoderBufferViewData = {};\n    this._encoderBufferViewAccessors = {};\n  }\n  /** @hidden */\n  install(key, dependency) {\n    if (key === 'meshopt.decoder') {\n      this._decoder = dependency;\n    }\n    if (key === 'meshopt.encoder') {\n      this._encoder = dependency;\n    }\n    return this;\n  }\n  /**\n   * Configures Meshopt options for quality/compression tuning. The two methods rely on different\n   * pre-processing before compression, and should be compared on the basis of (a) quality/loss\n   * and (b) final asset size after _also_ applying a lossless compression such as gzip or brotli.\n   *\n   * - QUANTIZE: Default. Pre-process with {@link quantize quantize()} (lossy to specified\n   * \tprecision) before applying lossless Meshopt compression. Offers a considerable compression\n   * \tratio with or without further supercompression. Equivalent to `gltfpack -c`.\n   * - FILTER: Pre-process with lossy filters to improve compression, before applying lossless\n   *\tMeshopt compression. While output may initially be larger than with the QUANTIZE method,\n   *\tthis method will benefit more from supercompression (e.g. gzip or brotli). Equivalent to\n   * \t`gltfpack -cc`.\n   *\n   * Output with the FILTER method will generally be smaller after supercompression (e.g. gzip or\n   * brotli) is applied, but may be larger than QUANTIZE output without it. Decoding is very fast\n   * with both methods.\n   *\n   * Example:\n   *\n   * ```ts\n   * import { EXTMeshoptCompression } from '@gltf-transform/extensions';\n   *\n   * doc.createExtension(EXTMeshoptCompression)\n   * \t.setRequired(true)\n   * \t.setEncoderOptions({\n   * \t\tmethod: EXTMeshoptCompression.EncoderMethod.QUANTIZE\n   * \t});\n   * ```\n   */\n  setEncoderOptions(options) {\n    this._encoderOptions = _extends({}, DEFAULT_ENCODER_OPTIONS$1, options);\n    return this;\n  }\n  /**********************************************************************************************\n   * Decoding.\n   */\n  /** @internal Checks preconditions, decodes buffer views, and creates decoded primitives. */\n  preread(context, propertyType) {\n    if (!this._decoder) {\n      if (!this.isRequired()) return this;\n      throw new Error(`[${EXT_MESHOPT_COMPRESSION}] Please install extension dependency, \"meshopt.decoder\".`);\n    }\n    if (!this._decoder.supported) {\n      if (!this.isRequired()) return this;\n      throw new Error(`[${EXT_MESHOPT_COMPRESSION}]: Missing WASM support.`);\n    }\n    if (propertyType === PropertyType.BUFFER) {\n      this._prereadBuffers(context);\n    } else if (propertyType === PropertyType.PRIMITIVE) {\n      this._prereadPrimitives(context);\n    }\n    return this;\n  }\n  /** @internal Decode buffer views. */\n  _prereadBuffers(context) {\n    const jsonDoc = context.jsonDoc;\n    const viewDefs = jsonDoc.json.bufferViews || [];\n    viewDefs.forEach((viewDef, index) => {\n      if (!viewDef.extensions || !viewDef.extensions[EXT_MESHOPT_COMPRESSION]) return;\n      const meshoptDef = viewDef.extensions[EXT_MESHOPT_COMPRESSION];\n      const byteOffset = meshoptDef.byteOffset || 0;\n      const byteLength = meshoptDef.byteLength || 0;\n      const count = meshoptDef.count;\n      const stride = meshoptDef.byteStride;\n      const result = new Uint8Array(count * stride);\n      const bufferDef = jsonDoc.json.buffers[meshoptDef.buffer];\n      // TODO(cleanup): Should be encapsulated in writer-context.ts.\n      const resource = bufferDef.uri ? jsonDoc.resources[bufferDef.uri] : jsonDoc.resources[GLB_BUFFER];\n      const source = BufferUtils.toView(resource, byteOffset, byteLength);\n      this._decoder.decodeGltfBuffer(result, count, stride, source, meshoptDef.mode, meshoptDef.filter);\n      context.bufferViews[index] = result;\n    });\n  }\n  /**\n   * Mark fallback buffers and replacements.\n   *\n   * Note: Alignment with primitives is arbitrary; this just needs to happen\n   * after Buffers have been parsed.\n   * @internal\n   */\n  _prereadPrimitives(context) {\n    const jsonDoc = context.jsonDoc;\n    const viewDefs = jsonDoc.json.bufferViews || [];\n    //\n    viewDefs.forEach(viewDef => {\n      if (!viewDef.extensions || !viewDef.extensions[EXT_MESHOPT_COMPRESSION]) return;\n      const meshoptDef = viewDef.extensions[EXT_MESHOPT_COMPRESSION];\n      const buffer = context.buffers[meshoptDef.buffer];\n      const fallbackBuffer = context.buffers[viewDef.buffer];\n      const fallbackBufferDef = jsonDoc.json.buffers[viewDef.buffer];\n      if (isFallbackBuffer(fallbackBufferDef)) {\n        this._decoderFallbackBufferMap.set(fallbackBuffer, buffer);\n      }\n    });\n  }\n  /** @hidden Removes Fallback buffers, if extension is required. */\n  read(_context) {\n    if (!this.isRequired()) return this;\n    // Replace fallback buffers.\n    for (const [fallbackBuffer, buffer] of this._decoderFallbackBufferMap) {\n      for (const parent of fallbackBuffer.listParents()) {\n        if (parent instanceof Accessor) {\n          parent.swap(fallbackBuffer, buffer);\n        }\n      }\n      fallbackBuffer.dispose();\n    }\n    return this;\n  }\n  /**********************************************************************************************\n   * Encoding.\n   */\n  /** @internal Claims accessors that can be compressed and writes compressed buffer views. */\n  prewrite(context, propertyType) {\n    if (propertyType === PropertyType.ACCESSOR) {\n      this._prewriteAccessors(context);\n    } else if (propertyType === PropertyType.BUFFER) {\n      this._prewriteBuffers(context);\n    }\n    return this;\n  }\n  /** @internal Claims accessors that can be compressed. */\n  _prewriteAccessors(context) {\n    const json = context.jsonDoc.json;\n    const encoder = this._encoder;\n    const options = this._encoderOptions;\n    const graph = this.document.getGraph();\n    const fallbackBuffer = this.document.createBuffer(); // Disposed on write.\n    const fallbackBufferIndex = this.document.getRoot().listBuffers().indexOf(fallbackBuffer);\n    let nextID = 1;\n    const parentToID = new Map();\n    const getParentID = property => {\n      for (const parent of graph.listParents(property)) {\n        if (parent.propertyType === PropertyType.ROOT) continue;\n        let id = parentToID.get(property);\n        if (id === undefined) parentToID.set(property, id = nextID++);\n        return id;\n      }\n      return -1;\n    };\n    this._encoderFallbackBuffer = fallbackBuffer;\n    this._encoderBufferViews = {};\n    this._encoderBufferViewData = {};\n    this._encoderBufferViewAccessors = {};\n    for (const accessor of this.document.getRoot().listAccessors()) {\n      // See: https://github.com/donmccurdy/glTF-Transform/pull/323#issuecomment-898791251\n      // Example: https://skfb.ly/6qAD8\n      if (getTargetPath(accessor) === 'weights') continue;\n      // See: https://github.com/donmccurdy/glTF-Transform/issues/289\n      if (accessor.getSparse()) continue;\n      const usage = context.getAccessorUsage(accessor);\n      const parentID = context.accessorUsageGroupedByParent.has(usage) ? getParentID(accessor) : null;\n      const mode = getMeshoptMode(accessor, usage);\n      const filter = options.method === EncoderMethod$1.FILTER ? getMeshoptFilter(accessor, this.document) : {\n        filter: MeshoptFilter.NONE\n      };\n      const preparedAccessor = prepareAccessor(accessor, encoder, mode, filter);\n      const {\n        array,\n        byteStride\n      } = preparedAccessor;\n      const buffer = accessor.getBuffer();\n      if (!buffer) throw new Error(`${EXT_MESHOPT_COMPRESSION}: Missing buffer for accessor.`);\n      const bufferIndex = this.document.getRoot().listBuffers().indexOf(buffer);\n      // Buffer view grouping key.\n      const key = [usage, parentID, mode, filter.filter, byteStride, bufferIndex].join(':');\n      let bufferView = this._encoderBufferViews[key];\n      let bufferViewData = this._encoderBufferViewData[key];\n      let bufferViewAccessors = this._encoderBufferViewAccessors[key];\n      // Write new buffer view, if needed.\n      if (!bufferView || !bufferViewData) {\n        bufferViewAccessors = this._encoderBufferViewAccessors[key] = [];\n        bufferViewData = this._encoderBufferViewData[key] = [];\n        bufferView = this._encoderBufferViews[key] = {\n          buffer: fallbackBufferIndex,\n          target: WriterContext.USAGE_TO_TARGET[usage],\n          byteOffset: 0,\n          byteLength: 0,\n          byteStride: usage === WriterContext.BufferViewUsage.ARRAY_BUFFER ? byteStride : undefined,\n          extensions: {\n            [EXT_MESHOPT_COMPRESSION]: {\n              buffer: bufferIndex,\n              byteOffset: 0,\n              byteLength: 0,\n              mode: mode,\n              filter: filter.filter !== MeshoptFilter.NONE ? filter.filter : undefined,\n              byteStride: byteStride,\n              count: 0\n            }\n          }\n        };\n      }\n      // Write accessor.\n      const accessorDef = context.createAccessorDef(accessor);\n      accessorDef.componentType = preparedAccessor.componentType;\n      accessorDef.normalized = preparedAccessor.normalized;\n      accessorDef.byteOffset = bufferView.byteLength;\n      if (accessorDef.min && preparedAccessor.min) accessorDef.min = preparedAccessor.min;\n      if (accessorDef.max && preparedAccessor.max) accessorDef.max = preparedAccessor.max;\n      context.accessorIndexMap.set(accessor, json.accessors.length);\n      json.accessors.push(accessorDef);\n      bufferViewAccessors.push(accessorDef);\n      // Update buffer view.\n      bufferViewData.push(new Uint8Array(array.buffer, array.byteOffset, array.byteLength));\n      bufferView.byteLength += array.byteLength;\n      bufferView.extensions.EXT_meshopt_compression.count += accessor.getCount();\n    }\n  }\n  /** @internal Writes compressed buffer views. */\n  _prewriteBuffers(context) {\n    const encoder = this._encoder;\n    for (const key in this._encoderBufferViews) {\n      const bufferView = this._encoderBufferViews[key];\n      const bufferViewData = this._encoderBufferViewData[key];\n      const buffer = this.document.getRoot().listBuffers()[bufferView.extensions[EXT_MESHOPT_COMPRESSION].buffer];\n      const otherBufferViews = context.otherBufferViews.get(buffer) || [];\n      const {\n        count,\n        byteStride,\n        mode\n      } = bufferView.extensions[EXT_MESHOPT_COMPRESSION];\n      const srcArray = BufferUtils.concat(bufferViewData);\n      const dstArray = encoder.encodeGltfBuffer(srcArray, count, byteStride, mode);\n      const compressedData = BufferUtils.pad(dstArray);\n      bufferView.extensions[EXT_MESHOPT_COMPRESSION].byteLength = dstArray.byteLength;\n      bufferViewData.length = 0;\n      bufferViewData.push(compressedData);\n      otherBufferViews.push(compressedData);\n      context.otherBufferViews.set(buffer, otherBufferViews);\n    }\n  }\n  /** @hidden Puts encoded data into glTF output. */\n  write(context) {\n    let fallbackBufferByteOffset = 0;\n    // Write final encoded buffer view properties.\n    for (const key in this._encoderBufferViews) {\n      const bufferView = this._encoderBufferViews[key];\n      const bufferViewData = this._encoderBufferViewData[key][0];\n      const bufferViewIndex = context.otherBufferViewsIndexMap.get(bufferViewData);\n      const bufferViewAccessors = this._encoderBufferViewAccessors[key];\n      for (const accessorDef of bufferViewAccessors) {\n        accessorDef.bufferView = bufferViewIndex;\n      }\n      const finalBufferViewDef = context.jsonDoc.json.bufferViews[bufferViewIndex];\n      const compressedByteOffset = finalBufferViewDef.byteOffset || 0;\n      Object.assign(finalBufferViewDef, bufferView);\n      finalBufferViewDef.byteOffset = fallbackBufferByteOffset;\n      const bufferViewExtensionDef = finalBufferViewDef.extensions[EXT_MESHOPT_COMPRESSION];\n      bufferViewExtensionDef.byteOffset = compressedByteOffset;\n      fallbackBufferByteOffset += BufferUtils.padNumber(bufferView.byteLength);\n    }\n    // Write final fallback buffer.\n    const fallbackBuffer = this._encoderFallbackBuffer;\n    const fallbackBufferIndex = context.bufferIndexMap.get(fallbackBuffer);\n    const fallbackBufferDef = context.jsonDoc.json.buffers[fallbackBufferIndex];\n    fallbackBufferDef.byteLength = fallbackBufferByteOffset;\n    fallbackBufferDef.extensions = {\n      [EXT_MESHOPT_COMPRESSION]: {\n        fallback: true\n      }\n    };\n    fallbackBuffer.dispose();\n    return this;\n  }\n}\nEXTMeshoptCompression.EXTENSION_NAME = EXT_MESHOPT_COMPRESSION;\nEXTMeshoptCompression.EncoderMethod = EncoderMethod$1;\n\nclass AVIFImageUtils {\n  match(array) {\n    return array.length >= 12 && BufferUtils.decodeText(array.slice(4, 12)) === 'ftypavif';\n  }\n  /**\n   * Probes size of AVIF or HEIC image. Assumes a single static image, without\n   * orientation or other metadata that would affect dimensions.\n   */\n  getSize(array) {\n    if (!this.match(array)) return null;\n    // References:\n    // - https://stackoverflow.com/questions/66222773/how-to-get-image-dimensions-from-an-avif-file\n    // - https://github.com/nodeca/probe-image-size/blob/master/lib/parse_sync/avif.js\n    const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n    let box = unbox(view, 0);\n    if (!box) return null;\n    let offset = box.end;\n    while (box = unbox(view, offset)) {\n      if (box.type === 'meta') {\n        offset = box.start + 4; // version + flags\n      } else if (box.type === 'iprp' || box.type === 'ipco') {\n        offset = box.start;\n      } else if (box.type === 'ispe') {\n        return [view.getUint32(box.start + 4), view.getUint32(box.start + 8)];\n      } else if (box.type === 'mdat') {\n        break; // mdat should be last, unlikely to find metadata past here.\n      } else {\n        offset = box.end;\n      }\n    }\n    return null;\n  }\n  getChannels(_buffer) {\n    return 4;\n  }\n}\n/**\n * [`EXT_texture_avif`](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_avif/)\n * enables AVIF images for any material texture.\n *\n * AVIF offers greatly reduced transmission size, but\n * [requires browser support](https://caniuse.com/avif). Like PNG and JPEG, an AVIF image is\n * *fully decompressed* when uploaded to the GPU, which increases upload time and GPU memory cost.\n * For seamless uploads and minimal GPU memory cost, it is necessary to use a GPU texture format\n * like Basis Universal, with the `KHR_texture_basisu` extension.\n *\n * Defining no {@link ExtensionProperty} types, this {@link Extension} is simply attached to the\n * {@link Document}, and affects the entire Document by allowing use of the `image/avif` MIME type\n * and passing AVIF image data to the {@link Texture.setImage} method. Without the Extension, the\n * same MIME types and image data would yield an invalid glTF document, under the stricter core glTF\n * specification.\n *\n * Properties:\n * - N/A\n *\n * ### Example\n *\n * ```typescript\n * import { TextureAVIF } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const avifExtension = document.createExtension(TextureAVIF)\n * \t.setRequired(true);\n * document.createTexture('MyAVIFTexture')\n * \t.setMimeType('image/avif')\n * \t.setImage(fs.readFileSync('my-texture.avif'));\n * ```\n *\n * AVIF conversion is not done automatically when adding the extension as shown above — you must\n * convert the image data first, then pass the `.avif` payload to {@link Texture.setImage}.\n *\n * When the `EXT_texture_avif` extension is added to a file by glTF-Transform, the extension should\n * always be required. This tool does not support writing assets that \"fall back\" to optional PNG or\n * JPEG image data.\n */\nclass EXTTextureAVIF extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = EXT_TEXTURE_AVIF;\n    /** @hidden */\n    this.prereadTypes = [PropertyType.TEXTURE];\n  }\n  /** @hidden */\n  static register() {\n    ImageUtils.registerFormat('image/avif', new AVIFImageUtils());\n  }\n  /** @hidden */\n  preread(context) {\n    const textureDefs = context.jsonDoc.json.textures || [];\n    textureDefs.forEach(textureDef => {\n      if (textureDef.extensions && textureDef.extensions[EXT_TEXTURE_AVIF]) {\n        textureDef.source = textureDef.extensions[EXT_TEXTURE_AVIF].source;\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  write(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listTextures().forEach(texture => {\n      if (texture.getMimeType() === 'image/avif') {\n        const imageIndex = context.imageIndexMap.get(texture);\n        const textureDefs = jsonDoc.json.textures || [];\n        textureDefs.forEach(textureDef => {\n          if (textureDef.source === imageIndex) {\n            textureDef.extensions = textureDef.extensions || {};\n            textureDef.extensions[EXT_TEXTURE_AVIF] = {\n              source: textureDef.source\n            };\n            delete textureDef.source;\n          }\n        });\n      }\n    });\n    return this;\n  }\n}\nEXTTextureAVIF.EXTENSION_NAME = EXT_TEXTURE_AVIF;\nfunction unbox(data, offset) {\n  if (data.byteLength < 4 + offset) return null;\n  // size includes first 4 bytes (length)\n  const size = data.getUint32(offset);\n  if (data.byteLength < size + offset || size < 8) return null;\n  return {\n    type: BufferUtils.decodeText(new Uint8Array(data.buffer, data.byteOffset + offset + 4, 4)),\n    start: offset + 8,\n    end: offset + size\n  };\n}\n\nclass WEBPImageUtils {\n  match(array) {\n    return array.length >= 12 && array[8] === 87 && array[9] === 69 && array[10] === 66 && array[11] === 80;\n  }\n  getSize(array) {\n    // Reference: http://tools.ietf.org/html/rfc6386\n    const RIFF = BufferUtils.decodeText(array.slice(0, 4));\n    const WEBP = BufferUtils.decodeText(array.slice(8, 12));\n    if (RIFF !== 'RIFF' || WEBP !== 'WEBP') return null;\n    const view = new DataView(array.buffer, array.byteOffset);\n    // Reference: https://wiki.tcl-lang.org/page/Reading+WEBP+image+dimensions\n    let offset = 12;\n    while (offset < view.byteLength) {\n      const chunkId = BufferUtils.decodeText(new Uint8Array([view.getUint8(offset), view.getUint8(offset + 1), view.getUint8(offset + 2), view.getUint8(offset + 3)]));\n      const chunkByteLength = view.getUint32(offset + 4, true);\n      if (chunkId === 'VP8 ') {\n        const width = view.getInt16(offset + 14, true) & 0x3fff;\n        const height = view.getInt16(offset + 16, true) & 0x3fff;\n        return [width, height];\n      } else if (chunkId === 'VP8L') {\n        const b0 = view.getUint8(offset + 9);\n        const b1 = view.getUint8(offset + 10);\n        const b2 = view.getUint8(offset + 11);\n        const b3 = view.getUint8(offset + 12);\n        const width = 1 + ((b1 & 0x3f) << 8 | b0);\n        const height = 1 + ((b3 & 0xf) << 10 | b2 << 2 | (b1 & 0xc0) >> 6);\n        return [width, height];\n      }\n      offset += 8 + chunkByteLength + chunkByteLength % 2;\n    }\n    return null;\n  }\n  getChannels(_buffer) {\n    return 4;\n  }\n}\n/**\n * [`EXT_texture_webp`](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp/)\n * enables WebP images for any material texture.\n *\n * WebP offers greatly reduced transmission size, but\n * [requires browser support](https://caniuse.com/webp). Like PNG and JPEG, a WebP image is\n * *fully decompressed* when uploaded to the GPU, which increases upload time and GPU memory cost.\n * For seamless uploads and minimal GPU memory cost, it is necessary to use a GPU texture format\n * like Basis Universal, with the `KHR_texture_basisu` extension.\n *\n * Defining no {@link ExtensionProperty} types, this {@link Extension} is simply attached to the\n * {@link Document}, and affects the entire Document by allowing use of the `image/webp` MIME type\n * and passing WebP image data to the {@link Texture.setImage} method. Without the Extension, the\n * same MIME types and image data would yield an invalid glTF document, under the stricter core glTF\n * specification.\n *\n * Properties:\n * - N/A\n *\n * ### Example\n *\n * ```typescript\n * import { EXTTextureWebP } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const webpExtension = document.createExtension(EXTTextureWebP)\n * \t.setRequired(true);\n * document.createTexture('MyWebPTexture')\n * \t.setMimeType('image/webp')\n * \t.setImage(fs.readFileSync('my-texture.webp'));\n * ```\n *\n * WebP conversion is not done automatically when adding the extension as shown above — you must\n * convert the image data first, then pass the `.webp` payload to {@link Texture.setImage}.\n *\n * When the `EXT_texture_webp` extension is added to a file by glTF-Transform, the extension should\n * always be required. This tool does not support writing assets that \"fall back\" to optional PNG or\n * JPEG image data.\n */\nclass EXTTextureWebP extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = EXT_TEXTURE_WEBP;\n    /** @hidden */\n    this.prereadTypes = [PropertyType.TEXTURE];\n  }\n  /** @hidden */\n  static register() {\n    ImageUtils.registerFormat('image/webp', new WEBPImageUtils());\n  }\n  /** @hidden */\n  preread(context) {\n    const textureDefs = context.jsonDoc.json.textures || [];\n    textureDefs.forEach(textureDef => {\n      if (textureDef.extensions && textureDef.extensions[EXT_TEXTURE_WEBP]) {\n        textureDef.source = textureDef.extensions[EXT_TEXTURE_WEBP].source;\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  write(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listTextures().forEach(texture => {\n      if (texture.getMimeType() === 'image/webp') {\n        const imageIndex = context.imageIndexMap.get(texture);\n        const textureDefs = jsonDoc.json.textures || [];\n        textureDefs.forEach(textureDef => {\n          if (textureDef.source === imageIndex) {\n            textureDef.extensions = textureDef.extensions || {};\n            textureDef.extensions[EXT_TEXTURE_WEBP] = {\n              source: textureDef.source\n            };\n            delete textureDef.source;\n          }\n        });\n      }\n    });\n    return this;\n  }\n}\nEXTTextureWebP.EXTENSION_NAME = EXT_TEXTURE_WEBP;\n\nlet decoderModule;\n// Initialized when decoder module loads.\nlet COMPONENT_ARRAY;\nlet DATA_TYPE;\nfunction decodeGeometry(decoder, data) {\n  const buffer = new decoderModule.DecoderBuffer();\n  try {\n    buffer.Init(data, data.length);\n    const geometryType = decoder.GetEncodedGeometryType(buffer);\n    if (geometryType !== decoderModule.TRIANGULAR_MESH) {\n      throw new Error(`[${KHR_DRACO_MESH_COMPRESSION}] Unknown geometry type.`);\n    }\n    const dracoMesh = new decoderModule.Mesh();\n    const status = decoder.DecodeBufferToMesh(buffer, dracoMesh);\n    if (!status.ok() || dracoMesh.ptr === 0) {\n      throw new Error(`[${KHR_DRACO_MESH_COMPRESSION}] Decoding failure.`);\n    }\n    return dracoMesh;\n  } finally {\n    decoderModule.destroy(buffer);\n  }\n}\nfunction decodeIndex(decoder, mesh) {\n  const numFaces = mesh.num_faces();\n  const numIndices = numFaces * 3;\n  let ptr;\n  let indices;\n  if (mesh.num_points() <= 65534) {\n    const byteLength = numIndices * Uint16Array.BYTES_PER_ELEMENT;\n    ptr = decoderModule._malloc(byteLength);\n    decoder.GetTrianglesUInt16Array(mesh, byteLength, ptr);\n    indices = new Uint16Array(decoderModule.HEAPU16.buffer, ptr, numIndices).slice();\n  } else {\n    const byteLength = numIndices * Uint32Array.BYTES_PER_ELEMENT;\n    ptr = decoderModule._malloc(byteLength);\n    decoder.GetTrianglesUInt32Array(mesh, byteLength, ptr);\n    indices = new Uint32Array(decoderModule.HEAPU32.buffer, ptr, numIndices).slice();\n  }\n  decoderModule._free(ptr);\n  return indices;\n}\nfunction decodeAttribute(decoder, mesh, attribute, accessorDef) {\n  const dataType = DATA_TYPE[accessorDef.componentType];\n  const ArrayCtor = COMPONENT_ARRAY[accessorDef.componentType];\n  const numComponents = attribute.num_components();\n  const numPoints = mesh.num_points();\n  const numValues = numPoints * numComponents;\n  const byteLength = numValues * ArrayCtor.BYTES_PER_ELEMENT;\n  const ptr = decoderModule._malloc(byteLength);\n  decoder.GetAttributeDataArrayForAllPoints(mesh, attribute, dataType, byteLength, ptr);\n  const array = new ArrayCtor(decoderModule.HEAPF32.buffer, ptr, numValues).slice();\n  decoderModule._free(ptr);\n  return array;\n}\nfunction initDecoderModule(_decoderModule) {\n  decoderModule = _decoderModule;\n  COMPONENT_ARRAY = {\n    [Accessor.ComponentType.FLOAT]: Float32Array,\n    [Accessor.ComponentType.UNSIGNED_INT]: Uint32Array,\n    [Accessor.ComponentType.UNSIGNED_SHORT]: Uint16Array,\n    [Accessor.ComponentType.UNSIGNED_BYTE]: Uint8Array,\n    [Accessor.ComponentType.SHORT]: Int16Array,\n    [Accessor.ComponentType.BYTE]: Int8Array\n  };\n  DATA_TYPE = {\n    [Accessor.ComponentType.FLOAT]: decoderModule.DT_FLOAT32,\n    [Accessor.ComponentType.UNSIGNED_INT]: decoderModule.DT_UINT32,\n    [Accessor.ComponentType.UNSIGNED_SHORT]: decoderModule.DT_UINT16,\n    [Accessor.ComponentType.UNSIGNED_BYTE]: decoderModule.DT_UINT8,\n    [Accessor.ComponentType.SHORT]: decoderModule.DT_INT16,\n    [Accessor.ComponentType.BYTE]: decoderModule.DT_INT8\n  };\n}\n\nlet encoderModule;\nvar EncoderMethod;\n(function (EncoderMethod) {\n  EncoderMethod[EncoderMethod[\"EDGEBREAKER\"] = 1] = \"EDGEBREAKER\";\n  EncoderMethod[EncoderMethod[\"SEQUENTIAL\"] = 0] = \"SEQUENTIAL\";\n})(EncoderMethod || (EncoderMethod = {}));\nvar AttributeEnum;\n(function (AttributeEnum) {\n  AttributeEnum[\"POSITION\"] = \"POSITION\";\n  AttributeEnum[\"NORMAL\"] = \"NORMAL\";\n  AttributeEnum[\"COLOR\"] = \"COLOR\";\n  AttributeEnum[\"TEX_COORD\"] = \"TEX_COORD\";\n  AttributeEnum[\"GENERIC\"] = \"GENERIC\";\n})(AttributeEnum || (AttributeEnum = {}));\nconst DEFAULT_QUANTIZATION_BITS = {\n  [AttributeEnum.POSITION]: 14,\n  [AttributeEnum.NORMAL]: 10,\n  [AttributeEnum.COLOR]: 8,\n  [AttributeEnum.TEX_COORD]: 12,\n  [AttributeEnum.GENERIC]: 12\n};\nconst DEFAULT_ENCODER_OPTIONS = {\n  decodeSpeed: 5,\n  encodeSpeed: 5,\n  method: EncoderMethod.EDGEBREAKER,\n  quantizationBits: DEFAULT_QUANTIZATION_BITS,\n  quantizationVolume: 'mesh'\n};\nfunction initEncoderModule(_encoderModule) {\n  encoderModule = _encoderModule;\n}\n/**\n * References:\n * - https://github.com/mrdoob/three.js/blob/dev/examples/js/exporters/DRACOExporter.js\n * - https://github.com/CesiumGS/gltf-pipeline/blob/master/lib/compressDracoMeshes.js\n */\nfunction encodeGeometry(prim, _options = DEFAULT_ENCODER_OPTIONS) {\n  const options = _extends({}, DEFAULT_ENCODER_OPTIONS, _options);\n  options.quantizationBits = _extends({}, DEFAULT_QUANTIZATION_BITS, _options.quantizationBits);\n  const builder = new encoderModule.MeshBuilder();\n  const mesh = new encoderModule.Mesh();\n  const encoder = new encoderModule.ExpertEncoder(mesh);\n  const attributeIDs = {};\n  const dracoBuffer = new encoderModule.DracoInt8Array();\n  const hasMorphTargets = prim.listTargets().length > 0;\n  let hasSparseAttributes = false;\n  for (const semantic of prim.listSemantics()) {\n    const attribute = prim.getAttribute(semantic);\n    if (attribute.getSparse()) {\n      hasSparseAttributes = true;\n      continue;\n    }\n    const attributeEnum = getAttributeEnum(semantic);\n    const attributeID = addAttribute(builder, attribute.getComponentType(), mesh, encoderModule[attributeEnum], attribute.getCount(), attribute.getElementSize(), attribute.getArray());\n    if (attributeID === -1) throw new Error(`Error compressing \"${semantic}\" attribute.`);\n    attributeIDs[semantic] = attributeID;\n    if (options.quantizationVolume === 'mesh' || semantic !== 'POSITION') {\n      encoder.SetAttributeQuantization(attributeID, options.quantizationBits[attributeEnum]);\n    } else if (typeof options.quantizationVolume === 'object') {\n      const {\n        quantizationVolume\n      } = options;\n      const range = Math.max(quantizationVolume.max[0] - quantizationVolume.min[0], quantizationVolume.max[1] - quantizationVolume.min[1], quantizationVolume.max[2] - quantizationVolume.min[2]);\n      encoder.SetAttributeExplicitQuantization(attributeID, options.quantizationBits[attributeEnum], attribute.getElementSize(), quantizationVolume.min, range);\n    } else {\n      throw new Error('Invalid quantization volume state.');\n    }\n  }\n  const indices = prim.getIndices();\n  if (!indices) throw new EncodingError('Primitive must have indices.');\n  builder.AddFacesToMesh(mesh, indices.getCount() / 3, indices.getArray());\n  encoder.SetSpeedOptions(options.encodeSpeed, options.decodeSpeed);\n  encoder.SetTrackEncodedProperties(true);\n  // TODO(cleanup): Use edgebreaker without deduplication if possible.\n  // See https://github.com/google/draco/issues/929.\n  if (options.method === EncoderMethod.SEQUENTIAL || hasMorphTargets || hasSparseAttributes) {\n    encoder.SetEncodingMethod(encoderModule.MESH_SEQUENTIAL_ENCODING);\n  } else {\n    encoder.SetEncodingMethod(encoderModule.MESH_EDGEBREAKER_ENCODING);\n  }\n  // Encode, preserving vertex order for primitives with morph targets and sparse accessors.\n  const byteLength = encoder.EncodeToDracoBuffer(!(hasMorphTargets || hasSparseAttributes), dracoBuffer);\n  if (byteLength <= 0) throw new EncodingError('Error applying Draco compression.');\n  const data = new Uint8Array(byteLength);\n  for (let i = 0; i < byteLength; ++i) {\n    data[i] = dracoBuffer.GetValue(i);\n  }\n  const numVertices = encoder.GetNumberOfEncodedPoints();\n  const numIndices = encoder.GetNumberOfEncodedFaces() * 3;\n  encoderModule.destroy(dracoBuffer);\n  encoderModule.destroy(mesh);\n  encoderModule.destroy(builder);\n  encoderModule.destroy(encoder);\n  return {\n    numVertices,\n    numIndices,\n    data,\n    attributeIDs\n  };\n}\nfunction getAttributeEnum(semantic) {\n  if (semantic === 'POSITION') {\n    return AttributeEnum.POSITION;\n  } else if (semantic === 'NORMAL') {\n    return AttributeEnum.NORMAL;\n  } else if (semantic.startsWith('COLOR_')) {\n    return AttributeEnum.COLOR;\n  } else if (semantic.startsWith('TEXCOORD_')) {\n    return AttributeEnum.TEX_COORD;\n  }\n  return AttributeEnum.GENERIC;\n}\nfunction addAttribute(builder, componentType, mesh, attribute, count, itemSize, array) {\n  switch (componentType) {\n    case Accessor.ComponentType.UNSIGNED_BYTE:\n      return builder.AddUInt8Attribute(mesh, attribute, count, itemSize, array);\n    case Accessor.ComponentType.BYTE:\n      return builder.AddInt8Attribute(mesh, attribute, count, itemSize, array);\n    case Accessor.ComponentType.UNSIGNED_SHORT:\n      return builder.AddUInt16Attribute(mesh, attribute, count, itemSize, array);\n    case Accessor.ComponentType.SHORT:\n      return builder.AddInt16Attribute(mesh, attribute, count, itemSize, array);\n    case Accessor.ComponentType.UNSIGNED_INT:\n      return builder.AddUInt32Attribute(mesh, attribute, count, itemSize, array);\n    case Accessor.ComponentType.FLOAT:\n      return builder.AddFloatAttribute(mesh, attribute, count, itemSize, array);\n    default:\n      throw new Error(`Unexpected component type, \"${componentType}\".`);\n  }\n}\nclass EncodingError extends Error {}\n\n/**\n * [`KHR_draco_mesh_compression`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_draco_mesh_compression/)\n * provides advanced compression for mesh geometry.\n *\n * For models where geometry is a significant factor (>1 MB), Draco can reduce filesize by ~95%\n * in many cases. When animation or textures are large, other complementary compression methods\n * should be used as well. For geometry <1MB, the size of the WASM decoder library may outweigh\n * size savings.\n *\n * Be aware that decompression happens before uploading to the GPU — this will add some latency to\n * the parsing process, and means that compressing geometry with  Draco does _not_ affect runtime\n * performance. To improve framerate, you'll need to simplify the geometry by reducing vertex count\n * or draw calls — not just compress it. Finally, be aware that Draco compression is lossy:\n * repeatedly compressing and decompressing a model in a pipeline will lose precision, so\n * compression should generally be the last stage of an art workflow, and uncompressed original\n * files should be kept.\n *\n * A decoder or encoder from the `draco3dgltf` npm module for Node.js (or\n * [elsewhere for web](https://stackoverflow.com/a/66978236/1314762)) is required for reading and writing,\n * and must be provided by the application.\n *\n * ### Encoding options\n *\n * Two compression methods are available: 'edgebreaker' and 'sequential'. The\n * edgebreaker method will give higher compression in general, but changes the\n * order of the model's vertices. To preserve index order, use sequential\n * compression. When a mesh uses morph targets, or a high decoding speed is\n * selected, sequential compression will automatically be chosen.\n *\n * Both speed options affect the encoder's choice of algorithms. For example, a\n * requirement for fast decoding may prevent the encoder from using the best\n * compression methods even if the encoding speed is set to 0. In general, the\n * faster of the two options limits the choice of features that can be used by the\n * encoder. Setting --decodeSpeed to be faster than the --encodeSpeed may allow\n * the encoder to choose the optimal method out of the available features for the\n * given --decodeSpeed.\n *\n * ### Example — Read\n *\n * To read glTF files using Draco compression, ensure that the extension\n * and a decoder are registered. Geometry is decompressed while reading.\n *\n * ```typescript\n * import { NodeIO } from '@gltf-transform/core';\n * import { KHRDracoMeshCompression } from '@gltf-transform/extensions';\n * import draco3d from 'draco3dgltf';\n *\n * const io = new NodeIO()\n * \t.registerExtensions([KHRDracoMeshCompression])\n * \t.registerDependencies({\n * \t\t'draco3d.decoder': await draco3d.createDecoderModule()\n * \t});\n *\n * // Read and decode.\n * const document = await io.read('compressed.glb');\n * ```\n *\n * ### Example — Write\n *\n * The simplest way to apply Draco compression is with the {@link draco}\n * transform. The extension and an encoder must be registered.\n *\n * ```typescript\n * import { NodeIO } from '@gltf-transform/core';\n * import { KHRDracoMeshCompression } from '@gltf-transform/extensions';\n * import { draco } from '@gltf-transform/functions';\n * import draco3d from 'draco3dgltf';\n *\n * const io = new NodeIO()\n * \t.registerExtensions([KHRDracoMeshCompression])\n * \t.registerDependencies({\n * \t\t'draco3d.encoder': await draco3d.createEncoderModule()\n * \t});\n *\n * await document.transform(\n *   draco({method: 'edgebreaker'})\n * );\n *\n * await io.write('compressed.glb', document);\n * ```\n *\n * ### Example\n *\n * Equivalently, the KHRDracoMeshCompression extension can be added manually to a document.\n *\n * ```typescript\n * import { KHRDracoMeshCompression } from '@gltf-transform/extensions';\n *\n * document.createExtension(KHRDracoMeshCompression)\n * \t.setRequired(true)\n * \t.setEncoderOptions({\n * \t\tmethod: KHRDracoMeshCompression.EncoderMethod.EDGEBREAKER,\n * \t\tencodeSpeed: 5,\n * \t\tdecodeSpeed: 5,\n * \t});\n *\n * await io.write('compressed.glb', document);\n * ```\n *\n * In either case, Compression is deferred until generating output with an\n * I/O class.\n */\nclass KHRDracoMeshCompression extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_DRACO_MESH_COMPRESSION;\n    /** @hidden */\n    this.prereadTypes = [PropertyType.PRIMITIVE];\n    /** @hidden */\n    this.prewriteTypes = [PropertyType.ACCESSOR];\n    /** @hidden */\n    this.readDependencies = ['draco3d.decoder'];\n    /** @hidden */\n    this.writeDependencies = ['draco3d.encoder'];\n    this._decoderModule = null;\n    this._encoderModule = null;\n    this._encoderOptions = {};\n  }\n  /** @hidden */\n  install(key, dependency) {\n    if (key === 'draco3d.decoder') {\n      this._decoderModule = dependency;\n      initDecoderModule(this._decoderModule);\n    }\n    if (key === 'draco3d.encoder') {\n      this._encoderModule = dependency;\n      initEncoderModule(this._encoderModule);\n    }\n    return this;\n  }\n  /**\n   * Sets Draco compression options. Compression does not take effect until the Document is\n   * written with an I/O class.\n   *\n   * Defaults:\n   * ```\n   * decodeSpeed?: number = 5;\n   * encodeSpeed?: number = 5;\n   * method?: EncoderMethod = EncoderMethod.EDGEBREAKER;\n   * quantizationBits?: {[ATTRIBUTE_NAME]: bits};\n   * quantizationVolume?: 'mesh' | 'scene' | bbox = 'mesh';\n   * ```\n   */\n  setEncoderOptions(options) {\n    this._encoderOptions = options;\n    return this;\n  }\n  /** @hidden */\n  preread(context) {\n    if (!this._decoderModule) {\n      throw new Error(`[${KHR_DRACO_MESH_COMPRESSION}] Please install extension dependency, \"draco3d.decoder\".`);\n    }\n    const logger = this.document.getLogger();\n    const jsonDoc = context.jsonDoc;\n    const dracoMeshes = new Map();\n    try {\n      const meshDefs = jsonDoc.json.meshes || [];\n      for (const meshDef of meshDefs) {\n        for (const primDef of meshDef.primitives) {\n          if (!primDef.extensions || !primDef.extensions[KHR_DRACO_MESH_COMPRESSION]) continue;\n          const dracoDef = primDef.extensions[KHR_DRACO_MESH_COMPRESSION];\n          let [decoder, dracoMesh] = dracoMeshes.get(dracoDef.bufferView) || [];\n          if (!dracoMesh || !decoder) {\n            const bufferViewDef = jsonDoc.json.bufferViews[dracoDef.bufferView];\n            const bufferDef = jsonDoc.json.buffers[bufferViewDef.buffer];\n            // TODO(cleanup): Should be encapsulated in writer-context.ts.\n            const resource = bufferDef.uri ? jsonDoc.resources[bufferDef.uri] : jsonDoc.resources[GLB_BUFFER];\n            const byteOffset = bufferViewDef.byteOffset || 0;\n            const byteLength = bufferViewDef.byteLength;\n            const compressedData = BufferUtils.toView(resource, byteOffset, byteLength);\n            decoder = new this._decoderModule.Decoder();\n            dracoMesh = decodeGeometry(decoder, compressedData);\n            dracoMeshes.set(dracoDef.bufferView, [decoder, dracoMesh]);\n            logger.debug(`[${KHR_DRACO_MESH_COMPRESSION}] Decompressed ${compressedData.byteLength} bytes.`);\n          }\n          // Attributes.\n          for (const semantic in dracoDef.attributes) {\n            const accessorDef = context.jsonDoc.json.accessors[primDef.attributes[semantic]];\n            const dracoAttribute = decoder.GetAttributeByUniqueId(dracoMesh, dracoDef.attributes[semantic]);\n            const attributeArray = decodeAttribute(decoder, dracoMesh, dracoAttribute, accessorDef);\n            context.accessors[primDef.attributes[semantic]].setArray(attributeArray);\n          }\n          // Indices. Optional, see https://github.com/google/draco/issues/720.\n          if (primDef.indices !== undefined) {\n            context.accessors[primDef.indices].setArray(decodeIndex(decoder, dracoMesh));\n          }\n        }\n      }\n    } finally {\n      for (const [decoder, dracoMesh] of Array.from(dracoMeshes.values())) {\n        this._decoderModule.destroy(decoder);\n        this._decoderModule.destroy(dracoMesh);\n      }\n    }\n    return this;\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  prewrite(context, _propertyType) {\n    if (!this._encoderModule) {\n      throw new Error(`[${KHR_DRACO_MESH_COMPRESSION}] Please install extension dependency, \"draco3d.encoder\".`);\n    }\n    const logger = this.document.getLogger();\n    logger.debug(`[${KHR_DRACO_MESH_COMPRESSION}] Compression options: ${JSON.stringify(this._encoderOptions)}`);\n    const primitiveHashMap = listDracoPrimitives(this.document);\n    const primitiveEncodingMap = new Map();\n    let quantizationVolume = 'mesh';\n    if (this._encoderOptions.quantizationVolume === 'scene') {\n      if (this.document.getRoot().listScenes().length !== 1) {\n        logger.warn(`[${KHR_DRACO_MESH_COMPRESSION}]: quantizationVolume=scene requires exactly 1 scene.`);\n      } else {\n        quantizationVolume = getBounds(this.document.getRoot().listScenes().pop());\n      }\n    }\n    for (const prim of Array.from(primitiveHashMap.keys())) {\n      const primHash = primitiveHashMap.get(prim);\n      if (!primHash) throw new Error('Unexpected primitive.');\n      // Reuse an existing EncodedPrimitive, if possible.\n      if (primitiveEncodingMap.has(primHash)) {\n        primitiveEncodingMap.set(primHash, primitiveEncodingMap.get(primHash));\n        continue;\n      }\n      const indices = prim.getIndices(); // Condition for listDracoPrimitives().\n      const accessorDefs = context.jsonDoc.json.accessors;\n      // Create a new EncodedPrimitive.\n      let encodedPrim;\n      try {\n        encodedPrim = encodeGeometry(prim, _extends({}, this._encoderOptions, {\n          quantizationVolume\n        }));\n      } catch (e) {\n        if (e instanceof EncodingError) {\n          logger.warn(`[${KHR_DRACO_MESH_COMPRESSION}]: ${e.message} Skipping primitive compression.`);\n          continue;\n        }\n        throw e;\n      }\n      primitiveEncodingMap.set(primHash, encodedPrim);\n      // Create indices definition, update count.\n      const indicesDef = context.createAccessorDef(indices);\n      indicesDef.count = encodedPrim.numIndices;\n      context.accessorIndexMap.set(indices, accessorDefs.length);\n      accessorDefs.push(indicesDef);\n      // In rare cases Draco increases vertex count, requiring a larger index component type.\n      // https://github.com/donmccurdy/glTF-Transform/issues/1370\n      if (encodedPrim.numVertices > 65534 && Accessor.getComponentSize(indicesDef.componentType) <= 2) {\n        indicesDef.componentType = Accessor.ComponentType.UNSIGNED_INT;\n      } else if (encodedPrim.numVertices > 254 && Accessor.getComponentSize(indicesDef.componentType) <= 1) {\n        indicesDef.componentType = Accessor.ComponentType.UNSIGNED_SHORT;\n      }\n      // Create attribute definitions, update count.\n      for (const semantic of prim.listSemantics()) {\n        const attribute = prim.getAttribute(semantic);\n        if (encodedPrim.attributeIDs[semantic] === undefined) continue; // sparse\n        const attributeDef = context.createAccessorDef(attribute);\n        attributeDef.count = encodedPrim.numVertices;\n        context.accessorIndexMap.set(attribute, accessorDefs.length);\n        accessorDefs.push(attributeDef);\n      }\n      // Map compressed buffer view to a Buffer.\n      const buffer = prim.getAttribute('POSITION').getBuffer() || this.document.getRoot().listBuffers()[0];\n      if (!context.otherBufferViews.has(buffer)) context.otherBufferViews.set(buffer, []);\n      context.otherBufferViews.get(buffer).push(encodedPrim.data);\n    }\n    logger.debug(`[${KHR_DRACO_MESH_COMPRESSION}] Compressed ${primitiveHashMap.size} primitives.`);\n    context.extensionData[KHR_DRACO_MESH_COMPRESSION] = {\n      primitiveHashMap,\n      primitiveEncodingMap\n    };\n    return this;\n  }\n  /** @hidden */\n  write(context) {\n    const dracoContext = context.extensionData[KHR_DRACO_MESH_COMPRESSION];\n    for (const mesh of this.document.getRoot().listMeshes()) {\n      const meshDef = context.jsonDoc.json.meshes[context.meshIndexMap.get(mesh)];\n      for (let i = 0; i < mesh.listPrimitives().length; i++) {\n        const prim = mesh.listPrimitives()[i];\n        const primDef = meshDef.primitives[i];\n        const primHash = dracoContext.primitiveHashMap.get(prim);\n        if (!primHash) continue;\n        const encodedPrim = dracoContext.primitiveEncodingMap.get(primHash);\n        if (!encodedPrim) continue;\n        primDef.extensions = primDef.extensions || {};\n        primDef.extensions[KHR_DRACO_MESH_COMPRESSION] = {\n          bufferView: context.otherBufferViewsIndexMap.get(encodedPrim.data),\n          attributes: encodedPrim.attributeIDs\n        };\n      }\n    }\n    // Omit the extension if nothing was compressed.\n    if (!dracoContext.primitiveHashMap.size) {\n      const json = context.jsonDoc.json;\n      json.extensionsUsed = (json.extensionsUsed || []).filter(name => name !== KHR_DRACO_MESH_COMPRESSION);\n      json.extensionsRequired = (json.extensionsRequired || []).filter(name => name !== KHR_DRACO_MESH_COMPRESSION);\n    }\n    return this;\n  }\n}\n/**\n * Returns a list of Primitives compatible with Draco compression. If any required preconditions\n * fail, and would break assumptions required for compression, this function will throw an error.\n */\nKHRDracoMeshCompression.EXTENSION_NAME = KHR_DRACO_MESH_COMPRESSION;\n/**\n * Compression method. `EncoderMethod.EDGEBREAKER` usually provides a higher compression ratio,\n * while `EncoderMethod.SEQUENTIAL` better preserves original vertex order.\n */\nKHRDracoMeshCompression.EncoderMethod = EncoderMethod;\nfunction listDracoPrimitives(doc) {\n  const logger = doc.getLogger();\n  const included = new Set();\n  const excluded = new Set();\n  let nonIndexed = 0;\n  let nonTriangles = 0;\n  // Support compressing only indexed, mode=TRIANGLES primitives.\n  for (const mesh of doc.getRoot().listMeshes()) {\n    for (const prim of mesh.listPrimitives()) {\n      if (!prim.getIndices()) {\n        excluded.add(prim);\n        nonIndexed++;\n      } else if (prim.getMode() !== Primitive.Mode.TRIANGLES) {\n        excluded.add(prim);\n        nonTriangles++;\n      } else {\n        included.add(prim);\n      }\n    }\n  }\n  if (nonIndexed > 0) {\n    logger.warn(`[${KHR_DRACO_MESH_COMPRESSION}] Skipping Draco compression of ${nonIndexed} non-indexed primitives.`);\n  }\n  if (nonTriangles > 0) {\n    logger.warn(`[${KHR_DRACO_MESH_COMPRESSION}] Skipping Draco compression of ${nonTriangles} non-TRIANGLES primitives.`);\n  }\n  // Create an Accessor->index mapping.\n  const accessors = doc.getRoot().listAccessors();\n  const accessorIndices = new Map();\n  for (let i = 0; i < accessors.length; i++) accessorIndices.set(accessors[i], i);\n  // For each compressed Primitive, create a hash key identifying its accessors. Map each\n  // compressed Primitive and Accessor to this hash key.\n  const includedAccessors = new Map();\n  const includedHashKeys = new Set();\n  const primToHashKey = new Map();\n  for (const prim of Array.from(included)) {\n    let hashKey = createHashKey(prim, accessorIndices);\n    // If accessors of an identical primitive have already been checked, we're done.\n    if (includedHashKeys.has(hashKey)) {\n      primToHashKey.set(prim, hashKey);\n      continue;\n    }\n    // If any accessors are already in use, but the same hashKey hasn't been written, then we\n    // need to create copies of these accessors for the current encoded primitive. We can't\n    // reuse the same compressed accessor for two encoded primitives, because Draco might\n    // change the vertex count, change the vertex order, or cause other conflicts.\n    if (includedAccessors.has(prim.getIndices())) {\n      const indices = prim.getIndices(); // Condition for 'included' list.\n      const dstIndices = indices.clone();\n      accessorIndices.set(dstIndices, doc.getRoot().listAccessors().length - 1);\n      prim.swap(indices, dstIndices); // TODO(cleanup): I/O should not modify Document.\n    }\n    for (const attribute of prim.listAttributes()) {\n      if (includedAccessors.has(attribute)) {\n        const dstAttribute = attribute.clone();\n        accessorIndices.set(dstAttribute, doc.getRoot().listAccessors().length - 1);\n        prim.swap(attribute, dstAttribute); // TODO(cleanup): I/O should not modify Document.\n      }\n    }\n    // With conflicts resolved, compute the hash key again.\n    hashKey = createHashKey(prim, accessorIndices);\n    // Commit the primitive and its accessors to the hash key.\n    includedHashKeys.add(hashKey);\n    primToHashKey.set(prim, hashKey);\n    includedAccessors.set(prim.getIndices(), hashKey);\n    for (const attribute of prim.listAttributes()) {\n      includedAccessors.set(attribute, hashKey);\n    }\n  }\n  // For each compressed Accessor, ensure that it isn't used except by a Primitive.\n  for (const accessor of Array.from(includedAccessors.keys())) {\n    const parentTypes = new Set(accessor.listParents().map(prop => prop.propertyType));\n    if (parentTypes.size !== 2 || !parentTypes.has(PropertyType.PRIMITIVE) || !parentTypes.has(PropertyType.ROOT)) {\n      throw new Error(`[${KHR_DRACO_MESH_COMPRESSION}] Compressed accessors must only be used as indices or vertex attributes.`);\n    }\n  }\n  // For each compressed Primitive, ensure that Accessors are mapped only to the same hash key.\n  for (const prim of Array.from(included)) {\n    const hashKey = primToHashKey.get(prim);\n    const indices = prim.getIndices(); // Condition for 'included' list.\n    if (includedAccessors.get(indices) !== hashKey || prim.listAttributes().some(attr => includedAccessors.get(attr) !== hashKey)) {\n      throw new Error(`[${KHR_DRACO_MESH_COMPRESSION}] Draco primitives must share all, or no, accessors.`);\n    }\n  }\n  // For each excluded Primitive, ensure that no Accessors are compressed.\n  for (const prim of Array.from(excluded)) {\n    const indices = prim.getIndices(); // Condition for 'included' list.\n    if (includedAccessors.has(indices) || prim.listAttributes().some(attr => includedAccessors.has(attr))) {\n      throw new Error(`[${KHR_DRACO_MESH_COMPRESSION}] Accessor cannot be shared by compressed and uncompressed primitives.`);\n    }\n  }\n  return primToHashKey;\n}\nfunction createHashKey(prim, indexMap) {\n  const hashElements = [];\n  const indices = prim.getIndices(); // Condition for 'included' list.\n  hashElements.push(indexMap.get(indices));\n  for (const attribute of prim.listAttributes()) {\n    hashElements.push(indexMap.get(attribute));\n  }\n  return hashElements.sort().join('|');\n}\n\n/**\n * Defines a light attached to a {@link Node}. See {@link KHRLightsPunctual}.\n */\nclass Light extends ExtensionProperty {\n  /**********************************************************************************************\n   * INSTANCE.\n   */\n  init() {\n    this.extensionName = KHR_LIGHTS_PUNCTUAL;\n    this.propertyType = 'Light';\n    this.parentTypes = [PropertyType.NODE];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      color: [1, 1, 1],\n      intensity: 1,\n      type: Light.Type.POINT,\n      range: null,\n      innerConeAngle: 0,\n      outerConeAngle: Math.PI / 4\n    });\n  }\n  /**********************************************************************************************\n   * COLOR.\n   */\n  /** Light color; Linear-sRGB components. */\n  getColor() {\n    return this.get('color');\n  }\n  /** Light color; Linear-sRGB components. */\n  setColor(color) {\n    return this.set('color', color);\n  }\n  /**********************************************************************************************\n   * INTENSITY.\n   */\n  /**\n   * Brightness of light. Units depend on the type of light: point and spot lights use luminous\n   * intensity in candela (lm/sr) while directional lights use illuminance in lux (lm/m2).\n   */\n  getIntensity() {\n    return this.get('intensity');\n  }\n  /**\n   * Brightness of light. Units depend on the type of light: point and spot lights use luminous\n   * intensity in candela (lm/sr) while directional lights use illuminance in lux (lm/m2).\n   */\n  setIntensity(intensity) {\n    return this.set('intensity', intensity);\n  }\n  /**********************************************************************************************\n   * TYPE.\n   */\n  /** Type. */\n  getType() {\n    return this.get('type');\n  }\n  /** Type. */\n  setType(type) {\n    return this.set('type', type);\n  }\n  /**********************************************************************************************\n   * RANGE.\n   */\n  /**\n   * Hint defining a distance cutoff at which the light's intensity may be considered to have\n   * reached zero. Supported only for point and spot lights. Must be > 0. When undefined, range\n   * is assumed to be infinite.\n   */\n  getRange() {\n    return this.get('range');\n  }\n  /**\n   * Hint defining a distance cutoff at which the light's intensity may be considered to have\n   * reached zero. Supported only for point and spot lights. Must be > 0. When undefined, range\n   * is assumed to be infinite.\n   */\n  setRange(range) {\n    return this.set('range', range);\n  }\n  /**********************************************************************************************\n   * SPOT LIGHT PROPERTIES\n   */\n  /**\n   * Angle, in radians, from centre of spotlight where falloff begins. Must be >= 0 and\n   * < outerConeAngle.\n   */\n  getInnerConeAngle() {\n    return this.get('innerConeAngle');\n  }\n  /**\n   * Angle, in radians, from centre of spotlight where falloff begins. Must be >= 0 and\n   * < outerConeAngle.\n   */\n  setInnerConeAngle(angle) {\n    return this.set('innerConeAngle', angle);\n  }\n  /**\n   * Angle, in radians, from centre of spotlight where falloff ends. Must be > innerConeAngle and\n   * <= PI / 2.0.\n   */\n  getOuterConeAngle() {\n    return this.get('outerConeAngle');\n  }\n  /**\n   * Angle, in radians, from centre of spotlight where falloff ends. Must be > innerConeAngle and\n   * <= PI / 2.0.\n   */\n  setOuterConeAngle(angle) {\n    return this.set('outerConeAngle', angle);\n  }\n}\nLight.EXTENSION_NAME = KHR_LIGHTS_PUNCTUAL;\n/**********************************************************************************************\n * CONSTANTS.\n */\nLight.Type = {\n  POINT: 'point',\n  SPOT: 'spot',\n  DIRECTIONAL: 'directional'\n};\n\n/**\n * [`KHR_lights_punctual`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_lights_punctual/) defines three \"punctual\" light types: directional, point and\n * spot.\n *\n * Punctual lights are parameterized, infinitely small points that emit light in\n * well-defined directions and intensities. Lights are referenced by nodes and inherit the transform\n * of that node.\n *\n * Properties:\n * - {@link Light}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRLightsPunctual, Light, LightType } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const lightsExtension = document.createExtension(KHRLightsPunctual);\n *\n * // Create a Light property.\n * const light = lightsExtension.createLight()\n *\t.setType(LightType.POINT)\n *\t.setIntensity(2.0)\n *\t.setColor([1.0, 0.0, 0.0]);\n *\n * // Attach the property to a Material.\n * node.setExtension('KHR_lights_punctual', light);\n * ```\n */\nclass KHRLightsPunctual extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_LIGHTS_PUNCTUAL;\n  }\n  /** Creates a new punctual Light property for use on a {@link Node}. */\n  createLight(name = '') {\n    return new Light(this.document.getGraph(), name);\n  }\n  /** @hidden */\n  read(context) {\n    const jsonDoc = context.jsonDoc;\n    if (!jsonDoc.json.extensions || !jsonDoc.json.extensions[KHR_LIGHTS_PUNCTUAL]) return this;\n    const rootDef = jsonDoc.json.extensions[KHR_LIGHTS_PUNCTUAL];\n    const lightDefs = rootDef.lights || [];\n    const lights = lightDefs.map(lightDef => {\n      var _lightDef$spot, _lightDef$spot2;\n      const light = this.createLight().setName(lightDef.name || '').setType(lightDef.type);\n      if (lightDef.color !== undefined) light.setColor(lightDef.color);\n      if (lightDef.intensity !== undefined) light.setIntensity(lightDef.intensity);\n      if (lightDef.range !== undefined) light.setRange(lightDef.range);\n      if (((_lightDef$spot = lightDef.spot) == null ? void 0 : _lightDef$spot.innerConeAngle) !== undefined) {\n        light.setInnerConeAngle(lightDef.spot.innerConeAngle);\n      }\n      if (((_lightDef$spot2 = lightDef.spot) == null ? void 0 : _lightDef$spot2.outerConeAngle) !== undefined) {\n        light.setOuterConeAngle(lightDef.spot.outerConeAngle);\n      }\n      return light;\n    });\n    jsonDoc.json.nodes.forEach((nodeDef, nodeIndex) => {\n      if (!nodeDef.extensions || !nodeDef.extensions[KHR_LIGHTS_PUNCTUAL]) return;\n      const lightNodeDef = nodeDef.extensions[KHR_LIGHTS_PUNCTUAL];\n      context.nodes[nodeIndex].setExtension(KHR_LIGHTS_PUNCTUAL, lights[lightNodeDef.light]);\n    });\n    return this;\n  }\n  /** @hidden */\n  write(context) {\n    const jsonDoc = context.jsonDoc;\n    if (this.properties.size === 0) return this;\n    const lightDefs = [];\n    const lightIndexMap = new Map();\n    for (const property of this.properties) {\n      const light = property;\n      const lightDef = {\n        type: light.getType()\n      };\n      if (!MathUtils.eq(light.getColor(), [1, 1, 1])) lightDef.color = light.getColor();\n      if (light.getIntensity() !== 1) lightDef.intensity = light.getIntensity();\n      if (light.getRange() != null) lightDef.range = light.getRange();\n      if (light.getName()) lightDef.name = light.getName();\n      if (light.getType() === Light.Type.SPOT) {\n        lightDef.spot = {\n          innerConeAngle: light.getInnerConeAngle(),\n          outerConeAngle: light.getOuterConeAngle()\n        };\n      }\n      lightDefs.push(lightDef);\n      lightIndexMap.set(light, lightDefs.length - 1);\n    }\n    this.document.getRoot().listNodes().forEach(node => {\n      const light = node.getExtension(KHR_LIGHTS_PUNCTUAL);\n      if (light) {\n        const nodeIndex = context.nodeIndexMap.get(node);\n        const nodeDef = jsonDoc.json.nodes[nodeIndex];\n        nodeDef.extensions = nodeDef.extensions || {};\n        nodeDef.extensions[KHR_LIGHTS_PUNCTUAL] = {\n          light: lightIndexMap.get(light)\n        };\n      }\n    });\n    jsonDoc.json.extensions = jsonDoc.json.extensions || {};\n    jsonDoc.json.extensions[KHR_LIGHTS_PUNCTUAL] = {\n      lights: lightDefs\n    };\n    return this;\n  }\n}\nKHRLightsPunctual.EXTENSION_NAME = KHR_LIGHTS_PUNCTUAL;\n\nconst {\n  R: R$7,\n  G: G$7,\n  B: B$5\n} = TextureChannel;\n/**\n * Defines anisotropy (directionally-dependent reflections) on a PBR {@link Material}. See\n * {@link KHRMaterialsAnisotropy}.\n */\nclass Anisotropy extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_ANISOTROPY;\n    this.propertyType = 'Anisotropy';\n    this.parentTypes = [PropertyType.MATERIAL];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      anisotropyStrength: 0.0,\n      anisotropyRotation: 0.0,\n      anisotropyTexture: null,\n      anisotropyTextureInfo: new TextureInfo(this.graph, 'anisotropyTextureInfo')\n    });\n  }\n  /**********************************************************************************************\n   * Anisotropy strength.\n   */\n  /** Anisotropy strength. */\n  getAnisotropyStrength() {\n    return this.get('anisotropyStrength');\n  }\n  /** Anisotropy strength. */\n  setAnisotropyStrength(strength) {\n    return this.set('anisotropyStrength', strength);\n  }\n  /**********************************************************************************************\n   * Anisotropy rotation.\n   */\n  /** Anisotropy rotation; linear multiplier. */\n  getAnisotropyRotation() {\n    return this.get('anisotropyRotation');\n  }\n  /** Anisotropy rotation; linear multiplier. */\n  setAnisotropyRotation(rotation) {\n    return this.set('anisotropyRotation', rotation);\n  }\n  /**********************************************************************************************\n   * Anisotropy texture.\n   */\n  /**\n   * Anisotropy texture. Red and green channels represent the anisotropy\n   * direction in [-1, 1] tangent, bitangent space, to be rotated by\n   * anisotropyRotation. The blue channel contains strength as [0, 1] to be\n   * multiplied by anisotropyStrength.\n   */\n  getAnisotropyTexture() {\n    return this.getRef('anisotropyTexture');\n  }\n  /**\n   * Settings affecting the material's use of its anisotropy texture. If no\n   * texture is attached, {@link TextureInfo} is `null`.\n   */\n  getAnisotropyTextureInfo() {\n    return this.getRef('anisotropyTexture') ? this.getRef('anisotropyTextureInfo') : null;\n  }\n  /** Anisotropy texture. See {@link Anisotropy.getAnisotropyTexture getAnisotropyTexture}. */\n  setAnisotropyTexture(texture) {\n    return this.setRef('anisotropyTexture', texture, {\n      channels: R$7 | G$7 | B$5\n    });\n  }\n}\nAnisotropy.EXTENSION_NAME = KHR_MATERIALS_ANISOTROPY;\n\n/**\n * [`KHR_materials_anisotropy`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_anisotropy/)\n * defines anisotropy (directionally-dependent reflections) on a PBR material.\n *\n * ![Illustration](/media/extensions/khr-materials-anisotropy.jpg)\n *\n * > _**Figure:** Effect of each color channel in the anisotropyTexture. Left\n * > to right: the full anisotropy texture, filling the red channel with black,\n * > filling the green channel with black, filling the blue channel with black.\n * > Source: [Khronos Group & Wayfair](https://github.com/KhronosGroup/glTF-Sample-Assets/tree/main/Models/AnisotropyBarnLamp)._\n *\n * This extension defines the anisotropic property of a material as observable with brushed metals\n * for instance. An asymmetric specular lobe model is introduced to allow for such phenomena. The\n * visually distinct feature of that lobe is the elongated appearance of the specular reflection.\n * For a single punctual light source, the specular reflection will eventually degenerate into a\n * zero width line in the limit, that is where the material is fully anisotropic, as opposed to be\n * fully isotropic in which case the specular reflection is radially symmetric.\n *\n * Properties:\n * - {@link Anisotropy}\n *\n * ### Example\n *\n * The `KHRMaterialsAnisotropy` class provides a single {@link ExtensionProperty} type, `Anisotropy`,\n * which may be attached to any {@link Material} instance. For example:\n *\n * ```typescript\n * import { KHRMaterialsAnisotropy, Anisotropy } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const anisotropyExtension = document.createExtension(KHRMaterialsAnisotropy);\n *\n * // Create an Anisotropy property.\n * const anisotropy = anisotropyExtension.createAnisotropy()\n * \t.setAnisotropyStrength(1.0)\n * \t.setAnisotropyRotation(Math.PI / 4);\n *\n * // Attach the property to a Material.\n * material.setExtension('KHR_materials_anisotropy', anisotropy);\n * ```\n */\nclass KHRMaterialsAnisotropy extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_MATERIALS_ANISOTROPY;\n    this.prereadTypes = [PropertyType.MESH];\n    this.prewriteTypes = [PropertyType.MESH];\n  }\n  /** Creates a new Anisotropy property for use on a {@link Material}. */\n  createAnisotropy() {\n    return new Anisotropy(this.document.getGraph());\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  write(_context) {\n    return this;\n  }\n  /** @hidden */\n  preread(context) {\n    const jsonDoc = context.jsonDoc;\n    const materialDefs = jsonDoc.json.materials || [];\n    const textureDefs = jsonDoc.json.textures || [];\n    materialDefs.forEach((materialDef, materialIndex) => {\n      if (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_ANISOTROPY]) {\n        const anisotropy = this.createAnisotropy();\n        context.materials[materialIndex].setExtension(KHR_MATERIALS_ANISOTROPY, anisotropy);\n        const anisotropyDef = materialDef.extensions[KHR_MATERIALS_ANISOTROPY];\n        // Factors.\n        if (anisotropyDef.anisotropyStrength !== undefined) {\n          anisotropy.setAnisotropyStrength(anisotropyDef.anisotropyStrength);\n        }\n        if (anisotropyDef.anisotropyRotation !== undefined) {\n          anisotropy.setAnisotropyRotation(anisotropyDef.anisotropyRotation);\n        }\n        // Textures.\n        if (anisotropyDef.anisotropyTexture !== undefined) {\n          const textureInfoDef = anisotropyDef.anisotropyTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          anisotropy.setAnisotropyTexture(texture);\n          context.setTextureInfo(anisotropy.getAnisotropyTextureInfo(), textureInfoDef);\n        }\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  prewrite(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listMaterials().forEach(material => {\n      const anisotropy = material.getExtension(KHR_MATERIALS_ANISOTROPY);\n      if (anisotropy) {\n        const materialIndex = context.materialIndexMap.get(material);\n        const materialDef = jsonDoc.json.materials[materialIndex];\n        materialDef.extensions = materialDef.extensions || {};\n        // Factors.\n        const anisotropyDef = materialDef.extensions[KHR_MATERIALS_ANISOTROPY] = {};\n        if (anisotropy.getAnisotropyStrength() > 0) {\n          anisotropyDef.anisotropyStrength = anisotropy.getAnisotropyStrength();\n        }\n        if (anisotropy.getAnisotropyRotation() !== 0) {\n          anisotropyDef.anisotropyRotation = anisotropy.getAnisotropyRotation();\n        }\n        // Textures.\n        if (anisotropy.getAnisotropyTexture()) {\n          const texture = anisotropy.getAnisotropyTexture();\n          const textureInfo = anisotropy.getAnisotropyTextureInfo();\n          anisotropyDef.anisotropyTexture = context.createTextureInfoDef(texture, textureInfo);\n        }\n      }\n    });\n    return this;\n  }\n}\nKHRMaterialsAnisotropy.EXTENSION_NAME = KHR_MATERIALS_ANISOTROPY;\n\nconst {\n  R: R$6,\n  G: G$6,\n  B: B$4\n} = TextureChannel;\n/**\n * Defines clear coat for a PBR material. See {@link KHRMaterialsClearcoat}.\n */\nclass Clearcoat extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_CLEARCOAT;\n    this.propertyType = 'Clearcoat';\n    this.parentTypes = [PropertyType.MATERIAL];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      clearcoatFactor: 0,\n      clearcoatTexture: null,\n      clearcoatTextureInfo: new TextureInfo(this.graph, 'clearcoatTextureInfo'),\n      clearcoatRoughnessFactor: 0,\n      clearcoatRoughnessTexture: null,\n      clearcoatRoughnessTextureInfo: new TextureInfo(this.graph, 'clearcoatRoughnessTextureInfo'),\n      clearcoatNormalScale: 1,\n      clearcoatNormalTexture: null,\n      clearcoatNormalTextureInfo: new TextureInfo(this.graph, 'clearcoatNormalTextureInfo')\n    });\n  }\n  /**********************************************************************************************\n   * Clearcoat.\n   */\n  /** Clearcoat; linear multiplier. See {@link Clearcoat.getClearcoatTexture getClearcoatTexture}. */\n  getClearcoatFactor() {\n    return this.get('clearcoatFactor');\n  }\n  /** Clearcoat; linear multiplier. See {@link Clearcoat.getClearcoatTexture getClearcoatTexture}. */\n  setClearcoatFactor(factor) {\n    return this.set('clearcoatFactor', factor);\n  }\n  /**\n   * Clearcoat texture; linear multiplier. The `r` channel of this texture specifies an amount\n   * [0-1] of coating over the surface of the material, which may have its own roughness and\n   * normal map properties.\n   */\n  getClearcoatTexture() {\n    return this.getRef('clearcoatTexture');\n  }\n  /**\n   * Settings affecting the material's use of its clearcoat texture. If no texture is attached,\n   * {@link TextureInfo} is `null`.\n   */\n  getClearcoatTextureInfo() {\n    return this.getRef('clearcoatTexture') ? this.getRef('clearcoatTextureInfo') : null;\n  }\n  /** Sets clearcoat texture. See {@link Clearcoat.getClearcoatTexture getClearcoatTexture}. */\n  setClearcoatTexture(texture) {\n    return this.setRef('clearcoatTexture', texture, {\n      channels: R$6\n    });\n  }\n  /**********************************************************************************************\n   * Clearcoat roughness.\n   */\n  /**\n   * Clearcoat roughness; linear multiplier.\n   * See {@link Clearcoat.getClearcoatRoughnessTexture getClearcoatRoughnessTexture}.\n   */\n  getClearcoatRoughnessFactor() {\n    return this.get('clearcoatRoughnessFactor');\n  }\n  /**\n   * Clearcoat roughness; linear multiplier.\n   * See {@link Clearcoat.getClearcoatRoughnessTexture getClearcoatRoughnessTexture}.\n   */\n  setClearcoatRoughnessFactor(factor) {\n    return this.set('clearcoatRoughnessFactor', factor);\n  }\n  /**\n   * Clearcoat roughness texture; linear multiplier. The `g` channel of this texture specifies\n   * roughness, independent of the base layer's roughness.\n   */\n  getClearcoatRoughnessTexture() {\n    return this.getRef('clearcoatRoughnessTexture');\n  }\n  /**\n   * Settings affecting the material's use of its clearcoat roughness texture. If no texture is\n   * attached, {@link TextureInfo} is `null`.\n   */\n  getClearcoatRoughnessTextureInfo() {\n    return this.getRef('clearcoatRoughnessTexture') ? this.getRef('clearcoatRoughnessTextureInfo') : null;\n  }\n  /**\n   * Sets clearcoat roughness texture.\n   * See {@link Clearcoat.getClearcoatRoughnessTexture getClearcoatRoughnessTexture}.\n   */\n  setClearcoatRoughnessTexture(texture) {\n    return this.setRef('clearcoatRoughnessTexture', texture, {\n      channels: G$6\n    });\n  }\n  /**********************************************************************************************\n   * Clearcoat normals.\n   */\n  /** Clearcoat normal scale. See {@link Clearcoat.getClearcoatNormalTexture getClearcoatNormalTexture}. */\n  getClearcoatNormalScale() {\n    return this.get('clearcoatNormalScale');\n  }\n  /** Clearcoat normal scale. See {@link Clearcoat.getClearcoatNormalTexture getClearcoatNormalTexture}. */\n  setClearcoatNormalScale(scale) {\n    return this.set('clearcoatNormalScale', scale);\n  }\n  /**\n   * Clearcoat normal map. Independent of the material base layer normal map.\n   */\n  getClearcoatNormalTexture() {\n    return this.getRef('clearcoatNormalTexture');\n  }\n  /**\n   * Settings affecting the material's use of its clearcoat normal texture. If no texture is\n   * attached, {@link TextureInfo} is `null`.\n   */\n  getClearcoatNormalTextureInfo() {\n    return this.getRef('clearcoatNormalTexture') ? this.getRef('clearcoatNormalTextureInfo') : null;\n  }\n  /** Sets clearcoat normal texture. See {@link Clearcoat.getClearcoatNormalTexture getClearcoatNormalTexture}. */\n  setClearcoatNormalTexture(texture) {\n    return this.setRef('clearcoatNormalTexture', texture, {\n      channels: R$6 | G$6 | B$4\n    });\n  }\n}\nClearcoat.EXTENSION_NAME = KHR_MATERIALS_CLEARCOAT;\n\n/**\n * [KHR_materials_clearcoat](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_clearcoat/)\n * defines a clear coating on a glTF PBR material.\n *\n * ![Illustration](/media/extensions/khr-materials-clearcoat.png)\n *\n * > _**Figure:** Comparison of a carbon-fiber material without clearcoat (left) and with clearcoat\n * > (right). Source: [Filament](https://google.github.io/filament/Materials.html)._\n *\n * A clear coat is a common technique used in Physically-Based\n * Rendering for a protective layer applied to a base material.\n * Commonly used to represent car paint, carbon fiber, or thin lacquers.\n *\n * Properties:\n * - {@link Clearcoat}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMaterialsClearcoat, Clearcoat } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const clearcoatExtension = document.createExtension(KHRMaterialsClearcoat);\n *\n * // Create Clearcoat property.\n * const clearcoat = clearcoatExtension.createClearcoat()\n *\t.setClearcoatFactor(1.0);\n *\n * // Assign to a Material.\n * material.setExtension('KHR_materials_clearcoat', clearcoat);\n * ```\n */\nclass KHRMaterialsClearcoat extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_MATERIALS_CLEARCOAT;\n    this.prereadTypes = [PropertyType.MESH];\n    this.prewriteTypes = [PropertyType.MESH];\n  }\n  /** Creates a new Clearcoat property for use on a {@link Material}. */\n  createClearcoat() {\n    return new Clearcoat(this.document.getGraph());\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  write(_context) {\n    return this;\n  }\n  /** @hidden */\n  preread(context) {\n    const jsonDoc = context.jsonDoc;\n    const materialDefs = jsonDoc.json.materials || [];\n    const textureDefs = jsonDoc.json.textures || [];\n    materialDefs.forEach((materialDef, materialIndex) => {\n      if (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_CLEARCOAT]) {\n        const clearcoat = this.createClearcoat();\n        context.materials[materialIndex].setExtension(KHR_MATERIALS_CLEARCOAT, clearcoat);\n        const clearcoatDef = materialDef.extensions[KHR_MATERIALS_CLEARCOAT];\n        // Factors.\n        if (clearcoatDef.clearcoatFactor !== undefined) {\n          clearcoat.setClearcoatFactor(clearcoatDef.clearcoatFactor);\n        }\n        if (clearcoatDef.clearcoatRoughnessFactor !== undefined) {\n          clearcoat.setClearcoatRoughnessFactor(clearcoatDef.clearcoatRoughnessFactor);\n        }\n        // Textures.\n        if (clearcoatDef.clearcoatTexture !== undefined) {\n          const textureInfoDef = clearcoatDef.clearcoatTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          clearcoat.setClearcoatTexture(texture);\n          context.setTextureInfo(clearcoat.getClearcoatTextureInfo(), textureInfoDef);\n        }\n        if (clearcoatDef.clearcoatRoughnessTexture !== undefined) {\n          const textureInfoDef = clearcoatDef.clearcoatRoughnessTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          clearcoat.setClearcoatRoughnessTexture(texture);\n          context.setTextureInfo(clearcoat.getClearcoatRoughnessTextureInfo(), textureInfoDef);\n        }\n        if (clearcoatDef.clearcoatNormalTexture !== undefined) {\n          const textureInfoDef = clearcoatDef.clearcoatNormalTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          clearcoat.setClearcoatNormalTexture(texture);\n          context.setTextureInfo(clearcoat.getClearcoatNormalTextureInfo(), textureInfoDef);\n          if (textureInfoDef.scale !== undefined) {\n            clearcoat.setClearcoatNormalScale(textureInfoDef.scale);\n          }\n        }\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  prewrite(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listMaterials().forEach(material => {\n      const clearcoat = material.getExtension(KHR_MATERIALS_CLEARCOAT);\n      if (clearcoat) {\n        const materialIndex = context.materialIndexMap.get(material);\n        const materialDef = jsonDoc.json.materials[materialIndex];\n        materialDef.extensions = materialDef.extensions || {};\n        // Factors.\n        const clearcoatDef = materialDef.extensions[KHR_MATERIALS_CLEARCOAT] = {\n          clearcoatFactor: clearcoat.getClearcoatFactor(),\n          clearcoatRoughnessFactor: clearcoat.getClearcoatRoughnessFactor()\n        };\n        // Textures.\n        if (clearcoat.getClearcoatTexture()) {\n          const texture = clearcoat.getClearcoatTexture();\n          const textureInfo = clearcoat.getClearcoatTextureInfo();\n          clearcoatDef.clearcoatTexture = context.createTextureInfoDef(texture, textureInfo);\n        }\n        if (clearcoat.getClearcoatRoughnessTexture()) {\n          const texture = clearcoat.getClearcoatRoughnessTexture();\n          const textureInfo = clearcoat.getClearcoatRoughnessTextureInfo();\n          clearcoatDef.clearcoatRoughnessTexture = context.createTextureInfoDef(texture, textureInfo);\n        }\n        if (clearcoat.getClearcoatNormalTexture()) {\n          const texture = clearcoat.getClearcoatNormalTexture();\n          const textureInfo = clearcoat.getClearcoatNormalTextureInfo();\n          clearcoatDef.clearcoatNormalTexture = context.createTextureInfoDef(texture, textureInfo);\n          if (clearcoat.getClearcoatNormalScale() !== 1) {\n            clearcoatDef.clearcoatNormalTexture.scale = clearcoat.getClearcoatNormalScale();\n          }\n        }\n      }\n    });\n    return this;\n  }\n}\nKHRMaterialsClearcoat.EXTENSION_NAME = KHR_MATERIALS_CLEARCOAT;\n\nconst {\n  R: R$5,\n  G: G$5,\n  B: B$3,\n  A: A$3\n} = TextureChannel;\n/**\n * Defines diffuse transmission on a PBR {@link Material}. See {@link KHRMaterialsDiffuseTransmission}.\n *\n * @experimental KHR_materials_diffuse_transmission is not yet ratified by the Khronos Group.\n */\nclass DiffuseTransmission extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_DIFFUSE_TRANSMISSION;\n    this.propertyType = 'DiffuseTransmission';\n    this.parentTypes = [PropertyType.MATERIAL];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      diffuseTransmissionFactor: 0.0,\n      diffuseTransmissionTexture: null,\n      diffuseTransmissionTextureInfo: new TextureInfo(this.graph, 'diffuseTransmissionTextureInfo'),\n      diffuseTransmissionColorFactor: [1.0, 1.0, 1.0],\n      diffuseTransmissionColorTexture: null,\n      diffuseTransmissionColorTextureInfo: new TextureInfo(this.graph, 'diffuseTransmissionColorTextureInfo')\n    });\n  }\n  /**********************************************************************************************\n   * Diffuse transmission.\n   */\n  /**\n   * Percentage of reflected, non-specularly reflected light that is transmitted through the\n   * surface via the Lambertian diffuse transmission, i.e., the strength of the diffuse\n   * transmission effect.\n   */\n  getDiffuseTransmissionFactor() {\n    return this.get('diffuseTransmissionFactor');\n  }\n  /**\n   * Percentage of reflected, non-specularly reflected light that is transmitted through the\n   * surface via the Lambertian diffuse transmission, i.e., the strength of the diffuse\n   * transmission effect.\n   */\n  setDiffuseTransmissionFactor(factor) {\n    return this.set('diffuseTransmissionFactor', factor);\n  }\n  /**\n   * Texture that defines the strength of the diffuse transmission effect, stored in the alpha (A)\n   * channel. Will be multiplied by the diffuseTransmissionFactor.\n   */\n  getDiffuseTransmissionTexture() {\n    return this.getRef('diffuseTransmissionTexture');\n  }\n  /**\n   * Settings affecting the material's use of its diffuse transmission texture. If no texture is attached,\n   * {@link TextureInfo} is `null`.\n   */\n  getDiffuseTransmissionTextureInfo() {\n    return this.getRef('diffuseTransmissionTexture') ? this.getRef('diffuseTransmissionTextureInfo') : null;\n  }\n  /**\n   * Texture that defines the strength of the diffuse transmission effect, stored in the alpha (A)\n   * channel. Will be multiplied by the diffuseTransmissionFactor.\n   */\n  setDiffuseTransmissionTexture(texture) {\n    return this.setRef('diffuseTransmissionTexture', texture, {\n      channels: A$3\n    });\n  }\n  /**********************************************************************************************\n   * Diffuse transmission color.\n   */\n  /** Color of the transmitted light; Linear-sRGB components. */\n  getDiffuseTransmissionColorFactor() {\n    return this.get('diffuseTransmissionColorFactor');\n  }\n  /** Color of the transmitted light; Linear-sRGB components. */\n  setDiffuseTransmissionColorFactor(factor) {\n    return this.set('diffuseTransmissionColorFactor', factor);\n  }\n  /**\n   * Texture that defines the color of the transmitted light, stored in the RGB channels and\n   * encoded in sRGB. This texture will be multiplied by diffuseTransmissionColorFactor.\n   */\n  getDiffuseTransmissionColorTexture() {\n    return this.getRef('diffuseTransmissionColorTexture');\n  }\n  /**\n   * Settings affecting the material's use of its diffuse transmission color texture. If no\n   * texture is attached, {@link TextureInfo} is `null`.\n   */\n  getDiffuseTransmissionColorTextureInfo() {\n    return this.getRef('diffuseTransmissionColorTexture') ? this.getRef('diffuseTransmissionColorTextureInfo') : null;\n  }\n  /**\n   * Texture that defines the color of the transmitted light, stored in the RGB channels and\n   * encoded in sRGB. This texture will be multiplied by diffuseTransmissionColorFactor.\n   */\n  setDiffuseTransmissionColorTexture(texture) {\n    return this.setRef('diffuseTransmissionColorTexture', texture, {\n      channels: R$5 | G$5 | B$3\n    });\n  }\n}\nDiffuseTransmission.EXTENSION_NAME = KHR_MATERIALS_DIFFUSE_TRANSMISSION;\n\n/**\n * [KHR_materials_diffuse_transmission](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_diffuse_transmission/)\n * defines diffuse transmission on a glTF PBR material.\n *\n * ![Illustration](/media/extensions/khr-materials-diffuse-transmission.png)\n *\n * > _**Figure:** Sphere using `KHR_materials_diffuse_transmission` with varying roughness (0.0, 0.2, 0.4).\n * > Source: Khronos Group._\n *\n * Adds a Lambertian diffuse transmission BSDF to the metallic-roughness\n * material. Thin, dielectric objects like leaves or paper diffusely transmit\n * incoming light to the opposite side of the surface. For optically thick\n * media (volumes) with short scattering distances and therefore dense\n * scattering behavior, a diffuse transmission lobe is a phenomenological\n * plausible and cheap approximation.\n *\n * Properties:\n * - {@link DiffuseTransmission}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMaterialsDiffuseTransmission, DiffuseTransmission } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const diffuseTransmissionExtension = document.createExtension(KHRMaterialsDiffuseTransmission);\n *\n * // Create DiffuseTransmission property.\n * const diffuseTransmission = diffuseTransmission.createDiffuseTransmission()\n *\t.setDiffuseTransmissionFactor(1.0);\n *\n * // Assign to a Material.\n * material.setExtension('KHR_materials_diffuse_transmission', diffuseTransmission);\n * ```\n *\n * @experimental KHR_materials_diffuse_transmission is not yet ratified by the Khronos Group.\n */\nclass KHRMaterialsDiffuseTransmission extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_MATERIALS_DIFFUSE_TRANSMISSION;\n  }\n  /** Creates a new DiffuseTransmission property for use on a {@link Material}. */\n  createDiffuseTransmission() {\n    return new DiffuseTransmission(this.document.getGraph());\n  }\n  /** @hidden */\n  read(context) {\n    const jsonDoc = context.jsonDoc;\n    const materialDefs = jsonDoc.json.materials || [];\n    const textureDefs = jsonDoc.json.textures || [];\n    materialDefs.forEach((materialDef, materialIndex) => {\n      if (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_DIFFUSE_TRANSMISSION]) {\n        const transmission = this.createDiffuseTransmission();\n        context.materials[materialIndex].setExtension(KHR_MATERIALS_DIFFUSE_TRANSMISSION, transmission);\n        const transmissionDef = materialDef.extensions[KHR_MATERIALS_DIFFUSE_TRANSMISSION];\n        // Factors.\n        if (transmissionDef.diffuseTransmissionFactor !== undefined) {\n          transmission.setDiffuseTransmissionFactor(transmissionDef.diffuseTransmissionFactor);\n        }\n        if (transmissionDef.diffuseTransmissionColorFactor !== undefined) {\n          transmission.setDiffuseTransmissionColorFactor(transmissionDef.diffuseTransmissionColorFactor);\n        }\n        // Textures.\n        if (transmissionDef.diffuseTransmissionTexture !== undefined) {\n          const textureInfoDef = transmissionDef.diffuseTransmissionTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          transmission.setDiffuseTransmissionTexture(texture);\n          context.setTextureInfo(transmission.getDiffuseTransmissionTextureInfo(), textureInfoDef);\n        }\n        if (transmissionDef.diffuseTransmissionColorTexture !== undefined) {\n          const textureInfoDef = transmissionDef.diffuseTransmissionColorTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          transmission.setDiffuseTransmissionColorTexture(texture);\n          context.setTextureInfo(transmission.getDiffuseTransmissionColorTextureInfo(), textureInfoDef);\n        }\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  write(context) {\n    const jsonDoc = context.jsonDoc;\n    for (const material of this.document.getRoot().listMaterials()) {\n      const transmission = material.getExtension(KHR_MATERIALS_DIFFUSE_TRANSMISSION);\n      if (!transmission) continue;\n      const materialIndex = context.materialIndexMap.get(material);\n      const materialDef = jsonDoc.json.materials[materialIndex];\n      materialDef.extensions = materialDef.extensions || {};\n      // Factors.\n      const transmissionDef = materialDef.extensions[KHR_MATERIALS_DIFFUSE_TRANSMISSION] = {\n        diffuseTransmissionFactor: transmission.getDiffuseTransmissionFactor(),\n        diffuseTransmissionColorFactor: transmission.getDiffuseTransmissionColorFactor()\n      };\n      // Textures.\n      if (transmission.getDiffuseTransmissionTexture()) {\n        const texture = transmission.getDiffuseTransmissionTexture();\n        const textureInfo = transmission.getDiffuseTransmissionTextureInfo();\n        transmissionDef.diffuseTransmissionTexture = context.createTextureInfoDef(texture, textureInfo);\n      }\n      if (transmission.getDiffuseTransmissionColorTexture()) {\n        const texture = transmission.getDiffuseTransmissionColorTexture();\n        const textureInfo = transmission.getDiffuseTransmissionColorTextureInfo();\n        transmissionDef.diffuseTransmissionColorTexture = context.createTextureInfoDef(texture, textureInfo);\n      }\n    }\n    return this;\n  }\n}\nKHRMaterialsDiffuseTransmission.EXTENSION_NAME = KHR_MATERIALS_DIFFUSE_TRANSMISSION;\n\n/**\n * Defines dispersion for a PBR {@link Material}. See {@link KHRMaterialsDispersion}.\n */\nclass Dispersion extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_DISPERSION;\n    this.propertyType = 'Dispersion';\n    this.parentTypes = [PropertyType.MATERIAL];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      dispersion: 0\n    });\n  }\n  /**********************************************************************************************\n   * Dispersion.\n   */\n  /** Dispersion. */\n  getDispersion() {\n    return this.get('dispersion');\n  }\n  /** Dispersion. */\n  setDispersion(dispersion) {\n    return this.set('dispersion', dispersion);\n  }\n}\nDispersion.EXTENSION_NAME = KHR_MATERIALS_DISPERSION;\n\n/**\n * [KHR_materials_dispersion](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_dispersion/)\n * defines dispersion on a glTF PBR material.\n *\n * ![illustration](/media/extensions/khr-materials-dispersion.jpg)\n *\n * > _**Figure:** Prisms demonstrating volumetric refraction and dispersion, for varying\n * > values of dispersion and IOR. Source: Khronos Group, rendered in Adobe Stager._\n *\n * Dispersion enables configuring the strength of the angular separation of colors (chromatic\n * aberration) transmitting through a relatively clear volume.  It is an enhancement to the\n * default `KHR_materials_volume` transmission model which assumes no dispersion.\n *\n * Properties:\n * - {@link Dispersion}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMaterialsDispersion, Dispersion } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const dispersionExtension = document.createExtension(KHRMaterialsDispersion);\n *\n * // Create Dispersion property.\n * const dispersion = dispersionExtension.createDispersion().setDispersion(1.0);\n *\n * // Assign to a Material.\n * material.setExtension('KHR_materials_dispersion', dispersion);\n * ```\n */\nclass KHRMaterialsDispersion extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_MATERIALS_DISPERSION;\n    this.prereadTypes = [PropertyType.MESH];\n    this.prewriteTypes = [PropertyType.MESH];\n  }\n  /** Creates a new Dispersion property for use on a {@link Material}. */\n  createDispersion() {\n    return new Dispersion(this.document.getGraph());\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  write(_context) {\n    return this;\n  }\n  /** @hidden */\n  preread(context) {\n    const jsonDoc = context.jsonDoc;\n    const materialDefs = jsonDoc.json.materials || [];\n    materialDefs.forEach((materialDef, materialIndex) => {\n      if (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_DISPERSION]) {\n        const dispersion = this.createDispersion();\n        context.materials[materialIndex].setExtension(KHR_MATERIALS_DISPERSION, dispersion);\n        const dispersionDef = materialDef.extensions[KHR_MATERIALS_DISPERSION];\n        // Factors.\n        if (dispersionDef.dispersion !== undefined) {\n          dispersion.setDispersion(dispersionDef.dispersion);\n        }\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  prewrite(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listMaterials().forEach(material => {\n      const dispersion = material.getExtension(KHR_MATERIALS_DISPERSION);\n      if (dispersion) {\n        const materialIndex = context.materialIndexMap.get(material);\n        const materialDef = jsonDoc.json.materials[materialIndex];\n        materialDef.extensions = materialDef.extensions || {};\n        // Factors.\n        materialDef.extensions[KHR_MATERIALS_DISPERSION] = {\n          dispersion: dispersion.getDispersion()\n        };\n      }\n    });\n    return this;\n  }\n}\nKHRMaterialsDispersion.EXTENSION_NAME = KHR_MATERIALS_DISPERSION;\n\n/**\n * Defines emissive strength for a PBR {@link Material}, allowing high-dynamic-range\n * (HDR) emissive materials. See {@link KHRMaterialsEmissiveStrength}.\n */\nclass EmissiveStrength extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_EMISSIVE_STRENGTH;\n    this.propertyType = 'EmissiveStrength';\n    this.parentTypes = [PropertyType.MATERIAL];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      emissiveStrength: 1.0\n    });\n  }\n  /**********************************************************************************************\n   * EmissiveStrength.\n   */\n  /** EmissiveStrength. */\n  getEmissiveStrength() {\n    return this.get('emissiveStrength');\n  }\n  /** EmissiveStrength. */\n  setEmissiveStrength(strength) {\n    return this.set('emissiveStrength', strength);\n  }\n}\nEmissiveStrength.EXTENSION_NAME = KHR_MATERIALS_EMISSIVE_STRENGTH;\n\n/**\n * [KHR_materials_emissive_strength](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_emissive_strength/)\n * defines emissive strength and enables high-dynamic-range (HDR) emissive materials.\n *\n * ![Illustration](/media/extensions/khr-materials-emissive-strength.jpg)\n *\n * > _**Figure:** Cubes with emissive color #59BCF3 and emissive strength\n * > increasing from 1 to 256 nits, left to right. Rendered in [three.js](https://threejs.org/),\n * > with independent point lighting and a bloom effect.\n * > Source: [Don McCurdy](https://www.donmccurdy.com/2024/04/27/emission-and-bloom/)._\n *\n * The core glTF 2.0 material model includes {@link Material.setEmissiveFactor `emissiveFactor`}\n * and {@link Material.setEmissiveTexture `emissiveTexture`} to control the color and intensity\n * of the light being emitted by the material, clamped to the range [0.0, 1.0]. However, in\n * PBR environments with HDR reflections and lighting, stronger emission effects may be desirable.\n *\n * In this extension, a new {@link EmissiveStrength.setEmissiveStrength `emissiveStrength`} scalar\n * factor is supplied, which governs the upper limit of emissive strength per material and may be\n * given arbitrarily high values.\n *\n * For implementations where a physical light unit is needed, the units for the multiplicative\n * product of the emissive texture and factor are candela per square meter (cd / m2), sometimes\n * called _nits_. Many realtime rendering engines simplify this calculation by assuming that an\n * emissive factor of 1.0 results in a fully exposed pixel.\n *\n * Properties:\n * - {@link EmissiveStrength}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMaterialsEmissiveStrength, EmissiveStrength } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const emissiveStrengthExtension = document.createExtension(KHRMaterialsEmissiveStrength);\n *\n * // Create EmissiveStrength property.\n * const emissiveStrength = emissiveStrengthExtension\n * \t.createEmissiveStrength().setEmissiveStrength(5.0);\n *\n * // Assign to a Material.\n * material.setExtension('KHR_materials_emissive_strength', emissiveStrength);\n * ```\n */\nclass KHRMaterialsEmissiveStrength extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_MATERIALS_EMISSIVE_STRENGTH;\n    this.prereadTypes = [PropertyType.MESH];\n    this.prewriteTypes = [PropertyType.MESH];\n  }\n  /** Creates a new EmissiveStrength property for use on a {@link Material}. */\n  createEmissiveStrength() {\n    return new EmissiveStrength(this.document.getGraph());\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  write(_context) {\n    return this;\n  }\n  /** @hidden */\n  preread(context) {\n    const jsonDoc = context.jsonDoc;\n    const materialDefs = jsonDoc.json.materials || [];\n    materialDefs.forEach((materialDef, materialIndex) => {\n      if (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_EMISSIVE_STRENGTH]) {\n        const emissiveStrength = this.createEmissiveStrength();\n        context.materials[materialIndex].setExtension(KHR_MATERIALS_EMISSIVE_STRENGTH, emissiveStrength);\n        const emissiveStrengthDef = materialDef.extensions[KHR_MATERIALS_EMISSIVE_STRENGTH];\n        // Factors.\n        if (emissiveStrengthDef.emissiveStrength !== undefined) {\n          emissiveStrength.setEmissiveStrength(emissiveStrengthDef.emissiveStrength);\n        }\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  prewrite(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listMaterials().forEach(material => {\n      const emissiveStrength = material.getExtension(KHR_MATERIALS_EMISSIVE_STRENGTH);\n      if (emissiveStrength) {\n        const materialIndex = context.materialIndexMap.get(material);\n        const materialDef = jsonDoc.json.materials[materialIndex];\n        materialDef.extensions = materialDef.extensions || {};\n        // Factors.\n        materialDef.extensions[KHR_MATERIALS_EMISSIVE_STRENGTH] = {\n          emissiveStrength: emissiveStrength.getEmissiveStrength()\n        };\n      }\n    });\n    return this;\n  }\n}\nKHRMaterialsEmissiveStrength.EXTENSION_NAME = KHR_MATERIALS_EMISSIVE_STRENGTH;\n\n/**\n * Defines index of refraction for a PBR {@link Material}. See {@link KHRMaterialsIOR}.\n */\nclass IOR extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_IOR;\n    this.propertyType = 'IOR';\n    this.parentTypes = [PropertyType.MATERIAL];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      ior: 1.5\n    });\n  }\n  /**********************************************************************************************\n   * IOR.\n   */\n  /** IOR. */\n  getIOR() {\n    return this.get('ior');\n  }\n  /** IOR. */\n  setIOR(ior) {\n    return this.set('ior', ior);\n  }\n}\nIOR.EXTENSION_NAME = KHR_MATERIALS_IOR;\n\n/**\n * [KHR_materials_ior](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_ior/)\n * defines index of refraction on a glTF PBR material.\n *\n * The dielectric BRDF of the metallic-roughness material in glTF uses a fixed value of 1.5 for the\n * index of refraction. This is a good fit for many plastics and glass, but not for other materials\n * like water or asphalt, sapphire or diamond. `KHR_materials_ior` allows users to set the index of\n * refraction to a certain value.\n *\n * Properties:\n * - {@link IOR}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMaterialsIOR, IOR } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const iorExtension = document.createExtension(KHRMaterialsIOR);\n *\n * // Create IOR property.\n * const ior = iorExtension.createIOR().setIOR(1.0);\n *\n * // Assign to a Material.\n * material.setExtension('KHR_materials_ior', ior);\n * ```\n */\nclass KHRMaterialsIOR extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_MATERIALS_IOR;\n    this.prereadTypes = [PropertyType.MESH];\n    this.prewriteTypes = [PropertyType.MESH];\n  }\n  /** Creates a new IOR property for use on a {@link Material}. */\n  createIOR() {\n    return new IOR(this.document.getGraph());\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  write(_context) {\n    return this;\n  }\n  /** @hidden */\n  preread(context) {\n    const jsonDoc = context.jsonDoc;\n    const materialDefs = jsonDoc.json.materials || [];\n    materialDefs.forEach((materialDef, materialIndex) => {\n      if (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_IOR]) {\n        const ior = this.createIOR();\n        context.materials[materialIndex].setExtension(KHR_MATERIALS_IOR, ior);\n        const iorDef = materialDef.extensions[KHR_MATERIALS_IOR];\n        // Factors.\n        if (iorDef.ior !== undefined) {\n          ior.setIOR(iorDef.ior);\n        }\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  prewrite(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listMaterials().forEach(material => {\n      const ior = material.getExtension(KHR_MATERIALS_IOR);\n      if (ior) {\n        const materialIndex = context.materialIndexMap.get(material);\n        const materialDef = jsonDoc.json.materials[materialIndex];\n        materialDef.extensions = materialDef.extensions || {};\n        // Factors.\n        materialDef.extensions[KHR_MATERIALS_IOR] = {\n          ior: ior.getIOR()\n        };\n      }\n    });\n    return this;\n  }\n}\nKHRMaterialsIOR.EXTENSION_NAME = KHR_MATERIALS_IOR;\n\nconst {\n  R: R$4,\n  G: G$4\n} = TextureChannel;\n/**\n * Defines iridescence (thin film interference) on a PBR {@link Material}. See {@link KHRMaterialsIridescence}.\n */\nclass Iridescence extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_IRIDESCENCE;\n    this.propertyType = 'Iridescence';\n    this.parentTypes = [PropertyType.MATERIAL];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      iridescenceFactor: 0.0,\n      iridescenceTexture: null,\n      iridescenceTextureInfo: new TextureInfo(this.graph, 'iridescenceTextureInfo'),\n      iridescenceIOR: 1.3,\n      iridescenceThicknessMinimum: 100,\n      iridescenceThicknessMaximum: 400,\n      iridescenceThicknessTexture: null,\n      iridescenceThicknessTextureInfo: new TextureInfo(this.graph, 'iridescenceThicknessTextureInfo')\n    });\n  }\n  /**********************************************************************************************\n   * Iridescence.\n   */\n  /** Iridescence; linear multiplier. See {@link Iridescence.getIridescenceTexture getIridescenceTexture}. */\n  getIridescenceFactor() {\n    return this.get('iridescenceFactor');\n  }\n  /** Iridescence; linear multiplier. See {@link Iridescence.getIridescenceTexture getIridescenceTexture}. */\n  setIridescenceFactor(factor) {\n    return this.set('iridescenceFactor', factor);\n  }\n  /**\n   * Iridescence intensity.\n   *\n   * Only the red (R) channel is used for iridescence intensity, but this texture may optionally\n   * be packed with additional data in the other channels.\n   */\n  getIridescenceTexture() {\n    return this.getRef('iridescenceTexture');\n  }\n  /**\n   * Settings affecting the material's use of its iridescence texture. If no texture is attached,\n   * {@link TextureInfo} is `null`.\n   */\n  getIridescenceTextureInfo() {\n    return this.getRef('iridescenceTexture') ? this.getRef('iridescenceTextureInfo') : null;\n  }\n  /** Iridescence intensity. See {@link Iridescence.getIridescenceTexture getIridescenceTexture}. */\n  setIridescenceTexture(texture) {\n    return this.setRef('iridescenceTexture', texture, {\n      channels: R$4\n    });\n  }\n  /**********************************************************************************************\n   * Iridescence IOR.\n   */\n  /** Index of refraction of the dielectric thin-film layer. */\n  getIridescenceIOR() {\n    return this.get('iridescenceIOR');\n  }\n  /** Index of refraction of the dielectric thin-film layer. */\n  setIridescenceIOR(ior) {\n    return this.set('iridescenceIOR', ior);\n  }\n  /**********************************************************************************************\n   * Iridescence thickness.\n   */\n  /** Minimum thickness of the thin-film layer, in nanometers (nm). */\n  getIridescenceThicknessMinimum() {\n    return this.get('iridescenceThicknessMinimum');\n  }\n  /** Minimum thickness of the thin-film layer, in nanometers (nm). */\n  setIridescenceThicknessMinimum(thickness) {\n    return this.set('iridescenceThicknessMinimum', thickness);\n  }\n  /** Maximum thickness of the thin-film layer, in nanometers (nm). */\n  getIridescenceThicknessMaximum() {\n    return this.get('iridescenceThicknessMaximum');\n  }\n  /** Maximum thickness of the thin-film layer, in nanometers (nm). */\n  setIridescenceThicknessMaximum(thickness) {\n    return this.set('iridescenceThicknessMaximum', thickness);\n  }\n  /**\n   * The green channel of this texture defines the thickness of the\n   * thin-film layer by blending between the minimum and maximum thickness.\n   */\n  getIridescenceThicknessTexture() {\n    return this.getRef('iridescenceThicknessTexture');\n  }\n  /**\n   * Settings affecting the material's use of its iridescence thickness texture.\n   * If no texture is attached, {@link TextureInfo} is `null`.\n   */\n  getIridescenceThicknessTextureInfo() {\n    return this.getRef('iridescenceThicknessTexture') ? this.getRef('iridescenceThicknessTextureInfo') : null;\n  }\n  /**\n   * Sets iridescence thickness texture.\n   * See {@link Iridescence.getIridescenceThicknessTexture getIridescenceThicknessTexture}.\n   */\n  setIridescenceThicknessTexture(texture) {\n    return this.setRef('iridescenceThicknessTexture', texture, {\n      channels: G$4\n    });\n  }\n}\nIridescence.EXTENSION_NAME = KHR_MATERIALS_IRIDESCENCE;\n\n/**\n * [`KHR_materials_iridescence`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_iridescence/)\n * defines iridescence (thin film interference) on a PBR material.\n *\n * ![Illustration](/media/extensions/khr-materials-iridescence.png)\n *\n * > _**Figure:** Varying levels of iridescence IOR values.\n * > Source: [Khronos Group](https://github.com/KhronosGroup/gltf/tree/main/extensions/2.0/Khronos/KHR_materials_iridescence)._\n *\n * Iridescence describes an effect where hue varies depending on the viewing\n * angle and illumination angle: A thin-film of a semi-transparent layer\n * results in inter-reflections and due to thin-film interference, certain\n * wavelengths get absorbed or amplified. Iridescence can be seen on soap\n * bubbles, oil films, or on the wings of many insects. With this extension,\n * thickness and index of refraction (IOR) of the thin-film can be specified,\n * enabling iridescent materials.\n *\n * Properties:\n * - {@link Iridescence}\n *\n * ### Example\n *\n * The `KHRMaterialsIridescence` class provides a single {@link ExtensionProperty} type, `Iridescence`,\n * which may be attached to any {@link Material} instance. For example:\n *\n * ```typescript\n * import { KHRMaterialsIridescence, Iridescence } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const iridescenceExtension = document.createExtension(KHRMaterialsIridescence);\n *\n * // Create an Iridescence property.\n * const iridescence = iridescenceExtension.createIridescence()\n * \t.setIridescenceFactor(1.0)\n * \t.setIridescenceIOR(1.8);\n *\n * // Attach the property to a Material.\n * material.setExtension('KHR_materials_iridescence', iridescence);\n * ```\n */\nclass KHRMaterialsIridescence extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_MATERIALS_IRIDESCENCE;\n    this.prereadTypes = [PropertyType.MESH];\n    this.prewriteTypes = [PropertyType.MESH];\n  }\n  /** Creates a new Iridescence property for use on a {@link Material}. */\n  createIridescence() {\n    return new Iridescence(this.document.getGraph());\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  write(_context) {\n    return this;\n  }\n  /** @hidden */\n  preread(context) {\n    const jsonDoc = context.jsonDoc;\n    const materialDefs = jsonDoc.json.materials || [];\n    const textureDefs = jsonDoc.json.textures || [];\n    materialDefs.forEach((materialDef, materialIndex) => {\n      if (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_IRIDESCENCE]) {\n        const iridescence = this.createIridescence();\n        context.materials[materialIndex].setExtension(KHR_MATERIALS_IRIDESCENCE, iridescence);\n        const iridescenceDef = materialDef.extensions[KHR_MATERIALS_IRIDESCENCE];\n        // Factors.\n        if (iridescenceDef.iridescenceFactor !== undefined) {\n          iridescence.setIridescenceFactor(iridescenceDef.iridescenceFactor);\n        }\n        if (iridescenceDef.iridescenceIor !== undefined) {\n          iridescence.setIridescenceIOR(iridescenceDef.iridescenceIor);\n        }\n        if (iridescenceDef.iridescenceThicknessMinimum !== undefined) {\n          iridescence.setIridescenceThicknessMinimum(iridescenceDef.iridescenceThicknessMinimum);\n        }\n        if (iridescenceDef.iridescenceThicknessMaximum !== undefined) {\n          iridescence.setIridescenceThicknessMaximum(iridescenceDef.iridescenceThicknessMaximum);\n        }\n        // Textures.\n        if (iridescenceDef.iridescenceTexture !== undefined) {\n          const textureInfoDef = iridescenceDef.iridescenceTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          iridescence.setIridescenceTexture(texture);\n          context.setTextureInfo(iridescence.getIridescenceTextureInfo(), textureInfoDef);\n        }\n        if (iridescenceDef.iridescenceThicknessTexture !== undefined) {\n          const textureInfoDef = iridescenceDef.iridescenceThicknessTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          iridescence.setIridescenceThicknessTexture(texture);\n          context.setTextureInfo(iridescence.getIridescenceThicknessTextureInfo(), textureInfoDef);\n        }\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  prewrite(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listMaterials().forEach(material => {\n      const iridescence = material.getExtension(KHR_MATERIALS_IRIDESCENCE);\n      if (iridescence) {\n        const materialIndex = context.materialIndexMap.get(material);\n        const materialDef = jsonDoc.json.materials[materialIndex];\n        materialDef.extensions = materialDef.extensions || {};\n        // Factors.\n        const iridescenceDef = materialDef.extensions[KHR_MATERIALS_IRIDESCENCE] = {};\n        if (iridescence.getIridescenceFactor() > 0) {\n          iridescenceDef.iridescenceFactor = iridescence.getIridescenceFactor();\n        }\n        if (iridescence.getIridescenceIOR() !== 1.3) {\n          iridescenceDef.iridescenceIor = iridescence.getIridescenceIOR();\n        }\n        if (iridescence.getIridescenceThicknessMinimum() !== 100) {\n          iridescenceDef.iridescenceThicknessMinimum = iridescence.getIridescenceThicknessMinimum();\n        }\n        if (iridescence.getIridescenceThicknessMaximum() !== 400) {\n          iridescenceDef.iridescenceThicknessMaximum = iridescence.getIridescenceThicknessMaximum();\n        }\n        // Textures.\n        if (iridescence.getIridescenceTexture()) {\n          const texture = iridescence.getIridescenceTexture();\n          const textureInfo = iridescence.getIridescenceTextureInfo();\n          iridescenceDef.iridescenceTexture = context.createTextureInfoDef(texture, textureInfo);\n        }\n        if (iridescence.getIridescenceThicknessTexture()) {\n          const texture = iridescence.getIridescenceThicknessTexture();\n          const textureInfo = iridescence.getIridescenceThicknessTextureInfo();\n          iridescenceDef.iridescenceThicknessTexture = context.createTextureInfoDef(texture, textureInfo);\n        }\n      }\n    });\n    return this;\n  }\n}\nKHRMaterialsIridescence.EXTENSION_NAME = KHR_MATERIALS_IRIDESCENCE;\n\nconst {\n  R: R$3,\n  G: G$3,\n  B: B$2,\n  A: A$2\n} = TextureChannel;\n/**\n * Converts a {@link Material} to a spec/gloss workflow. See {@link KHRMaterialsPBRSpecularGlossiness}.\n */\nclass PBRSpecularGlossiness extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS;\n    this.propertyType = 'PBRSpecularGlossiness';\n    this.parentTypes = [PropertyType.MATERIAL];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      diffuseFactor: [1.0, 1.0, 1.0, 1.0],\n      diffuseTexture: null,\n      diffuseTextureInfo: new TextureInfo(this.graph, 'diffuseTextureInfo'),\n      specularFactor: [1.0, 1.0, 1.0],\n      glossinessFactor: 1.0,\n      specularGlossinessTexture: null,\n      specularGlossinessTextureInfo: new TextureInfo(this.graph, 'specularGlossinessTextureInfo')\n    });\n  }\n  /**********************************************************************************************\n   * Diffuse.\n   */\n  /** Diffuse; Linear-sRGB components. See {@link PBRSpecularGlossiness.getDiffuseTexture getDiffuseTexture}. */\n  getDiffuseFactor() {\n    return this.get('diffuseFactor');\n  }\n  /** Diffuse; Linear-sRGB components. See {@link PBRSpecularGlossiness.getDiffuseTexture getDiffuseTexture}. */\n  setDiffuseFactor(factor) {\n    return this.set('diffuseFactor', factor);\n  }\n  /**\n   * Diffuse texture; sRGB. Alternative to baseColorTexture, used within the\n   * spec/gloss PBR workflow.\n   */\n  getDiffuseTexture() {\n    return this.getRef('diffuseTexture');\n  }\n  /**\n   * Settings affecting the material's use of its diffuse texture. If no texture is attached,\n   * {@link TextureInfo} is `null`.\n   */\n  getDiffuseTextureInfo() {\n    return this.getRef('diffuseTexture') ? this.getRef('diffuseTextureInfo') : null;\n  }\n  /** Sets diffuse texture. See {@link PBRSpecularGlossiness.getDiffuseTexture getDiffuseTexture}. */\n  setDiffuseTexture(texture) {\n    return this.setRef('diffuseTexture', texture, {\n      channels: R$3 | G$3 | B$2 | A$2,\n      isColor: true\n    });\n  }\n  /**********************************************************************************************\n   * Specular.\n   */\n  /** Specular; linear multiplier. */\n  getSpecularFactor() {\n    return this.get('specularFactor');\n  }\n  /** Specular; linear multiplier. */\n  setSpecularFactor(factor) {\n    return this.set('specularFactor', factor);\n  }\n  /**********************************************************************************************\n   * Glossiness.\n   */\n  /** Glossiness; linear multiplier. */\n  getGlossinessFactor() {\n    return this.get('glossinessFactor');\n  }\n  /** Glossiness; linear multiplier. */\n  setGlossinessFactor(factor) {\n    return this.set('glossinessFactor', factor);\n  }\n  /**********************************************************************************************\n   * Specular/Glossiness.\n   */\n  /** Spec/gloss texture; linear multiplier. */\n  getSpecularGlossinessTexture() {\n    return this.getRef('specularGlossinessTexture');\n  }\n  /**\n   * Settings affecting the material's use of its spec/gloss texture. If no texture is attached,\n   * {@link TextureInfo} is `null`.\n   */\n  getSpecularGlossinessTextureInfo() {\n    return this.getRef('specularGlossinessTexture') ? this.getRef('specularGlossinessTextureInfo') : null;\n  }\n  /** Spec/gloss texture; linear multiplier. */\n  setSpecularGlossinessTexture(texture) {\n    return this.setRef('specularGlossinessTexture', texture, {\n      channels: R$3 | G$3 | B$2 | A$2\n    });\n  }\n}\nPBRSpecularGlossiness.EXTENSION_NAME = KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS;\n\n/**\n * [`KHR_materials_pbrSpecularGlossiness`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness/)\n * converts a PBR material from the default metal/rough workflow to a spec/gloss workflow.\n *\n * > _**NOTICE:** The spec/gloss workflow does _not_ support other PBR extensions such as clearcoat,\n * > transmission, IOR, etc. For the complete PBR feature set and specular data, use the\n * > {@link KHRMaterialsSpecular} extension instead, which provides specular data within a metal/rough\n * > workflow._\n *\n * ![Illustration](/media/extensions/khr-material-pbr-specular-glossiness.png)\n *\n * > _**Figure:** Components of a PBR spec/gloss material. Source: Khronos Group._\n *\n * Properties:\n * - {@link PBRSpecularGlossiness}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMaterialsPBRSpecularGlossiness } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const specGlossExtension = document.createExtension(KHRMaterialsPBRSpecularGlossiness);\n *\n * // Create a PBRSpecularGlossiness property.\n * const specGloss = specGlossExtension.createPBRSpecularGlossiness()\n * \t.setSpecularFactor(1.0);\n *\n * // // Assign to a Material.\n * material.setExtension('KHR_materials_pbrSpecularGlossiness', specGloss);\n * ```\n */\nclass KHRMaterialsPBRSpecularGlossiness extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS;\n    this.prereadTypes = [PropertyType.MESH];\n    this.prewriteTypes = [PropertyType.MESH];\n  }\n  /** Creates a new PBRSpecularGlossiness property for use on a {@link Material}. */\n  createPBRSpecularGlossiness() {\n    return new PBRSpecularGlossiness(this.document.getGraph());\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  write(_context) {\n    return this;\n  }\n  /** @hidden */\n  preread(context) {\n    const jsonDoc = context.jsonDoc;\n    const materialDefs = jsonDoc.json.materials || [];\n    const textureDefs = jsonDoc.json.textures || [];\n    materialDefs.forEach((materialDef, materialIndex) => {\n      if (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]) {\n        const specGloss = this.createPBRSpecularGlossiness();\n        context.materials[materialIndex].setExtension(KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS, specGloss);\n        const specGlossDef = materialDef.extensions[KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS];\n        // Factors.\n        if (specGlossDef.diffuseFactor !== undefined) {\n          specGloss.setDiffuseFactor(specGlossDef.diffuseFactor);\n        }\n        if (specGlossDef.specularFactor !== undefined) {\n          specGloss.setSpecularFactor(specGlossDef.specularFactor);\n        }\n        if (specGlossDef.glossinessFactor !== undefined) {\n          specGloss.setGlossinessFactor(specGlossDef.glossinessFactor);\n        }\n        // Textures.\n        if (specGlossDef.diffuseTexture !== undefined) {\n          const textureInfoDef = specGlossDef.diffuseTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          specGloss.setDiffuseTexture(texture);\n          context.setTextureInfo(specGloss.getDiffuseTextureInfo(), textureInfoDef);\n        }\n        if (specGlossDef.specularGlossinessTexture !== undefined) {\n          const textureInfoDef = specGlossDef.specularGlossinessTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          specGloss.setSpecularGlossinessTexture(texture);\n          context.setTextureInfo(specGloss.getSpecularGlossinessTextureInfo(), textureInfoDef);\n        }\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  prewrite(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listMaterials().forEach(material => {\n      const specGloss = material.getExtension(KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS);\n      if (specGloss) {\n        const materialIndex = context.materialIndexMap.get(material);\n        const materialDef = jsonDoc.json.materials[materialIndex];\n        materialDef.extensions = materialDef.extensions || {};\n        // Factors.\n        const specGlossDef = materialDef.extensions[KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS] = {\n          diffuseFactor: specGloss.getDiffuseFactor(),\n          specularFactor: specGloss.getSpecularFactor(),\n          glossinessFactor: specGloss.getGlossinessFactor()\n        };\n        // Textures.\n        if (specGloss.getDiffuseTexture()) {\n          const texture = specGloss.getDiffuseTexture();\n          const textureInfo = specGloss.getDiffuseTextureInfo();\n          specGlossDef.diffuseTexture = context.createTextureInfoDef(texture, textureInfo);\n        }\n        if (specGloss.getSpecularGlossinessTexture()) {\n          const texture = specGloss.getSpecularGlossinessTexture();\n          const textureInfo = specGloss.getSpecularGlossinessTextureInfo();\n          specGlossDef.specularGlossinessTexture = context.createTextureInfoDef(texture, textureInfo);\n        }\n      }\n    });\n    return this;\n  }\n}\nKHRMaterialsPBRSpecularGlossiness.EXTENSION_NAME = KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS;\n\nconst {\n  R: R$2,\n  G: G$2,\n  B: B$1,\n  A: A$1\n} = TextureChannel;\n/**\n * Defines sheen on a PBR {@link Material}. See {@link KHRMaterialsSheen}.\n */\nclass Sheen extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_SHEEN;\n    this.propertyType = 'Sheen';\n    this.parentTypes = [PropertyType.MATERIAL];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      sheenColorFactor: [0.0, 0.0, 0.0],\n      sheenColorTexture: null,\n      sheenColorTextureInfo: new TextureInfo(this.graph, 'sheenColorTextureInfo'),\n      sheenRoughnessFactor: 0.0,\n      sheenRoughnessTexture: null,\n      sheenRoughnessTextureInfo: new TextureInfo(this.graph, 'sheenRoughnessTextureInfo')\n    });\n  }\n  /**********************************************************************************************\n   * Sheen color.\n   */\n  /** Sheen; linear multiplier. */\n  getSheenColorFactor() {\n    return this.get('sheenColorFactor');\n  }\n  /** Sheen; linear multiplier. */\n  setSheenColorFactor(factor) {\n    return this.set('sheenColorFactor', factor);\n  }\n  /**\n   * Sheen color texture, in sRGB colorspace.\n   */\n  getSheenColorTexture() {\n    return this.getRef('sheenColorTexture');\n  }\n  /**\n   * Settings affecting the material's use of its sheen color texture. If no texture is attached,\n   * {@link TextureInfo} is `null`.\n   */\n  getSheenColorTextureInfo() {\n    return this.getRef('sheenColorTexture') ? this.getRef('sheenColorTextureInfo') : null;\n  }\n  /** Sets sheen color texture. See {@link Sheen.getSheenColorTexture getSheenColorTexture}. */\n  setSheenColorTexture(texture) {\n    return this.setRef('sheenColorTexture', texture, {\n      channels: R$2 | G$2 | B$1,\n      isColor: true\n    });\n  }\n  /**********************************************************************************************\n   * Sheen roughness.\n   */\n  /** Sheen roughness; linear multiplier. See {@link Sheen.getSheenRoughnessTexture getSheenRoughnessTexture}. */\n  getSheenRoughnessFactor() {\n    return this.get('sheenRoughnessFactor');\n  }\n  /** Sheen roughness; linear multiplier. See {@link Sheen.getSheenRoughnessTexture getSheenRoughnessTexture}. */\n  setSheenRoughnessFactor(factor) {\n    return this.set('sheenRoughnessFactor', factor);\n  }\n  /**\n   * Sheen roughness texture; linear multiplier. The `a` channel of this texture specifies\n   * roughness, independent of the base layer's roughness.\n   */\n  getSheenRoughnessTexture() {\n    return this.getRef('sheenRoughnessTexture');\n  }\n  /**\n   * Settings affecting the material's use of its sheen roughness texture. If no texture is\n   * attached, {@link TextureInfo} is `null`.\n   */\n  getSheenRoughnessTextureInfo() {\n    return this.getRef('sheenRoughnessTexture') ? this.getRef('sheenRoughnessTextureInfo') : null;\n  }\n  /**\n   * Sets sheen roughness texture.  The `a` channel of this texture specifies\n   * roughness, independent of the base layer's roughness.\n   */\n  setSheenRoughnessTexture(texture) {\n    return this.setRef('sheenRoughnessTexture', texture, {\n      channels: A$1\n    });\n  }\n}\nSheen.EXTENSION_NAME = KHR_MATERIALS_SHEEN;\n\n/**\n * [`KHR_materials_sheen`](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_sheen/)\n * defines a velvet-like sheen layered on a glTF PBR material.\n *\n * ![Illustration](/media/extensions/khr-materials-sheen.png)\n *\n * > _**Figure:** A cushion, showing high material roughness and low sheen roughness. Soft\n * > highlights at edges of the material show backscattering from microfibers. Source: Khronos\n * > Group._\n *\n * A sheen layer is a common technique used in Physically-Based Rendering to represent\n * cloth and fabric materials.\n *\n * Properties:\n * - {@link Sheen}\n *\n * ### Example\n *\n * The `KHRMaterialsSheen` class provides a single {@link ExtensionProperty} type, `Sheen`,\n * which may be attached to any {@link Material} instance. For example:\n *\n * ```typescript\n * import { KHRMaterialsSheen, Sheen } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const sheenExtension = document.createExtension(KHRMaterialsSheen);\n *\n * // Create a Sheen property.\n * const sheen = sheenExtension.createSheen()\n * \t.setSheenColorFactor([1.0, 1.0, 1.0]);\n *\n * // Attach the property to a Material.\n * material.setExtension('KHR_materials_sheen', sheen);\n * ```\n */\nclass KHRMaterialsSheen extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_MATERIALS_SHEEN;\n    this.prereadTypes = [PropertyType.MESH];\n    this.prewriteTypes = [PropertyType.MESH];\n  }\n  /** Creates a new Sheen property for use on a {@link Material}. */\n  createSheen() {\n    return new Sheen(this.document.getGraph());\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  write(_context) {\n    return this;\n  }\n  /** @hidden */\n  preread(context) {\n    const jsonDoc = context.jsonDoc;\n    const materialDefs = jsonDoc.json.materials || [];\n    const textureDefs = jsonDoc.json.textures || [];\n    materialDefs.forEach((materialDef, materialIndex) => {\n      if (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_SHEEN]) {\n        const sheen = this.createSheen();\n        context.materials[materialIndex].setExtension(KHR_MATERIALS_SHEEN, sheen);\n        const sheenDef = materialDef.extensions[KHR_MATERIALS_SHEEN];\n        // Factors.\n        if (sheenDef.sheenColorFactor !== undefined) {\n          sheen.setSheenColorFactor(sheenDef.sheenColorFactor);\n        }\n        if (sheenDef.sheenRoughnessFactor !== undefined) {\n          sheen.setSheenRoughnessFactor(sheenDef.sheenRoughnessFactor);\n        }\n        // Textures.\n        if (sheenDef.sheenColorTexture !== undefined) {\n          const textureInfoDef = sheenDef.sheenColorTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          sheen.setSheenColorTexture(texture);\n          context.setTextureInfo(sheen.getSheenColorTextureInfo(), textureInfoDef);\n        }\n        if (sheenDef.sheenRoughnessTexture !== undefined) {\n          const textureInfoDef = sheenDef.sheenRoughnessTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          sheen.setSheenRoughnessTexture(texture);\n          context.setTextureInfo(sheen.getSheenRoughnessTextureInfo(), textureInfoDef);\n        }\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  prewrite(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listMaterials().forEach(material => {\n      const sheen = material.getExtension(KHR_MATERIALS_SHEEN);\n      if (sheen) {\n        const materialIndex = context.materialIndexMap.get(material);\n        const materialDef = jsonDoc.json.materials[materialIndex];\n        materialDef.extensions = materialDef.extensions || {};\n        // Factors.\n        const sheenDef = materialDef.extensions[KHR_MATERIALS_SHEEN] = {\n          sheenColorFactor: sheen.getSheenColorFactor(),\n          sheenRoughnessFactor: sheen.getSheenRoughnessFactor()\n        };\n        // Textures.\n        if (sheen.getSheenColorTexture()) {\n          const texture = sheen.getSheenColorTexture();\n          const textureInfo = sheen.getSheenColorTextureInfo();\n          sheenDef.sheenColorTexture = context.createTextureInfoDef(texture, textureInfo);\n        }\n        if (sheen.getSheenRoughnessTexture()) {\n          const texture = sheen.getSheenRoughnessTexture();\n          const textureInfo = sheen.getSheenRoughnessTextureInfo();\n          sheenDef.sheenRoughnessTexture = context.createTextureInfoDef(texture, textureInfo);\n        }\n      }\n    });\n    return this;\n  }\n}\nKHRMaterialsSheen.EXTENSION_NAME = KHR_MATERIALS_SHEEN;\n\nconst {\n  R: R$1,\n  G: G$1,\n  B,\n  A\n} = TextureChannel;\n/**\n * Defines specular reflectivity on a PBR {@link Material}. See {@link KHRMaterialsSpecular}.\n */\nclass Specular extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_SPECULAR;\n    this.propertyType = 'Specular';\n    this.parentTypes = [PropertyType.MATERIAL];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      specularFactor: 1.0,\n      specularTexture: null,\n      specularTextureInfo: new TextureInfo(this.graph, 'specularTextureInfo'),\n      specularColorFactor: [1.0, 1.0, 1.0],\n      specularColorTexture: null,\n      specularColorTextureInfo: new TextureInfo(this.graph, 'specularColorTextureInfo')\n    });\n  }\n  /**********************************************************************************************\n   * Specular.\n   */\n  /** Specular; linear multiplier. See {@link Specular.getSpecularTexture getSpecularTexture}. */\n  getSpecularFactor() {\n    return this.get('specularFactor');\n  }\n  /** Specular; linear multiplier. See {@link Specular.getSpecularTexture getSpecularTexture}. */\n  setSpecularFactor(factor) {\n    return this.set('specularFactor', factor);\n  }\n  /** Specular color; Linear-sRGB components. See {@link Specular.getSpecularTexture getSpecularTexture}. */\n  getSpecularColorFactor() {\n    return this.get('specularColorFactor');\n  }\n  /** Specular color; Linear-sRGB components. See {@link Specular.getSpecularTexture getSpecularTexture}. */\n  setSpecularColorFactor(factor) {\n    return this.set('specularColorFactor', factor);\n  }\n  /**\n   * Specular texture; linear multiplier. Configures the strength of the specular reflection in\n   * the dielectric BRDF. A value of zero disables the specular reflection, resulting in a pure\n   * diffuse material.\n   *\n   * Only the alpha (A) channel is used for specular strength, but this texture may optionally\n   * be packed with specular color (RGB) into a single texture.\n   */\n  getSpecularTexture() {\n    return this.getRef('specularTexture');\n  }\n  /**\n   * Settings affecting the material's use of its specular texture. If no texture is attached,\n   * {@link TextureInfo} is `null`.\n   */\n  getSpecularTextureInfo() {\n    return this.getRef('specularTexture') ? this.getRef('specularTextureInfo') : null;\n  }\n  /** Sets specular texture. See {@link Specular.getSpecularTexture getSpecularTexture}. */\n  setSpecularTexture(texture) {\n    return this.setRef('specularTexture', texture, {\n      channels: A\n    });\n  }\n  /**\n   * Specular color texture; linear multiplier. Defines the F0 color of the specular reflection\n   * (RGB channels, encoded in sRGB) in the the dielectric BRDF.\n   *\n   * Only RGB channels are used here, but this texture may optionally be packed with a specular\n   * factor (A) into a single texture.\n   */\n  getSpecularColorTexture() {\n    return this.getRef('specularColorTexture');\n  }\n  /**\n   * Settings affecting the material's use of its specular color texture. If no texture is\n   * attached, {@link TextureInfo} is `null`.\n   */\n  getSpecularColorTextureInfo() {\n    return this.getRef('specularColorTexture') ? this.getRef('specularColorTextureInfo') : null;\n  }\n  /** Sets specular color texture. See {@link Specular.getSpecularColorTexture getSpecularColorTexture}. */\n  setSpecularColorTexture(texture) {\n    return this.setRef('specularColorTexture', texture, {\n      channels: R$1 | G$1 | B,\n      isColor: true\n    });\n  }\n}\nSpecular.EXTENSION_NAME = KHR_MATERIALS_SPECULAR;\n\n/**\n * [`KHR_materials_specular`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_specular/)\n * adjusts the strength of the specular reflection in the dielectric BRDF.\n *\n * KHRMaterialsSpecular is a better alternative to the older\n * {@link KHRMaterialsPBRSpecularGlossiness KHR_materials_pbrSpecularGlossiness} extension, and\n * provides specular information while remaining within a metal/rough PBR workflow. A\n * value of zero disables the specular reflection, resulting in a pure diffuse material.\n *\n * Properties:\n * - {@link Specular}\n *\n * ### Example\n *\n * The `KHRMaterialsSpecular` class provides a single {@link ExtensionProperty} type, `Specular`,\n * which may be attached to any {@link Material} instance. For example:\n *\n * ```typescript\n * import { KHRMaterialsSpecular, Specular } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const specularExtension = document.createExtension(KHRMaterialsSpecular);\n *\n * // Create a Specular property.\n * const specular = specularExtension.createSpecular()\n * \t.setSpecularFactor(1.0);\n *\n * // Attach the property to a Material.\n * material.setExtension('KHR_materials_specular', specular);\n * ```\n */\nclass KHRMaterialsSpecular extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_MATERIALS_SPECULAR;\n    this.prereadTypes = [PropertyType.MESH];\n    this.prewriteTypes = [PropertyType.MESH];\n  }\n  /** Creates a new Specular property for use on a {@link Material}. */\n  createSpecular() {\n    return new Specular(this.document.getGraph());\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  write(_context) {\n    return this;\n  }\n  /** @hidden */\n  preread(context) {\n    const jsonDoc = context.jsonDoc;\n    const materialDefs = jsonDoc.json.materials || [];\n    const textureDefs = jsonDoc.json.textures || [];\n    materialDefs.forEach((materialDef, materialIndex) => {\n      if (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_SPECULAR]) {\n        const specular = this.createSpecular();\n        context.materials[materialIndex].setExtension(KHR_MATERIALS_SPECULAR, specular);\n        const specularDef = materialDef.extensions[KHR_MATERIALS_SPECULAR];\n        // Factors.\n        if (specularDef.specularFactor !== undefined) {\n          specular.setSpecularFactor(specularDef.specularFactor);\n        }\n        if (specularDef.specularColorFactor !== undefined) {\n          specular.setSpecularColorFactor(specularDef.specularColorFactor);\n        }\n        // Textures.\n        if (specularDef.specularTexture !== undefined) {\n          const textureInfoDef = specularDef.specularTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          specular.setSpecularTexture(texture);\n          context.setTextureInfo(specular.getSpecularTextureInfo(), textureInfoDef);\n        }\n        if (specularDef.specularColorTexture !== undefined) {\n          const textureInfoDef = specularDef.specularColorTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          specular.setSpecularColorTexture(texture);\n          context.setTextureInfo(specular.getSpecularColorTextureInfo(), textureInfoDef);\n        }\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  prewrite(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listMaterials().forEach(material => {\n      const specular = material.getExtension(KHR_MATERIALS_SPECULAR);\n      if (specular) {\n        const materialIndex = context.materialIndexMap.get(material);\n        const materialDef = jsonDoc.json.materials[materialIndex];\n        materialDef.extensions = materialDef.extensions || {};\n        // Factors.\n        const specularDef = materialDef.extensions[KHR_MATERIALS_SPECULAR] = {};\n        if (specular.getSpecularFactor() !== 1) {\n          specularDef.specularFactor = specular.getSpecularFactor();\n        }\n        if (!MathUtils.eq(specular.getSpecularColorFactor(), [1, 1, 1])) {\n          specularDef.specularColorFactor = specular.getSpecularColorFactor();\n        }\n        // Textures.\n        if (specular.getSpecularTexture()) {\n          const texture = specular.getSpecularTexture();\n          const textureInfo = specular.getSpecularTextureInfo();\n          specularDef.specularTexture = context.createTextureInfoDef(texture, textureInfo);\n        }\n        if (specular.getSpecularColorTexture()) {\n          const texture = specular.getSpecularColorTexture();\n          const textureInfo = specular.getSpecularColorTextureInfo();\n          specularDef.specularColorTexture = context.createTextureInfoDef(texture, textureInfo);\n        }\n      }\n    });\n    return this;\n  }\n}\nKHRMaterialsSpecular.EXTENSION_NAME = KHR_MATERIALS_SPECULAR;\n\nconst {\n  R\n} = TextureChannel;\n/**\n * Defines optical transmission on a PBR {@link Material}. See {@link KHRMaterialsTransmission}.\n */\nclass Transmission extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_TRANSMISSION;\n    this.propertyType = 'Transmission';\n    this.parentTypes = [PropertyType.MATERIAL];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      transmissionFactor: 0.0,\n      transmissionTexture: null,\n      transmissionTextureInfo: new TextureInfo(this.graph, 'transmissionTextureInfo')\n    });\n  }\n  /**********************************************************************************************\n   * Transmission.\n   */\n  /** Transmission; linear multiplier. See {@link Transmission.getTransmissionTexture getTransmissionTexture}. */\n  getTransmissionFactor() {\n    return this.get('transmissionFactor');\n  }\n  /** Transmission; linear multiplier. See {@link Transmission.getTransmissionTexture getTransmissionTexture}. */\n  setTransmissionFactor(factor) {\n    return this.set('transmissionFactor', factor);\n  }\n  /**\n   * Transmission texture; linear multiplier. The `r` channel of this texture specifies\n   * transmission [0-1] of the material's surface. By default this is a thin transparency\n   * effect, but volume effects (refraction, subsurface scattering) may be introduced with the\n   * addition of the `KHR_materials_volume` extension.\n   */\n  getTransmissionTexture() {\n    return this.getRef('transmissionTexture');\n  }\n  /**\n   * Settings affecting the material's use of its transmission texture. If no texture is attached,\n   * {@link TextureInfo} is `null`.\n   */\n  getTransmissionTextureInfo() {\n    return this.getRef('transmissionTexture') ? this.getRef('transmissionTextureInfo') : null;\n  }\n  /** Sets transmission texture. See {@link Transmission.getTransmissionTexture getTransmissionTexture}. */\n  setTransmissionTexture(texture) {\n    return this.setRef('transmissionTexture', texture, {\n      channels: R\n    });\n  }\n}\nTransmission.EXTENSION_NAME = KHR_MATERIALS_TRANSMISSION;\n\n/**\n * [`KHR_materials_transmission`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_transmission/)\n * provides a common type of optical transparency: infinitely-thin materials with no refraction,\n * scattering, or dispersion.\n *\n * ![Illustration](/media/extensions/khr-materials-transmission.png)\n *\n * > _**Figure:** Sphere using `KHR_materials_transmission` with varying roughness (0.0, 0.2, 0.4).\n * > Source: Khronos Group._\n *\n * While default PBR materials using alpha blending become invisible as their opacity approaches\n * zero, a transmissive material continues to reflect light in a glass-like manner, even at low\n * transmission values. When combined with {@link KHRMaterialsVolume}, transmission may be used for\n * thicker materials and refractive effects.\n *\n * Properties:\n * - {@link Transmission}\n *\n * ### Example\n *\n * The `KHRMaterialsTransmission` class provides a single {@link ExtensionProperty} type,\n * `Transmission`, which may be attached to any {@link Material} instance. For example:\n *\n * ```typescript\n * import { KHRMaterialsTransmission, Transmission } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const transmissionExtension = document.createExtension(KHRMaterialsTransmission);\n *\n * // Create a Transmission property.\n * const transmission = transmissionExtension.createTransmission()\n * \t.setTransmissionFactor(1.0);\n *\n * // Attach the property to a Material.\n * material.setExtension('KHR_materials_transmission', transmission);\n * ```\n */\nclass KHRMaterialsTransmission extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_MATERIALS_TRANSMISSION;\n    this.prereadTypes = [PropertyType.MESH];\n    this.prewriteTypes = [PropertyType.MESH];\n  }\n  /** Creates a new Transmission property for use on a {@link Material}. */\n  createTransmission() {\n    return new Transmission(this.document.getGraph());\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  write(_context) {\n    return this;\n  }\n  /** @hidden */\n  preread(context) {\n    const jsonDoc = context.jsonDoc;\n    const materialDefs = jsonDoc.json.materials || [];\n    const textureDefs = jsonDoc.json.textures || [];\n    materialDefs.forEach((materialDef, materialIndex) => {\n      if (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_TRANSMISSION]) {\n        const transmission = this.createTransmission();\n        context.materials[materialIndex].setExtension(KHR_MATERIALS_TRANSMISSION, transmission);\n        const transmissionDef = materialDef.extensions[KHR_MATERIALS_TRANSMISSION];\n        // Factors.\n        if (transmissionDef.transmissionFactor !== undefined) {\n          transmission.setTransmissionFactor(transmissionDef.transmissionFactor);\n        }\n        // Textures.\n        if (transmissionDef.transmissionTexture !== undefined) {\n          const textureInfoDef = transmissionDef.transmissionTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          transmission.setTransmissionTexture(texture);\n          context.setTextureInfo(transmission.getTransmissionTextureInfo(), textureInfoDef);\n        }\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  prewrite(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listMaterials().forEach(material => {\n      const transmission = material.getExtension(KHR_MATERIALS_TRANSMISSION);\n      if (transmission) {\n        const materialIndex = context.materialIndexMap.get(material);\n        const materialDef = jsonDoc.json.materials[materialIndex];\n        materialDef.extensions = materialDef.extensions || {};\n        // Factors.\n        const transmissionDef = materialDef.extensions[KHR_MATERIALS_TRANSMISSION] = {\n          transmissionFactor: transmission.getTransmissionFactor()\n        };\n        // Textures.\n        if (transmission.getTransmissionTexture()) {\n          const texture = transmission.getTransmissionTexture();\n          const textureInfo = transmission.getTransmissionTextureInfo();\n          transmissionDef.transmissionTexture = context.createTextureInfoDef(texture, textureInfo);\n        }\n      }\n    });\n    return this;\n  }\n}\nKHRMaterialsTransmission.EXTENSION_NAME = KHR_MATERIALS_TRANSMISSION;\n\n/**\n * Converts a PBR {@link Material} to an unlit shading model. See {@link KHRMaterialsUnlit}.\n */\nclass Unlit extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_UNLIT;\n    this.propertyType = 'Unlit';\n    this.parentTypes = [PropertyType.MATERIAL];\n  }\n}\nUnlit.EXTENSION_NAME = KHR_MATERIALS_UNLIT;\n\n/**\n * [`KHR_materials_unlit`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_unlit/)\n * defines an unlit shading model for use in glTF 2.0 materials.\n *\n * ![Illustration](/media/extensions/khr-materials-unlit.png)\n *\n * > _**Figure:** Unlit materials are useful for flat shading, stylized effects, and for improving\n * > performance on mobile devices. Source: [Model by Hayden VanEarden](https://sketchfab.com/3d-models/summertime-kirby-c5711316103a4d67a62c34cfe8710938)._\n *\n * Unlit (also \"Shadeless\" or \"Constant\") materials provide a simple alternative to the Physically\n * Based Rendering (PBR) shading models provided by the core specification. Unlit materials are\n * often useful for cheaper rendering on performance-contrained devices, e.g. mobile phones.\n * Additionally, unlit materials can be very useful in achieving stylized, non-photo-realistic\n * effects like hand painted illustrative styles or baked toon shaders.\n *\n * Properties:\n * - {@link Unlit}\n *\n * ### Example\n *\n * The `KHRMaterialsUnlit` class provides a single {@link ExtensionProperty} type, `Unlit`, which may\n * be attached to any {@link Material} instance. For example:\n *\n * ```typescript\n * import { KHRMaterialsUnlit, Unlit } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const unlitExtension = document.createExtension(KHRMaterialsUnlit);\n *\n * // Create an Unlit property.\n * const unlit = unlitExtension.createUnlit();\n *\n * // Attach the property to a Material.\n * material.setExtension('KHR_materials_unlit', unlit);\n * ```\n */\nclass KHRMaterialsUnlit extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_MATERIALS_UNLIT;\n    this.prereadTypes = [PropertyType.MESH];\n    this.prewriteTypes = [PropertyType.MESH];\n  }\n  /** Creates a new Unlit property for use on a {@link Material}. */\n  createUnlit() {\n    return new Unlit(this.document.getGraph());\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  write(_context) {\n    return this;\n  }\n  /** @hidden */\n  preread(context) {\n    const materialDefs = context.jsonDoc.json.materials || [];\n    materialDefs.forEach((materialDef, materialIndex) => {\n      if (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_UNLIT]) {\n        context.materials[materialIndex].setExtension(KHR_MATERIALS_UNLIT, this.createUnlit());\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  prewrite(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listMaterials().forEach(material => {\n      if (material.getExtension(KHR_MATERIALS_UNLIT)) {\n        const materialIndex = context.materialIndexMap.get(material);\n        const materialDef = jsonDoc.json.materials[materialIndex];\n        materialDef.extensions = materialDef.extensions || {};\n        materialDef.extensions[KHR_MATERIALS_UNLIT] = {};\n      }\n    });\n    return this;\n  }\n}\nKHRMaterialsUnlit.EXTENSION_NAME = KHR_MATERIALS_UNLIT;\n\n/**\n * Maps {@link Variant}s to {@link Material}s. See {@link KHRMaterialsVariants}.\n */\nclass Mapping extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_VARIANTS;\n    this.propertyType = 'Mapping';\n    this.parentTypes = ['MappingList'];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      material: null,\n      variants: new RefSet()\n    });\n  }\n  /** The {@link Material} designated for this {@link Primitive}, under the given variants. */\n  getMaterial() {\n    return this.getRef('material');\n  }\n  /** The {@link Material} designated for this {@link Primitive}, under the given variants. */\n  setMaterial(material) {\n    return this.setRef('material', material);\n  }\n  /** Adds a {@link Variant} to this mapping. */\n  addVariant(variant) {\n    return this.addRef('variants', variant);\n  }\n  /** Removes a {@link Variant} from this mapping. */\n  removeVariant(variant) {\n    return this.removeRef('variants', variant);\n  }\n  /** Lists {@link Variant}s in this mapping. */\n  listVariants() {\n    return this.listRefs('variants');\n  }\n}\nMapping.EXTENSION_NAME = KHR_MATERIALS_VARIANTS;\n\n/**\n * List of material variant {@link Mapping}s. See {@link KHRMaterialsVariants}.\n */\nclass MappingList extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_VARIANTS;\n    this.propertyType = 'MappingList';\n    this.parentTypes = [PropertyType.PRIMITIVE];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      mappings: new RefSet()\n    });\n  }\n  /** Adds a {@link Mapping} to this mapping. */\n  addMapping(mapping) {\n    return this.addRef('mappings', mapping);\n  }\n  /** Removes a {@link Mapping} from the list for this {@link Primitive}. */\n  removeMapping(mapping) {\n    return this.removeRef('mappings', mapping);\n  }\n  /** Lists {@link Mapping}s in this {@link Primitive}. */\n  listMappings() {\n    return this.listRefs('mappings');\n  }\n}\nMappingList.EXTENSION_NAME = KHR_MATERIALS_VARIANTS;\n\n/**\n * Defines a variant of a {@link Material}. See {@link KHRMaterialsVariants}.\n */\nclass Variant extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_VARIANTS;\n    this.propertyType = 'Variant';\n    this.parentTypes = ['MappingList'];\n  }\n}\nVariant.EXTENSION_NAME = KHR_MATERIALS_VARIANTS;\n\n/**\n * [`KHR_materials_variants`](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_variants/)\n * defines alternate {@link Material} states for any {@link Primitive} in the scene.\n *\n * ![Illustration](/media/extensions/khr-materials-variants.jpg)\n *\n * > _**Figure:** A sneaker, in three material variants. Source: Khronos Group._\n *\n * Uses include product configurators, night/day states, healthy/damaged states, etc. The\n * `KHRMaterialsVariants` class provides three {@link ExtensionProperty} types: `Variant`, `Mapping`,\n * and `MappingList`. When attached to {@link Primitive} properties, these offer flexible ways of\n * defining the variants available to an application. Triggering a variant is out of scope of this\n * extension, but could be handled in the application with a UI dropdown, particular game states,\n * and so on.\n *\n * Mesh geometry cannot be changed by this extension, although another extension\n * (tentative: `KHR_mesh_variants`) is under consideration by the Khronos Group, for that purpose.\n *\n * Properties:\n * - {@link Variant}\n * - {@link Mapping}\n * - {@link MappingList}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMaterialsVariants } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const variantExtension = document.createExtension(KHRMaterialsVariants);\n *\n * // Create some Variant states.\n * const healthyVariant = variantExtension.createVariant('Healthy');\n * const damagedVariant = variantExtension.createVariant('Damaged');\n *\n * // Create mappings from a Variant state to a Material.\n * const healthyMapping = variantExtension.createMapping()\n * \t.addVariant(healthyVariant)\n * \t.setMaterial(healthyMat);\n * const damagedMapping = variantExtension.createMapping()\n * \t.addVariant(damagedVariant)\n * \t.setMaterial(damagedMat);\n *\n * // Attach the mappings to a Primitive.\n * primitive.setExtension(\n * \t'KHR_materials_variants',\n * \tvariantExtension.createMappingList()\n * \t\t.addMapping(healthyMapping)\n * \t\t.addMapping(damagedMapping)\n * );\n * ```\n *\n * A few notes about this extension:\n *\n * 1. Viewers that don't recognized this extension will show the default material for each primitive\n * \t instead, so assign that material accordingly. This material can be — but doesn't have to be —\n * \t associated with one of the available variants.\n * 2. Mappings can list multiple Variants. In that case, the first Mapping containing an active\n * \t Variant will be chosen by the viewer.\n * 3. Variant names are how these states are identified, so choose informative names.\n * 4. When writing the file to an unpacked `.gltf`, instead of an embedded `.glb`, viewers will have\n * \t the option of downloading only textures associated with the default state, and lazy-loading\n * \t any textures for inactive Variants only when they are needed.\n */\nclass KHRMaterialsVariants extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_MATERIALS_VARIANTS;\n  }\n  /** Creates a new MappingList property. */\n  createMappingList() {\n    return new MappingList(this.document.getGraph());\n  }\n  /** Creates a new Variant property. */\n  createVariant(name = '') {\n    return new Variant(this.document.getGraph(), name);\n  }\n  /** Creates a new Mapping property. */\n  createMapping() {\n    return new Mapping(this.document.getGraph());\n  }\n  /** Lists all Variants on the current Document. */\n  listVariants() {\n    return Array.from(this.properties).filter(prop => prop instanceof Variant);\n  }\n  /** @hidden */\n  read(context) {\n    const jsonDoc = context.jsonDoc;\n    if (!jsonDoc.json.extensions || !jsonDoc.json.extensions[KHR_MATERIALS_VARIANTS]) return this;\n    // Read all top-level variant names.\n    const variantsRootDef = jsonDoc.json.extensions[KHR_MATERIALS_VARIANTS];\n    const variantDefs = variantsRootDef.variants || [];\n    const variants = variantDefs.map(variantDef => this.createVariant().setName(variantDef.name || ''));\n    // For each mesh primitive, read its material/variant mappings.\n    const meshDefs = jsonDoc.json.meshes || [];\n    meshDefs.forEach((meshDef, meshIndex) => {\n      const mesh = context.meshes[meshIndex];\n      const primDefs = meshDef.primitives || [];\n      primDefs.forEach((primDef, primIndex) => {\n        if (!primDef.extensions || !primDef.extensions[KHR_MATERIALS_VARIANTS]) {\n          return;\n        }\n        const mappingList = this.createMappingList();\n        const variantPrimDef = primDef.extensions[KHR_MATERIALS_VARIANTS];\n        for (const mappingDef of variantPrimDef.mappings) {\n          const mapping = this.createMapping();\n          if (mappingDef.material !== undefined) {\n            mapping.setMaterial(context.materials[mappingDef.material]);\n          }\n          for (const variantIndex of mappingDef.variants || []) {\n            mapping.addVariant(variants[variantIndex]);\n          }\n          mappingList.addMapping(mapping);\n        }\n        mesh.listPrimitives()[primIndex].setExtension(KHR_MATERIALS_VARIANTS, mappingList);\n      });\n    });\n    return this;\n  }\n  /** @hidden */\n  write(context) {\n    const jsonDoc = context.jsonDoc;\n    const variants = this.listVariants();\n    if (!variants.length) return this;\n    // Write all top-level variant names.\n    const variantDefs = [];\n    const variantIndexMap = new Map();\n    for (const variant of variants) {\n      variantIndexMap.set(variant, variantDefs.length);\n      variantDefs.push(context.createPropertyDef(variant));\n    }\n    // For each mesh primitive, write its material/variant mappings.\n    for (const mesh of this.document.getRoot().listMeshes()) {\n      const meshIndex = context.meshIndexMap.get(mesh);\n      mesh.listPrimitives().forEach((prim, primIndex) => {\n        const mappingList = prim.getExtension(KHR_MATERIALS_VARIANTS);\n        if (!mappingList) return;\n        const primDef = context.jsonDoc.json.meshes[meshIndex].primitives[primIndex];\n        const mappingDefs = mappingList.listMappings().map(mapping => {\n          const mappingDef = context.createPropertyDef(mapping);\n          const material = mapping.getMaterial();\n          if (material) {\n            mappingDef.material = context.materialIndexMap.get(material);\n          }\n          mappingDef.variants = mapping.listVariants().map(variant => variantIndexMap.get(variant));\n          return mappingDef;\n        });\n        primDef.extensions = primDef.extensions || {};\n        primDef.extensions[KHR_MATERIALS_VARIANTS] = {\n          mappings: mappingDefs\n        };\n      });\n    }\n    jsonDoc.json.extensions = jsonDoc.json.extensions || {};\n    jsonDoc.json.extensions[KHR_MATERIALS_VARIANTS] = {\n      variants: variantDefs\n    };\n    return this;\n  }\n}\nKHRMaterialsVariants.EXTENSION_NAME = KHR_MATERIALS_VARIANTS;\n\nconst {\n  G\n} = TextureChannel;\n/**\n * Defines volume on a PBR {@link Material}. See {@link KHRMaterialsVolume}.\n */\nclass Volume extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_MATERIALS_VOLUME;\n    this.propertyType = 'Volume';\n    this.parentTypes = [PropertyType.MATERIAL];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      thicknessFactor: 0.0,\n      thicknessTexture: null,\n      thicknessTextureInfo: new TextureInfo(this.graph, 'thicknessTexture'),\n      attenuationDistance: Infinity,\n      attenuationColor: [1.0, 1.0, 1.0]\n    });\n  }\n  /**********************************************************************************************\n   * Thickness.\n   */\n  /**\n   * Thickness of the volume beneath the surface in meters in the local coordinate system of the\n   * node. If the value is 0 the material is thin-walled. Otherwise the material is a volume\n   * boundary. The doubleSided property has no effect on volume boundaries.\n   */\n  getThicknessFactor() {\n    return this.get('thicknessFactor');\n  }\n  /**\n   * Thickness of the volume beneath the surface in meters in the local coordinate system of the\n   * node. If the value is 0 the material is thin-walled. Otherwise the material is a volume\n   * boundary. The doubleSided property has no effect on volume boundaries.\n   */\n  setThicknessFactor(factor) {\n    return this.set('thicknessFactor', factor);\n  }\n  /**\n   * Texture that defines the thickness, stored in the G channel. This will be multiplied by\n   * thicknessFactor.\n   */\n  getThicknessTexture() {\n    return this.getRef('thicknessTexture');\n  }\n  /**\n   * Settings affecting the material's use of its thickness texture. If no texture is attached,\n   * {@link TextureInfo} is `null`.\n   */\n  getThicknessTextureInfo() {\n    return this.getRef('thicknessTexture') ? this.getRef('thicknessTextureInfo') : null;\n  }\n  /**\n   * Texture that defines the thickness, stored in the G channel. This will be multiplied by\n   * thicknessFactor.\n   */\n  setThicknessTexture(texture) {\n    return this.setRef('thicknessTexture', texture, {\n      channels: G\n    });\n  }\n  /**********************************************************************************************\n   * Attenuation.\n   */\n  /**\n   * Density of the medium given as the average distance in meters that light travels in the\n   * medium before interacting with a particle.\n   */\n  getAttenuationDistance() {\n    return this.get('attenuationDistance');\n  }\n  /**\n   * Density of the medium given as the average distance in meters that light travels in the\n   * medium before interacting with a particle.\n   */\n  setAttenuationDistance(distance) {\n    return this.set('attenuationDistance', distance);\n  }\n  /**\n   * Color (linear) that white light turns into due to absorption when reaching the attenuation\n   * distance.\n   */\n  getAttenuationColor() {\n    return this.get('attenuationColor');\n  }\n  /**\n   * Color (linear) that white light turns into due to absorption when reaching the attenuation\n   * distance.\n   */\n  setAttenuationColor(color) {\n    return this.set('attenuationColor', color);\n  }\n}\nVolume.EXTENSION_NAME = KHR_MATERIALS_VOLUME;\n\n/**\n * [KHR_materials_volume](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_materials_volume/)\n * adds refraction, absorption, or scattering to a glTF PBR material already using transmission or\n * translucency.\n *\n * ![Illustration](/media/extensions/khr-materials-volume.png)\n *\n * > _**Figure:** Base color changes the amount of light passing through the volume boundary\n * > (left). The overall color of the object is the same everywhere, as if the object is covered\n * > with a colored, transparent foil. Absorption changes the amount of light traveling through the\n * > volume (right). The overall color depends on the distance the light traveled through it; at\n * > small distances (tail of the dragon) less light is absorbed and the color is brighter than at\n * > large distances. Source: Khronos Group._\n *\n * By default, a glTF 2.0 material describes the scattering properties of a surface enclosing an\n * infinitely thin volume. The surface defined by the mesh represents a thin wall. The volume\n * extension makes it possible to turn the surface into an interface between volumes. The mesh to\n * which the material is attached defines the boundaries of an homogeneous medium and therefore must\n * be manifold. Volumes provide effects like refraction, absorption and scattering. Scattering\n * effects will require future (TBD) extensions.\n *\n * The volume extension must be combined with {@link KHRMaterialsTransmission} or\n * `KHR_materials_translucency` in order to define entry of light into the volume.\n *\n * Properties:\n * - {@link Volume}\n *\n * ### Example\n *\n * The `KHRMaterialsVolume` class provides a single {@link ExtensionProperty} type, `Volume`, which\n * may be attached to any {@link Material} instance. For example:\n *\n * ```typescript\n * import { KHRMaterialsVolume, Volume } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const volumeExtension = document.createExtension(KHRMaterialsVolume);\n *\n * // Create a Volume property.\n * const volume = volumeExtension.createVolume()\n * \t.setThicknessFactor(1.0)\n * \t.setThicknessTexture(texture)\n * \t.setAttenuationDistance(1.0)\n * \t.setAttenuationColorFactor([1, 0.5, 0.5]);\n *\n * // Attach the property to a Material.\n * material.setExtension('KHR_materials_volume', volume);\n * ```\n *\n * A thickness texture is required in most realtime renderers, and can be baked in software such as\n * Blender or Substance Painter. When `thicknessFactor = 0`, all volumetric effects are disabled.\n */\nclass KHRMaterialsVolume extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_MATERIALS_VOLUME;\n    this.prereadTypes = [PropertyType.MESH];\n    this.prewriteTypes = [PropertyType.MESH];\n  }\n  /** Creates a new Volume property for use on a {@link Material}. */\n  createVolume() {\n    return new Volume(this.document.getGraph());\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  write(_context) {\n    return this;\n  }\n  /** @hidden */\n  preread(context) {\n    const jsonDoc = context.jsonDoc;\n    const materialDefs = jsonDoc.json.materials || [];\n    const textureDefs = jsonDoc.json.textures || [];\n    materialDefs.forEach((materialDef, materialIndex) => {\n      if (materialDef.extensions && materialDef.extensions[KHR_MATERIALS_VOLUME]) {\n        const volume = this.createVolume();\n        context.materials[materialIndex].setExtension(KHR_MATERIALS_VOLUME, volume);\n        const volumeDef = materialDef.extensions[KHR_MATERIALS_VOLUME];\n        // Factors.\n        if (volumeDef.thicknessFactor !== undefined) {\n          volume.setThicknessFactor(volumeDef.thicknessFactor);\n        }\n        if (volumeDef.attenuationDistance !== undefined) {\n          volume.setAttenuationDistance(volumeDef.attenuationDistance);\n        }\n        if (volumeDef.attenuationColor !== undefined) {\n          volume.setAttenuationColor(volumeDef.attenuationColor);\n        }\n        // Textures.\n        if (volumeDef.thicknessTexture !== undefined) {\n          const textureInfoDef = volumeDef.thicknessTexture;\n          const texture = context.textures[textureDefs[textureInfoDef.index].source];\n          volume.setThicknessTexture(texture);\n          context.setTextureInfo(volume.getThicknessTextureInfo(), textureInfoDef);\n        }\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  prewrite(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listMaterials().forEach(material => {\n      const volume = material.getExtension(KHR_MATERIALS_VOLUME);\n      if (volume) {\n        const materialIndex = context.materialIndexMap.get(material);\n        const materialDef = jsonDoc.json.materials[materialIndex];\n        materialDef.extensions = materialDef.extensions || {};\n        // Factors.\n        const volumeDef = materialDef.extensions[KHR_MATERIALS_VOLUME] = {};\n        if (volume.getThicknessFactor() > 0) {\n          volumeDef.thicknessFactor = volume.getThicknessFactor();\n        }\n        if (Number.isFinite(volume.getAttenuationDistance())) {\n          volumeDef.attenuationDistance = volume.getAttenuationDistance();\n        }\n        if (!MathUtils.eq(volume.getAttenuationColor(), [1, 1, 1])) {\n          volumeDef.attenuationColor = volume.getAttenuationColor();\n        }\n        // Textures.\n        if (volume.getThicknessTexture()) {\n          const texture = volume.getThicknessTexture();\n          const textureInfo = volume.getThicknessTextureInfo();\n          volumeDef.thicknessTexture = context.createTextureInfoDef(texture, textureInfo);\n        }\n      }\n    });\n    return this;\n  }\n}\nKHRMaterialsVolume.EXTENSION_NAME = KHR_MATERIALS_VOLUME;\n\n/**\n * [`KHR_mesh_quantization`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/)\n * expands allowed component types for vertex attributes to include 16- and 8-bit storage.\n *\n * Quantization provides a memory/precision tradeoff — depending on the application needs, 16-bit or\n * 8-bit storage can be sufficient for mesh geometry, at 1/2 or 1/4 the size. For example, a 10x10\n * mesh might be written to a uint16 {@link Accessor}, with values `0–65536`, normalized to be\n * interpreted as `0–1`. With an additional 10x scale on any node {@link Node} instantiating the\n * quantized {@link Mesh}, the model retains its original scale with a minimal quality loss and\n * up to 50% file size reduction.\n *\n * Defining no {@link ExtensionProperty} types, this {@link Extension} is simply attached to the\n * {@link Document}, and affects the entire Document by allowing more flexible use of\n * {@link Accessor} types for vertex attributes. Without the Extension, the same use of these data\n * types would yield an invalid glTF document, under the stricter core glTF specification.\n *\n * Properties:\n * - N/A\n *\n * ### Example\n *\n * ```typescript\n * import { KHRMeshQuantization } from '@gltf-transform/extensions';\n * import { quantize } from '@gltf-transform/functions';\n *\n * // Create an Extension attached to the Document.\n * const quantizationExtension = document.createExtension(KHRMeshQuantization).setRequired(true);\n *\n * // Use Uint16Array, Uint8Array, Int16Array, and Int8Array in vertex accessors manually,\n * // or apply the provided quantize() function to compute quantized accessors automatically:\n * await document.transform(quantize({\n * \tquantizePosition: 16,\n * \tquantizeNormal: 12,\n * \tquantizeTexcoord: 14\n * }));\n * ```\n *\n * For more documentation about automatic quantization, see the {@link quantize} function.\n */\nclass KHRMeshQuantization extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_MESH_QUANTIZATION;\n  }\n  /** @hidden */\n  read(_) {\n    return this;\n  }\n  /** @hidden */\n  write(_) {\n    return this;\n  }\n}\nKHRMeshQuantization.EXTENSION_NAME = KHR_MESH_QUANTIZATION;\n\nclass KTX2ImageUtils {\n  match(array) {\n    return array[0] === 0xab && array[1] === 0x4b && array[2] === 0x54 && array[3] === 0x58 && array[4] === 0x20 && array[5] === 0x32 && array[6] === 0x30 && array[7] === 0xbb && array[8] === 0x0d && array[9] === 0x0a && array[10] === 0x1a && array[11] === 0x0a;\n  }\n  getSize(array) {\n    const container = read(array);\n    return [container.pixelWidth, container.pixelHeight];\n  }\n  getChannels(array) {\n    const container = read(array);\n    const dfd = container.dataFormatDescriptor[0];\n    if (dfd.colorModel === KHR_DF_MODEL_ETC1S) {\n      return dfd.samples.length === 2 && (dfd.samples[1].channelType & 0xf) === 15 ? 4 : 3;\n    } else if (dfd.colorModel === KHR_DF_MODEL_UASTC) {\n      return (dfd.samples[0].channelType & 0xf) === 3 ? 4 : 3;\n    }\n    throw new Error(`Unexpected KTX2 colorModel, \"${dfd.colorModel}\".`);\n  }\n  getVRAMByteLength(array) {\n    const container = read(array);\n    const hasAlpha = this.getChannels(array) > 3;\n    let uncompressedBytes = 0;\n    for (let i = 0; i < container.levels.length; i++) {\n      const level = container.levels[i];\n      // Use level.uncompressedByteLength for UASTC; for ETC1S it's 0.\n      if (level.uncompressedByteLength) {\n        uncompressedBytes += level.uncompressedByteLength;\n      } else {\n        const levelWidth = Math.max(1, Math.floor(container.pixelWidth / Math.pow(2, i)));\n        const levelHeight = Math.max(1, Math.floor(container.pixelHeight / Math.pow(2, i)));\n        const blockSize = hasAlpha ? 16 : 8;\n        uncompressedBytes += levelWidth / 4 * (levelHeight / 4) * blockSize;\n      }\n    }\n    return uncompressedBytes;\n  }\n}\n/**\n * [`KHR_texture_basisu`](https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu)\n * enables KTX2 GPU textures with Basis Universal supercompression for any material texture.\n *\n * GPU texture formats, unlike traditional image formats, remain compressed in GPU memory. As a\n * result, they (1) upload to the GPU much more quickly, and (2) require much less GPU memory. In\n * certain cases they may also have smaller filesizes than PNG or JPEG textures, but this is not\n * guaranteed. GPU textures often require more careful tuning during compression to maintain image\n * quality, but this extra effort is worthwhile for applications that need to maintain a smooth\n * framerate while uploading images, or where GPU memory is limited.\n *\n * Defining no {@link ExtensionProperty} types, this {@link Extension} is simply attached to the\n * {@link Document}, and affects the entire Document by allowing use of the `image/ktx2` MIME type\n * and passing KTX2 image data to the {@link Texture.setImage} method. Without the Extension, the\n * same MIME types and image data would yield an invalid glTF document, under the stricter core glTF\n * specification.\n *\n * Properties:\n * - N/A\n *\n * ### Example\n *\n * ```typescript\n * import { KHRTextureBasisu } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const basisuExtension = document.createExtension(KHRTextureBasisu)\n * \t.setRequired(true);\n * document.createTexture('MyCompressedTexture')\n * \t.setMimeType('image/ktx2')\n * \t.setImage(fs.readFileSync('my-texture.ktx2'));\n * ```\n *\n * Compression is not done automatically when adding the extension as shown above — you must\n * compress the image data first, then pass the `.ktx2` payload to {@link Texture.setImage}. The\n * glTF Transform CLI has functions to help with this, or any similar KTX2-capable\n * utility will work.\n *\n * When the `KHR_texture_basisu` extension is added to a file by glTF Transform, the extension\n * should always be required. This tool does not support writing assets that \"fall back\" to optional\n * PNG or JPEG image data.\n *\n * > _**NOTICE:** Compressing some textures — particularly 3-component (RGB) normal maps, and\n * > occlusion/roughness/metalness maps, may give poor results with the ETC1S compression option.\n * > These issues can often be avoided with the larger UASTC compression option, or by upscaling the\n * > texture before compressing it.\n * >\n * > For best results when authoring new textures, use\n * > [texture dilation](https://docs.substance3d.com/spdoc/padding-134643719.html) and minimize\n * > prominent UV seams._\n */\nclass KHRTextureBasisu extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_TEXTURE_BASISU;\n    /** @hidden */\n    this.prereadTypes = [PropertyType.TEXTURE];\n  }\n  /** @hidden */\n  static register() {\n    ImageUtils.registerFormat('image/ktx2', new KTX2ImageUtils());\n  }\n  /** @hidden */\n  preread(context) {\n    context.jsonDoc.json.textures.forEach(textureDef => {\n      if (textureDef.extensions && textureDef.extensions[KHR_TEXTURE_BASISU]) {\n        const basisuDef = textureDef.extensions[KHR_TEXTURE_BASISU];\n        textureDef.source = basisuDef.source;\n      }\n    });\n    return this;\n  }\n  /** @hidden */\n  read(_context) {\n    return this;\n  }\n  /** @hidden */\n  write(context) {\n    const jsonDoc = context.jsonDoc;\n    this.document.getRoot().listTextures().forEach(texture => {\n      if (texture.getMimeType() === 'image/ktx2') {\n        const imageIndex = context.imageIndexMap.get(texture);\n        jsonDoc.json.textures.forEach(textureDef => {\n          if (textureDef.source === imageIndex) {\n            textureDef.extensions = textureDef.extensions || {};\n            textureDef.extensions[KHR_TEXTURE_BASISU] = {\n              source: textureDef.source\n            };\n            delete textureDef.source;\n          }\n        });\n      }\n    });\n    return this;\n  }\n}\nKHRTextureBasisu.EXTENSION_NAME = KHR_TEXTURE_BASISU;\n\n/**\n * Defines UV transform for a {@link TextureInfo}. See {@link KHRTextureTransform}.\n */\nclass Transform extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_TEXTURE_TRANSFORM;\n    this.propertyType = 'Transform';\n    this.parentTypes = [PropertyType.TEXTURE_INFO];\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      offset: [0.0, 0.0],\n      rotation: 0,\n      scale: [1.0, 1.0],\n      texCoord: null\n    });\n  }\n  getOffset() {\n    return this.get('offset');\n  }\n  setOffset(offset) {\n    return this.set('offset', offset);\n  }\n  getRotation() {\n    return this.get('rotation');\n  }\n  setRotation(rotation) {\n    return this.set('rotation', rotation);\n  }\n  getScale() {\n    return this.get('scale');\n  }\n  setScale(scale) {\n    return this.set('scale', scale);\n  }\n  getTexCoord() {\n    return this.get('texCoord');\n  }\n  setTexCoord(texCoord) {\n    return this.set('texCoord', texCoord);\n  }\n}\nTransform.EXTENSION_NAME = KHR_TEXTURE_TRANSFORM;\n\n/**\n * [`KHR_texture_transform`](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_texture_transform/)\n * adds offset, rotation, and scale to {@link TextureInfo} properties.\n *\n * Affine UV transforms are useful for reducing the number of textures the GPU must load, improving\n * performance when used in techniques like texture atlases. UV transforms cannot be animated at\n * this time.\n *\n * Properties:\n * - {@link Transform}\n *\n * ### Example\n *\n * The `KHRTextureTransform` class provides a single {@link ExtensionProperty} type, `Transform`, which\n * may be attached to any {@link TextureInfo} instance. For example:\n *\n * ```typescript\n * import { KHRTextureTransform } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const transformExtension = document.createExtension(KHRTextureTransform)\n * \t.setRequired(true);\n *\n * // Create a reusable Transform.\n * const transform = transformExtension.createTransform()\n * \t.setScale([100, 100]);\n *\n * // Apply the Transform to a Material's baseColorTexture.\n * document.createMaterial()\n * \t.setBaseColorTexture(myTexture)\n * \t.getBaseColorTextureInfo()\n * \t.setExtension('KHR_texture_transform', transform);\n * ```\n */\nclass KHRTextureTransform extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_TEXTURE_TRANSFORM;\n  }\n  /** Creates a new Transform property for use on a {@link TextureInfo}. */\n  createTransform() {\n    return new Transform(this.document.getGraph());\n  }\n  /** @hidden */\n  read(context) {\n    for (const [textureInfo, textureInfoDef] of Array.from(context.textureInfos.entries())) {\n      if (!textureInfoDef.extensions || !textureInfoDef.extensions[KHR_TEXTURE_TRANSFORM]) continue;\n      const transform = this.createTransform();\n      const transformDef = textureInfoDef.extensions[KHR_TEXTURE_TRANSFORM];\n      if (transformDef.offset !== undefined) transform.setOffset(transformDef.offset);\n      if (transformDef.rotation !== undefined) transform.setRotation(transformDef.rotation);\n      if (transformDef.scale !== undefined) transform.setScale(transformDef.scale);\n      if (transformDef.texCoord !== undefined) transform.setTexCoord(transformDef.texCoord);\n      textureInfo.setExtension(KHR_TEXTURE_TRANSFORM, transform);\n    }\n    return this;\n  }\n  /** @hidden */\n  write(context) {\n    const textureInfoEntries = Array.from(context.textureInfoDefMap.entries());\n    for (const [textureInfo, textureInfoDef] of textureInfoEntries) {\n      const transform = textureInfo.getExtension(KHR_TEXTURE_TRANSFORM);\n      if (!transform) continue;\n      textureInfoDef.extensions = textureInfoDef.extensions || {};\n      const transformDef = {};\n      const eq = MathUtils.eq;\n      if (!eq(transform.getOffset(), [0, 0])) transformDef.offset = transform.getOffset();\n      if (transform.getRotation() !== 0) transformDef.rotation = transform.getRotation();\n      if (!eq(transform.getScale(), [1, 1])) transformDef.scale = transform.getScale();\n      if (transform.getTexCoord() != null) transformDef.texCoord = transform.getTexCoord();\n      textureInfoDef.extensions[KHR_TEXTURE_TRANSFORM] = transformDef;\n    }\n    return this;\n  }\n}\nKHRTextureTransform.EXTENSION_NAME = KHR_TEXTURE_TRANSFORM;\n\nconst PARENT_TYPES = [PropertyType.ROOT, PropertyType.SCENE, PropertyType.NODE, PropertyType.MESH, PropertyType.MATERIAL, PropertyType.TEXTURE, PropertyType.ANIMATION];\n/**\n * Defines an XMP packet associated with a Document or Property. See {@link KHRXMP}.\n */\nclass Packet extends ExtensionProperty {\n  init() {\n    this.extensionName = KHR_XMP_JSON_LD;\n    this.propertyType = 'Packet';\n    this.parentTypes = PARENT_TYPES;\n  }\n  getDefaults() {\n    return Object.assign(super.getDefaults(), {\n      context: {},\n      properties: {}\n    });\n  }\n  /**********************************************************************************************\n   * Context.\n   */\n  /**\n   * Returns the XMP context definition URL for the given term.\n   * See: https://json-ld.org/spec/latest/json-ld/#the-context\n   * @param term Case-sensitive term. Usually a concise, lowercase, alphanumeric identifier.\n   */\n  getContext() {\n    return this.get('context');\n  }\n  /**\n   * Sets the XMP context definition URL for the given term.\n   * See: https://json-ld.org/spec/latest/json-ld/#the-context\n   *\n   * Example:\n   *\n   * ```typescript\n   * packet.setContext({\n   *   dc: 'http://purl.org/dc/elements/1.1/',\n   *   model3d: 'https://schema.khronos.org/model3d/xsd/1.0/',\n   * });\n   * ```\n   *\n   * @param term Case-sensitive term. Usually a concise, lowercase, alphanumeric identifier.\n   * @param definition URI for XMP namespace.\n   */\n  setContext(context) {\n    return this.set('context', _extends({}, context));\n  }\n  /**********************************************************************************************\n   * Properties.\n   */\n  /**\n   * Lists properties defined in this packet.\n   *\n   * Example:\n   *\n   * ```typescript\n   * packet.listProperties(); // → ['dc:Language', 'dc:Creator', 'xmp:CreateDate']\n   * ```\n   */\n  listProperties() {\n    return Object.keys(this.get('properties'));\n  }\n  /**\n   * Returns the value of a property, as a literal or JSONLD object.\n   *\n   * Example:\n   *\n   * ```typescript\n   * packet.getProperty('dc:Creator'); // → {\"@list\": [\"Acme, Inc.\"]}\n   * packet.getProperty('dc:Title'); // → {\"@type\": \"rdf:Alt\", \"rdf:_1\": {\"@language\": \"en-US\", \"@value\": \"Lamp\"}}\n   * packet.getProperty('xmp:CreateDate'); // → \"2022-01-01\"\n   * ```\n   */\n  getProperty(name) {\n    const properties = this.get('properties');\n    return name in properties ? properties[name] : null;\n  }\n  /**\n   * Sets the value of a property, as a literal or JSONLD object.\n   *\n   * Example:\n   *\n   * ```typescript\n   * packet.setProperty('dc:Creator', {'@list': ['Acme, Inc.']});\n   * packet.setProperty('dc:Title', {\n   * \t'@type': 'rdf:Alt',\n   * \t'rdf:_1': {'@language': 'en-US', '@value': 'Lamp'}\n   * });\n   * packet.setProperty('model3d:preferredSurfaces', {'@list': ['vertical']});\n   * ```\n   */\n  setProperty(name, value) {\n    this._assertContext(name);\n    const properties = _extends({}, this.get('properties'));\n    if (value) {\n      properties[name] = value;\n    } else {\n      delete properties[name];\n    }\n    return this.set('properties', properties);\n  }\n  /**********************************************************************************************\n   * Serialize / Deserialize.\n   */\n  /**\n   * Serializes the packet context and properties to a JSONLD object.\n   */\n  toJSONLD() {\n    const context = copyJSON(this.get('context'));\n    const properties = copyJSON(this.get('properties'));\n    return _extends({\n      '@context': context\n    }, properties);\n  }\n  /**\n   * Deserializes a JSONLD packet, then overwrites existing context and properties with\n   * the new values.\n   */\n  fromJSONLD(jsonld) {\n    jsonld = copyJSON(jsonld);\n    // Context.\n    const context = jsonld['@context'];\n    if (context) this.set('context', context);\n    delete jsonld['@context'];\n    // Properties.\n    return this.set('properties', jsonld);\n  }\n  /**********************************************************************************************\n   * Validation.\n   */\n  /** @hidden */\n  _assertContext(name) {\n    const prefix = name.split(':')[0];\n    if (!(prefix in this.get('context'))) {\n      throw new Error(`${KHR_XMP_JSON_LD}: Missing context for term, \"${name}\".`);\n    }\n  }\n}\nPacket.EXTENSION_NAME = KHR_XMP_JSON_LD;\nfunction copyJSON(object) {\n  return JSON.parse(JSON.stringify(object));\n}\n\n/**\n * [KHR_xmp_json_ld](https://github.com/KhronosGroup/gltf/blob/main/extensions/2.0/Khronos/KHR_xmp_json_ld/)\n * defines XMP metadata associated with a glTF asset.\n *\n * XMP metadata provides standardized fields describing the content, provenance, usage\n * restrictions, or other attributes of a 3D model. XMP metadata does not generally affect the\n * parsing or runtime behavior of the content — for that, use custom extensions, custom vertex\n * attributes, or extras. Similarly, storage mechanisms other than XMP should be preferred\n * for binary content like mesh data, animations, or textures.\n *\n * Generally XMP metadata is associated with the entire glTF asset by attaching an XMP {@link Packet}\n * to the document {@link Root}. In less common cases where metadata must be associated with\n * specific subsets of a document, XMP Packets may be attached to {@link Scene}, {@link Node},\n * {@link Mesh}, {@link Material}, {@link Texture}, or {@link Animation} properties.\n *\n * Within each packet, XMP properties become available when an\n * [XMP namespace](https://www.adobe.io/xmp/docs/XMPNamespaces/) is registered\n * with {@link Packet.setContext}. Packets cannot use properties whose namespaces are not\n * registered as context. While not all XMP namespaces are relevant to 3D assets, some common\n * namespaces provide useful metadata about authorship and provenance. Additionally, the `model3d`\n * namespace provides certain properties specific to 3D content, such as Augmented Reality (AR)\n * orientation data.\n *\n * Common XMP contexts for 3D models include:\n *\n * | Prefix      | URI                                         | Name                           |\n * |:------------|:--------------------------------------------|:-------------------------------|\n * | `dc`        | http://purl.org/dc/elements/1.1/            | Dublin Core                    |\n * | `model3d`   | https://schema.khronos.org/model3d/xsd/1.0/ | Model 3D                       |\n * | `rdf`       | http://www.w3.org/1999/02/22-rdf-syntax-ns# | Resource Description Framework |\n * | `xmp`       | http://ns.adobe.com/xap/1.0/                | XMP                            |\n * | `xmpRights` | http://ns.adobe.com/xap/1.0/rights/         | XMP Rights Management          |\n *\n * Only the XMP contexts required for a packet should be assigned, and different packets\n * in the same asset may use different contexts. For greater detail on available XMP\n * contexts and how to use them in glTF assets, see the\n * [3DC Metadata Recommendations](https://github.com/KhronosGroup/3DC-Metadata-Recommendations/blob/main/model3d.md).\n *\n * Properties:\n * - {@link Packet}\n *\n * ### Example\n *\n * ```typescript\n * import { KHRXMP, Packet } from '@gltf-transform/extensions';\n *\n * // Create an Extension attached to the Document.\n * const xmpExtension = document.createExtension(KHRXMP);\n *\n * // Create Packet property.\n * const packet = xmpExtension.createPacket()\n * \t.setContext({\n * \t\tdc: 'http://purl.org/dc/elements/1.1/',\n * \t})\n *\t.setProperty('dc:Creator', {\"@list\": [\"Acme, Inc.\"]});\n *\n * // Option 1: Assign to Document Root.\n * document.getRoot().setExtension('KHR_xmp_json_ld', packet);\n *\n * // Option 2: Assign to a specific Property.\n * texture.setExtension('KHR_xmp_json_ld', packet);\n * ```\n */\nclass KHRXMP extends Extension {\n  constructor(...args) {\n    super(...args);\n    this.extensionName = KHR_XMP_JSON_LD;\n  }\n  /** Creates a new XMP packet, to be linked with a {@link Document} or {@link Property Properties}. */\n  createPacket() {\n    return new Packet(this.document.getGraph());\n  }\n  /** Lists XMP packets currently defined in a {@link Document}. */\n  listPackets() {\n    return Array.from(this.properties);\n  }\n  /** @hidden */\n  read(context) {\n    var _context$jsonDoc$json;\n    const extensionDef = (_context$jsonDoc$json = context.jsonDoc.json.extensions) == null ? void 0 : _context$jsonDoc$json[KHR_XMP_JSON_LD];\n    if (!extensionDef || !extensionDef.packets) return this;\n    // Deserialize packets.\n    const json = context.jsonDoc.json;\n    const root = this.document.getRoot();\n    const packets = extensionDef.packets.map(packetDef => this.createPacket().fromJSONLD(packetDef));\n    const defLists = [[json.asset], json.scenes, json.nodes, json.meshes, json.materials, json.images, json.animations];\n    const propertyLists = [[root], root.listScenes(), root.listNodes(), root.listMeshes(), root.listMaterials(), root.listTextures(), root.listAnimations()];\n    // Assign packets.\n    for (let i = 0; i < defLists.length; i++) {\n      const defs = defLists[i] || [];\n      for (let j = 0; j < defs.length; j++) {\n        const def = defs[j];\n        if (def.extensions && def.extensions[KHR_XMP_JSON_LD]) {\n          const xmpDef = def.extensions[KHR_XMP_JSON_LD];\n          propertyLists[i][j].setExtension(KHR_XMP_JSON_LD, packets[xmpDef.packet]);\n        }\n      }\n    }\n    return this;\n  }\n  /** @hidden */\n  write(context) {\n    const {\n      json\n    } = context.jsonDoc;\n    const packetDefs = [];\n    for (const packet of this.properties) {\n      // Serialize packets.\n      packetDefs.push(packet.toJSONLD());\n      // Assign packets.\n      for (const parent of packet.listParents()) {\n        let parentDef;\n        switch (parent.propertyType) {\n          case PropertyType.ROOT:\n            parentDef = json.asset;\n            break;\n          case PropertyType.SCENE:\n            parentDef = json.scenes[context.sceneIndexMap.get(parent)];\n            break;\n          case PropertyType.NODE:\n            parentDef = json.nodes[context.nodeIndexMap.get(parent)];\n            break;\n          case PropertyType.MESH:\n            parentDef = json.meshes[context.meshIndexMap.get(parent)];\n            break;\n          case PropertyType.MATERIAL:\n            parentDef = json.materials[context.materialIndexMap.get(parent)];\n            break;\n          case PropertyType.TEXTURE:\n            parentDef = json.images[context.imageIndexMap.get(parent)];\n            break;\n          case PropertyType.ANIMATION:\n            parentDef = json.animations[context.animationIndexMap.get(parent)];\n            break;\n          default:\n            parentDef = null;\n            this.document.getLogger().warn(`[${KHR_XMP_JSON_LD}]: Unsupported parent property, \"${parent.propertyType}\"`);\n            break;\n        }\n        if (!parentDef) continue;\n        parentDef.extensions = parentDef.extensions || {};\n        parentDef.extensions[KHR_XMP_JSON_LD] = {\n          packet: packetDefs.length - 1\n        };\n      }\n    }\n    if (packetDefs.length > 0) {\n      json.extensions = json.extensions || {};\n      json.extensions[KHR_XMP_JSON_LD] = {\n        packets: packetDefs\n      };\n    }\n    return this;\n  }\n}\nKHRXMP.EXTENSION_NAME = KHR_XMP_JSON_LD;\n\nconst KHRONOS_EXTENSIONS = [KHRDracoMeshCompression, KHRLightsPunctual, KHRMaterialsAnisotropy, KHRMaterialsClearcoat, KHRMaterialsDiffuseTransmission, KHRMaterialsDispersion, KHRMaterialsEmissiveStrength, KHRMaterialsIOR, KHRMaterialsIridescence, KHRMaterialsPBRSpecularGlossiness, KHRMaterialsSpecular, KHRMaterialsSheen, KHRMaterialsTransmission, KHRMaterialsUnlit, KHRMaterialsVariants, KHRMaterialsVolume, KHRMeshQuantization, KHRTextureBasisu, KHRTextureTransform, KHRXMP];\nconst ALL_EXTENSIONS = [EXTMeshGPUInstancing, EXTMeshoptCompression, EXTTextureAVIF, EXTTextureWebP, ...KHRONOS_EXTENSIONS];\n\nexport { ALL_EXTENSIONS, Anisotropy, Clearcoat, DiffuseTransmission, Dispersion, EXTMeshGPUInstancing, EXTMeshoptCompression, EXTTextureAVIF, EXTTextureWebP, EmissiveStrength, INSTANCE_ATTRIBUTE, IOR, InstancedMesh, Iridescence, KHRDracoMeshCompression, KHRLightsPunctual, KHRMaterialsAnisotropy, KHRMaterialsClearcoat, KHRMaterialsDiffuseTransmission, KHRMaterialsDispersion, KHRMaterialsEmissiveStrength, KHRMaterialsIOR, KHRMaterialsIridescence, KHRMaterialsPBRSpecularGlossiness, KHRMaterialsSheen, KHRMaterialsSpecular, KHRMaterialsTransmission, KHRMaterialsUnlit, KHRMaterialsVariants, KHRMaterialsVolume, KHRMeshQuantization, KHRONOS_EXTENSIONS, KHRTextureBasisu, KHRTextureTransform, KHRXMP, Light, Mapping, MappingList, PBRSpecularGlossiness, Packet, Sheen, Specular, Transform, Transmission, Unlit, Variant, Volume };\n//# sourceMappingURL=index.modern.js.map\n","import { Document, NodeIO, Accessor, Primitive } from '@gltf-transform/core';\nimport { Light as LightDef, KHRLightsPunctual } from '@gltf-transform/extensions';\nimport { Vertex, Color, Face, IndexedPolyhedron, DEFAULT_FACE_COLOR } from './common';\n\ntype Geom = {\n    positions: Float32Array;\n    indices: Uint32Array;\n    colors?: Float32Array;\n};\n\nfunction createPrimitive(doc: Document, baseColorFactor: Color, {positions, indices, colors}: Geom): Primitive {\n    const prim = doc.createPrimitive()\n        .setMode(Primitive.Mode.TRIANGLES)\n        .setMaterial(\n            doc.createMaterial()\n                .setDoubleSided(true)\n                .setAlphaMode(baseColorFactor[3] < 1 ? 'BLEND' : 'OPAQUE')\n                .setMetallicFactor(0.0)\n                .setRoughnessFactor(0.8)\n                .setBaseColorFactor(baseColorFactor))\n        .setAttribute('POSITION',\n            doc.createAccessor()\n                .setType(Accessor.Type.VEC3)\n                .setArray(positions))\n        .setIndices(\n            doc.createAccessor()\n                .setType(Accessor.Type.SCALAR)\n                .setArray(indices));\n    if (colors) {\n        prim.setAttribute('COLOR_0',\n            doc.createAccessor()\n                .setType(Accessor.Type.VEC3)\n                .setArray(colors));\n    }\n    return prim;\n}\n\nfunction getGeom(data: IndexedPolyhedron): Geom {\n    let positions = new Float32Array(data.vertices.length * 3);\n    const indices = new Uint32Array(data.faces.length * 3);\n\n    const addedVertices = new Map<number, number>();\n    let verticesAdded = 0;\n    const addVertex = (i: number) => {\n        let index = addedVertices.get(i);\n        if (index === undefined) {\n            const offset = verticesAdded * 3;\n            const vertex = data.vertices[i];\n            positions[offset] = vertex.x;\n            positions[offset + 1] = vertex.y;\n            positions[offset + 2] = vertex.z;\n            index = verticesAdded++;\n            addedVertices.set(i, index);\n        }\n        return index;\n    };\n\n    data.faces.forEach((face, i) => {\n        const { vertices } = face;\n        if (vertices.length < 3) throw new Error('Face must have at least 3 vertices');\n\n        const offset = i * 3;\n        indices[offset] = addVertex(vertices[0]);\n        indices[offset + 1] = addVertex(vertices[1]);\n        indices[offset + 2] = addVertex(vertices[2]);\n    });\n    return {\n        positions: positions.slice(0, verticesAdded * 3),\n        indices\n    };\n}\n\n// Create a build plate grid mesh with solid base and grid lines\nfunction createBuildPlateGrid(doc: Document): { mesh: any, node: any } {\n    try {\n        const buffer = doc.getRoot().listBuffers()[0];\n        if (!buffer) {\n            console.error('No buffer available for build plate');\n            throw new Error('Buffer not found');\n        }\n        \n        const buildPlateMesh = doc.createMesh();\n        const gridSize = 200; // 200mm x 200mm\n        const half = gridSize / 2;\n        \n        // Create a solid base plane\n        const planeVertices = new Float32Array([\n            -half, -half, -0.1,  // bottom-left\n            half, -half, -0.1,   // bottom-right\n            half, half, -0.1,    // top-right\n            -half, half, -0.1,   // top-left\n        ]);\n        \n        const planeIndices = new Uint16Array([\n            0, 1, 2,  // first triangle\n            0, 2, 3   // second triangle\n        ]);\n        \n        // Create base plane primitive (dark gray, slightly transparent)\n        const baseMaterial = doc.createMaterial()\n            .setBaseColorFactor([0.15, 0.15, 0.15, 0.8])\n            .setAlphaMode('BLEND')\n            .setDoubleSided(true)\n            .setMetallicFactor(0.1)\n            .setRoughnessFactor(0.9);\n        \n        const basePrimitive = doc.createPrimitive()\n            .setMode(Primitive.Mode.TRIANGLES)\n            .setAttribute('POSITION',\n                doc.createAccessor()\n                    .setType(Accessor.Type.VEC3)\n                    .setArray(planeVertices)\n                    .setBuffer(buffer))\n            .setIndices(\n                doc.createAccessor()\n                    .setType(Accessor.Type.SCALAR)\n                    .setArray(planeIndices)\n                    .setBuffer(buffer))\n            .setMaterial(baseMaterial);\n        \n        buildPlateMesh.addPrimitive(basePrimitive);\n        \n        // Create grid lines on top of the plane\n        const gridSpacing = 10;\n        const gridLines = gridSize / gridSpacing;\n        const lineVertices: number[] = [];\n        const lineIndices: number[] = [];\n        let vertexIndex = 0;\n        \n        // Grid lines along X axis\n        for (let i = 0; i <= gridLines; i++) {\n            const y = -half + i * gridSpacing;\n            lineVertices.push(-half, y, 0, half, y, 0);\n            lineIndices.push(vertexIndex, vertexIndex + 1);\n            vertexIndex += 2;\n        }\n        \n        // Grid lines along Y axis\n        for (let i = 0; i <= gridLines; i++) {\n            const x = -half + i * gridSpacing;\n            lineVertices.push(x, -half, 0, x, half, 0);\n            lineIndices.push(vertexIndex, vertexIndex + 1);\n            vertexIndex += 2;\n        }\n        \n        // Create grid lines material (bright blue, more opaque)\n        const gridMaterial = doc.createMaterial()\n            .setBaseColorFactor([0.4, 0.7, 1.0, 0.7])\n            .setAlphaMode('BLEND')\n            .setDoubleSided(true)\n            .setEmissiveFactor([0.1, 0.2, 0.3]); // Slight glow\n        \n        const gridPrimitive = doc.createPrimitive()\n            .setMode(Primitive.Mode.LINES)\n            .setAttribute('POSITION',\n                doc.createAccessor()\n                    .setType(Accessor.Type.VEC3)\n                    .setArray(new Float32Array(lineVertices))\n                    .setBuffer(buffer))\n            .setIndices(\n                doc.createAccessor()\n                    .setType(Accessor.Type.SCALAR)\n                    .setArray(new Uint16Array(lineIndices))\n                    .setBuffer(buffer))\n            .setMaterial(gridMaterial);\n        \n        buildPlateMesh.addPrimitive(gridPrimitive);\n        \n        const buildPlateNode = doc.createNode()\n            .setMesh(buildPlateMesh)\n            .setTranslation([0, 0, 0]);\n        \n        return { mesh: buildPlateMesh, node: buildPlateNode };\n    } catch (error) {\n        console.error('Error creating build plate:', error);\n        throw error;\n    }\n}\n\nexport async function exportGlb(data: IndexedPolyhedron, defaultColor: Color = DEFAULT_FACE_COLOR, includeBuildPlate: boolean = true): Promise<Blob> {\n    const doc = new Document();\n    const lightExt = doc.createExtension(KHRLightsPunctual);\n    doc.createBuffer();\n\n    const scene = doc.createScene()\n        .addChild(doc.createNode()\n            .setExtension('KHR_lights_punctual', lightExt\n                .createLight()\n                .setType(LightDef.Type.DIRECTIONAL)\n                .setIntensity(1.0)\n                .setColor([1.0, 1.0, 1.0]))\n            .setRotation([-0.3250576, -0.3250576, 0, 0.8880739]))\n        .addChild(doc.createNode()\n            .setExtension('KHR_lights_punctual', lightExt\n                .createLight()\n                .setType(LightDef.Type.DIRECTIONAL)\n                .setIntensity(1.0)\n                .setColor([1.0, 1.0, 1.0]))\n            .setRotation([0.6279631, 0.6279631, 0, 0.4597009]));\n\n    const mesh = doc.createMesh();\n\n    const facesByColor = new Map<number, Face[]>();\n    data.faces.forEach(face => {\n        let faces = facesByColor.get(face.colorIndex);\n        if (!faces) facesByColor.set(face.colorIndex, faces = []);\n        faces.push(face);\n    });\n    \n    // Calculate model bounds to center it on the build plate\n    let minZ = Infinity;\n    let maxX = -Infinity, minX = Infinity;\n    let maxY = -Infinity, minY = Infinity;\n    \n    data.vertices.forEach(v => {\n        if (v.z < minZ) minZ = v.z;\n        if (v.x > maxX) maxX = v.x;\n        if (v.x < minX) minX = v.x;\n        if (v.y > maxY) maxY = v.y;\n        if (v.y < minY) minY = v.y;\n    });\n    \n    const centerX = (maxX + minX) / 2;\n    const centerY = (maxY + minY) / 2;\n    \n    for (let [colorIndex, faces] of facesByColor.entries()) {\n        let color = data.colors[colorIndex];\n        mesh.addPrimitive(\n            createPrimitive(doc, color, getGeom({ vertices: data.vertices, faces, colors: data.colors })));\n    }\n    \n    // Position the model\n    const modelNode = doc.createNode().setMesh(mesh);\n    \n    // Add build plate if enabled (must be after model mesh is created)\n    if (includeBuildPlate) {\n        try {\n            // Only reposition if we have valid bounds\n            if (isFinite(minZ) && isFinite(centerX) && isFinite(centerY)) {\n                modelNode.setTranslation([-centerX, -centerY, -minZ]); // Center XY and place bottom at Z=0\n            }\n            \n            const { node: buildPlateNode } = createBuildPlateGrid(doc);\n            scene.addChild(buildPlateNode);\n        } catch (error) {\n            console.error('Failed to add build plate:', error);\n            // Continue without build plate\n        }\n    }\n    \n    scene.addChild(modelNode);\n\n    const glb = await new NodeIO().registerExtensions([KHRLightsPunctual]).writeBinary(doc);\n    return new Blob([glb as BlobPart], { type: 'model/gltf-binary' });\n}\n","\r\n\r\nvar UZIP = {};\r\nif(typeof module == \"object\") module.exports = UZIP;\r\n\r\n\r\nUZIP[\"parse\"] = function(buf, onlyNames)\t// ArrayBuffer\r\n{\r\n\tvar rUs = UZIP.bin.readUshort, rUi = UZIP.bin.readUint, o = 0, out = {};\r\n\tvar data = new Uint8Array(buf);\r\n\tvar eocd = data.length-4;\r\n\t\r\n\twhile(rUi(data, eocd)!=0x06054b50) eocd--;\r\n\t\r\n\tvar o = eocd;\r\n\to+=4;\t// sign  = 0x06054b50\r\n\to+=4;  // disks = 0;\r\n\tvar cnu = rUs(data, o);  o+=2;\r\n\tvar cnt = rUs(data, o);  o+=2;\r\n\t\t\t\r\n\tvar csize = rUi(data, o);  o+=4;\r\n\tvar coffs = rUi(data, o);  o+=4;\r\n\t\r\n\to = coffs;\r\n\tfor(var i=0; i<cnu; i++)\r\n\t{\r\n\t\tvar sign = rUi(data, o);  o+=4;\r\n\t\to += 4;  // versions;\r\n\t\to += 4;  // flag + compr\r\n\t\to += 4;  // time\r\n\t\t\r\n\t\tvar crc32 = rUi(data, o);  o+=4;\r\n\t\tvar csize = rUi(data, o);  o+=4;\r\n\t\tvar usize = rUi(data, o);  o+=4;\r\n\t\t\r\n\t\tvar nl = rUs(data, o), el = rUs(data, o+2), cl = rUs(data, o+4);  o += 6;  // name, extra, comment\r\n\t\to += 8;  // disk, attribs\r\n\t\t\r\n\t\tvar roff = rUi(data, o);  o+=4;\r\n\t\to += nl + el + cl;\r\n\t\t\r\n\t\tUZIP._readLocal(data, roff, out, csize, usize, onlyNames);\r\n\t}\r\n\t//console.log(out);\r\n\treturn out;\r\n}\r\n\r\nUZIP._readLocal = function(data, o, out, csize, usize, onlyNames)\r\n{\r\n\tvar rUs = UZIP.bin.readUshort, rUi = UZIP.bin.readUint;\r\n\tvar sign  = rUi(data, o);  o+=4;\r\n\tvar ver   = rUs(data, o);  o+=2;\r\n\tvar gpflg = rUs(data, o);  o+=2;\r\n\t//if((gpflg&8)!=0) throw \"unknown sizes\";\r\n\tvar cmpr  = rUs(data, o);  o+=2;\r\n\t\r\n\tvar time  = rUi(data, o);  o+=4;\r\n\t\r\n\tvar crc32 = rUi(data, o);  o+=4;\r\n\t//var csize = rUi(data, o);  o+=4;\r\n\t//var usize = rUi(data, o);  o+=4;\r\n\to+=8;\r\n\t\t\r\n\tvar nlen  = rUs(data, o);  o+=2;\r\n\tvar elen  = rUs(data, o);  o+=2;\r\n\t\t\r\n\tvar name =  UZIP.bin.readUTF8(data, o, nlen);  o+=nlen;  //console.log(name);\r\n\to += elen;\r\n\t\t\t\r\n\t//console.log(sign.toString(16), ver, gpflg, cmpr, crc32.toString(16), \"csize, usize\", csize, usize, nlen, elen, name, o);\r\n\tif(onlyNames) {  out[name]={size:usize, csize:csize};  return;  }   \r\n\tvar file = new Uint8Array(data.buffer, o);\r\n\tif(false) {}\r\n\telse if(cmpr==0) out[name] = new Uint8Array(file.buffer.slice(o, o+csize));\r\n\telse if(cmpr==8) {\r\n\t\tvar buf = new Uint8Array(usize);  UZIP.inflateRaw(file, buf);\r\n\t\t/*var nbuf = pako[\"inflateRaw\"](file);\r\n\t\tif(usize>8514000) {\r\n\t\t\t//console.log(PUtils.readASCII(buf , 8514500, 500));\r\n\t\t\t//console.log(PUtils.readASCII(nbuf, 8514500, 500));\r\n\t\t}\r\n\t\tfor(var i=0; i<buf.length; i++) if(buf[i]!=nbuf[i]) {  console.log(buf.length, nbuf.length, usize, i);  throw \"e\";  }\r\n\t\t*/\r\n\t\tout[name] = buf;\r\n\t}\r\n\telse throw \"unknown compression method: \"+cmpr;\r\n}\r\n\r\nUZIP.inflateRaw = function(file, buf) {  return UZIP.F.inflate(file, buf);  }\r\nUZIP.inflate    = function(file, buf) { \r\n\tvar CMF = file[0], FLG = file[1];\r\n\tvar CM = (CMF&15), CINFO = (CMF>>>4);\r\n\t//console.log(CM, CINFO,CMF,FLG);\r\n\treturn UZIP.inflateRaw(new Uint8Array(file.buffer, file.byteOffset+2, file.length-6), buf);  \r\n}\r\nUZIP.deflate    = function(data, opts/*, buf, off*/) {\r\n\tif(opts==null) opts={level:6};\r\n\tvar off=0, buf=new Uint8Array(50+Math.floor(data.length*1.1));\r\n\tbuf[off]=120;  buf[off+1]=156;  off+=2;\r\n\toff = UZIP.F.deflateRaw(data, buf, off, opts.level);\r\n\tvar crc = UZIP.adler(data, 0, data.length);\r\n\tbuf[off+0]=((crc>>>24)&255); \r\n\tbuf[off+1]=((crc>>>16)&255); \r\n\tbuf[off+2]=((crc>>> 8)&255); \r\n\tbuf[off+3]=((crc>>> 0)&255); \t\r\n\treturn new Uint8Array(buf.buffer, 0, off+4);\r\n}\r\nUZIP.deflateRaw = function(data, opts) {\r\n\tif(opts==null) opts={level:6};\r\n\tvar buf=new Uint8Array(50+Math.floor(data.length*1.1));\r\n\tvar off = UZIP.F.deflateRaw(data, buf, off, opts.level);\r\n\treturn new Uint8Array(buf.buffer, 0, off);\r\n}\r\n\r\n\r\nUZIP.encode = function(obj, noCmpr) {\r\n\tif(noCmpr==null) noCmpr=false;\r\n\tvar tot = 0, wUi = UZIP.bin.writeUint, wUs = UZIP.bin.writeUshort;\r\n\tvar zpd = {};\r\n\tfor(var p in obj) {  var cpr = !UZIP._noNeed(p) && !noCmpr, buf = obj[p], crc = UZIP.crc.crc(buf,0,buf.length); \r\n\t\tzpd[p] = {  cpr:cpr, usize:buf.length, crc:crc, file: (cpr ? UZIP.deflateRaw(buf) : buf)  };  }\r\n\t\r\n\tfor(var p in zpd) tot += zpd[p].file.length + 30 + 46 + 2*UZIP.bin.sizeUTF8(p);\r\n\ttot +=  22;\r\n\t\r\n\tvar data = new Uint8Array(tot), o = 0;\r\n\tvar fof = []\r\n\t\r\n\tfor(var p in zpd) {\r\n\t\tvar file = zpd[p];  fof.push(o);\r\n\t\to = UZIP._writeHeader(data, o, p, file, 0);\r\n\t}\r\n\tvar i=0, ioff = o;\r\n\tfor(var p in zpd) {\r\n\t\tvar file = zpd[p];  fof.push(o);\r\n\t\to = UZIP._writeHeader(data, o, p, file, 1, fof[i++]);\t\t\r\n\t}\r\n\tvar csize = o-ioff;\r\n\t\r\n\twUi(data, o, 0x06054b50);  o+=4;\r\n\to += 4;  // disks\r\n\twUs(data, o, i);  o += 2;\r\n\twUs(data, o, i);  o += 2;\t// number of c d records\r\n\twUi(data, o, csize);  o += 4;\r\n\twUi(data, o, ioff );  o += 4;\r\n\to += 2;\r\n\treturn data.buffer;\r\n}\r\n// no need to compress .PNG, .ZIP, .JPEG ....\r\nUZIP._noNeed = function(fn) {  var ext = fn.split(\".\").pop().toLowerCase();  return \"png,jpg,jpeg,zip\".indexOf(ext)!=-1;  }\r\n\r\nUZIP._writeHeader = function(data, o, p, obj, t, roff)\r\n{\r\n\tvar wUi = UZIP.bin.writeUint, wUs = UZIP.bin.writeUshort;\r\n\tvar file = obj.file;\r\n\t\r\n\twUi(data, o, t==0 ? 0x04034b50 : 0x02014b50);  o+=4; // sign\r\n\tif(t==1) o+=2;  // ver made by\r\n\twUs(data, o, 20);  o+=2;\t// ver\r\n\twUs(data, o,  0);  o+=2;    // gflip\r\n\twUs(data, o,  obj.cpr?8:0);  o+=2;\t// cmpr\r\n\t\t\r\n\twUi(data, o,  0);  o+=4;\t// time\t\t\r\n\twUi(data, o, obj.crc);  o+=4;\t// crc32\r\n\twUi(data, o, file.length);  o+=4;\t// csize\r\n\twUi(data, o, obj.usize);  o+=4;\t// usize\r\n\t\t\r\n\twUs(data, o, UZIP.bin.sizeUTF8(p));  o+=2;\t// nlen\r\n\twUs(data, o, 0);  o+=2;\t// elen\r\n\t\r\n\tif(t==1) {\r\n\t\to += 2;  // comment length\r\n\t\to += 2;  // disk number\r\n\t\to += 6;  // attributes\r\n\t\twUi(data, o, roff);  o+=4;\t// usize\r\n\t}\r\n\tvar nlen = UZIP.bin.writeUTF8(data, o, p);  o+= nlen;\t\r\n\tif(t==0) {  data.set(file, o);  o += file.length;  }\r\n\treturn o;\r\n}\r\n\r\n\r\n\r\n\r\n\r\nUZIP.crc = {\r\n\ttable : ( function() {\r\n\t   var tab = new Uint32Array(256);\r\n\t   for (var n=0; n<256; n++) {\r\n\t\t\tvar c = n;\r\n\t\t\tfor (var k=0; k<8; k++) {\r\n\t\t\t\tif (c & 1)  c = 0xedb88320 ^ (c >>> 1);\r\n\t\t\t\telse        c = c >>> 1;\r\n\t\t\t}\r\n\t\t\ttab[n] = c;  }    \r\n\t\treturn tab;  })(),\r\n\tupdate : function(c, buf, off, len) {\r\n\t\tfor (var i=0; i<len; i++)  c = UZIP.crc.table[(c ^ buf[off+i]) & 0xff] ^ (c >>> 8);\r\n\t\treturn c;\r\n\t},\r\n\tcrc : function(b,o,l)  {  return UZIP.crc.update(0xffffffff,b,o,l) ^ 0xffffffff;  }\r\n}\r\nUZIP.adler = function(data,o,len) {\r\n\tvar a = 1, b = 0;\r\n\tvar off = o, end=o+len;\r\n\twhile(off<end) {\r\n\t\tvar eend = Math.min(off+5552, end);\r\n\t\twhile(off<eend) {\r\n\t\t\ta += data[off++];\r\n\t\t\tb += a;\r\n\t\t}\r\n\t\ta=a%65521;\r\n\t\tb=b%65521;\r\n\t}\r\n    return (b << 16) | a;\r\n}\r\n\r\nUZIP.bin = {\r\n\treadUshort : function(buff,p)  {  return (buff[p]) | (buff[p+1]<<8);  },\r\n\twriteUshort: function(buff,p,n){  buff[p] = (n)&255;  buff[p+1] = (n>>8)&255;  },\r\n\treadUint   : function(buff,p)  {  return (buff[p+3]*(256*256*256)) + ((buff[p+2]<<16) | (buff[p+1]<< 8) | buff[p]);  },\r\n\twriteUint  : function(buff,p,n){  buff[p]=n&255;  buff[p+1]=(n>>8)&255;  buff[p+2]=(n>>16)&255;  buff[p+3]=(n>>24)&255;  },\r\n\treadASCII  : function(buff,p,l){  var s = \"\";  for(var i=0; i<l; i++) s += String.fromCharCode(buff[p+i]);  return s;    },\r\n\twriteASCII : function(data,p,s){  for(var i=0; i<s.length; i++) data[p+i] = s.charCodeAt(i);  },\r\n\tpad : function(n) { return n.length < 2 ? \"0\" + n : n; },\r\n\treadUTF8 : function(buff, p, l) {\r\n\t\tvar s = \"\", ns;\r\n\t\tfor(var i=0; i<l; i++) s += \"%\" + UZIP.bin.pad(buff[p+i].toString(16));\r\n\t\ttry {  ns = decodeURIComponent(s); }\r\n\t\tcatch(e) {  return UZIP.bin.readASCII(buff, p, l);  }\r\n\t\treturn  ns;\r\n\t},\r\n\twriteUTF8 : function(buff, p, str) {\r\n\t\tvar strl = str.length, i=0;\r\n\t\tfor(var ci=0; ci<strl; ci++)\r\n\t\t{\r\n\t\t\tvar code = str.charCodeAt(ci);\r\n\t\t\tif     ((code&(0xffffffff-(1<< 7)+1))==0) {  buff[p+i] = (     code     );  i++;  }\r\n\t\t\telse if((code&(0xffffffff-(1<<11)+1))==0) {  buff[p+i] = (192|(code>> 6));  buff[p+i+1] = (128|((code>> 0)&63));  i+=2;  }\r\n\t\t\telse if((code&(0xffffffff-(1<<16)+1))==0) {  buff[p+i] = (224|(code>>12));  buff[p+i+1] = (128|((code>> 6)&63));  buff[p+i+2] = (128|((code>>0)&63));  i+=3;  }\r\n\t\t\telse if((code&(0xffffffff-(1<<21)+1))==0) {  buff[p+i] = (240|(code>>18));  buff[p+i+1] = (128|((code>>12)&63));  buff[p+i+2] = (128|((code>>6)&63));  buff[p+i+3] = (128|((code>>0)&63)); i+=4;  }\r\n\t\t\telse throw \"e\";\r\n\t\t}\r\n\t\treturn i;\r\n\t},\r\n\tsizeUTF8 : function(str) {\r\n\t\tvar strl = str.length, i=0;\r\n\t\tfor(var ci=0; ci<strl; ci++)\r\n\t\t{\r\n\t\t\tvar code = str.charCodeAt(ci);\r\n\t\t\tif     ((code&(0xffffffff-(1<< 7)+1))==0) {  i++ ;  }\r\n\t\t\telse if((code&(0xffffffff-(1<<11)+1))==0) {  i+=2;  }\r\n\t\t\telse if((code&(0xffffffff-(1<<16)+1))==0) {  i+=3;  }\r\n\t\t\telse if((code&(0xffffffff-(1<<21)+1))==0) {  i+=4;  }\r\n\t\t\telse throw \"e\";\r\n\t\t}\r\n\t\treturn i;\r\n\t}\r\n}\r\n\r\n\r\n\r\n\r\n\r\nUZIP.F = {};\r\n\r\nUZIP.F.deflateRaw = function(data, out, opos, lvl) {\t\r\n\tvar opts = [\r\n\t/*\r\n\t\t ush good_length; /* reduce lazy search above this match length \r\n\t\t ush max_lazy;    /* do not perform lazy search above this match length \r\n         ush nice_length; /* quit search above this match length \r\n\t*/\r\n\t/*      good lazy nice chain */\r\n\t/* 0 */ [ 0,   0,   0,    0,0],  /* store only */\r\n\t/* 1 */ [ 4,   4,   8,    4,0], /* max speed, no lazy matches */\r\n\t/* 2 */ [ 4,   5,  16,    8,0],\r\n\t/* 3 */ [ 4,   6,  16,   16,0],\r\n\r\n\t/* 4 */ [ 4,  10,  16,   32,0],  /* lazy matches */\r\n\t/* 5 */ [ 8,  16,  32,   32,0],\r\n\t/* 6 */ [ 8,  16, 128,  128,0],\r\n\t/* 7 */ [ 8,  32, 128,  256,0],\r\n\t/* 8 */ [32, 128, 258, 1024,1],\r\n\t/* 9 */ [32, 258, 258, 4096,1]]; /* max compression */\r\n\t\r\n\tvar opt = opts[lvl];\r\n\t\r\n\t\r\n\tvar U = UZIP.F.U, goodIndex = UZIP.F._goodIndex, hash = UZIP.F._hash, putsE = UZIP.F._putsE;\r\n\tvar i = 0, pos = opos<<3, cvrd = 0, dlen = data.length;\r\n\t\r\n\tif(lvl==0) {\r\n\t\twhile(i<dlen) {   var len = Math.min(0xffff, dlen-i);\r\n\t\t\tputsE(out, pos, (i+len==dlen ? 1 : 0));  pos = UZIP.F._copyExact(data, i, len, out, pos+8);  i += len;  }\r\n\t\treturn pos>>>3;\r\n\t}\r\n\r\n\tvar lits = U.lits, strt=U.strt, prev=U.prev, li=0, lc=0, bs=0, ebits=0, c=0, nc=0;  // last_item, literal_count, block_start\r\n\tif(dlen>2) {  nc=UZIP.F._hash(data,0);  strt[nc]=0;  }\r\n\tvar nmch=0,nmci=0;\r\n\t\r\n\tfor(i=0; i<dlen; i++)  {\r\n\t\tc = nc;\r\n\t\t//*\r\n\t\tif(i+1<dlen-2) {\r\n\t\t\tnc = UZIP.F._hash(data, i+1);\r\n\t\t\tvar ii = ((i+1)&0x7fff);\r\n\t\t\tprev[ii]=strt[nc];\r\n\t\t\tstrt[nc]=ii;\r\n\t\t} //*/\r\n\t\tif(cvrd<=i) {\r\n\t\t\tif((li>14000 || lc>26697) && (dlen-i)>100) {\r\n\t\t\t\tif(cvrd<i) {  lits[li]=i-cvrd;  li+=2;  cvrd=i;  }\r\n\t\t\t\tpos = UZIP.F._writeBlock(((i==dlen-1) || (cvrd==dlen))?1:0, lits, li, ebits, data,bs,i-bs, out, pos);  li=lc=ebits=0;  bs=i;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tvar mch = 0;\r\n\t\t\t//if(nmci==i) mch= nmch;  else \r\n\t\t\tif(i<dlen-2) mch = UZIP.F._bestMatch(data, i, prev, c, Math.min(opt[2],dlen-i), opt[3]);\r\n\t\t\t/*\r\n\t\t\tif(mch!=0 && opt[4]==1 && (mch>>>16)<opt[1] && i+1<dlen-2) {\r\n\t\t\t\tnmch = UZIP.F._bestMatch(data, i+1, prev, nc, opt[2], opt[3]);  nmci=i+1;\r\n\t\t\t\t//var mch2 = UZIP.F._bestMatch(data, i+2, prev, nnc);  //nmci=i+1;\r\n\t\t\t\tif((nmch>>>16)>(mch>>>16)) mch=0;\r\n\t\t\t}//*/\r\n\t\t\tvar len = mch>>>16, dst = mch&0xffff;  //if(i-dst<0) throw \"e\";\r\n\t\t\tif(mch!=0) { \r\n\t\t\t\tvar len = mch>>>16, dst = mch&0xffff;  //if(i-dst<0) throw \"e\";\r\n\t\t\t\tvar lgi = goodIndex(len, U.of0);  U.lhst[257+lgi]++; \r\n\t\t\t\tvar dgi = goodIndex(dst, U.df0);  U.dhst[    dgi]++;  ebits += U.exb[lgi] + U.dxb[dgi]; \r\n\t\t\t\tlits[li] = (len<<23)|(i-cvrd);  lits[li+1] = (dst<<16)|(lgi<<8)|dgi;  li+=2;\r\n\t\t\t\tcvrd = i + len;  \r\n\t\t\t}\r\n\t\t\telse {\tU.lhst[data[i]]++;  }\r\n\t\t\tlc++;\r\n\t\t}\r\n\t}\r\n\tif(bs!=i || data.length==0) {\r\n\t\tif(cvrd<i) {  lits[li]=i-cvrd;  li+=2;  cvrd=i;  }\r\n\t\tpos = UZIP.F._writeBlock(1, lits, li, ebits, data,bs,i-bs, out, pos);  li=0;  lc=0;  li=lc=ebits=0;  bs=i;\r\n\t}\r\n\twhile((pos&7)!=0) pos++;\r\n\treturn pos>>>3;\r\n}\r\nUZIP.F._bestMatch = function(data, i, prev, c, nice, chain) {\r\n\tvar ci = (i&0x7fff), pi=prev[ci];  \r\n\t//console.log(\"----\", i);\r\n\tvar dif = ((ci-pi + (1<<15)) & 0x7fff);  if(pi==ci || c!=UZIP.F._hash(data,i-dif)) return 0;\r\n\tvar tl=0, td=0;  // top length, top distance\r\n\tvar dlim = Math.min(0x7fff, i);\r\n\twhile(dif<=dlim && --chain!=0 && pi!=ci /*&& c==UZIP.F._hash(data,i-dif)*/) {\r\n\t\tif(tl==0 || (data[i+tl]==data[i+tl-dif])) {\r\n\t\t\tvar cl = UZIP.F._howLong(data, i, dif);\r\n\t\t\tif(cl>tl) {  \r\n\t\t\t\ttl=cl;  td=dif;  if(tl>=nice) break;    //* \r\n\t\t\t\tif(dif+2<cl) cl = dif+2;\r\n\t\t\t\tvar maxd = 0; // pi does not point to the start of the word\r\n\t\t\t\tfor(var j=0; j<cl-2; j++) {\r\n\t\t\t\t\tvar ei =  (i-dif+j+ (1<<15)) & 0x7fff;\r\n\t\t\t\t\tvar li = prev[ei];\r\n\t\t\t\t\tvar curd = (ei-li + (1<<15)) & 0x7fff;\r\n\t\t\t\t\tif(curd>maxd) {  maxd=curd;  pi = ei; }\r\n\t\t\t\t}  //*/\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tci=pi;  pi = prev[ci];\r\n\t\tdif += ((ci-pi + (1<<15)) & 0x7fff);\r\n\t}\r\n\treturn (tl<<16)|td;\r\n}\r\nUZIP.F._howLong = function(data, i, dif) {\r\n\tif(data[i]!=data[i-dif] || data[i+1]!=data[i+1-dif] || data[i+2]!=data[i+2-dif]) return 0;\r\n\tvar oi=i, l = Math.min(data.length, i+258);  i+=3;\r\n\t//while(i+4<l && data[i]==data[i-dif] && data[i+1]==data[i+1-dif] && data[i+2]==data[i+2-dif] && data[i+3]==data[i+3-dif]) i+=4;\r\n\twhile(i<l && data[i]==data[i-dif]) i++;\r\n\treturn i-oi;\r\n}\r\nUZIP.F._hash = function(data, i) {\r\n\treturn (((data[i]<<8) | data[i+1])+(data[i+2]<<4))&0xffff;\r\n\t//var hash_shift = 0, hash_mask = 255;\r\n\t//var h = data[i+1] % 251;\r\n\t//h = (((h << 8) + data[i+2]) % 251);\r\n\t//h = (((h << 8) + data[i+2]) % 251);\r\n\t//h = ((h<<hash_shift) ^ (c) ) & hash_mask;\r\n\t//return h | (data[i]<<8);\r\n\t//return (data[i] | (data[i+1]<<8));\r\n}\r\n//UZIP.___toth = 0;\r\nUZIP.saved = 0;\r\nUZIP.F._writeBlock = function(BFINAL, lits, li, ebits, data,o0,l0, out, pos) {\r\n\tvar U = UZIP.F.U, putsF = UZIP.F._putsF, putsE = UZIP.F._putsE;\r\n\t\r\n\t//*\r\n\tvar T, ML, MD, MH, numl, numd, numh, lset, dset;  U.lhst[256]++;\r\n\tT = UZIP.F.getTrees(); ML=T[0]; MD=T[1]; MH=T[2]; numl=T[3]; numd=T[4]; numh=T[5]; lset=T[6]; dset=T[7];\r\n\t\r\n\tvar cstSize = (((pos+3)&7)==0 ? 0 : 8-((pos+3)&7)) + 32 + (l0<<3);\r\n\tvar fxdSize = ebits + UZIP.F.contSize(U.fltree, U.lhst) + UZIP.F.contSize(U.fdtree, U.dhst);\r\n\tvar dynSize = ebits + UZIP.F.contSize(U.ltree , U.lhst) + UZIP.F.contSize(U.dtree , U.dhst);\r\n\tdynSize    += 14 + 3*numh + UZIP.F.contSize(U.itree, U.ihst) + (U.ihst[16]*2 + U.ihst[17]*3 + U.ihst[18]*7);\r\n\t\r\n\tfor(var j=0; j<286; j++) U.lhst[j]=0;   for(var j=0; j<30; j++) U.dhst[j]=0;   for(var j=0; j<19; j++) U.ihst[j]=0;\r\n\t//*/\r\n\tvar BTYPE = (cstSize<fxdSize && cstSize<dynSize) ? 0 : ( fxdSize<dynSize ? 1 : 2 );\r\n\tputsF(out, pos, BFINAL);  putsF(out, pos+1, BTYPE);  pos+=3;\r\n\t\r\n\tvar opos = pos;\r\n\tif(BTYPE==0) {\r\n\t\twhile((pos&7)!=0) pos++;\r\n\t\tpos = UZIP.F._copyExact(data, o0, l0, out, pos);\r\n\t}\r\n\telse {\r\n\t\tvar ltree, dtree;\r\n\t\tif(BTYPE==1) {  ltree=U.fltree;  dtree=U.fdtree;  }\r\n\t\tif(BTYPE==2) {\t\r\n\t\t\tUZIP.F.makeCodes(U.ltree, ML);  UZIP.F.revCodes(U.ltree, ML);\r\n\t\t\tUZIP.F.makeCodes(U.dtree, MD);  UZIP.F.revCodes(U.dtree, MD);\r\n\t\t\tUZIP.F.makeCodes(U.itree, MH);  UZIP.F.revCodes(U.itree, MH);\r\n\t\t\t\r\n\t\t\tltree = U.ltree;  dtree = U.dtree;\r\n\t\t\t\r\n\t\t\tputsE(out, pos,numl-257);  pos+=5;  // 286\r\n\t\t\tputsE(out, pos,numd-  1);  pos+=5;  // 30\r\n\t\t\tputsE(out, pos,numh-  4);  pos+=4;  // 19\r\n\t\t\t\r\n\t\t\tfor(var i=0; i<numh; i++) putsE(out, pos+i*3, U.itree[(U.ordr[i]<<1)+1]);   pos+=3* numh;\r\n\t\t\tpos = UZIP.F._codeTiny(lset, U.itree, out, pos);\r\n\t\t\tpos = UZIP.F._codeTiny(dset, U.itree, out, pos);\r\n\t\t}\r\n\t\t\r\n\t\tvar off=o0;\r\n\t\tfor(var si=0; si<li; si+=2) {\r\n\t\t\tvar qb=lits[si], len=(qb>>>23), end = off+(qb&((1<<23)-1));\r\n\t\t\twhile(off<end) pos = UZIP.F._writeLit(data[off++], ltree, out, pos);\r\n\t\t\t\r\n\t\t\tif(len!=0) {\r\n\t\t\t\tvar qc = lits[si+1], dst=(qc>>16), lgi=(qc>>8)&255, dgi=(qc&255);\r\n\t\t\t\tpos = UZIP.F._writeLit(257+lgi, ltree, out, pos);\r\n\t\t\t\tputsE(out, pos, len-U.of0[lgi]);  pos+=U.exb[lgi];\r\n\t\t\t\t\r\n\t\t\t\tpos = UZIP.F._writeLit(dgi, dtree, out, pos);\r\n\t\t\t\tputsF(out, pos, dst-U.df0[dgi]);  pos+=U.dxb[dgi];  off+=len;\r\n\t\t\t}\r\n\t\t}\r\n\t\tpos = UZIP.F._writeLit(256, ltree, out, pos);\r\n\t}\r\n\t//console.log(pos-opos, fxdSize, dynSize, cstSize);\r\n\treturn pos;\r\n}\r\nUZIP.F._copyExact = function(data,off,len,out,pos) {\r\n\tvar p8 = (pos>>>3);\r\n\tout[p8]=(len);  out[p8+1]=(len>>>8);  out[p8+2]=255-out[p8];  out[p8+3]=255-out[p8+1];  p8+=4;\r\n\tout.set(new Uint8Array(data.buffer, off, len), p8);\r\n\t//for(var i=0; i<len; i++) out[p8+i]=data[off+i];\r\n\treturn pos + ((len+4)<<3);\r\n}\r\n/*\r\n\tInteresting facts:\r\n\t- decompressed block can have bytes, which do not occur in a Huffman tree (copied from the previous block by reference)\r\n*/\r\n\r\nUZIP.F.getTrees = function() {\r\n\tvar U = UZIP.F.U;\r\n\tvar ML = UZIP.F._hufTree(U.lhst, U.ltree, 15);\r\n\tvar MD = UZIP.F._hufTree(U.dhst, U.dtree, 15);\r\n\tvar lset = [], numl = UZIP.F._lenCodes(U.ltree, lset);\r\n\tvar dset = [], numd = UZIP.F._lenCodes(U.dtree, dset);\r\n\tfor(var i=0; i<lset.length; i+=2) U.ihst[lset[i]]++;\r\n\tfor(var i=0; i<dset.length; i+=2) U.ihst[dset[i]]++;\r\n\tvar MH = UZIP.F._hufTree(U.ihst, U.itree,  7);\r\n\tvar numh = 19;  while(numh>4 && U.itree[(U.ordr[numh-1]<<1)+1]==0) numh--;\r\n\treturn [ML, MD, MH, numl, numd, numh, lset, dset];\r\n}\r\nUZIP.F.getSecond= function(a) {  var b=[];  for(var i=0; i<a.length; i+=2) b.push  (a[i+1]);  return b;  }\r\nUZIP.F.nonZero  = function(a) {  var b= \"\";  for(var i=0; i<a.length; i+=2) if(a[i+1]!=0)b+=(i>>1)+\",\";  return b;  }\r\nUZIP.F.contSize = function(tree, hst) {  var s=0;  for(var i=0; i<hst.length; i++) s+= hst[i]*tree[(i<<1)+1];  return s;  }\r\nUZIP.F._codeTiny = function(set, tree, out, pos) {\r\n\tfor(var i=0; i<set.length; i+=2) {\r\n\t\tvar l = set[i], rst = set[i+1];  //console.log(l, pos, tree[(l<<1)+1]);\r\n\t\tpos = UZIP.F._writeLit(l, tree, out, pos);\r\n\t\tvar rsl = l==16 ? 2 : (l==17 ? 3 : 7);\r\n\t\tif(l>15) {  UZIP.F._putsE(out, pos, rst, rsl);  pos+=rsl;  }\r\n\t}\r\n\treturn pos;\r\n}\r\nUZIP.F._lenCodes = function(tree, set) {\r\n\tvar len=tree.length;  while(len!=2 && tree[len-1]==0) len-=2;  // when no distances, keep one code with length 0\r\n\tfor(var i=0; i<len; i+=2) {\r\n\t\tvar l = tree[i+1], nxt = (i+3<len ? tree[i+3]:-1),  nnxt = (i+5<len ? tree[i+5]:-1),  prv = (i==0 ? -1 : tree[i-1]);\r\n\t\tif(l==0 && nxt==l && nnxt==l) {\r\n\t\t\tvar lz = i+5;\r\n\t\t\twhile(lz+2<len && tree[lz+2]==l) lz+=2;\r\n\t\t\tvar zc = Math.min((lz+1-i)>>>1, 138);\r\n\t\t\tif(zc<11) set.push(17, zc-3);\r\n\t\t\telse set.push(18, zc-11);\r\n\t\t\ti += zc*2-2;\r\n\t\t}\r\n\t\telse if(l==prv && nxt==l && nnxt==l) {\r\n\t\t\tvar lz = i+5;\r\n\t\t\twhile(lz+2<len && tree[lz+2]==l) lz+=2;\r\n\t\t\tvar zc = Math.min((lz+1-i)>>>1, 6);\r\n\t\t\tset.push(16, zc-3);\r\n\t\t\ti += zc*2-2;\r\n\t\t}\r\n\t\telse set.push(l, 0);\r\n\t}\r\n\treturn len>>>1;\r\n}\r\nUZIP.F._hufTree   = function(hst, tree, MAXL) {\r\n\tvar list=[], hl = hst.length, tl=tree.length, i=0;\r\n\tfor(i=0; i<tl; i+=2) {  tree[i]=0;  tree[i+1]=0;  }\t\r\n\tfor(i=0; i<hl; i++) if(hst[i]!=0) list.push({lit:i, f:hst[i]});\r\n\tvar end = list.length, l2=list.slice(0);\r\n\tif(end==0) return 0;  // empty histogram (usually for dist)\r\n\tif(end==1) {  var lit=list[0].lit, l2=lit==0?1:0;  tree[(lit<<1)+1]=1;  tree[(l2<<1)+1]=1;  return 1;  }\r\n\tlist.sort(function(a,b){return a.f-b.f;});\r\n\tvar a=list[0], b=list[1], i0=0, i1=1, i2=2;  list[0]={lit:-1,f:a.f+b.f,l:a,r:b,d:0};\r\n\twhile(i1!=end-1) {\r\n\t\tif(i0!=i1 && (i2==end || list[i0].f<list[i2].f)) {  a=list[i0++];  }  else {  a=list[i2++];  }\r\n\t\tif(i0!=i1 && (i2==end || list[i0].f<list[i2].f)) {  b=list[i0++];  }  else {  b=list[i2++];  }\r\n\t\tlist[i1++]={lit:-1,f:a.f+b.f, l:a,r:b};\r\n\t}\r\n\tvar maxl = UZIP.F.setDepth(list[i1-1], 0);\r\n\tif(maxl>MAXL) {  UZIP.F.restrictDepth(l2, MAXL, maxl);  maxl = MAXL;  }\r\n\tfor(i=0; i<end; i++) tree[(l2[i].lit<<1)+1]=l2[i].d;\r\n\treturn maxl;\r\n}\r\n\r\nUZIP.F.setDepth  = function(t, d) {\r\n\tif(t.lit!=-1) {  t.d=d;  return d;  }\r\n\treturn Math.max( UZIP.F.setDepth(t.l, d+1),  UZIP.F.setDepth(t.r, d+1) );\r\n}\r\n\r\nUZIP.F.restrictDepth = function(dps, MD, maxl) {\r\n\tvar i=0, bCost=1<<(maxl-MD), dbt=0;\r\n\tdps.sort(function(a,b){return b.d==a.d ? a.f-b.f : b.d-a.d;});\r\n\t\r\n\tfor(i=0; i<dps.length; i++) if(dps[i].d>MD) {  var od=dps[i].d;  dps[i].d=MD;  dbt+=bCost-(1<<(maxl-od));  }  else break;\r\n\tdbt = dbt>>>(maxl-MD);\r\n\twhile(dbt>0) {  var od=dps[i].d;  if(od<MD) {  dps[i].d++;  dbt-=(1<<(MD-od-1));  }  else  i++;  }\r\n\tfor(; i>=0; i--) if(dps[i].d==MD && dbt<0) {  dps[i].d--;  dbt++;  }  if(dbt!=0) console.log(\"debt left\");\r\n}\r\n\r\nUZIP.F._goodIndex = function(v, arr) {\r\n\tvar i=0;  if(arr[i|16]<=v) i|=16;  if(arr[i|8]<=v) i|=8;  if(arr[i|4]<=v) i|=4;  if(arr[i|2]<=v) i|=2;  if(arr[i|1]<=v) i|=1;  return i;\r\n}\r\nUZIP.F._writeLit = function(ch, ltree, out, pos) {\r\n\tUZIP.F._putsF(out, pos, ltree[ch<<1]);\r\n\treturn pos+ltree[(ch<<1)+1];\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nUZIP.F.inflate = function(data, buf) {\r\n\tvar u8=Uint8Array;\r\n\tif(data[0]==3 && data[1]==0) return (buf ? buf : new u8(0));\r\n\tvar F=UZIP.F, bitsF = F._bitsF, bitsE = F._bitsE, decodeTiny = F._decodeTiny, makeCodes = F.makeCodes, codes2map=F.codes2map, get17 = F._get17;\r\n\tvar U = F.U;\r\n\t\r\n\tvar noBuf = (buf==null);\r\n\tif(noBuf) buf = new u8((data.length>>>2)<<3);\r\n\t\r\n\tvar BFINAL=0, BTYPE=0, HLIT=0, HDIST=0, HCLEN=0, ML=0, MD=0; \t\r\n\tvar off = 0, pos = 0;\r\n\tvar lmap, dmap;\r\n\t\r\n\twhile(BFINAL==0) {\t\t\r\n\t\tBFINAL = bitsF(data, pos  , 1);\r\n\t\tBTYPE  = bitsF(data, pos+1, 2);  pos+=3;\r\n\t\t//console.log(BFINAL, BTYPE);\r\n\t\t\r\n\t\tif(BTYPE==0) {\r\n\t\t\tif((pos&7)!=0) pos+=8-(pos&7);\r\n\t\t\tvar p8 = (pos>>>3)+4, len = data[p8-4]|(data[p8-3]<<8);  //console.log(len);//bitsF(data, pos, 16), \r\n\t\t\tif(noBuf) buf=UZIP.F._check(buf, off+len);\r\n\t\t\tbuf.set(new u8(data.buffer, data.byteOffset+p8, len), off);\r\n\t\t\t//for(var i=0; i<len; i++) buf[off+i] = data[p8+i];\r\n\t\t\t//for(var i=0; i<len; i++) if(buf[off+i] != data[p8+i]) throw \"e\";\r\n\t\t\tpos = ((p8+len)<<3);  off+=len;  continue;\r\n\t\t}\r\n\t\tif(noBuf) buf=UZIP.F._check(buf, off+(1<<17));  // really not enough in many cases (but PNG and ZIP provide buffer in advance)\r\n\t\tif(BTYPE==1) {  lmap = U.flmap;  dmap = U.fdmap;  ML = (1<<9)-1;  MD = (1<<5)-1;   }\r\n\t\tif(BTYPE==2) {\r\n\t\t\tHLIT  = bitsE(data, pos   , 5)+257;  \r\n\t\t\tHDIST = bitsE(data, pos+ 5, 5)+  1;  \r\n\t\t\tHCLEN = bitsE(data, pos+10, 4)+  4;  pos+=14;\r\n\t\t\t\r\n\t\t\tvar ppos = pos;\r\n\t\t\tfor(var i=0; i<38; i+=2) {  U.itree[i]=0;  U.itree[i+1]=0;  }\r\n\t\t\tvar tl = 1;\r\n\t\t\tfor(var i=0; i<HCLEN; i++) {  var l=bitsE(data, pos+i*3, 3);  U.itree[(U.ordr[i]<<1)+1] = l;  if(l>tl)tl=l;  }     pos+=3*HCLEN;  //console.log(itree);\r\n\t\t\tmakeCodes(U.itree, tl);\r\n\t\t\tcodes2map(U.itree, tl, U.imap);\r\n\t\t\t\r\n\t\t\tlmap = U.lmap;  dmap = U.dmap;\r\n\t\t\t\r\n\t\t\tpos = decodeTiny(U.imap, (1<<tl)-1, HLIT+HDIST, data, pos, U.ttree);\r\n\t\t\tvar mx0 = F._copyOut(U.ttree,    0, HLIT , U.ltree);  ML = (1<<mx0)-1;\r\n\t\t\tvar mx1 = F._copyOut(U.ttree, HLIT, HDIST, U.dtree);  MD = (1<<mx1)-1;\r\n\t\t\t\r\n\t\t\t//var ml = decodeTiny(U.imap, (1<<tl)-1, HLIT , data, pos, U.ltree); ML = (1<<(ml>>>24))-1;  pos+=(ml&0xffffff);\r\n\t\t\tmakeCodes(U.ltree, mx0);\r\n\t\t\tcodes2map(U.ltree, mx0, lmap);\r\n\t\t\t\r\n\t\t\t//var md = decodeTiny(U.imap, (1<<tl)-1, HDIST, data, pos, U.dtree); MD = (1<<(md>>>24))-1;  pos+=(md&0xffffff);\r\n\t\t\tmakeCodes(U.dtree, mx1);\r\n\t\t\tcodes2map(U.dtree, mx1, dmap);\r\n\t\t}\r\n\t\t//var ooff=off, opos=pos;\r\n\t\twhile(true) {\r\n\t\t\tvar code = lmap[get17(data, pos) & ML];  pos += code&15;\r\n\t\t\tvar lit = code>>>4;  //U.lhst[lit]++;  \r\n\t\t\tif((lit>>>8)==0) {  buf[off++] = lit;  }\r\n\t\t\telse if(lit==256) {  break;  }\r\n\t\t\telse {\r\n\t\t\t\tvar end = off+lit-254;\r\n\t\t\t\tif(lit>264) { var ebs = U.ldef[lit-257];  end = off + (ebs>>>3) + bitsE(data, pos, ebs&7);  pos += ebs&7;  }\r\n\t\t\t\t//UZIP.F.dst[end-off]++;\r\n\t\t\t\t\r\n\t\t\t\tvar dcode = dmap[get17(data, pos) & MD];  pos += dcode&15;\r\n\t\t\t\tvar dlit = dcode>>>4;\r\n\t\t\t\tvar dbs = U.ddef[dlit], dst = (dbs>>>4) + bitsF(data, pos, dbs&15);  pos += dbs&15;\r\n\t\t\t\t\r\n\t\t\t\t//var o0 = off-dst, stp = Math.min(end-off, dst);\r\n\t\t\t\t//if(stp>20) while(off<end) {  buf.copyWithin(off, o0, o0+stp);  off+=stp;  }  else\r\n\t\t\t\t//if(end-dst<=off) buf.copyWithin(off, off-dst, end-dst);  else\r\n\t\t\t\t//if(dst==1) buf.fill(buf[off-1], off, end);  else\r\n\t\t\t\tif(noBuf) buf=UZIP.F._check(buf, off+(1<<17));\r\n\t\t\t\twhile(off<end) {  buf[off]=buf[off++-dst];    buf[off]=buf[off++-dst];  buf[off]=buf[off++-dst];  buf[off]=buf[off++-dst];  }   \r\n\t\t\t\toff=end;\r\n\t\t\t\t//while(off!=end) {  buf[off]=buf[off++-dst];  }\r\n\t\t\t}\r\n\t\t}\r\n\t\t//console.log(off-ooff, (pos-opos)>>>3);\r\n\t}\r\n\t//console.log(UZIP.F.dst);\r\n\t//console.log(tlen, dlen, off-tlen+tcnt);\r\n\treturn buf.length==off ? buf : buf.slice(0,off);\r\n}\r\nUZIP.F._check=function(buf, len) {\r\n\tvar bl=buf.length;  if(len<=bl) return buf;\r\n\tvar nbuf = new Uint8Array(Math.max(bl<<1,len));  nbuf.set(buf,0);\r\n\t//for(var i=0; i<bl; i+=4) {  nbuf[i]=buf[i];  nbuf[i+1]=buf[i+1];  nbuf[i+2]=buf[i+2];  nbuf[i+3]=buf[i+3];  }\r\n\treturn nbuf;\r\n}\r\n\r\nUZIP.F._decodeTiny = function(lmap, LL, len, data, pos, tree) {\r\n\tvar bitsE = UZIP.F._bitsE, get17 = UZIP.F._get17;\r\n\tvar i = 0;\r\n\twhile(i<len) {\r\n\t\tvar code = lmap[get17(data, pos)&LL];  pos+=code&15;\r\n\t\tvar lit = code>>>4; \r\n\t\tif(lit<=15) {  tree[i]=lit;  i++;  }\r\n\t\telse {\r\n\t\t\tvar ll = 0, n = 0;\r\n\t\t\tif(lit==16) {\r\n\t\t\t\tn = (3  + bitsE(data, pos, 2));  pos += 2;  ll = tree[i-1];\r\n\t\t\t}\r\n\t\t\telse if(lit==17) {\r\n\t\t\t\tn = (3  + bitsE(data, pos, 3));  pos += 3;\r\n\t\t\t}\r\n\t\t\telse if(lit==18) {\r\n\t\t\t\tn = (11 + bitsE(data, pos, 7));  pos += 7;\r\n\t\t\t}\r\n\t\t\tvar ni = i+n;\r\n\t\t\twhile(i<ni) {  tree[i]=ll;  i++; }\r\n\t\t}\r\n\t}\r\n\treturn pos;\r\n}\r\nUZIP.F._copyOut = function(src, off, len, tree) {\r\n\tvar mx=0, i=0, tl=tree.length>>>1;\r\n\twhile(i<len) {  var v=src[i+off];  tree[(i<<1)]=0;  tree[(i<<1)+1]=v;  if(v>mx)mx=v;  i++;  }\r\n\twhile(i<tl ) {  tree[(i<<1)]=0;  tree[(i<<1)+1]=0;  i++;  }\r\n\treturn mx;\r\n}\r\n\r\nUZIP.F.makeCodes = function(tree, MAX_BITS) {  // code, length\r\n\tvar U = UZIP.F.U;\r\n\tvar max_code = tree.length;\r\n\tvar code, bits, n, i, len;\r\n\t\r\n\tvar bl_count = U.bl_count;  for(var i=0; i<=MAX_BITS; i++) bl_count[i]=0;\r\n\tfor(i=1; i<max_code; i+=2) bl_count[tree[i]]++;\r\n\t\r\n\tvar next_code = U.next_code;\t// smallest code for each length\r\n\t\r\n\tcode = 0;\r\n\tbl_count[0] = 0;\r\n\tfor (bits = 1; bits <= MAX_BITS; bits++) {\r\n\t\tcode = (code + bl_count[bits-1]) << 1;\r\n\t\tnext_code[bits] = code;\r\n\t}\r\n\t\r\n\tfor (n = 0; n < max_code; n+=2) {\r\n\t\tlen = tree[n+1];\r\n\t\tif (len != 0) {\r\n\t\t\ttree[n] = next_code[len];\r\n\t\t\tnext_code[len]++;\r\n\t\t}\r\n\t}\r\n}\r\nUZIP.F.codes2map = function(tree, MAX_BITS, map) {\r\n\tvar max_code = tree.length;\r\n\tvar U=UZIP.F.U, r15 = U.rev15;\r\n\tfor(var i=0; i<max_code; i+=2) if(tree[i+1]!=0)  {\r\n\t\tvar lit = i>>1;\r\n\t\tvar cl = tree[i+1], val = (lit<<4)|cl; // :  (0x8000 | (U.of0[lit-257]<<7) | (U.exb[lit-257]<<4) | cl);\r\n\t\tvar rest = (MAX_BITS-cl), i0 = tree[i]<<rest, i1 = i0 + (1<<rest);\r\n\t\t//tree[i]=r15[i0]>>>(15-MAX_BITS);\r\n\t\twhile(i0!=i1) {\r\n\t\t\tvar p0 = r15[i0]>>>(15-MAX_BITS);\r\n\t\t\tmap[p0]=val;  i0++;\r\n\t\t}\r\n\t}\r\n}\r\nUZIP.F.revCodes = function(tree, MAX_BITS) {\r\n\tvar r15 = UZIP.F.U.rev15, imb = 15-MAX_BITS;\r\n\tfor(var i=0; i<tree.length; i+=2) {  var i0 = (tree[i]<<(MAX_BITS-tree[i+1]));  tree[i] = r15[i0]>>>imb;  }\r\n}\r\n\r\n// used only in deflate\r\nUZIP.F._putsE= function(dt, pos, val   ) {  val = val<<(pos&7);  var o=(pos>>>3);  dt[o]|=val;  dt[o+1]|=(val>>>8);                        }\r\nUZIP.F._putsF= function(dt, pos, val   ) {  val = val<<(pos&7);  var o=(pos>>>3);  dt[o]|=val;  dt[o+1]|=(val>>>8);  dt[o+2]|=(val>>>16);  }\r\n\r\nUZIP.F._bitsE= function(dt, pos, length) {  return ((dt[pos>>>3] | (dt[(pos>>>3)+1]<<8)                        )>>>(pos&7))&((1<<length)-1);  }\r\nUZIP.F._bitsF= function(dt, pos, length) {  return ((dt[pos>>>3] | (dt[(pos>>>3)+1]<<8) | (dt[(pos>>>3)+2]<<16))>>>(pos&7))&((1<<length)-1);  }\r\n/*\r\nUZIP.F._get9 = function(dt, pos) {\r\n\treturn ((dt[pos>>>3] | (dt[(pos>>>3)+1]<<8))>>>(pos&7))&511;\r\n} */\r\nUZIP.F._get17= function(dt, pos) {\t// return at least 17 meaningful bytes\r\n\treturn (dt[pos>>>3] | (dt[(pos>>>3)+1]<<8) | (dt[(pos>>>3)+2]<<16) )>>>(pos&7);\r\n}\r\nUZIP.F._get25= function(dt, pos) {\t// return at least 17 meaningful bytes\r\n\treturn (dt[pos>>>3] | (dt[(pos>>>3)+1]<<8) | (dt[(pos>>>3)+2]<<16) | (dt[(pos>>>3)+3]<<24) )>>>(pos&7);\r\n}\r\nUZIP.F.U = function(){\r\n\tvar u16=Uint16Array, u32=Uint32Array;\r\n\treturn {\r\n\t\tnext_code : new u16(16),\r\n\t\tbl_count  : new u16(16),\r\n\t\tordr : [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ],\r\n\t\tof0  : [3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],\r\n\t\texb  : [0,0,0,0,0,0,0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4,  4,  5,  5,  5,  5,  0,  0,  0,  0],\r\n\t\tldef : new u16(32),\r\n\t\tdf0  : [1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577, 65535, 65535],\r\n\t\tdxb  : [0,0,0,0,1,1,2, 2, 3, 3, 4, 4, 5, 5,  6,  6,  7,  7,  8,  8,   9,   9,  10,  10,  11,  11,  12,   12,   13,   13,     0,     0],\r\n\t\tddef : new u32(32),\r\n\t\tflmap: new u16(  512),  fltree: [],\r\n\t\tfdmap: new u16(   32),  fdtree: [],\r\n\t\tlmap : new u16(32768),  ltree : [],  ttree:[],\r\n\t\tdmap : new u16(32768),  dtree : [],\r\n\t\timap : new u16(  512),  itree : [],\r\n\t\t//rev9 : new u16(  512)\r\n\t\trev15: new u16(1<<15),\r\n\t\tlhst : new u32(286), dhst : new u32( 30), ihst : new u32(19),\r\n\t\tlits : new u32(15000),\r\n\t\tstrt : new u16(1<<16),\r\n\t\tprev : new u16(1<<15)\r\n\t};  \r\n} ();\r\n\r\n(function(){\t\r\n\tvar U = UZIP.F.U;\r\n\tvar len = 1<<15;\r\n\tfor(var i=0; i<len; i++) {\r\n\t\tvar x = i;\r\n\t\tx = (((x & 0xaaaaaaaa) >>> 1) | ((x & 0x55555555) << 1));\r\n\t\tx = (((x & 0xcccccccc) >>> 2) | ((x & 0x33333333) << 2));\r\n\t\tx = (((x & 0xf0f0f0f0) >>> 4) | ((x & 0x0f0f0f0f) << 4));\r\n\t\tx = (((x & 0xff00ff00) >>> 8) | ((x & 0x00ff00ff) << 8));\r\n\t\tU.rev15[i] = (((x >>> 16) | (x << 16)))>>>17;\r\n\t}\r\n\t\r\n\tfunction pushV(tgt, n, sv) {  while(n--!=0) tgt.push(0,sv);  }\r\n\t\r\n\tfor(var i=0; i<32; i++) {  U.ldef[i]=(U.of0[i]<<3)|U.exb[i];  U.ddef[i]=(U.df0[i]<<4)|U.dxb[i];  }\r\n\t\r\n\tpushV(U.fltree, 144, 8);  pushV(U.fltree, 255-143, 9);  pushV(U.fltree, 279-255, 7);  pushV(U.fltree,287-279,8);\r\n\t/*\r\n\tvar i = 0;\r\n\tfor(; i<=143; i++) U.fltree.push(0,8);\r\n\tfor(; i<=255; i++) U.fltree.push(0,9);\r\n\tfor(; i<=279; i++) U.fltree.push(0,7);\r\n\tfor(; i<=287; i++) U.fltree.push(0,8);\r\n\t*/\r\n\tUZIP.F.makeCodes(U.fltree, 9);\r\n\tUZIP.F.codes2map(U.fltree, 9, U.flmap);\r\n\tUZIP.F.revCodes (U.fltree, 9)\r\n\t\r\n\tpushV(U.fdtree,32,5);\r\n\t//for(i=0;i<32; i++) U.fdtree.push(0,5);\r\n\tUZIP.F.makeCodes(U.fdtree, 5);\r\n\tUZIP.F.codes2map(U.fdtree, 5, U.fdmap);\r\n\tUZIP.F.revCodes (U.fdtree, 5)\r\n\t\r\n\tpushV(U.itree,19,0);  pushV(U.ltree,286,0);  pushV(U.dtree,30,0);  pushV(U.ttree,320,0);\r\n\t/*\r\n\tfor(var i=0; i< 19; i++) U.itree.push(0,0);\r\n\tfor(var i=0; i<286; i++) U.ltree.push(0,0);\r\n\tfor(var i=0; i< 30; i++) U.dtree.push(0,0);\r\n\tfor(var i=0; i<320; i++) U.ttree.push(0,0);\r\n\t*/\r\n})()\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n    byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n    return (byteToHex[arr[offset + 0]] +\n        byteToHex[arr[offset + 1]] +\n        byteToHex[arr[offset + 2]] +\n        byteToHex[arr[offset + 3]] +\n        '-' +\n        byteToHex[arr[offset + 4]] +\n        byteToHex[arr[offset + 5]] +\n        '-' +\n        byteToHex[arr[offset + 6]] +\n        byteToHex[arr[offset + 7]] +\n        '-' +\n        byteToHex[arr[offset + 8]] +\n        byteToHex[arr[offset + 9]] +\n        '-' +\n        byteToHex[arr[offset + 10]] +\n        byteToHex[arr[offset + 11]] +\n        byteToHex[arr[offset + 12]] +\n        byteToHex[arr[offset + 13]] +\n        byteToHex[arr[offset + 14]] +\n        byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n    const uuid = unsafeStringify(arr, offset);\n    if (!validate(uuid)) {\n        throw TypeError('Stringified UUID is invalid');\n    }\n    return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n    if (!getRandomValues) {\n        if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n            throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n        }\n        getRandomValues = crypto.getRandomValues.bind(crypto);\n    }\n    return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction _v4(options, buf, offset) {\n    options = options || {};\n    const rnds = options.random ?? options.rng?.() ?? rng();\n    if (rnds.length < 16) {\n        throw new Error('Random bytes length must be >= 16');\n    }\n    rnds[6] = (rnds[6] & 0x0f) | 0x40;\n    rnds[8] = (rnds[8] & 0x3f) | 0x80;\n    if (buf) {\n        offset = offset || 0;\n        if (offset < 0 || offset + 16 > buf.length) {\n            throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n        }\n        for (let i = 0; i < 16; ++i) {\n            buf[offset + i] = rnds[i];\n        }\n        return buf;\n    }\n    return unsafeStringify(rnds);\n}\nfunction v4(options, buf, offset) {\n    if (native.randomUUID && !buf && !options) {\n        return native.randomUUID();\n    }\n    return _v4(options, buf, offset);\n}\nexport default v4;\n","const { min, max } = Math;\n\nexport default (x, low = 0, high = 1) => {\n    return min(max(low, x), high);\n};\n","import limit from './limit.js';\n\nexport default (rgb) => {\n    rgb._clipped = false;\n    rgb._unclipped = rgb.slice(0);\n    for (let i = 0; i <= 3; i++) {\n        if (i < 3) {\n            if (rgb[i] < 0 || rgb[i] > 255) rgb._clipped = true;\n            rgb[i] = limit(rgb[i], 0, 255);\n        } else if (i === 3) {\n            rgb[i] = limit(rgb[i], 0, 1);\n        }\n    }\n    return rgb;\n};\n","// ported from jQuery's $.type\nconst classToType = {};\nfor (let name of [\n    'Boolean',\n    'Number',\n    'String',\n    'Function',\n    'Array',\n    'Date',\n    'RegExp',\n    'Undefined',\n    'Null'\n]) {\n    classToType[`[object ${name}]`] = name.toLowerCase();\n}\nexport default function (obj) {\n    return classToType[Object.prototype.toString.call(obj)] || 'object';\n}\n","import type from './type.js';\n\nexport default (args, keyOrder = null) => {\n    // if called with more than 3 arguments, we return the arguments\n    if (args.length >= 3) return Array.prototype.slice.call(args);\n    // with less than 3 args we check if first arg is object\n    // and use the keyOrder string to extract and sort properties\n    if (type(args[0]) == 'object' && keyOrder) {\n        return keyOrder\n            .split('')\n            .filter((k) => args[0][k] !== undefined)\n            .map((k) => args[0][k]);\n    }\n    // otherwise we just return the first argument\n    // (which we suppose is an array of args)\n    return args[0].slice(0);\n};\n","import type from './type.js';\n\nexport default (args) => {\n    if (args.length < 2) return null;\n    const l = args.length - 1;\n    if (type(args[l]) == 'string') return args[l].toLowerCase();\n    return null;\n};\n","const { PI, min, max } = Math;\n\nconst rnd2 = (a) => Math.round(a * 100) / 100;\nconst rnd3 = (a) => Math.round(a * 100) / 100;\n\nexport { default as clip_rgb } from './clip_rgb.js';\nexport { default as limit } from './limit.js';\nexport { default as type } from './type.js';\nexport { default as unpack } from './unpack.js';\nexport { default as last } from './last.js';\n\nconst TWOPI = PI * 2;\nconst PITHIRD = PI / 3;\nconst DEG2RAD = PI / 180;\nconst RAD2DEG = 180 / PI;\n\n/**\n * Reverse the first three elements of an array\n *\n * @param {any[]} arr\n * @returns {any[]}\n */\nfunction reverse3(arr) {\n    return [...arr.slice(0, 3).reverse(), ...arr.slice(3)];\n}\n\nexport { PI, TWOPI, PITHIRD, DEG2RAD, RAD2DEG, min, max, rnd2, rnd3, reverse3 };\n","export default {\n    format: {},\n    autodetect: []\n};\n","import { last, clip_rgb, type } from './utils/index.js';\nimport _input from './io/input.js';\n\nclass Color {\n    constructor(...args) {\n        const me = this;\n        if (\n            type(args[0]) === 'object' &&\n            args[0].constructor &&\n            args[0].constructor === this.constructor\n        ) {\n            // the argument is already a Color instance\n            return args[0];\n        }\n        // last argument could be the mode\n        let mode = last(args);\n        let autodetect = false;\n        if (!mode) {\n            autodetect = true;\n\n            if (!_input.sorted) {\n                _input.autodetect = _input.autodetect.sort((a, b) => b.p - a.p);\n                _input.sorted = true;\n            }\n\n            // auto-detect format\n            for (let chk of _input.autodetect) {\n                mode = chk.test(...args);\n                if (mode) break;\n            }\n        }\n        if (_input.format[mode]) {\n            const rgb = _input.format[mode].apply(\n                null,\n                autodetect ? args : args.slice(0, -1)\n            );\n            me._rgb = clip_rgb(rgb);\n        } else {\n            throw new Error('unknown format: ' + args);\n        }\n        // add alpha channel\n        if (me._rgb.length === 3) me._rgb.push(1);\n    }\n    toString() {\n        if (type(this.hex) == 'function') return this.hex();\n        return `[${this._rgb.join(',')}]`;\n    }\n}\nexport default Color;\n","// this gets updated automatically\nexport const version = '3.2.0';\n","import Color from './Color.js';\nimport { version } from './version.js';\n\nconst chroma = (...args) => {\n    return new Color(...args);\n};\n\nchroma.version = version;\n\nexport default chroma;\n","/**\n\tX11 color names\n\n\thttp://www.w3.org/TR/css3-color/#svg-color\n*/\n\nconst w3cx11 = {\n    aliceblue: '#f0f8ff',\n    antiquewhite: '#faebd7',\n    aqua: '#00ffff',\n    aquamarine: '#7fffd4',\n    azure: '#f0ffff',\n    beige: '#f5f5dc',\n    bisque: '#ffe4c4',\n    black: '#000000',\n    blanchedalmond: '#ffebcd',\n    blue: '#0000ff',\n    blueviolet: '#8a2be2',\n    brown: '#a52a2a',\n    burlywood: '#deb887',\n    cadetblue: '#5f9ea0',\n    chartreuse: '#7fff00',\n    chocolate: '#d2691e',\n    coral: '#ff7f50',\n    cornflowerblue: '#6495ed',\n    cornsilk: '#fff8dc',\n    crimson: '#dc143c',\n    cyan: '#00ffff',\n    darkblue: '#00008b',\n    darkcyan: '#008b8b',\n    darkgoldenrod: '#b8860b',\n    darkgray: '#a9a9a9',\n    darkgreen: '#006400',\n    darkgrey: '#a9a9a9',\n    darkkhaki: '#bdb76b',\n    darkmagenta: '#8b008b',\n    darkolivegreen: '#556b2f',\n    darkorange: '#ff8c00',\n    darkorchid: '#9932cc',\n    darkred: '#8b0000',\n    darksalmon: '#e9967a',\n    darkseagreen: '#8fbc8f',\n    darkslateblue: '#483d8b',\n    darkslategray: '#2f4f4f',\n    darkslategrey: '#2f4f4f',\n    darkturquoise: '#00ced1',\n    darkviolet: '#9400d3',\n    deeppink: '#ff1493',\n    deepskyblue: '#00bfff',\n    dimgray: '#696969',\n    dimgrey: '#696969',\n    dodgerblue: '#1e90ff',\n    firebrick: '#b22222',\n    floralwhite: '#fffaf0',\n    forestgreen: '#228b22',\n    fuchsia: '#ff00ff',\n    gainsboro: '#dcdcdc',\n    ghostwhite: '#f8f8ff',\n    gold: '#ffd700',\n    goldenrod: '#daa520',\n    gray: '#808080',\n    green: '#008000',\n    greenyellow: '#adff2f',\n    grey: '#808080',\n    honeydew: '#f0fff0',\n    hotpink: '#ff69b4',\n    indianred: '#cd5c5c',\n    indigo: '#4b0082',\n    ivory: '#fffff0',\n    khaki: '#f0e68c',\n    laserlemon: '#ffff54',\n    lavender: '#e6e6fa',\n    lavenderblush: '#fff0f5',\n    lawngreen: '#7cfc00',\n    lemonchiffon: '#fffacd',\n    lightblue: '#add8e6',\n    lightcoral: '#f08080',\n    lightcyan: '#e0ffff',\n    lightgoldenrod: '#fafad2',\n    lightgoldenrodyellow: '#fafad2',\n    lightgray: '#d3d3d3',\n    lightgreen: '#90ee90',\n    lightgrey: '#d3d3d3',\n    lightpink: '#ffb6c1',\n    lightsalmon: '#ffa07a',\n    lightseagreen: '#20b2aa',\n    lightskyblue: '#87cefa',\n    lightslategray: '#778899',\n    lightslategrey: '#778899',\n    lightsteelblue: '#b0c4de',\n    lightyellow: '#ffffe0',\n    lime: '#00ff00',\n    limegreen: '#32cd32',\n    linen: '#faf0e6',\n    magenta: '#ff00ff',\n    maroon: '#800000',\n    maroon2: '#7f0000',\n    maroon3: '#b03060',\n    mediumaquamarine: '#66cdaa',\n    mediumblue: '#0000cd',\n    mediumorchid: '#ba55d3',\n    mediumpurple: '#9370db',\n    mediumseagreen: '#3cb371',\n    mediumslateblue: '#7b68ee',\n    mediumspringgreen: '#00fa9a',\n    mediumturquoise: '#48d1cc',\n    mediumvioletred: '#c71585',\n    midnightblue: '#191970',\n    mintcream: '#f5fffa',\n    mistyrose: '#ffe4e1',\n    moccasin: '#ffe4b5',\n    navajowhite: '#ffdead',\n    navy: '#000080',\n    oldlace: '#fdf5e6',\n    olive: '#808000',\n    olivedrab: '#6b8e23',\n    orange: '#ffa500',\n    orangered: '#ff4500',\n    orchid: '#da70d6',\n    palegoldenrod: '#eee8aa',\n    palegreen: '#98fb98',\n    paleturquoise: '#afeeee',\n    palevioletred: '#db7093',\n    papayawhip: '#ffefd5',\n    peachpuff: '#ffdab9',\n    peru: '#cd853f',\n    pink: '#ffc0cb',\n    plum: '#dda0dd',\n    powderblue: '#b0e0e6',\n    purple: '#800080',\n    purple2: '#7f007f',\n    purple3: '#a020f0',\n    rebeccapurple: '#663399',\n    red: '#ff0000',\n    rosybrown: '#bc8f8f',\n    royalblue: '#4169e1',\n    saddlebrown: '#8b4513',\n    salmon: '#fa8072',\n    sandybrown: '#f4a460',\n    seagreen: '#2e8b57',\n    seashell: '#fff5ee',\n    sienna: '#a0522d',\n    silver: '#c0c0c0',\n    skyblue: '#87ceeb',\n    slateblue: '#6a5acd',\n    slategray: '#708090',\n    slategrey: '#708090',\n    snow: '#fffafa',\n    springgreen: '#00ff7f',\n    steelblue: '#4682b4',\n    tan: '#d2b48c',\n    teal: '#008080',\n    thistle: '#d8bfd8',\n    tomato: '#ff6347',\n    turquoise: '#40e0d0',\n    violet: '#ee82ee',\n    wheat: '#f5deb3',\n    white: '#ffffff',\n    whitesmoke: '#f5f5f5',\n    yellow: '#ffff00',\n    yellowgreen: '#9acd32'\n};\n\nexport default w3cx11;\n","const RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/;\nconst RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/;\n\nconst hex2rgb = (hex) => {\n    if (hex.match(RE_HEX)) {\n        // remove optional leading #\n        if (hex.length === 4 || hex.length === 7) {\n            hex = hex.substr(1);\n        }\n        // expand short-notation to full six-digit\n        if (hex.length === 3) {\n            hex = hex.split('');\n            hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n        }\n        const u = parseInt(hex, 16);\n        const r = u >> 16;\n        const g = (u >> 8) & 0xff;\n        const b = u & 0xff;\n        return [r, g, b, 1];\n    }\n\n    // match rgba hex format, eg #FF000077\n    if (hex.match(RE_HEXA)) {\n        if (hex.length === 5 || hex.length === 9) {\n            // remove optional leading #\n            hex = hex.substr(1);\n        }\n        // expand short-notation to full eight-digit\n        if (hex.length === 4) {\n            hex = hex.split('');\n            hex =\n                hex[0] +\n                hex[0] +\n                hex[1] +\n                hex[1] +\n                hex[2] +\n                hex[2] +\n                hex[3] +\n                hex[3];\n        }\n        const u = parseInt(hex, 16);\n        const r = (u >> 24) & 0xff;\n        const g = (u >> 16) & 0xff;\n        const b = (u >> 8) & 0xff;\n        const a = Math.round(((u & 0xff) / 0xff) * 100) / 100;\n        return [r, g, b, a];\n    }\n\n    // we used to check for css colors here\n    // if _input.css? and rgb = _input.css hex\n    //     return rgb\n\n    throw new Error(`unknown hex color: ${hex}`);\n};\n\nexport default hex2rgb;\n","import { unpack, last } from '../../utils/index.js';\nconst { round } = Math;\n\nconst rgb2hex = (...args) => {\n    let [r, g, b, a] = unpack(args, 'rgba');\n    let mode = last(args) || 'auto';\n    if (a === undefined) a = 1;\n    if (mode === 'auto') {\n        mode = a < 1 ? 'rgba' : 'rgb';\n    }\n    r = round(r);\n    g = round(g);\n    b = round(b);\n    const u = (r << 16) | (g << 8) | b;\n    let str = '000000' + u.toString(16); //#.toUpperCase();\n    str = str.substr(str.length - 6);\n    let hxa = '0' + round(a * 255).toString(16);\n    hxa = hxa.substr(hxa.length - 2);\n    switch (mode.toLowerCase()) {\n        case 'rgba':\n            return `#${str}${hxa}`;\n        case 'argb':\n            return `#${hxa}${str}`;\n        default:\n            return `#${str}`;\n    }\n};\n\nexport default rgb2hex;\n","import Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\n\nimport w3cx11 from '../../colors/w3cx11.js';\nimport hex2rgb from '../hex/hex2rgb.js';\nimport rgb2hex from '../hex/rgb2hex.js';\n\nColor.prototype.name = function () {\n    const hex = rgb2hex(this._rgb, 'rgb');\n    for (let n of Object.keys(w3cx11)) {\n        if (w3cx11[n] === hex) return n.toLowerCase();\n    }\n    return hex;\n};\n\ninput.format.named = (name) => {\n    name = name.toLowerCase();\n    if (w3cx11[name]) return hex2rgb(w3cx11[name]);\n    throw new Error('unknown color name: ' + name);\n};\n\ninput.autodetect.push({\n    p: 5,\n    test: (h, ...rest) => {\n        if (!rest.length && type(h) === 'string' && w3cx11[h.toLowerCase()]) {\n            return 'named';\n        }\n    }\n});\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\n\nColor.prototype.alpha = function (a, mutate = false) {\n    if (a !== undefined && type(a) === 'number') {\n        if (mutate) {\n            this._rgb[3] = a;\n            return this;\n        }\n        return new Color([this._rgb[0], this._rgb[1], this._rgb[2], a], 'rgb');\n    }\n    return this._rgb[3];\n};\n","import Color from '../Color.js';\n\nColor.prototype.clipped = function () {\n    return this._rgb._clipped || false;\n};\n","const labConstants = {\n    // Corresponds roughly to RGB brighter/darker\n    Kn: 18,\n\n    // D65 standard referent\n    labWhitePoint: 'd65',\n    Xn: 0.95047,\n    Yn: 1,\n    Zn: 1.08883,\n\n    t0: 0.137931034, // 4 / 29\n    t1: 0.206896552, // 6 / 29\n    t2: 0.12841855, // 3 * t1 * t1\n    t3: 0.008856452, // t1 * t1 * t1,\n\n    kE: 216.0 / 24389.0,\n    kKE: 8.0,\n    kK: 24389.0 / 27.0,\n\n    RefWhiteRGB: {\n        // sRGB\n        X: 0.95047,\n        Y: 1,\n        Z: 1.08883\n    },\n\n    MtxRGB2XYZ: {\n        m00: 0.4124564390896922,\n        m01: 0.21267285140562253,\n        m02: 0.0193338955823293,\n        m10: 0.357576077643909,\n        m11: 0.715152155287818,\n        m12: 0.11919202588130297,\n        m20: 0.18043748326639894,\n        m21: 0.07217499330655958,\n        m22: 0.9503040785363679\n    },\n\n    MtxXYZ2RGB: {\n        m00: 3.2404541621141045,\n        m01: -0.9692660305051868,\n        m02: 0.055643430959114726,\n        m10: -1.5371385127977166,\n        m11: 1.8760108454466942,\n        m12: -0.2040259135167538,\n        m20: -0.498531409556016,\n        m21: 0.041556017530349834,\n        m22: 1.0572251882231791\n    },\n\n    // used in rgb2xyz\n    As: 0.9414285350000001,\n    Bs: 1.040417467,\n    Cs: 1.089532651,\n\n    MtxAdaptMa: {\n        m00: 0.8951,\n        m01: -0.7502,\n        m02: 0.0389,\n        m10: 0.2664,\n        m11: 1.7135,\n        m12: -0.0685,\n        m20: -0.1614,\n        m21: 0.0367,\n        m22: 1.0296\n    },\n\n    MtxAdaptMaI: {\n        m00: 0.9869929054667123,\n        m01: 0.43230526972339456,\n        m02: -0.008528664575177328,\n        m10: -0.14705425642099013,\n        m11: 0.5183602715367776,\n        m12: 0.04004282165408487,\n        m20: 0.15996265166373125,\n        m21: 0.0492912282128556,\n        m22: 0.9684866957875502\n    }\n};\n\nexport default labConstants;\n\n// taken from https://de.mathworks.com/help/images/ref/whitepoint.html\nconst ILLUMINANTS = new Map([\n    // ASTM E308-01\n    ['a', [1.0985, 0.35585]],\n    // Wyszecki & Stiles, p. 769\n    ['b', [1.0985, 0.35585]],\n    // C ASTM E308-01\n    ['c', [0.98074, 1.18232]],\n    // D50 (ASTM E308-01)\n    ['d50', [0.96422, 0.82521]],\n    // D55 (ASTM E308-01)\n    ['d55', [0.95682, 0.92149]],\n    // D65 (ASTM E308-01)\n    ['d65', [0.95047, 1.08883]],\n    // E (ASTM E308-01)\n    ['e', [1, 1, 1]],\n    // F2 (ASTM E308-01)\n    ['f2', [0.99186, 0.67393]],\n    // F7 (ASTM E308-01)\n    ['f7', [0.95041, 1.08747]],\n    // F11 (ASTM E308-01)\n    ['f11', [1.00962, 0.6435]],\n    ['icc', [0.96422, 0.82521]]\n]);\n\nexport function setLabWhitePoint(name) {\n    const ill = ILLUMINANTS.get(String(name).toLowerCase());\n    if (!ill) {\n        throw new Error('unknown Lab illuminant ' + name);\n    }\n    labConstants.labWhitePoint = name;\n    labConstants.Xn = ill[0];\n    labConstants.Zn = ill[1];\n}\n\nexport function getLabWhitePoint() {\n    return labConstants.labWhitePoint;\n}\n","import LAB_CONSTANTS from './lab-constants.js';\nimport { unpack } from '../../utils/index.js';\n\n/*\n * L* [0..100]\n * a [-100..100]\n * b [-100..100]\n */\nconst lab2rgb = (...args) => {\n    args = unpack(args, 'lab');\n    const [L, a, b] = args;\n    const [x, y, z] = lab2xyz(L, a, b);\n    const [r, g, b_] = xyz2rgb(x, y, z);\n    return [r, g, b_, args.length > 3 ? args[3] : 1];\n};\n\nconst lab2xyz = (L, a, b) => {\n    const { kE, kK, kKE, Xn, Yn, Zn } = LAB_CONSTANTS;\n\n    const fy = (L + 16.0) / 116.0;\n    const fx = 0.002 * a + fy;\n    const fz = fy - 0.005 * b;\n\n    const fx3 = fx * fx * fx;\n    const fz3 = fz * fz * fz;\n\n    const xr = fx3 > kE ? fx3 : (116.0 * fx - 16.0) / kK;\n    const yr = L > kKE ? Math.pow((L + 16.0) / 116.0, 3.0) : L / kK;\n    const zr = fz3 > kE ? fz3 : (116.0 * fz - 16.0) / kK;\n\n    const x = xr * Xn;\n    const y = yr * Yn;\n    const z = zr * Zn;\n\n    return [x, y, z];\n};\n\nconst compand = (linear) => {\n    /* sRGB */\n    const sign = Math.sign(linear);\n    linear = Math.abs(linear);\n    return (\n        (linear <= 0.0031308\n            ? linear * 12.92\n            : 1.055 * Math.pow(linear, 1.0 / 2.4) - 0.055) * sign\n    );\n};\n\nconst xyz2rgb = (x, y, z) => {\n    const { MtxAdaptMa, MtxAdaptMaI, MtxXYZ2RGB, RefWhiteRGB, Xn, Yn, Zn } =\n        LAB_CONSTANTS;\n\n    const As = Xn * MtxAdaptMa.m00 + Yn * MtxAdaptMa.m10 + Zn * MtxAdaptMa.m20;\n    const Bs = Xn * MtxAdaptMa.m01 + Yn * MtxAdaptMa.m11 + Zn * MtxAdaptMa.m21;\n    const Cs = Xn * MtxAdaptMa.m02 + Yn * MtxAdaptMa.m12 + Zn * MtxAdaptMa.m22;\n\n    const Ad =\n        RefWhiteRGB.X * MtxAdaptMa.m00 +\n        RefWhiteRGB.Y * MtxAdaptMa.m10 +\n        RefWhiteRGB.Z * MtxAdaptMa.m20;\n    const Bd =\n        RefWhiteRGB.X * MtxAdaptMa.m01 +\n        RefWhiteRGB.Y * MtxAdaptMa.m11 +\n        RefWhiteRGB.Z * MtxAdaptMa.m21;\n    const Cd =\n        RefWhiteRGB.X * MtxAdaptMa.m02 +\n        RefWhiteRGB.Y * MtxAdaptMa.m12 +\n        RefWhiteRGB.Z * MtxAdaptMa.m22;\n\n    const X1 =\n        (x * MtxAdaptMa.m00 + y * MtxAdaptMa.m10 + z * MtxAdaptMa.m20) *\n        (Ad / As);\n    const Y1 =\n        (x * MtxAdaptMa.m01 + y * MtxAdaptMa.m11 + z * MtxAdaptMa.m21) *\n        (Bd / Bs);\n    const Z1 =\n        (x * MtxAdaptMa.m02 + y * MtxAdaptMa.m12 + z * MtxAdaptMa.m22) *\n        (Cd / Cs);\n\n    const X2 =\n        X1 * MtxAdaptMaI.m00 + Y1 * MtxAdaptMaI.m10 + Z1 * MtxAdaptMaI.m20;\n    const Y2 =\n        X1 * MtxAdaptMaI.m01 + Y1 * MtxAdaptMaI.m11 + Z1 * MtxAdaptMaI.m21;\n    const Z2 =\n        X1 * MtxAdaptMaI.m02 + Y1 * MtxAdaptMaI.m12 + Z1 * MtxAdaptMaI.m22;\n\n    const r = compand(\n        X2 * MtxXYZ2RGB.m00 + Y2 * MtxXYZ2RGB.m10 + Z2 * MtxXYZ2RGB.m20\n    );\n    const g = compand(\n        X2 * MtxXYZ2RGB.m01 + Y2 * MtxXYZ2RGB.m11 + Z2 * MtxXYZ2RGB.m21\n    );\n    const b = compand(\n        X2 * MtxXYZ2RGB.m02 + Y2 * MtxXYZ2RGB.m12 + Z2 * MtxXYZ2RGB.m22\n    );\n\n    return [r * 255, g * 255, b * 255];\n};\n\nexport default lab2rgb;\nexport { xyz2rgb };\n","import LAB_CONSTANTS from './lab-constants.js';\nimport { unpack } from '../../utils/index.js';\n\nconst rgb2lab = (...args) => {\n    const [r, g, b, ...rest] = unpack(args, 'rgb');\n    const [x, y, z] = rgb2xyz(r, g, b);\n    const [L, a, b_] = xyz2lab(x, y, z);\n    return [L, a, b_, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nfunction xyz2lab(x, y, z) {\n    const { Xn, Yn, Zn, kE, kK } = LAB_CONSTANTS;\n    const xr = x / Xn;\n    const yr = y / Yn;\n    const zr = z / Zn;\n\n    const fx = xr > kE ? Math.pow(xr, 1.0 / 3.0) : (kK * xr + 16.0) / 116.0;\n    const fy = yr > kE ? Math.pow(yr, 1.0 / 3.0) : (kK * yr + 16.0) / 116.0;\n    const fz = zr > kE ? Math.pow(zr, 1.0 / 3.0) : (kK * zr + 16.0) / 116.0;\n\n    return [116.0 * fy - 16.0, 500.0 * (fx - fy), 200.0 * (fy - fz)];\n}\n\nfunction gammaAdjustSRGB(companded) {\n    const sign = Math.sign(companded);\n    companded = Math.abs(companded);\n    const linear =\n        companded <= 0.04045\n            ? companded / 12.92\n            : Math.pow((companded + 0.055) / 1.055, 2.4);\n    return linear * sign;\n}\n\nconst rgb2xyz = (r, g, b) => {\n    // normalize and gamma adjust\n    r = gammaAdjustSRGB(r / 255);\n    g = gammaAdjustSRGB(g / 255);\n    b = gammaAdjustSRGB(b / 255);\n\n    const { MtxRGB2XYZ, MtxAdaptMa, MtxAdaptMaI, Xn, Yn, Zn, As, Bs, Cs } =\n        LAB_CONSTANTS;\n\n    let x = r * MtxRGB2XYZ.m00 + g * MtxRGB2XYZ.m10 + b * MtxRGB2XYZ.m20;\n    let y = r * MtxRGB2XYZ.m01 + g * MtxRGB2XYZ.m11 + b * MtxRGB2XYZ.m21;\n    let z = r * MtxRGB2XYZ.m02 + g * MtxRGB2XYZ.m12 + b * MtxRGB2XYZ.m22;\n\n    const Ad = Xn * MtxAdaptMa.m00 + Yn * MtxAdaptMa.m10 + Zn * MtxAdaptMa.m20;\n    const Bd = Xn * MtxAdaptMa.m01 + Yn * MtxAdaptMa.m11 + Zn * MtxAdaptMa.m21;\n    const Cd = Xn * MtxAdaptMa.m02 + Yn * MtxAdaptMa.m12 + Zn * MtxAdaptMa.m22;\n\n    let X = x * MtxAdaptMa.m00 + y * MtxAdaptMa.m10 + z * MtxAdaptMa.m20;\n    let Y = x * MtxAdaptMa.m01 + y * MtxAdaptMa.m11 + z * MtxAdaptMa.m21;\n    let Z = x * MtxAdaptMa.m02 + y * MtxAdaptMa.m12 + z * MtxAdaptMa.m22;\n\n    X *= Ad / As;\n    Y *= Bd / Bs;\n    Z *= Cd / Cs;\n\n    x = X * MtxAdaptMaI.m00 + Y * MtxAdaptMaI.m10 + Z * MtxAdaptMaI.m20;\n    y = X * MtxAdaptMaI.m01 + Y * MtxAdaptMaI.m11 + Z * MtxAdaptMaI.m21;\n    z = X * MtxAdaptMaI.m02 + Y * MtxAdaptMaI.m12 + Z * MtxAdaptMaI.m22;\n\n    return [x, y, z];\n};\n\nexport default rgb2lab;\nexport { rgb2xyz };\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport lab2rgb from './lab2rgb.js';\nimport rgb2lab from './rgb2lab.js';\nimport { getLabWhitePoint, setLabWhitePoint } from './lab-constants.js';\n\nColor.prototype.lab = function () {\n    return rgb2lab(this._rgb);\n};\n\nconst lab = (...args) => new Color(...args, 'lab');\nObject.assign(chroma, { lab, getLabWhitePoint, setLabWhitePoint });\n\ninput.format.lab = lab2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'lab');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'lab';\n        }\n    }\n});\n\nexport { lab, getLabWhitePoint, setLabWhitePoint };\n","import '../io/lab/index.js';\nimport Color from '../Color.js';\nimport LAB_CONSTANTS from '../io/lab/lab-constants.js';\n\nColor.prototype.darken = function (amount = 1) {\n    const me = this;\n    const lab = me.lab();\n    lab[0] -= LAB_CONSTANTS.Kn * amount;\n    return new Color(lab, 'lab').alpha(me.alpha(), true);\n};\n\nColor.prototype.brighten = function (amount = 1) {\n    return this.darken(-amount);\n};\n\nColor.prototype.darker = Color.prototype.darken;\nColor.prototype.brighter = Color.prototype.brighten;\n","import Color from '../Color.js';\n\nColor.prototype.get = function (mc) {\n    const [mode, channel] = mc.split('.');\n    const src = this[mode]();\n    if (channel) {\n        const i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);\n        if (i > -1) return src[i];\n        throw new Error(`unknown channel ${channel} in mode ${mode}`);\n    } else {\n        return src;\n    }\n};\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\nconst { pow } = Math;\n\nconst EPS = 1e-7;\nconst MAX_ITER = 20;\n\nColor.prototype.luminance = function (lum, mode = 'rgb') {\n    if (lum !== undefined && type(lum) === 'number') {\n        if (lum === 0) {\n            // return pure black\n            return new Color([0, 0, 0, this._rgb[3]], 'rgb');\n        }\n        if (lum === 1) {\n            // return pure white\n            return new Color([255, 255, 255, this._rgb[3]], 'rgb');\n        }\n        // compute new color using...\n        let cur_lum = this.luminance();\n        let max_iter = MAX_ITER;\n\n        const test = (low, high) => {\n            const mid = low.interpolate(high, 0.5, mode);\n            const lm = mid.luminance();\n            if (Math.abs(lum - lm) < EPS || !max_iter--) {\n                // close enough\n                return mid;\n            }\n            return lm > lum ? test(low, mid) : test(mid, high);\n        };\n\n        const rgb = (\n            cur_lum > lum\n                ? test(new Color([0, 0, 0]), this)\n                : test(this, new Color([255, 255, 255]))\n        ).rgb();\n        return new Color([...rgb, this._rgb[3]]);\n    }\n    return rgb2luminance(...this._rgb.slice(0, 3));\n};\n\nconst rgb2luminance = (r, g, b) => {\n    // relative luminance\n    // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef\n    r = luminance_x(r);\n    g = luminance_x(g);\n    b = luminance_x(b);\n    return 0.2126 * r + 0.7152 * g + 0.0722 * b;\n};\n\nconst luminance_x = (x) => {\n    x /= 255;\n    return x <= 0.03928 ? x / 12.92 : pow((x + 0.055) / 1.055, 2.4);\n};\n","export default {};\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\nimport interpolator from '../interpolator/index.js';\n\nexport default (col1, col2, f = 0.5, ...rest) => {\n    let mode = rest[0] || 'lrgb';\n    if (!interpolator[mode] && !rest.length) {\n        // fall back to the first supported mode\n        mode = Object.keys(interpolator)[0];\n    }\n    if (!interpolator[mode]) {\n        throw new Error(`interpolation mode ${mode} is not defined`);\n    }\n    if (type(col1) !== 'object') col1 = new Color(col1);\n    if (type(col2) !== 'object') col2 = new Color(col2);\n    return interpolator[mode](col1, col2, f).alpha(\n        col1.alpha() + f * (col2.alpha() - col1.alpha())\n    );\n};\n","import Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\nColor.prototype.mix = Color.prototype.interpolate = function (\n    col2,\n    f = 0.5,\n    ...rest\n) {\n    return mix(this, col2, f, ...rest);\n};\n","import Color from '../Color.js';\n\nColor.prototype.premultiply = function (mutate = false) {\n    const rgb = this._rgb;\n    const a = rgb[3];\n    if (mutate) {\n        this._rgb = [rgb[0] * a, rgb[1] * a, rgb[2] * a, a];\n        return this;\n    } else {\n        return new Color([rgb[0] * a, rgb[1] * a, rgb[2] * a, a], 'rgb');\n    }\n};\n","import { unpack, DEG2RAD } from '../../utils/index.js';\nconst { sin, cos } = Math;\n\nconst lch2lab = (...args) => {\n    /*\n    Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel.\n    These formulas were invented by David Dalrymple to obtain maximum contrast without going\n    out of gamut if the parameters are in the range 0-1.\n\n    A saturation multiplier was added by Gregor Aisch\n    */\n    let [l, c, h] = unpack(args, 'lch');\n    if (isNaN(h)) h = 0;\n    h = h * DEG2RAD;\n    return [l, cos(h) * c, sin(h) * c];\n};\n\nexport default lch2lab;\n","import { unpack } from '../../utils/index.js';\nimport lch2lab from './lch2lab.js';\nimport lab2rgb from '../lab/lab2rgb.js';\n\nconst lch2rgb = (...args) => {\n    args = unpack(args, 'lch');\n    const [l, c, h] = args;\n    const [L, a, b_] = lch2lab(l, c, h);\n    const [r, g, b] = lab2rgb(L, a, b_);\n    return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default lch2rgb;\n","import { unpack, reverse3 } from '../../utils/index.js';\nimport lch2rgb from './lch2rgb.js';\n\nconst hcl2rgb = (...args) => {\n    const hcl = reverse3(unpack(args, 'hcl'));\n    return lch2rgb(...hcl);\n};\n\nexport default hcl2rgb;\n","import { unpack, RAD2DEG } from '../../utils/index.js';\nconst { sqrt, atan2, round } = Math;\n\nconst lab2lch = (...args) => {\n    const [l, a, b] = unpack(args, 'lab');\n    const c = sqrt(a * a + b * b);\n    let h = (atan2(b, a) * RAD2DEG + 360) % 360;\n    if (round(c * 10000) === 0) h = Number.NaN;\n    return [l, c, h];\n};\n\nexport default lab2lch;\n","import { unpack } from '../../utils/index.js';\nimport rgb2lab from '../lab/rgb2lab.js';\nimport lab2lch from './lab2lch.js';\n\nconst rgb2lch = (...args) => {\n    const [r, g, b, ...rest] = unpack(args, 'rgb');\n    const [l, a, b_] = rgb2lab(r, g, b);\n    const [L, c, h] = lab2lch(l, a, b_);\n    return [L, c, h, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nexport default rgb2lch;\n","import { unpack, type, reverse3 } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport lch2rgb from './lch2rgb.js';\nimport hcl2rgb from './hcl2rgb.js';\nimport rgb2lch from './rgb2lch.js';\n\nColor.prototype.lch = function () {\n    return rgb2lch(this._rgb);\n};\nColor.prototype.hcl = function () {\n    return reverse3(rgb2lch(this._rgb));\n};\n\nconst lch = (...args) => new Color(...args, 'lch');\nconst hcl = (...args) => new Color(...args, 'hcl');\n\nObject.assign(chroma, { lch, hcl });\n\ninput.format.lch = lch2rgb;\ninput.format.hcl = hcl2rgb;\n['lch', 'hcl'].forEach((m) =>\n    input.autodetect.push({\n        p: 2,\n        test: (...args) => {\n            args = unpack(args, m);\n            if (type(args) === 'array' && args.length === 3) {\n                return m;\n            }\n        }\n    })\n);\n\nexport { lch, hcl };\n","import '../io/lch/index.js';\nimport Color from '../Color.js';\nimport LAB_CONSTANTS from '../io/lab/lab-constants.js';\n\nColor.prototype.saturate = function (amount = 1) {\n    const me = this;\n    const lch = me.lch();\n    lch[1] += LAB_CONSTANTS.Kn * amount;\n    if (lch[1] < 0) lch[1] = 0;\n    return new Color(lch, 'lch').alpha(me.alpha(), true);\n};\n\nColor.prototype.desaturate = function (amount = 1) {\n    return this.saturate(-amount);\n};\n","import Color from '../Color.js';\nimport { type } from '../utils/index.js';\n\nColor.prototype.set = function (mc, value, mutate = false) {\n    const [mode, channel] = mc.split('.');\n    const src = this[mode]();\n    if (channel) {\n        const i = mode.indexOf(channel) - (mode.substr(0, 2) === 'ok' ? 2 : 0);\n        if (i > -1) {\n            if (type(value) == 'string') {\n                switch (value.charAt(0)) {\n                    case '+':\n                        src[i] += +value;\n                        break;\n                    case '-':\n                        src[i] += +value;\n                        break;\n                    case '*':\n                        src[i] *= +value.substr(1);\n                        break;\n                    case '/':\n                        src[i] /= +value.substr(1);\n                        break;\n                    default:\n                        src[i] = +value;\n                }\n            } else if (type(value) === 'number') {\n                src[i] = value;\n            } else {\n                throw new Error(`unsupported value for Color.set`);\n            }\n            const out = new Color(src, mode);\n            if (mutate) {\n                this._rgb = out._rgb;\n                return this;\n            }\n            return out;\n        }\n        throw new Error(`unknown channel ${channel} in mode ${mode}`);\n    } else {\n        return src;\n    }\n};\n","import '../io/lab/index.js';\nimport Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\nColor.prototype.tint = function (f = 0.5, ...rest) {\n    return mix(this, 'white', f, ...rest);\n};\n\nColor.prototype.shade = function (f = 0.5, ...rest) {\n    return mix(this, 'black', f, ...rest);\n};\n","import Color from '../Color.js';\nimport index from './index.js';\n\nconst rgb = (col1, col2, f) => {\n    const xyz0 = col1._rgb;\n    const xyz1 = col2._rgb;\n    return new Color(\n        xyz0[0] + f * (xyz1[0] - xyz0[0]),\n        xyz0[1] + f * (xyz1[1] - xyz0[1]),\n        xyz0[2] + f * (xyz1[2] - xyz0[2]),\n        'rgb'\n    );\n};\n\n// register interpolator\nindex.rgb = rgb;\n\nexport default rgb;\n","import Color from '../Color.js';\nconst { sqrt, pow } = Math;\nimport index from './index.js';\n\nconst lrgb = (col1, col2, f) => {\n    const [x1, y1, z1] = col1._rgb;\n    const [x2, y2, z2] = col2._rgb;\n    return new Color(\n        sqrt(pow(x1, 2) * (1 - f) + pow(x2, 2) * f),\n        sqrt(pow(y1, 2) * (1 - f) + pow(y2, 2) * f),\n        sqrt(pow(z1, 2) * (1 - f) + pow(z2, 2) * f),\n        'rgb'\n    );\n};\n\n// register interpolator\nindex.lrgb = lrgb;\n\nexport default lrgb;\n","import '../io/lab/index.js';\nimport index from './index.js';\nimport Color from '../Color.js';\n\nconst lab = (col1, col2, f) => {\n    const xyz0 = col1.lab();\n    const xyz1 = col2.lab();\n    return new Color(\n        xyz0[0] + f * (xyz1[0] - xyz0[0]),\n        xyz0[1] + f * (xyz1[1] - xyz0[1]),\n        xyz0[2] + f * (xyz1[2] - xyz0[2]),\n        'lab'\n    );\n};\n\n// register interpolator\nindex.lab = lab;\n\nexport default lab;\n","import Color from '../Color.js';\n\nexport default (col1, col2, f, m) => {\n    let xyz0, xyz1;\n    if (m === 'hsl') {\n        xyz0 = col1.hsl();\n        xyz1 = col2.hsl();\n    } else if (m === 'hsv') {\n        xyz0 = col1.hsv();\n        xyz1 = col2.hsv();\n    } else if (m === 'hcg') {\n        xyz0 = col1.hcg();\n        xyz1 = col2.hcg();\n    } else if (m === 'hsi') {\n        xyz0 = col1.hsi();\n        xyz1 = col2.hsi();\n    } else if (m === 'lch' || m === 'hcl') {\n        m = 'hcl';\n        xyz0 = col1.hcl();\n        xyz1 = col2.hcl();\n    } else if (m === 'oklch') {\n        xyz0 = col1.oklch().reverse();\n        xyz1 = col2.oklch().reverse();\n    }\n\n    let hue0, hue1, sat0, sat1, lbv0, lbv1;\n    if (m.substr(0, 1) === 'h' || m === 'oklch') {\n        [hue0, sat0, lbv0] = xyz0;\n        [hue1, sat1, lbv1] = xyz1;\n    }\n\n    let sat, hue, lbv, dh;\n\n    if (!isNaN(hue0) && !isNaN(hue1)) {\n        // both colors have hue\n        if (hue1 > hue0 && hue1 - hue0 > 180) {\n            dh = hue1 - (hue0 + 360);\n        } else if (hue1 < hue0 && hue0 - hue1 > 180) {\n            dh = hue1 + 360 - hue0;\n        } else {\n            dh = hue1 - hue0;\n        }\n        hue = hue0 + f * dh;\n    } else if (!isNaN(hue0)) {\n        hue = hue0;\n        if ((lbv1 == 1 || lbv1 == 0) && m != 'hsv') sat = sat0;\n    } else if (!isNaN(hue1)) {\n        hue = hue1;\n        if ((lbv0 == 1 || lbv0 == 0) && m != 'hsv') sat = sat1;\n    } else {\n        hue = Number.NaN;\n    }\n\n    if (sat === undefined) sat = sat0 + f * (sat1 - sat0);\n    lbv = lbv0 + f * (lbv1 - lbv0);\n    return m === 'oklch'\n        ? new Color([lbv, sat, hue], m)\n        : new Color([hue, sat, lbv], m);\n};\n","import '../io/lch/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst lch = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'lch');\n};\n\n// register interpolator\nindex.lch = lch;\nindex.hcl = lch;\n\nexport default lch;\n","import { type } from '../../utils/index.js';\n\nconst num2rgb = (num) => {\n    if (type(num) == 'number' && num >= 0 && num <= 0xffffff) {\n        const r = num >> 16;\n        const g = (num >> 8) & 0xff;\n        const b = num & 0xff;\n        return [r, g, b, 1];\n    }\n    throw new Error('unknown num color: ' + num);\n};\n\nexport default num2rgb;\n","import { unpack } from '../../utils/index.js';\n\nconst rgb2num = (...args) => {\n    const [r, g, b] = unpack(args, 'rgb');\n    return (r << 16) + (g << 8) + b;\n};\n\nexport default rgb2num;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\nimport num2rgb from './num2rgb.js';\nimport rgb2num from './rgb2num.js';\n\nColor.prototype.num = function () {\n    return rgb2num(this._rgb);\n};\n\nconst num = (...args) => new Color(...args, 'num');\n\nObject.assign(chroma, { num });\n\ninput.format.num = num2rgb;\n\ninput.autodetect.push({\n    p: 5,\n    test: (...args) => {\n        if (\n            args.length === 1 &&\n            type(args[0]) === 'number' &&\n            args[0] >= 0 &&\n            args[0] <= 0xffffff\n        ) {\n            return 'num';\n        }\n    }\n});\n\nexport { num };\n","import '../io/num/index.js';\nimport index from './index.js';\n\nimport Color from '../Color.js';\n\nconst num = (col1, col2, f) => {\n    const c1 = col1.num();\n    const c2 = col2.num();\n    return new Color(c1 + f * (c2 - c1), 'num');\n};\n\n// register interpolator\nindex.num = num;\n\nexport default num;\n","import { unpack } from '../../utils/index.js';\nconst { floor } = Math;\n\n/*\n * this is basically just HSV with some minor tweaks\n *\n * hue.. [0..360]\n * chroma .. [0..1]\n * grayness .. [0..1]\n */\n\nconst hcg2rgb = (...args) => {\n    args = unpack(args, 'hcg');\n    let [h, c, _g] = args;\n    let r, g, b;\n    _g = _g * 255;\n    const _c = c * 255;\n    if (c === 0) {\n        r = g = b = _g;\n    } else {\n        if (h === 360) h = 0;\n        if (h > 360) h -= 360;\n        if (h < 0) h += 360;\n        h /= 60;\n        const i = floor(h);\n        const f = h - i;\n        const p = _g * (1 - c);\n        const q = p + _c * (1 - f);\n        const t = p + _c * f;\n        const v = p + _c;\n        switch (i) {\n            case 0:\n                [r, g, b] = [v, t, p];\n                break;\n            case 1:\n                [r, g, b] = [q, v, p];\n                break;\n            case 2:\n                [r, g, b] = [p, v, t];\n                break;\n            case 3:\n                [r, g, b] = [p, q, v];\n                break;\n            case 4:\n                [r, g, b] = [t, p, v];\n                break;\n            case 5:\n                [r, g, b] = [v, p, q];\n                break;\n        }\n    }\n    return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default hcg2rgb;\n","import { unpack, max, min } from '../../utils/index.js';\n\nconst rgb2hcg = (...args) => {\n    const [r, g, b] = unpack(args, 'rgb');\n    const minRgb = min(r, g, b);\n    const maxRgb = max(r, g, b);\n    const delta = maxRgb - minRgb;\n    const c = (delta * 100) / 255;\n    const _g = (minRgb / (255 - delta)) * 100;\n    let h;\n    if (delta === 0) {\n        h = Number.NaN;\n    } else {\n        if (r === maxRgb) h = (g - b) / delta;\n        if (g === maxRgb) h = 2 + (b - r) / delta;\n        if (b === maxRgb) h = 4 + (r - g) / delta;\n        h *= 60;\n        if (h < 0) h += 360;\n    }\n    return [h, c, _g];\n};\n\nexport default rgb2hcg;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hcg2rgb from './hcg2rgb.js';\nimport rgb2hcg from './rgb2hcg.js';\n\nColor.prototype.hcg = function () {\n    return rgb2hcg(this._rgb);\n};\n\nconst hcg = (...args) => new Color(...args, 'hcg');\nchroma.hcg = hcg;\n\ninput.format.hcg = hcg2rgb;\n\ninput.autodetect.push({\n    p: 1,\n    test: (...args) => {\n        args = unpack(args, 'hcg');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hcg';\n        }\n    }\n});\n\nexport { hcg };\n","import '../io/hcg/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hcg = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hcg');\n};\n\n// register interpolator\nindex.hcg = hcg;\n\nexport default hcg;\n","import { unpack, limit, TWOPI, PITHIRD } from '../../utils/index.js';\nconst { cos } = Math;\n\n/*\n * hue [0..360]\n * saturation [0..1]\n * intensity [0..1]\n */\nconst hsi2rgb = (...args) => {\n    /*\n    borrowed from here:\n    http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp\n    */\n    args = unpack(args, 'hsi');\n    let [h, s, i] = args;\n    let r, g, b;\n\n    if (isNaN(h)) h = 0;\n    if (isNaN(s)) s = 0;\n    // normalize hue\n    if (h > 360) h -= 360;\n    if (h < 0) h += 360;\n    h /= 360;\n    if (h < 1 / 3) {\n        b = (1 - s) / 3;\n        r = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n        g = 1 - (b + r);\n    } else if (h < 2 / 3) {\n        h -= 1 / 3;\n        r = (1 - s) / 3;\n        g = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n        b = 1 - (r + g);\n    } else {\n        h -= 2 / 3;\n        g = (1 - s) / 3;\n        b = (1 + (s * cos(TWOPI * h)) / cos(PITHIRD - TWOPI * h)) / 3;\n        r = 1 - (g + b);\n    }\n    r = limit(i * r * 3);\n    g = limit(i * g * 3);\n    b = limit(i * b * 3);\n    return [r * 255, g * 255, b * 255, args.length > 3 ? args[3] : 1];\n};\n\nexport default hsi2rgb;\n","import { unpack, TWOPI } from '../../utils/index.js';\nconst { min, sqrt, acos } = Math;\n\nconst rgb2hsi = (...args) => {\n    /*\n    borrowed from here:\n    http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp\n    */\n    let [r, g, b] = unpack(args, 'rgb');\n    r /= 255;\n    g /= 255;\n    b /= 255;\n    let h;\n    const min_ = min(r, g, b);\n    const i = (r + g + b) / 3;\n    const s = i > 0 ? 1 - min_ / i : 0;\n    if (s === 0) {\n        h = NaN;\n    } else {\n        h = (r - g + (r - b)) / 2;\n        h /= sqrt((r - g) * (r - g) + (r - b) * (g - b));\n        h = acos(h);\n        if (b > g) {\n            h = TWOPI - h;\n        }\n        h /= TWOPI;\n    }\n    return [h * 360, s, i];\n};\n\nexport default rgb2hsi;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsi2rgb from './hsi2rgb.js';\nimport rgb2hsi from './rgb2hsi.js';\n\nColor.prototype.hsi = function () {\n    return rgb2hsi(this._rgb);\n};\n\nconst hsi = (...args) => new Color(...args, 'hsi');\nchroma.hsi = hsi;\n\ninput.format.hsi = hsi2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'hsi');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hsi';\n        }\n    }\n});\n\nexport { hsi };\n","import '../io/hsi/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsi = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hsi');\n};\n\n// register interpolator\nindex.hsi = hsi;\n\nexport default hsi;\n","import { unpack } from '../../utils/index.js';\n\nconst hsl2rgb = (...args) => {\n    args = unpack(args, 'hsl');\n    const [h, s, l] = args;\n    let r, g, b;\n    if (s === 0) {\n        r = g = b = l * 255;\n    } else {\n        const t3 = [0, 0, 0];\n        const c = [0, 0, 0];\n        const t2 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n        const t1 = 2 * l - t2;\n        const h_ = h / 360;\n        t3[0] = h_ + 1 / 3;\n        t3[1] = h_;\n        t3[2] = h_ - 1 / 3;\n        for (let i = 0; i < 3; i++) {\n            if (t3[i] < 0) t3[i] += 1;\n            if (t3[i] > 1) t3[i] -= 1;\n            if (6 * t3[i] < 1) c[i] = t1 + (t2 - t1) * 6 * t3[i];\n            else if (2 * t3[i] < 1) c[i] = t2;\n            else if (3 * t3[i] < 2) c[i] = t1 + (t2 - t1) * (2 / 3 - t3[i]) * 6;\n            else c[i] = t1;\n        }\n        [r, g, b] = [c[0] * 255, c[1] * 255, c[2] * 255];\n    }\n    if (args.length > 3) {\n        // keep alpha channel\n        return [r, g, b, args[3]];\n    }\n    return [r, g, b, 1];\n};\n\nexport default hsl2rgb;\n","import { unpack, min, max } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - rgb2hsl(r,g,b)\n * - rgb2hsl(r,g,b,a)\n * - rgb2hsl([r,g,b])\n * - rgb2hsl([r,g,b,a])\n * - rgb2hsl({r,g,b,a})\n */\nconst rgb2hsl = (...args) => {\n    args = unpack(args, 'rgba');\n    let [r, g, b] = args;\n\n    r /= 255;\n    g /= 255;\n    b /= 255;\n\n    const minRgb = min(r, g, b);\n    const maxRgb = max(r, g, b);\n\n    const l = (maxRgb + minRgb) / 2;\n    let s, h;\n\n    if (maxRgb === minRgb) {\n        s = 0;\n        h = Number.NaN;\n    } else {\n        s =\n            l < 0.5\n                ? (maxRgb - minRgb) / (maxRgb + minRgb)\n                : (maxRgb - minRgb) / (2 - maxRgb - minRgb);\n    }\n\n    if (r == maxRgb) h = (g - b) / (maxRgb - minRgb);\n    else if (g == maxRgb) h = 2 + (b - r) / (maxRgb - minRgb);\n    else if (b == maxRgb) h = 4 + (r - g) / (maxRgb - minRgb);\n\n    h *= 60;\n    if (h < 0) h += 360;\n    if (args.length > 3 && args[3] !== undefined) return [h, s, l, args[3]];\n    return [h, s, l];\n};\n\nexport default rgb2hsl;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsl2rgb from './hsl2rgb.js';\nimport rgb2hsl from './rgb2hsl.js';\n\nColor.prototype.hsl = function () {\n    return rgb2hsl(this._rgb);\n};\n\nconst hsl = (...args) => new Color(...args, 'hsl');\nchroma.hsl = hsl;\n\ninput.format.hsl = hsl2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'hsl');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hsl';\n        }\n    }\n});\n\nexport { hsl };\n","import '../io/hsl/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsl = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hsl');\n};\n\n// register interpolator\nindex.hsl = hsl;\n\nexport default hsl;\n","import { unpack } from '../../utils/index.js';\nconst { floor } = Math;\n\nconst hsv2rgb = (...args) => {\n    args = unpack(args, 'hsv');\n    let [h, s, v] = args;\n    let r, g, b;\n    v *= 255;\n    if (s === 0) {\n        r = g = b = v;\n    } else {\n        if (h === 360) h = 0;\n        if (h > 360) h -= 360;\n        if (h < 0) h += 360;\n        h /= 60;\n\n        const i = floor(h);\n        const f = h - i;\n        const p = v * (1 - s);\n        const q = v * (1 - s * f);\n        const t = v * (1 - s * (1 - f));\n\n        switch (i) {\n            case 0:\n                [r, g, b] = [v, t, p];\n                break;\n            case 1:\n                [r, g, b] = [q, v, p];\n                break;\n            case 2:\n                [r, g, b] = [p, v, t];\n                break;\n            case 3:\n                [r, g, b] = [p, q, v];\n                break;\n            case 4:\n                [r, g, b] = [t, p, v];\n                break;\n            case 5:\n                [r, g, b] = [v, p, q];\n                break;\n        }\n    }\n    return [r, g, b, args.length > 3 ? args[3] : 1];\n};\n\nexport default hsv2rgb;\n","import { unpack } from '../../utils/index.js';\nconst { min, max } = Math;\n\n/*\n * supported arguments:\n * - rgb2hsv(r,g,b)\n * - rgb2hsv([r,g,b])\n * - rgb2hsv({r,g,b})\n */\nconst rgb2hsl = (...args) => {\n    args = unpack(args, 'rgb');\n    let [r, g, b] = args;\n    const min_ = min(r, g, b);\n    const max_ = max(r, g, b);\n    const delta = max_ - min_;\n    let h, s, v;\n    v = max_ / 255.0;\n    if (max_ === 0) {\n        h = Number.NaN;\n        s = 0;\n    } else {\n        s = delta / max_;\n        if (r === max_) h = (g - b) / delta;\n        if (g === max_) h = 2 + (b - r) / delta;\n        if (b === max_) h = 4 + (r - g) / delta;\n        h *= 60;\n        if (h < 0) h += 360;\n    }\n    return [h, s, v];\n};\n\nexport default rgb2hsl;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport hsv2rgb from './hsv2rgb.js';\nimport rgb2hsv from './rgb2hsv.js';\n\nColor.prototype.hsv = function () {\n    return rgb2hsv(this._rgb);\n};\n\nconst hsv = (...args) => new Color(...args, 'hsv');\nchroma.hsv = hsv;\n\ninput.format.hsv = hsv2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'hsv');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'hsv';\n        }\n    }\n});\n\nexport { hsv };\n","import '../io/hsv/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst hsv = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'hsv');\n};\n\n// register interpolator\nindex.hsv = hsv;\n\nexport default hsv;\n","// from https://www.w3.org/TR/css-color-4/multiply-matrices.js\nexport default function multiplyMatrices(A, B) {\n    let m = A.length;\n\n    if (!Array.isArray(A[0])) {\n        // A is vector, convert to [[a, b, c, ...]]\n        A = [A];\n    }\n\n    if (!Array.isArray(B[0])) {\n        // B is vector, convert to [[a], [b], [c], ...]]\n        B = B.map((x) => [x]);\n    }\n\n    let p = B[0].length;\n    let B_cols = B[0].map((_, i) => B.map((x) => x[i])); // transpose B\n    let product = A.map((row) =>\n        B_cols.map((col) => {\n            if (!Array.isArray(row)) {\n                return col.reduce((a, c) => a + c * row, 0);\n            }\n\n            return row.reduce((a, c, i) => a + c * (col[i] || 0), 0);\n        })\n    );\n\n    if (m === 1) {\n        product = product[0]; // Avoid [[a, b, c, ...]]\n    }\n\n    if (p === 1) {\n        return product.map((x) => x[0]); // Avoid [[a], [b], [c], ...]]\n    }\n\n    return product;\n}\n","import { unpack } from '../../utils/index.js';\nimport multiplyMatrices from '../../utils/multiply-matrices.js';\nimport { xyz2rgb } from '../lab/lab2rgb.js';\n\nconst oklab2rgb = (...args) => {\n    args = unpack(args, 'lab');\n    const [L, a, b, ...rest] = args;\n    const [X, Y, Z] = OKLab_to_XYZ([L, a, b]);\n    const [r, g, b_] = xyz2rgb(X, Y, Z);\n    return [r, g, b_, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\n// from https://www.w3.org/TR/css-color-4/#color-conversion-code\nfunction OKLab_to_XYZ(OKLab) {\n    // Given OKLab, convert to XYZ relative to D65\n    var LMStoXYZ = [\n        [1.2268798758459243, -0.5578149944602171, 0.2813910456659647],\n        [-0.0405757452148008, 1.112286803280317, -0.0717110580655164],\n        [-0.0763729366746601, -0.4214933324022432, 1.5869240198367816]\n    ];\n    var OKLabtoLMS = [\n        [1.0, 0.3963377773761749, 0.2158037573099136],\n        [1.0, -0.1055613458156586, -0.0638541728258133],\n        [1.0, -0.0894841775298119, -1.2914855480194092]\n    ];\n\n    var LMSnl = multiplyMatrices(OKLabtoLMS, OKLab);\n    return multiplyMatrices(\n        LMStoXYZ,\n        LMSnl.map((c) => c ** 3)\n    );\n}\n\nexport default oklab2rgb;\n","import { unpack } from '../../utils/index.js';\nimport multiplyMatrices from '../../utils/multiply-matrices.js';\nimport { rgb2xyz } from '../lab/rgb2lab.js';\n\nconst rgb2oklab = (...args) => {\n    const [r, g, b, ...rest] = unpack(args, 'rgb');\n    const xyz = rgb2xyz(r, g, b);\n    const oklab = XYZ_to_OKLab(xyz);\n    return [...oklab, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\n// from https://www.w3.org/TR/css-color-4/#color-conversion-code\nfunction XYZ_to_OKLab(XYZ) {\n    // Given XYZ relative to D65, convert to OKLab\n    const XYZtoLMS = [\n        [0.819022437996703, 0.3619062600528904, -0.1288737815209879],\n        [0.0329836539323885, 0.9292868615863434, 0.0361446663506424],\n        [0.0481771893596242, 0.2642395317527308, 0.6335478284694309]\n    ];\n    const LMStoOKLab = [\n        [0.210454268309314, 0.7936177747023054, -0.0040720430116193],\n        [1.9779985324311684, -2.4285922420485799, 0.450593709617411],\n        [0.0259040424655478, 0.7827717124575296, -0.8086757549230774]\n    ];\n\n    const LMS = multiplyMatrices(XYZtoLMS, XYZ);\n    // JavaScript Math.cbrt returns a sign-matched cube root\n    // beware if porting to other languages\n    // especially if tempted to use a general power function\n    return multiplyMatrices(\n        LMStoOKLab,\n        LMS.map((c) => Math.cbrt(c))\n    );\n    // L in range [0,1]. For use in CSS, multiply by 100 and add a percent\n}\n\nexport default rgb2oklab;\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport oklab2rgb from './oklab2rgb.js';\nimport rgb2oklab from './rgb2oklab.js';\n\nColor.prototype.oklab = function () {\n    return rgb2oklab(this._rgb);\n};\n\nconst oklab = (...args) => new Color(...args, 'oklab');\nObject.assign(chroma, { oklab });\n\ninput.format.oklab = oklab2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'oklab');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'oklab';\n        }\n    }\n});\n\nexport { oklab };\n","import '../io/oklab/index.js';\nimport index from './index.js';\nimport Color from '../Color.js';\n\nconst oklab = (col1, col2, f) => {\n    const xyz0 = col1.oklab();\n    const xyz1 = col2.oklab();\n    return new Color(\n        xyz0[0] + f * (xyz1[0] - xyz0[0]),\n        xyz0[1] + f * (xyz1[1] - xyz0[1]),\n        xyz0[2] + f * (xyz1[2] - xyz0[2]),\n        'oklab'\n    );\n};\n\n// register interpolator\nindex.oklab = oklab;\n\nexport default oklab;\n","import '../io/lch/index.js';\nimport interpolate_hsx from './_hsx.js';\nimport index from './index.js';\n\nconst oklch = (col1, col2, f) => {\n    return interpolate_hsx(col1, col2, f, 'oklch');\n};\n\n// register interpolator\nindex.oklch = oklch;\n\nexport default oklch;\n","import Color from '../Color.js';\nimport { clip_rgb } from '../utils/index.js';\n\nconst { pow, sqrt, PI, cos, sin, atan2 } = Math;\n\nexport default (colors, mode = 'lrgb', weights = null) => {\n    const l = colors.length;\n    if (!weights) weights = Array.from(new Array(l)).map(() => 1);\n    // normalize weights\n    const k =\n        l /\n        weights.reduce(function (a, b) {\n            return a + b;\n        });\n    weights.forEach((w, i) => {\n        weights[i] *= k;\n    });\n    // convert colors to Color objects\n    colors = colors.map((c) => new Color(c));\n    if (mode === 'lrgb') {\n        return _average_lrgb(colors, weights);\n    }\n    const first = colors.shift();\n    const xyz = first.get(mode);\n    const cnt = [];\n    let dx = 0;\n    let dy = 0;\n    // initial color\n    for (let i = 0; i < xyz.length; i++) {\n        xyz[i] = (xyz[i] || 0) * weights[0];\n        cnt.push(isNaN(xyz[i]) ? 0 : weights[0]);\n        if (mode.charAt(i) === 'h' && !isNaN(xyz[i])) {\n            const A = (xyz[i] / 180) * PI;\n            dx += cos(A) * weights[0];\n            dy += sin(A) * weights[0];\n        }\n    }\n\n    let alpha = first.alpha() * weights[0];\n    colors.forEach((c, ci) => {\n        const xyz2 = c.get(mode);\n        alpha += c.alpha() * weights[ci + 1];\n        for (let i = 0; i < xyz.length; i++) {\n            if (!isNaN(xyz2[i])) {\n                cnt[i] += weights[ci + 1];\n                if (mode.charAt(i) === 'h') {\n                    const A = (xyz2[i] / 180) * PI;\n                    dx += cos(A) * weights[ci + 1];\n                    dy += sin(A) * weights[ci + 1];\n                } else {\n                    xyz[i] += xyz2[i] * weights[ci + 1];\n                }\n            }\n        }\n    });\n\n    for (let i = 0; i < xyz.length; i++) {\n        if (mode.charAt(i) === 'h') {\n            let A = (atan2(dy / cnt[i], dx / cnt[i]) / PI) * 180;\n            while (A < 0) A += 360;\n            while (A >= 360) A -= 360;\n            xyz[i] = A;\n        } else {\n            xyz[i] = xyz[i] / cnt[i];\n        }\n    }\n    alpha /= l;\n    return new Color(xyz, mode).alpha(alpha > 0.99999 ? 1 : alpha, true);\n};\n\nconst _average_lrgb = (colors, weights) => {\n    const l = colors.length;\n    const xyz = [0, 0, 0, 0];\n    for (let i = 0; i < colors.length; i++) {\n        const col = colors[i];\n        const f = weights[i] / l;\n        const rgb = col._rgb;\n        xyz[0] += pow(rgb[0], 2) * f;\n        xyz[1] += pow(rgb[1], 2) * f;\n        xyz[2] += pow(rgb[2], 2) * f;\n        xyz[3] += rgb[3] * f;\n    }\n    xyz[0] = sqrt(xyz[0]);\n    xyz[1] = sqrt(xyz[1]);\n    xyz[2] = sqrt(xyz[2]);\n    if (xyz[3] > 0.9999999) xyz[3] = 1;\n    return new Color(clip_rgb(xyz));\n};\n","// minimal multi-purpose interface\n\n// @requires utils color analyze\nimport chroma from '../chroma.js';\nimport { limit, type } from '../utils/index.js';\n\nconst { pow } = Math;\n\nexport default function (colors) {\n    // constructor\n    let _mode = 'rgb';\n    let _nacol = chroma('#ccc');\n    let _spread = 0;\n    // const _fixed = false;\n    let _positions = [0, 1];\n    let _domain = [0, 1];\n    let _pos = [];\n    let _padding = [0, 0];\n    let _classes = false;\n    let _colors = [];\n    let _out = false;\n    let _min = 0;\n    let _max = 1;\n    let _correctLightness = false;\n    let _colorCache = {};\n    let _useCache = true;\n    let _gamma = 1;\n\n    // private methods\n\n    const setColors = function (colors) {\n        colors = colors || ['#fff', '#000'];\n        if (\n            colors &&\n            type(colors) === 'string' &&\n            chroma.brewer &&\n            chroma.brewer[colors.toLowerCase()]\n        ) {\n            colors = chroma.brewer[colors.toLowerCase()];\n        }\n        if (type(colors) === 'array') {\n            // handle single color\n            if (colors.length === 1) {\n                colors = [colors[0], colors[0]];\n            }\n            // make a copy of the colors\n            colors = colors.slice(0);\n            // convert to chroma classes\n            for (let c = 0; c < colors.length; c++) {\n                colors[c] = chroma(colors[c]);\n            }\n            // auto-fill color position\n            _pos.length = 0;\n            for (let c = 0; c < colors.length; c++) {\n                _pos.push(c / (colors.length - 1));\n            }\n        }\n        resetCache();\n        return (_colors = colors);\n    };\n\n    const getClass = function (value) {\n        if (_classes != null) {\n            const n = _classes.length - 1;\n            let i = 0;\n            while (i < n && value >= _classes[i]) {\n                i++;\n            }\n            return i - 1;\n        }\n        return 0;\n    };\n\n    let tMapLightness = (t) => t;\n    let tMapDomain = (t) => t;\n\n    // const classifyValue = function(value) {\n    //     let val = value;\n    //     if (_classes.length > 2) {\n    //         const n = _classes.length-1;\n    //         const i = getClass(value);\n    //         const minc = _classes[0] + ((_classes[1]-_classes[0]) * (0 + (_spread * 0.5)));  // center of 1st class\n    //         const maxc = _classes[n-1] + ((_classes[n]-_classes[n-1]) * (1 - (_spread * 0.5)));  // center of last class\n    //         val = _min + ((((_classes[i] + ((_classes[i+1] - _classes[i]) * 0.5)) - minc) / (maxc-minc)) * (_max - _min));\n    //     }\n    //     return val;\n    // };\n\n    const getColor = function (val, bypassMap) {\n        let col, t;\n        if (bypassMap == null) {\n            bypassMap = false;\n        }\n        if (isNaN(val) || val === null) {\n            return _nacol;\n        }\n        if (!bypassMap) {\n            if (_classes && _classes.length > 2) {\n                // find the class\n                const c = getClass(val);\n                t = c / (_classes.length - 2);\n            } else if (_max !== _min) {\n                // just interpolate between min/max\n                t = (val - _min) / (_max - _min);\n            } else {\n                t = 1;\n            }\n        } else {\n            t = val;\n        }\n\n        // domain map\n        t = tMapDomain(t);\n\n        if (!bypassMap) {\n            t = tMapLightness(t); // lightness correction\n        }\n\n        if (_gamma !== 1) {\n            t = pow(t, _gamma);\n        }\n\n        t = _padding[0] + t * (1 - _padding[0] - _padding[1]);\n\n        t = limit(t, 0, 1);\n\n        const k = Math.floor(t * 10000);\n\n        if (_useCache && _colorCache[k]) {\n            col = _colorCache[k];\n        } else {\n            if (type(_colors) === 'array') {\n                //for i in [0.._pos.length-1]\n                for (let i = 0; i < _pos.length; i++) {\n                    const p = _pos[i];\n                    if (t <= p) {\n                        col = _colors[i];\n                        break;\n                    }\n                    if (t >= p && i === _pos.length - 1) {\n                        col = _colors[i];\n                        break;\n                    }\n                    if (t > p && t < _pos[i + 1]) {\n                        t = (t - p) / (_pos[i + 1] - p);\n                        col = chroma.interpolate(\n                            _colors[i],\n                            _colors[i + 1],\n                            t,\n                            _mode\n                        );\n                        break;\n                    }\n                }\n            } else if (type(_colors) === 'function') {\n                col = _colors(t);\n            }\n            if (_useCache) {\n                _colorCache[k] = col;\n            }\n        }\n        return col;\n    };\n\n    var resetCache = () => (_colorCache = {});\n\n    setColors(colors);\n\n    // public interface\n\n    const f = function (v) {\n        const c = chroma(getColor(v));\n        if (_out && c[_out]) {\n            return c[_out]();\n        } else {\n            return c;\n        }\n    };\n\n    f.classes = function (classes) {\n        if (classes != null) {\n            if (type(classes) === 'array') {\n                _classes = classes;\n                _positions = [classes[0], classes[classes.length - 1]];\n            } else {\n                const d = chroma.analyze(_positions);\n                if (classes === 0) {\n                    _classes = [d.min, d.max];\n                } else {\n                    _classes = chroma.limits(d, 'e', classes);\n                }\n            }\n            return f;\n        }\n        return _classes;\n    };\n\n    f.domain = function (domain) {\n        if (!arguments.length) {\n            // return original domain\n            return _domain;\n        }\n        // store original domain so we can return it later\n        _domain = domain.slice(0);\n        _min = domain[0];\n        _max = domain[domain.length - 1];\n        _pos = [];\n        const k = _colors.length;\n        if (domain.length === k && _min !== _max) {\n            // update positions\n            for (let d of Array.from(domain)) {\n                _pos.push((d - _min) / (_max - _min));\n            }\n        } else {\n            for (let c = 0; c < k; c++) {\n                _pos.push(c / (k - 1));\n            }\n            if (domain.length > 2) {\n                // set domain map\n                const tOut = domain.map((d, i) => i / (domain.length - 1));\n                const tBreaks = domain.map((d) => (d - _min) / (_max - _min));\n                if (!tBreaks.every((val, i) => tOut[i] === val)) {\n                    tMapDomain = (t) => {\n                        if (t <= 0 || t >= 1) return t;\n                        let i = 0;\n                        while (t >= tBreaks[i + 1]) i++;\n                        const f =\n                            (t - tBreaks[i]) / (tBreaks[i + 1] - tBreaks[i]);\n                        const out = tOut[i] + f * (tOut[i + 1] - tOut[i]);\n                        return out;\n                    };\n                }\n            }\n        }\n        _positions = [_min, _max];\n        return f;\n    };\n\n    f.mode = function (_m) {\n        if (!arguments.length) {\n            return _mode;\n        }\n        _mode = _m;\n        resetCache();\n        return f;\n    };\n\n    f.range = function (colors, _pos) {\n        setColors(colors, _pos);\n        return f;\n    };\n\n    f.out = function (_o) {\n        _out = _o;\n        return f;\n    };\n\n    f.spread = function (val) {\n        if (!arguments.length) {\n            return _spread;\n        }\n        _spread = val;\n        return f;\n    };\n\n    f.correctLightness = function (v) {\n        if (v == null) {\n            v = true;\n        }\n        _correctLightness = v;\n        resetCache();\n        if (_correctLightness) {\n            tMapLightness = function (t) {\n                const L0 = getColor(0, true).lab()[0];\n                const L1 = getColor(1, true).lab()[0];\n                const pol = L0 > L1;\n                let L_actual = getColor(t, true).lab()[0];\n                const L_ideal = L0 + (L1 - L0) * t;\n                let L_diff = L_actual - L_ideal;\n                let t0 = 0;\n                let t1 = 1;\n                let max_iter = 20;\n                while (Math.abs(L_diff) > 1e-2 && max_iter-- > 0) {\n                    (function () {\n                        if (pol) {\n                            L_diff *= -1;\n                        }\n                        if (L_diff < 0) {\n                            t0 = t;\n                            t += (t1 - t) * 0.5;\n                        } else {\n                            t1 = t;\n                            t += (t0 - t) * 0.5;\n                        }\n                        L_actual = getColor(t, true).lab()[0];\n                        return (L_diff = L_actual - L_ideal);\n                    })();\n                }\n                return t;\n            };\n        } else {\n            tMapLightness = (t) => t;\n        }\n        return f;\n    };\n\n    f.padding = function (p) {\n        if (p != null) {\n            if (type(p) === 'number') {\n                p = [p, p];\n            }\n            _padding = p;\n            return f;\n        } else {\n            return _padding;\n        }\n    };\n\n    f.colors = function (numColors, out) {\n        // If no arguments are given, return the original colors that were provided\n        if (arguments.length < 2) {\n            out = 'hex';\n        }\n        let result = [];\n\n        if (arguments.length === 0) {\n            result = _colors.slice(0);\n        } else if (numColors === 1) {\n            result = [f(0.5)];\n        } else if (numColors > 1) {\n            const dm = _positions[0];\n            const dd = _positions[1] - dm;\n            result = __range__(0, numColors, false).map((i) =>\n                f(dm + (i / (numColors - 1)) * dd)\n            );\n        } else {\n            // returns all colors based on the defined classes\n            colors = [];\n            let samples = [];\n            if (_classes && _classes.length > 2) {\n                for (\n                    let i = 1, end = _classes.length, asc = 1 <= end;\n                    asc ? i < end : i > end;\n                    asc ? i++ : i--\n                ) {\n                    samples.push((_classes[i - 1] + _classes[i]) * 0.5);\n                }\n            } else {\n                samples = _positions;\n            }\n            result = samples.map((v) => f(v));\n        }\n\n        if (chroma[out]) {\n            result = result.map((c) => c[out]());\n        }\n        return result;\n    };\n\n    f.cache = function (c) {\n        if (c != null) {\n            _useCache = c;\n            return f;\n        } else {\n            return _useCache;\n        }\n    };\n\n    f.gamma = function (g) {\n        if (g != null) {\n            _gamma = g;\n            return f;\n        } else {\n            return _gamma;\n        }\n    };\n\n    f.nodata = function (d) {\n        if (d != null) {\n            _nacol = chroma(d);\n            return f;\n        } else {\n            return _nacol;\n        }\n    };\n\n    return f;\n}\n\nfunction __range__(left, right, inclusive) {\n    let range = [];\n    let ascending = left < right;\n    let end = !inclusive ? right : ascending ? right + 1 : right - 1;\n    for (let i = left; ascending ? i < end : i > end; ascending ? i++ : i--) {\n        range.push(i);\n    }\n    return range;\n}\n","//\n// interpolates between a set of colors uzing a bezier spline\n//\n\n// @requires utils lab\nimport Color from '../Color.js';\nimport '../io/lab/index.js';\nimport scale from './scale.js';\n\n// nth row of the pascal triangle\nconst binom_row = function (n) {\n    let row = [1, 1];\n    for (let i = 1; i < n; i++) {\n        let newrow = [1];\n        for (let j = 1; j <= row.length; j++) {\n            newrow[j] = (row[j] || 0) + row[j - 1];\n        }\n        row = newrow;\n    }\n    return row;\n};\n\nconst bezier = function (colors) {\n    let I, lab0, lab1, lab2;\n    colors = colors.map((c) => new Color(c));\n    if (colors.length === 2) {\n        // linear interpolation\n        [lab0, lab1] = colors.map((c) => c.lab());\n        I = function (t) {\n            const lab = [0, 1, 2].map((i) => lab0[i] + t * (lab1[i] - lab0[i]));\n            return new Color(lab, 'lab');\n        };\n    } else if (colors.length === 3) {\n        // quadratic bezier interpolation\n        [lab0, lab1, lab2] = colors.map((c) => c.lab());\n        I = function (t) {\n            const lab = [0, 1, 2].map(\n                (i) =>\n                    (1 - t) * (1 - t) * lab0[i] +\n                    2 * (1 - t) * t * lab1[i] +\n                    t * t * lab2[i]\n            );\n            return new Color(lab, 'lab');\n        };\n    } else if (colors.length === 4) {\n        // cubic bezier interpolation\n        let lab3;\n        [lab0, lab1, lab2, lab3] = colors.map((c) => c.lab());\n        I = function (t) {\n            const lab = [0, 1, 2].map(\n                (i) =>\n                    (1 - t) * (1 - t) * (1 - t) * lab0[i] +\n                    3 * (1 - t) * (1 - t) * t * lab1[i] +\n                    3 * (1 - t) * t * t * lab2[i] +\n                    t * t * t * lab3[i]\n            );\n            return new Color(lab, 'lab');\n        };\n    } else if (colors.length >= 5) {\n        // general case (degree n bezier)\n        let labs, row, n;\n        labs = colors.map((c) => c.lab());\n        n = colors.length - 1;\n        row = binom_row(n);\n        I = function (t) {\n            const u = 1 - t;\n            const lab = [0, 1, 2].map((i) =>\n                labs.reduce(\n                    (sum, el, j) =>\n                        sum + row[j] * u ** (n - j) * t ** j * el[i],\n                    0\n                )\n            );\n            return new Color(lab, 'lab');\n        };\n    } else {\n        throw new RangeError('No point in running bezier with only one color.');\n    }\n    return I;\n};\n\nexport default (colors) => {\n    const f = bezier(colors);\n    f.scale = () => scale(f);\n    return f;\n};\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { unpack, type } from '../../utils/index.js';\nconst { round } = Math;\n\nColor.prototype.rgb = function (rnd = true) {\n    if (rnd === false) return this._rgb.slice(0, 3);\n    return this._rgb.slice(0, 3).map(round);\n};\n\nColor.prototype.rgba = function (rnd = true) {\n    return this._rgb.slice(0, 4).map((v, i) => {\n        return i < 3 ? (rnd === false ? v : round(v)) : v;\n    });\n};\n\nconst rgb = (...args) => new Color(...args, 'rgb');\nObject.assign(chroma, { rgb });\n\ninput.format.rgb = (...args) => {\n    const rgba = unpack(args, 'rgba');\n    if (rgba[3] === undefined) rgba[3] = 1;\n    return rgba;\n};\n\ninput.autodetect.push({\n    p: 3,\n    test: (...args) => {\n        args = unpack(args, 'rgba');\n        if (\n            type(args) === 'array' &&\n            (args.length === 3 ||\n                (args.length === 4 &&\n                    type(args[3]) == 'number' &&\n                    args[3] >= 0 &&\n                    args[3] <= 1))\n        ) {\n            return 'rgb';\n        }\n    }\n});\n\nexport { rgb };\n","/*\n * interpolates between a set of colors uzing a bezier spline\n * blend mode formulas taken from https://web.archive.org/web/20180110014946/http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/\n */\n\nimport '../io/rgb/index.js';\nimport chroma from '../chroma.js';\n\nconst blend = (bottom, top, mode) => {\n    if (!blend[mode]) {\n        throw new Error('unknown blend mode ' + mode);\n    }\n    return blend[mode](bottom, top);\n};\n\nconst blend_f = (f) => (bottom, top) => {\n    const c0 = chroma(top).rgb();\n    const c1 = chroma(bottom).rgb();\n    return chroma.rgb(f(c0, c1));\n};\n\nconst each = (f) => (c0, c1) => {\n    const out = [];\n    out[0] = f(c0[0], c1[0]);\n    out[1] = f(c0[1], c1[1]);\n    out[2] = f(c0[2], c1[2]);\n    return out;\n};\n\nconst normal = (a) => a;\nconst multiply = (a, b) => (a * b) / 255;\nconst darken = (a, b) => (a > b ? b : a);\nconst lighten = (a, b) => (a > b ? a : b);\nconst screen = (a, b) => 255 * (1 - (1 - a / 255) * (1 - b / 255));\nconst overlay = (a, b) =>\n    b < 128 ? (2 * a * b) / 255 : 255 * (1 - 2 * (1 - a / 255) * (1 - b / 255));\nconst burn = (a, b) => 255 * (1 - (1 - b / 255) / (a / 255));\nconst dodge = (a, b) => {\n    if (a === 255) return 255;\n    a = (255 * (b / 255)) / (1 - a / 255);\n    return a > 255 ? 255 : a;\n};\n\n// # add = (a,b) ->\n// #     if (a + b > 255) then 255 else a + b\n\nblend.normal = blend_f(each(normal));\nblend.multiply = blend_f(each(multiply));\nblend.screen = blend_f(each(screen));\nblend.overlay = blend_f(each(overlay));\nblend.darken = blend_f(each(darken));\nblend.lighten = blend_f(each(lighten));\nblend.dodge = blend_f(each(dodge));\nblend.burn = blend_f(each(burn));\n// blend.add = blend_f(each(add));\n\nexport default blend;\n","// cubehelix interpolation\n// based on D.A. Green \"A colour scheme for the display of astronomical intensity images\"\n// http://astron-soc.in/bulletin/11June/289392011.pdf\nimport { type, clip_rgb, TWOPI } from '../utils/index.js';\nimport chroma from '../chroma.js';\nconst { pow, sin, cos } = Math;\n\nexport default function (\n    start = 300,\n    rotations = -1.5,\n    hue = 1,\n    gamma = 1,\n    lightness = [0, 1]\n) {\n    let dh = 0,\n        dl;\n    if (type(lightness) === 'array') {\n        dl = lightness[1] - lightness[0];\n    } else {\n        dl = 0;\n        lightness = [lightness, lightness];\n    }\n    const f = function (fract) {\n        const a = TWOPI * ((start + 120) / 360 + rotations * fract);\n        const l = pow(lightness[0] + dl * fract, gamma);\n        const h = dh !== 0 ? hue[0] + fract * dh : hue;\n        const amp = (h * l * (1 - l)) / 2;\n        const cos_a = cos(a);\n        const sin_a = sin(a);\n        const r = l + amp * (-0.14861 * cos_a + 1.78277 * sin_a);\n        const g = l + amp * (-0.29227 * cos_a - 0.90649 * sin_a);\n        const b = l + amp * (+1.97294 * cos_a);\n        return chroma(clip_rgb([r * 255, g * 255, b * 255, 1]));\n    };\n    f.start = function (s) {\n        if (s == null) {\n            return start;\n        }\n        start = s;\n        return f;\n    };\n    f.rotations = function (r) {\n        if (r == null) {\n            return rotations;\n        }\n        rotations = r;\n        return f;\n    };\n    f.gamma = function (g) {\n        if (g == null) {\n            return gamma;\n        }\n        gamma = g;\n        return f;\n    };\n    f.hue = function (h) {\n        if (h == null) {\n            return hue;\n        }\n        hue = h;\n        if (type(hue) === 'array') {\n            dh = hue[1] - hue[0];\n            if (dh === 0) {\n                hue = hue[1];\n            }\n        } else {\n            dh = 0;\n        }\n        return f;\n    };\n    f.lightness = function (h) {\n        if (h == null) {\n            return lightness;\n        }\n        if (type(h) === 'array') {\n            lightness = h;\n            dl = h[1] - h[0];\n        } else {\n            lightness = [h, h];\n            dl = 0;\n        }\n        return f;\n    };\n    f.scale = () => chroma.scale(f);\n    f.hue(hue);\n    return f;\n}\n","import Color from '../Color.js';\nconst digits = '0123456789abcdef';\n\nconst { floor, random } = Math;\n\n/**\n * Generates a random color.\n * @param {() => number} rng - A random number generator function.\n */\nexport default (rng = random) => {\n    let code = '#';\n    for (let i = 0; i < 6; i++) {\n        code += digits.charAt(floor(rng() * 16));\n    }\n    return new Color(code, 'hex');\n};\n","import type from './type.js';\n\nconst { log, pow, floor, abs } = Math;\n\nexport function analyze(data, key = null) {\n    const r = {\n        min: Number.MAX_VALUE,\n        max: Number.MAX_VALUE * -1,\n        sum: 0,\n        values: [],\n        count: 0\n    };\n    if (type(data) === 'object') {\n        data = Object.values(data);\n    }\n    data.forEach((val) => {\n        if (key && type(val) === 'object') val = val[key];\n        if (val !== undefined && val !== null && !isNaN(val)) {\n            r.values.push(val);\n            r.sum += val;\n            if (val < r.min) r.min = val;\n            if (val > r.max) r.max = val;\n            r.count += 1;\n        }\n    });\n\n    r.domain = [r.min, r.max];\n\n    r.limits = (mode, num) => limits(r, mode, num);\n\n    return r;\n}\n\nexport function limits(data, mode = 'equal', num = 7) {\n    if (type(data) == 'array') {\n        data = analyze(data);\n    }\n    const { min, max } = data;\n    const values = data.values.sort((a, b) => a - b);\n\n    if (num === 1) {\n        return [min, max];\n    }\n\n    const limits = [];\n\n    if (mode.substr(0, 1) === 'c') {\n        // continuous\n        limits.push(min);\n        limits.push(max);\n    }\n\n    if (mode.substr(0, 1) === 'e') {\n        // equal interval\n        limits.push(min);\n        for (let i = 1; i < num; i++) {\n            limits.push(min + (i / num) * (max - min));\n        }\n        limits.push(max);\n    } else if (mode.substr(0, 1) === 'l') {\n        // log scale\n        if (min <= 0) {\n            throw new Error(\n                'Logarithmic scales are only possible for values > 0'\n            );\n        }\n        const min_log = Math.LOG10E * log(min);\n        const max_log = Math.LOG10E * log(max);\n        limits.push(min);\n        for (let i = 1; i < num; i++) {\n            limits.push(pow(10, min_log + (i / num) * (max_log - min_log)));\n        }\n        limits.push(max);\n    } else if (mode.substr(0, 1) === 'q') {\n        // quantile scale\n        limits.push(min);\n        for (let i = 1; i < num; i++) {\n            const p = ((values.length - 1) * i) / num;\n            const pb = floor(p);\n            if (pb === p) {\n                limits.push(values[pb]);\n            } else {\n                // p > pb\n                const pr = p - pb;\n                limits.push(values[pb] * (1 - pr) + values[pb + 1] * pr);\n            }\n        }\n        limits.push(max);\n    } else if (mode.substr(0, 1) === 'k') {\n        // k-means clustering\n        /*\n        implementation based on\n        http://code.google.com/p/figue/source/browse/trunk/figue.js#336\n        simplified for 1-d input values\n        */\n        let cluster;\n        const n = values.length;\n        const assignments = new Array(n);\n        const clusterSizes = new Array(num);\n        let repeat = true;\n        let nb_iters = 0;\n        let centroids = null;\n\n        // get seed values\n        centroids = [];\n        centroids.push(min);\n        for (let i = 1; i < num; i++) {\n            centroids.push(min + (i / num) * (max - min));\n        }\n        centroids.push(max);\n\n        while (repeat) {\n            // assignment step\n            for (let j = 0; j < num; j++) {\n                clusterSizes[j] = 0;\n            }\n            for (let i = 0; i < n; i++) {\n                const value = values[i];\n                let mindist = Number.MAX_VALUE;\n                let best;\n                for (let j = 0; j < num; j++) {\n                    const dist = abs(centroids[j] - value);\n                    if (dist < mindist) {\n                        mindist = dist;\n                        best = j;\n                    }\n                    clusterSizes[best]++;\n                    assignments[i] = best;\n                }\n            }\n\n            // update centroids step\n            const newCentroids = new Array(num);\n            for (let j = 0; j < num; j++) {\n                newCentroids[j] = null;\n            }\n            for (let i = 0; i < n; i++) {\n                cluster = assignments[i];\n                if (newCentroids[cluster] === null) {\n                    newCentroids[cluster] = values[i];\n                } else {\n                    newCentroids[cluster] += values[i];\n                }\n            }\n            for (let j = 0; j < num; j++) {\n                newCentroids[j] *= 1 / clusterSizes[j];\n            }\n\n            // check convergence\n            repeat = false;\n            for (let j = 0; j < num; j++) {\n                if (newCentroids[j] !== centroids[j]) {\n                    repeat = true;\n                    break;\n                }\n            }\n\n            centroids = newCentroids;\n            nb_iters++;\n\n            if (nb_iters > 200) {\n                repeat = false;\n            }\n        }\n\n        // finished k-means clustering\n        // the next part is borrowed from gabrielflor.it\n        const kClusters = {};\n        for (let j = 0; j < num; j++) {\n            kClusters[j] = [];\n        }\n        for (let i = 0; i < n; i++) {\n            cluster = assignments[i];\n            kClusters[cluster].push(values[i]);\n        }\n        let tmpKMeansBreaks = [];\n        for (let j = 0; j < num; j++) {\n            tmpKMeansBreaks.push(kClusters[j][0]);\n            tmpKMeansBreaks.push(kClusters[j][kClusters[j].length - 1]);\n        }\n        tmpKMeansBreaks = tmpKMeansBreaks.sort((a, b) => a - b);\n        limits.push(tmpKMeansBreaks[0]);\n        for (let i = 1; i < tmpKMeansBreaks.length; i += 2) {\n            const v = tmpKMeansBreaks[i];\n            if (!isNaN(v) && limits.indexOf(v) === -1) {\n                limits.push(v);\n            }\n        }\n    }\n    return limits;\n}\n","import Color from '../Color.js';\nimport '../ops/luminance.js';\n\nexport default (a, b) => {\n    // WCAG contrast ratio\n    // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef\n    a = new Color(a);\n    b = new Color(b);\n    const l1 = a.luminance();\n    const l2 = b.luminance();\n    return l1 > l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05);\n};\n","import Color from '../Color.js';\nimport mix from '../generator/mix.js';\n\n/**\n * @license\n *\n * The APCA contrast prediction algorithm is based of the formulas published\n * in the APCA-1.0.98G specification by Myndex. The specification is available at:\n * https://raw.githubusercontent.com/Myndex/apca-w3/master/images/APCAw3_0.1.17_APCA0.0.98G.svg\n *\n * Note that the APCA implementation is still beta, so please update to\n * future versions of chroma.js when they become available.\n *\n * You can read more about the APCA Readability Criterion at\n * https://readtech.org/ARC/\n */\n\n// constants\nconst W_offset = 0.027;\nconst P_in = 0.0005;\nconst P_out = 0.1;\nconst R_scale = 1.14;\nconst B_threshold = 0.022;\nconst B_exp = 1.414;\n\nexport default (text, bg) => {\n    // parse input colors\n    text = new Color(text);\n    bg = new Color(bg);\n    // if text color has alpha, blend against background\n    if (text.alpha() < 1) {\n        text = mix(bg, text, text.alpha(), 'rgb');\n    }\n    const l_text = lum(...text.rgb());\n    const l_bg = lum(...bg.rgb());\n\n    // soft clamp black levels\n    const Y_text =\n        l_text >= B_threshold\n            ? l_text\n            : l_text + Math.pow(B_threshold - l_text, B_exp);\n    const Y_bg =\n        l_bg >= B_threshold ? l_bg : l_bg + Math.pow(B_threshold - l_bg, B_exp);\n\n    // normal polarity (dark text on light background)\n    const S_norm = Math.pow(Y_bg, 0.56) - Math.pow(Y_text, 0.57);\n    // reverse polarity (light text on dark background)\n    const S_rev = Math.pow(Y_bg, 0.65) - Math.pow(Y_text, 0.62);\n    // clamp noise then scale\n    const C =\n        Math.abs(Y_bg - Y_text) < P_in\n            ? 0\n            : Y_text < Y_bg\n              ? S_norm * R_scale\n              : S_rev * R_scale;\n    // clamp minimum contrast then offset\n    const S_apc = Math.abs(C) < P_out ? 0 : C > 0 ? C - W_offset : C + W_offset;\n    // scale to 100\n    return S_apc * 100;\n};\n\nfunction lum(r, g, b) {\n    return (\n        0.2126729 * Math.pow(r / 255, 2.4) +\n        0.7151522 * Math.pow(g / 255, 2.4) +\n        0.072175 * Math.pow(b / 255, 2.4)\n    );\n}\n","import Color from '../Color.js';\nconst { sqrt, pow, min, max, atan2, abs, cos, sin, exp, PI } = Math;\n\nexport default function (a, b, Kl = 1, Kc = 1, Kh = 1) {\n    // Delta E (CIE 2000)\n    // see http://www.brucelindbloom.com/index.html?Eqn_DeltaE_CIE2000.html\n    var rad2deg = function (rad) {\n        return (360 * rad) / (2 * PI);\n    };\n    var deg2rad = function (deg) {\n        return (2 * PI * deg) / 360;\n    };\n    a = new Color(a);\n    b = new Color(b);\n    const [L1, a1, b1] = Array.from(a.lab());\n    const [L2, a2, b2] = Array.from(b.lab());\n    const avgL = (L1 + L2) / 2;\n    const C1 = sqrt(pow(a1, 2) + pow(b1, 2));\n    const C2 = sqrt(pow(a2, 2) + pow(b2, 2));\n    const avgC = (C1 + C2) / 2;\n    const G = 0.5 * (1 - sqrt(pow(avgC, 7) / (pow(avgC, 7) + pow(25, 7))));\n    const a1p = a1 * (1 + G);\n    const a2p = a2 * (1 + G);\n    const C1p = sqrt(pow(a1p, 2) + pow(b1, 2));\n    const C2p = sqrt(pow(a2p, 2) + pow(b2, 2));\n    const avgCp = (C1p + C2p) / 2;\n    const arctan1 = rad2deg(atan2(b1, a1p));\n    const arctan2 = rad2deg(atan2(b2, a2p));\n    const h1p = arctan1 >= 0 ? arctan1 : arctan1 + 360;\n    const h2p = arctan2 >= 0 ? arctan2 : arctan2 + 360;\n    const avgHp =\n        abs(h1p - h2p) > 180 ? (h1p + h2p + 360) / 2 : (h1p + h2p) / 2;\n    const T =\n        1 -\n        0.17 * cos(deg2rad(avgHp - 30)) +\n        0.24 * cos(deg2rad(2 * avgHp)) +\n        0.32 * cos(deg2rad(3 * avgHp + 6)) -\n        0.2 * cos(deg2rad(4 * avgHp - 63));\n    let deltaHp = h2p - h1p;\n    deltaHp =\n        abs(deltaHp) <= 180\n            ? deltaHp\n            : h2p <= h1p\n              ? deltaHp + 360\n              : deltaHp - 360;\n    deltaHp = 2 * sqrt(C1p * C2p) * sin(deg2rad(deltaHp) / 2);\n    const deltaL = L2 - L1;\n    const deltaCp = C2p - C1p;\n    const sl = 1 + (0.015 * pow(avgL - 50, 2)) / sqrt(20 + pow(avgL - 50, 2));\n    const sc = 1 + 0.045 * avgCp;\n    const sh = 1 + 0.015 * avgCp * T;\n    const deltaTheta = 30 * exp(-pow((avgHp - 275) / 25, 2));\n    const Rc = 2 * sqrt(pow(avgCp, 7) / (pow(avgCp, 7) + pow(25, 7)));\n    const Rt = -Rc * sin(2 * deg2rad(deltaTheta));\n    const result = sqrt(\n        pow(deltaL / (Kl * sl), 2) +\n            pow(deltaCp / (Kc * sc), 2) +\n            pow(deltaHp / (Kh * sh), 2) +\n            Rt * (deltaCp / (Kc * sc)) * (deltaHp / (Kh * sh))\n    );\n    return max(0, min(100, result));\n}\n","import Color from '../Color.js';\n\n// simple Euclidean distance\nexport default function (a, b, mode = 'lab') {\n    // Delta E (CIE 1976)\n    // see http://www.brucelindbloom.com/index.html?Equations.html\n    a = new Color(a);\n    b = new Color(b);\n    const l1 = a.get(mode);\n    const l2 = b.get(mode);\n    let sum_sq = 0;\n    for (let i in l1) {\n        const d = (l1[i] || 0) - (l2[i] || 0);\n        sum_sq += d * d;\n    }\n    return Math.sqrt(sum_sq);\n}\n","import Color from '../Color.js';\n\nexport default (...args) => {\n    try {\n        new Color(...args);\n        return true;\n        // eslint-disable-next-line\n    } catch (e) {\n        return false;\n    }\n};\n","// some pre-defined color scales:\nimport chroma from '../chroma.js';\nimport '../io/hsl/index.js';\nimport scale from '../generator/scale.js';\n\nexport default {\n    cool() {\n        return scale([chroma.hsl(180, 1, 0.9), chroma.hsl(250, 0.7, 0.4)]);\n    },\n    hot() {\n        return scale(['#000', '#f00', '#ff0', '#fff'], [0, 0.25, 0.75, 1]).mode(\n            'rgb'\n        );\n    }\n};\n","/**\n    ColorBrewer colors for chroma.js\n\n    Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The\n    Pennsylvania State University.\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n    http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software distributed\n    under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n    CONDITIONS OF ANY KIND, either express or implied. See the License for the\n    specific language governing permissions and limitations under the License.\n*/\n\nconst colorbrewer = {\n    // sequential\n    OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'],\n    PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'],\n    BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'],\n    Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'],\n    BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'],\n    YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'],\n    YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'],\n    Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'],\n    RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'],\n    Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'],\n    YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'],\n    Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'],\n    GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'],\n    Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'],\n    YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'],\n    PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'],\n    Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'],\n    PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'],\n    Viridis: ['#440154', '#482777', '#3f4a8a', '#31678e', '#26838f', '#1f9d8a', '#6cce5a', '#b6de2b', '#fee825'],\n\n    // diverging\n    Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'],\n    RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'],\n    RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'],\n    PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'],\n    PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'],\n    RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'],\n    BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'],\n    RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'],\n    PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'],\n\n    // qualitative\n    Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'],\n    Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'],\n    Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'],\n    Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'],\n    Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'],\n    Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'],\n    Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'],\n    Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2']\n};\n\nconst colorbrewerTypes = Object.keys(colorbrewer);\nconst typeMap = new Map(colorbrewerTypes.map((key) => [key.toLowerCase(), key]));\n\n// use Proxy to allow case-insensitive access to palettes\nconst colorbrewerProxy =\n    typeof Proxy === 'function'\n        ? new Proxy(colorbrewer, {\n              get(target, prop) {\n                  const lower = prop.toLowerCase();\n                  if (typeMap.has(lower)) {\n                      return target[typeMap.get(lower)];\n                  }\n              },\n              getOwnPropertyNames() {\n                  return Object.getOwnPropertyNames(colorbrewerTypes);\n              }\n          })\n        : colorbrewer;\n\nexport default colorbrewerProxy;\n","import { unpack } from '../../utils/index.js';\n\nconst cmyk2rgb = (...args) => {\n    args = unpack(args, 'cmyk');\n    const [c, m, y, k] = args;\n    const alpha = args.length > 4 ? args[4] : 1;\n    if (k === 1) return [0, 0, 0, alpha];\n    return [\n        c >= 1 ? 0 : 255 * (1 - c) * (1 - k), // r\n        m >= 1 ? 0 : 255 * (1 - m) * (1 - k), // g\n        y >= 1 ? 0 : 255 * (1 - y) * (1 - k), // b\n        alpha\n    ];\n};\n\nexport default cmyk2rgb;\n","import { unpack } from '../../utils/index.js';\nconst { max } = Math;\n\nconst rgb2cmyk = (...args) => {\n    let [r, g, b] = unpack(args, 'rgb');\n    r = r / 255;\n    g = g / 255;\n    b = b / 255;\n    const k = 1 - max(r, max(g, b));\n    const f = k < 1 ? 1 / (1 - k) : 0;\n    const c = (1 - r - k) * f;\n    const m = (1 - g - k) * f;\n    const y = (1 - b - k) * f;\n    return [c, m, y, k];\n};\n\nexport default rgb2cmyk;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { unpack, type } from '../../utils/index.js';\nimport cmyk2rgb from './cmyk2rgb.js';\nimport rgb2cmyk from './rgb2cmyk.js';\n\nColor.prototype.cmyk = function () {\n    return rgb2cmyk(this._rgb);\n};\n\nconst cmyk = (...args) => new Color(...args, 'cmyk');\nObject.assign(chroma, { cmyk });\n\ninput.format.cmyk = cmyk2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'cmyk');\n        if (type(args) === 'array' && args.length === 4) {\n            return 'cmyk';\n        }\n    }\n});\n\nexport { cmyk };\n","import { unpack, last, rnd2 } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - hsl2css(h,s,l)\n * - hsl2css(h,s,l,a)\n * - hsl2css([h,s,l], mode)\n * - hsl2css([h,s,l,a], mode)\n * - hsl2css({h,s,l,a}, mode)\n */\nconst hsl2css = (...args) => {\n    const hsla = unpack(args, 'hsla');\n    let mode = last(args) || 'lsa';\n    hsla[0] = rnd2(hsla[0] || 0) + 'deg';\n    hsla[1] = rnd2(hsla[1] * 100) + '%';\n    hsla[2] = rnd2(hsla[2] * 100) + '%';\n    if (mode === 'hsla' || (hsla.length > 3 && hsla[3] < 1)) {\n        hsla[3] = '/ ' + (hsla.length > 3 ? hsla[3] : 1);\n        mode = 'hsla';\n    } else {\n        hsla.length = 3;\n    }\n    return `${mode.substr(0, 3)}(${hsla.join(' ')})`;\n};\n\nexport default hsl2css;\n","import { unpack, last, rnd2 } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - lab2css(l,a,b)\n * - lab2css(l,a,b,alpha)\n * - lab2css([l,a,b], mode)\n * - lab2css([l,a,b,alpha], mode)\n */\nconst lab2css = (...args) => {\n    const laba = unpack(args, 'lab');\n    let mode = last(args) || 'lab';\n    laba[0] = rnd2(laba[0]) + '%';\n    laba[1] = rnd2(laba[1]);\n    laba[2] = rnd2(laba[2]);\n    if (mode === 'laba' || (laba.length > 3 && laba[3] < 1)) {\n        laba[3] = '/ ' + (laba.length > 3 ? laba[3] : 1);\n    } else {\n        laba.length = 3;\n    }\n    return `lab(${laba.join(' ')})`;\n};\n\nexport default lab2css;\n","import { unpack, last, rnd2 } from '../../utils/index.js';\n\n/*\n * supported arguments:\n * - lab2css(l,a,b)\n * - lab2css(l,a,b,alpha)\n * - lab2css([l,a,b], mode)\n * - lab2css([l,a,b,alpha], mode)\n */\nconst lch2css = (...args) => {\n    const lcha = unpack(args, 'lch');\n    let mode = last(args) || 'lab';\n    lcha[0] = rnd2(lcha[0]) + '%';\n    lcha[1] = rnd2(lcha[1]);\n    lcha[2] = isNaN(lcha[2]) ? 'none' : rnd2(lcha[2]) + 'deg'; // add deg unit to hue\n    if (mode === 'lcha' || (lcha.length > 3 && lcha[3] < 1)) {\n        lcha[3] = '/ ' + (lcha.length > 3 ? lcha[3] : 1);\n    } else {\n        lcha.length = 3;\n    }\n    return `lch(${lcha.join(' ')})`;\n};\n\nexport default lch2css;\n","import { unpack, rnd2, rnd3 } from '../../utils/index.js';\n\nconst oklab2css = (...args) => {\n    const laba = unpack(args, 'lab');\n    laba[0] = rnd2(laba[0] * 100) + '%';\n    laba[1] = rnd3(laba[1]);\n    laba[2] = rnd3(laba[2]);\n    if (laba.length > 3 && laba[3] < 1) {\n        laba[3] = '/ ' + (laba.length > 3 ? laba[3] : 1);\n    } else {\n        laba.length = 3;\n    }\n    return `oklab(${laba.join(' ')})`;\n};\n\nexport default oklab2css;\n","import { unpack } from '../../utils/index.js';\nimport rgb2oklab from '../oklab/rgb2oklab.js';\nimport lab2lch from '../lch/lab2lch.js';\n\nconst rgb2oklch = (...args) => {\n    const [r, g, b, ...rest] = unpack(args, 'rgb');\n    const [l, a, b_] = rgb2oklab(r, g, b);\n    const [L, c, h] = lab2lch(l, a, b_);\n    return [L, c, h, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nexport default rgb2oklch;\n","import { unpack, rnd2, rnd3 } from '../../utils/index.js';\n\nconst oklch2css = (...args) => {\n    const lcha = unpack(args, 'lch');\n    lcha[0] = rnd2(lcha[0] * 100) + '%';\n    lcha[1] = rnd3(lcha[1]);\n    lcha[2] = isNaN(lcha[2]) ? 'none' : rnd2(lcha[2]) + 'deg'; // add deg unit to hue\n    if (lcha.length > 3 && lcha[3] < 1) {\n        lcha[3] = '/ ' + (lcha.length > 3 ? lcha[3] : 1);\n    } else {\n        lcha.length = 3;\n    }\n    return `oklch(${lcha.join(' ')})`;\n};\n\nexport default oklch2css;\n","import { unpack, last } from '../../utils/index.js';\nimport hsl2css from './hsl2css.js';\nimport rgb2hsl from '../hsl/rgb2hsl.js';\nimport lab2css from './lab2css.js';\nimport rgb2lab from '../lab/rgb2lab.js';\nimport lch2css from './lch2css.js';\nimport rgb2lch from '../lch/rgb2lch.js';\nimport rgb2oklab from '../oklab/rgb2oklab.js';\nimport oklab2css from './oklab2css.js';\nimport rgb2oklch from '../oklch/rgb2oklch.js';\nimport oklch2css from './oklch2css.js';\nimport { getLabWhitePoint, setLabWhitePoint } from '../lab/lab-constants.js';\nconst { round } = Math;\n\n/*\n * supported arguments:\n * - rgb2css(r,g,b)\n * - rgb2css(r,g,b,a)\n * - rgb2css([r,g,b], mode)\n * - rgb2css([r,g,b,a], mode)\n * - rgb2css({r,g,b,a}, mode)\n */\nconst rgb2css = (...args) => {\n    const rgba = unpack(args, 'rgba');\n    let mode = last(args) || 'rgb';\n    if (mode.substr(0, 3) === 'hsl') {\n        return hsl2css(rgb2hsl(rgba), mode);\n    }\n    if (mode.substr(0, 3) === 'lab') {\n        // change to D50 lab whitepoint since this is what W3C is using for CSS Lab colors\n        const prevWhitePoint = getLabWhitePoint();\n        setLabWhitePoint('d50');\n        const cssColor = lab2css(rgb2lab(rgba), mode);\n        setLabWhitePoint(prevWhitePoint);\n        return cssColor;\n    }\n    if (mode.substr(0, 3) === 'lch') {\n        // change to D50 lab whitepoint since this is what W3C is using for CSS Lab colors\n        const prevWhitePoint = getLabWhitePoint();\n        setLabWhitePoint('d50');\n        const cssColor = lch2css(rgb2lch(rgba), mode);\n        setLabWhitePoint(prevWhitePoint);\n        return cssColor;\n    }\n    if (mode.substr(0, 5) === 'oklab') {\n        return oklab2css(rgb2oklab(rgba));\n    }\n    if (mode.substr(0, 5) === 'oklch') {\n        return oklch2css(rgb2oklch(rgba));\n    }\n    rgba[0] = round(rgba[0]);\n    rgba[1] = round(rgba[1]);\n    rgba[2] = round(rgba[2]);\n    if (mode === 'rgba' || (rgba.length > 3 && rgba[3] < 1)) {\n        rgba[3] = '/ ' + (rgba.length > 3 ? rgba[3] : 1);\n        mode = 'rgba';\n    }\n    return `${mode.substr(0, 3)}(${rgba.slice(0, mode === 'rgb' ? 3 : 4).join(' ')})`;\n};\n\nexport default rgb2css;\n","import { unpack } from '../../utils/index.js';\nimport lch2lab from '../lch/lch2lab.js';\nimport oklab2rgb from '../oklab/oklab2rgb.js';\n\nconst oklch2rgb = (...args) => {\n    args = unpack(args, 'lch');\n    const [l, c, h, ...rest] = args;\n    const [L, a, b_] = lch2lab(l, c, h);\n    const [r, g, b] = oklab2rgb(L, a, b_);\n    return [r, g, b, ...(rest.length > 0 && rest[0] < 1 ? [rest[0]] : [])];\n};\n\nexport default oklch2rgb;\n","import hsl2rgb from '../hsl/hsl2rgb.js';\nimport lab2rgb from '../lab/lab2rgb.js';\nimport lch2rgb from '../lch/lch2rgb.js';\nimport oklab2rgb from '../oklab/oklab2rgb.js';\nimport oklch2rgb from '../oklch/oklch2rgb.js';\nimport input from '../input.js';\nimport limit from '../../utils/limit.js';\nimport { getLabWhitePoint, setLabWhitePoint } from '../lab/lab-constants.js';\n\nconst INT_OR_PCT = /((?:-?\\d+)|(?:-?\\d+(?:\\.\\d+)?)%|none)/.source;\nconst FLOAT_OR_PCT = /((?:-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)%?)|none)/.source;\nconst PCT = /((?:-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)%)|none)/.source;\nconst RE_S = /\\s*/.source;\nconst SEP = /\\s+/.source;\nconst COMMA = /\\s*,\\s*/.source;\nconst ANLGE = /((?:-?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:deg)?)|none)/.source;\nconst ALPHA = /\\s*(?:\\/\\s*((?:[01]|[01]?\\.\\d+)|\\d+(?:\\.\\d+)?%))?/.source;\n\n// e.g. rgb(250 20 0), rgb(100% 50% 20%), rgb(100% 50% 20% / 0.5)\nconst RE_RGB = new RegExp(\n    '^rgba?\\\\(' +\n        RE_S +\n        [INT_OR_PCT, INT_OR_PCT, INT_OR_PCT].join(SEP) +\n        ALPHA +\n        '\\\\)$'\n);\nconst RE_RGB_LEGACY = new RegExp(\n    '^rgb\\\\(' +\n        RE_S +\n        [INT_OR_PCT, INT_OR_PCT, INT_OR_PCT].join(COMMA) +\n        RE_S +\n        '\\\\)$'\n);\nconst RE_RGBA_LEGACY = new RegExp(\n    '^rgba\\\\(' +\n        RE_S +\n        [INT_OR_PCT, INT_OR_PCT, INT_OR_PCT, FLOAT_OR_PCT].join(COMMA) +\n        RE_S +\n        '\\\\)$'\n);\n\nconst RE_HSL = new RegExp(\n    '^hsla?\\\\(' + RE_S + [ANLGE, PCT, PCT].join(SEP) + ALPHA + '\\\\)$'\n);\nconst RE_HSL_LEGACY = new RegExp(\n    '^hsl?\\\\(' + RE_S + [ANLGE, PCT, PCT].join(COMMA) + RE_S + '\\\\)$'\n);\nconst RE_HSLA_LEGACY =\n    /^hsla\\(\\s*(-?\\d+(?:\\.\\d+)?),\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*(-?\\d+(?:\\.\\d+)?)%\\s*,\\s*([01]|[01]?\\.\\d+)\\)$/;\n\nconst RE_LAB = new RegExp(\n    '^lab\\\\(' +\n        RE_S +\n        [FLOAT_OR_PCT, FLOAT_OR_PCT, FLOAT_OR_PCT].join(SEP) +\n        ALPHA +\n        '\\\\)$'\n);\nconst RE_LCH = new RegExp(\n    '^lch\\\\(' +\n        RE_S +\n        [FLOAT_OR_PCT, FLOAT_OR_PCT, ANLGE].join(SEP) +\n        ALPHA +\n        '\\\\)$'\n);\nconst RE_OKLAB = new RegExp(\n    '^oklab\\\\(' +\n        RE_S +\n        [FLOAT_OR_PCT, FLOAT_OR_PCT, FLOAT_OR_PCT].join(SEP) +\n        ALPHA +\n        '\\\\)$'\n);\nconst RE_OKLCH = new RegExp(\n    '^oklch\\\\(' +\n        RE_S +\n        [FLOAT_OR_PCT, FLOAT_OR_PCT, ANLGE].join(SEP) +\n        ALPHA +\n        '\\\\)$'\n);\n\nconst { round } = Math;\n\nconst roundRGB = (rgb) => {\n    return rgb.map((v, i) => (i <= 2 ? limit(round(v), 0, 255) : v));\n};\n\nconst percentToAbsolute = (pct, min = 0, max = 100, signed = false) => {\n    if (typeof pct === 'string' && pct.endsWith('%')) {\n        pct = parseFloat(pct.substring(0, pct.length - 1)) / 100;\n        if (signed) {\n            // signed percentages are in the range -100% to 100%\n            pct = min + (pct + 1) * 0.5 * (max - min);\n        } else {\n            pct = min + pct * (max - min);\n        }\n    }\n    return +pct;\n};\n\nconst noneToValue = (v, noneValue) => {\n    return v === 'none' ? noneValue : v;\n};\n\nconst css2rgb = (css) => {\n    css = css.toLowerCase().trim();\n\n    if (css === 'transparent') {\n        return [0, 0, 0, 0];\n    }\n\n    let m;\n\n    if (input.format.named) {\n        try {\n            return input.format.named(css);\n            // eslint-disable-next-line\n        } catch (e) {}\n    }\n\n    // rgb(250 20 0) or rgb(250,20,0)\n    if ((m = css.match(RE_RGB)) || (m = css.match(RE_RGB_LEGACY))) {\n        let rgb = m.slice(1, 4);\n        for (let i = 0; i < 3; i++) {\n            rgb[i] = +percentToAbsolute(noneToValue(rgb[i], 0), 0, 255);\n        }\n        rgb = roundRGB(rgb);\n        const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n        rgb[3] = alpha; // default alpha\n        return rgb;\n    }\n\n    // rgba(250,20,0,0.4)\n    if ((m = css.match(RE_RGBA_LEGACY))) {\n        const rgb = m.slice(1, 5);\n        for (let i = 0; i < 4; i++) {\n            rgb[i] = +percentToAbsolute(rgb[i], 0, 255);\n        }\n        return rgb;\n    }\n\n    // hsl(0,100%,50%)\n    if ((m = css.match(RE_HSL)) || (m = css.match(RE_HSL_LEGACY))) {\n        const hsl = m.slice(1, 4);\n        hsl[0] = +noneToValue(hsl[0].replace('deg', ''), 0);\n        hsl[1] = +percentToAbsolute(noneToValue(hsl[1], 0), 0, 100) * 0.01;\n        hsl[2] = +percentToAbsolute(noneToValue(hsl[2], 0), 0, 100) * 0.01;\n        const rgb = roundRGB(hsl2rgb(hsl));\n        const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n        rgb[3] = alpha;\n        return rgb;\n    }\n\n    // hsla(0,100%,50%,0.5)\n    if ((m = css.match(RE_HSLA_LEGACY))) {\n        const hsl = m.slice(1, 4);\n        hsl[1] *= 0.01;\n        hsl[2] *= 0.01;\n        const rgb = hsl2rgb(hsl);\n        for (let i = 0; i < 3; i++) {\n            rgb[i] = round(rgb[i]);\n        }\n        rgb[3] = +m[4]; // default alpha = 1\n        return rgb;\n    }\n\n    if ((m = css.match(RE_LAB))) {\n        const lab = m.slice(1, 4);\n        lab[0] = percentToAbsolute(noneToValue(lab[0], 0), 0, 100);\n        lab[1] = percentToAbsolute(noneToValue(lab[1], 0), -125, 125, true);\n        lab[2] = percentToAbsolute(noneToValue(lab[2], 0), -125, 125, true);\n        // convert to D50 Lab whitepoint\n        const wp = getLabWhitePoint();\n        setLabWhitePoint('d50');\n        const rgb = roundRGB(lab2rgb(lab));\n        // convert back to original Lab whitepoint\n        setLabWhitePoint(wp);\n        const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n        rgb[3] = alpha;\n        return rgb;\n    }\n\n    if ((m = css.match(RE_LCH))) {\n        const lch = m.slice(1, 4);\n        lch[0] = percentToAbsolute(lch[0], 0, 100);\n        lch[1] = percentToAbsolute(noneToValue(lch[1], 0), 0, 150, false);\n        lch[2] = +noneToValue(lch[2].replace('deg', ''), 0);\n        // convert to D50 Lab whitepoint\n        const wp = getLabWhitePoint();\n        setLabWhitePoint('d50');\n        const rgb = roundRGB(lch2rgb(lch));\n        // convert back to original Lab whitepoint\n        setLabWhitePoint(wp);\n        const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n        rgb[3] = alpha;\n        return rgb;\n    }\n\n    if ((m = css.match(RE_OKLAB))) {\n        const oklab = m.slice(1, 4);\n        oklab[0] = percentToAbsolute(noneToValue(oklab[0], 0), 0, 1);\n        oklab[1] = percentToAbsolute(noneToValue(oklab[1], 0), -0.4, 0.4, true);\n        oklab[2] = percentToAbsolute(noneToValue(oklab[2], 0), -0.4, 0.4, true);\n        const rgb = roundRGB(oklab2rgb(oklab));\n        const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n        rgb[3] = alpha;\n        return rgb;\n    }\n\n    if ((m = css.match(RE_OKLCH))) {\n        const oklch = m.slice(1, 4);\n        oklch[0] = percentToAbsolute(noneToValue(oklch[0], 0), 0, 1);\n        oklch[1] = percentToAbsolute(noneToValue(oklch[1], 0), 0, 0.4, false);\n        oklch[2] = +noneToValue(oklch[2].replace('deg', ''), 0);\n        const rgb = roundRGB(oklch2rgb(oklch));\n        const alpha = m[4] !== undefined ? +percentToAbsolute(m[4], 0, 1) : 1;\n        rgb[3] = alpha;\n        return rgb;\n    }\n};\n\ncss2rgb.test = (s) => {\n    return (\n        // modern\n        RE_RGB.test(s) ||\n        RE_HSL.test(s) ||\n        RE_LAB.test(s) ||\n        RE_LCH.test(s) ||\n        RE_OKLAB.test(s) ||\n        RE_OKLCH.test(s) ||\n        // legacy\n        RE_RGB_LEGACY.test(s) ||\n        RE_RGBA_LEGACY.test(s) ||\n        RE_HSL_LEGACY.test(s) ||\n        RE_HSLA_LEGACY.test(s) ||\n        s === 'transparent'\n    );\n};\n\nexport default css2rgb;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport { type } from '../../utils/index.js';\n\nimport rgb2css from './rgb2css.js';\nimport css2rgb from './css2rgb.js';\n\nColor.prototype.css = function (mode) {\n    return rgb2css(this._rgb, mode);\n};\n\nconst css = (...args) => new Color(...args, 'css');\nchroma.css = css;\n\ninput.format.css = css2rgb;\n\ninput.autodetect.push({\n    p: 5,\n    test: (h, ...rest) => {\n        if (!rest.length && type(h) === 'string' && css2rgb.test(h)) {\n            return 'css';\n        }\n    }\n});\n\nexport { css };\n","import Color from '../../Color.js';\nimport chroma from '../../chroma.js';\nimport input from '../input.js';\nimport { unpack } from '../../utils/index.js';\n\ninput.format.gl = (...args) => {\n    const rgb = unpack(args, 'rgba');\n    rgb[0] *= 255;\n    rgb[1] *= 255;\n    rgb[2] *= 255;\n    return rgb;\n};\n\nconst gl = (...args) => new Color(...args, 'gl');\nchroma.gl = gl;\n\nColor.prototype.gl = function () {\n    const rgb = this._rgb;\n    return [rgb[0] / 255, rgb[1] / 255, rgb[2] / 255, rgb[3]];\n};\n\nexport { gl };\n","import Color from '../../Color.js';\nimport chroma from '../../chroma.js';\nimport { type } from '../../utils/index.js';\nimport input from '../input.js';\nimport hex2rgb from './hex2rgb.js';\nimport rgb2hex from './rgb2hex.js';\n\nColor.prototype.hex = function (mode) {\n    return rgb2hex(this._rgb, mode);\n};\n\nconst hex = (...args) => new Color(...args, 'hex');\nchroma.hex = hex;\n\ninput.format.hex = hex2rgb;\ninput.autodetect.push({\n    p: 4,\n    test: (h, ...rest) => {\n        if (\n            !rest.length &&\n            type(h) === 'string' &&\n            [3, 4, 5, 6, 7, 8, 9].indexOf(h.length) >= 0\n        ) {\n            return 'hex';\n        }\n    }\n});\n\nexport { hex };\n","/*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n */\n\nconst { log } = Math;\n\nconst temperature2rgb = (kelvin) => {\n    const temp = kelvin / 100;\n    let r, g, b;\n    if (temp < 66) {\n        r = 255;\n        g =\n            temp < 6\n                ? 0\n                : -155.25485562709179 -\n                  0.44596950469579133 * (g = temp - 2) +\n                  104.49216199393888 * log(g);\n        b =\n            temp < 20\n                ? 0\n                : -254.76935184120902 +\n                  0.8274096064007395 * (b = temp - 10) +\n                  115.67994401066147 * log(b);\n    } else {\n        r =\n            351.97690566805693 +\n            0.114206453784165 * (r = temp - 55) -\n            40.25366309332127 * log(r);\n        g =\n            325.4494125711974 +\n            0.07943456536662342 * (g = temp - 50) -\n            28.0852963507957 * log(g);\n        b = 255;\n    }\n    return [r, g, b, 1];\n};\n\nexport default temperature2rgb;\n","/*\n * Based on implementation by Neil Bartlett\n * https://github.com/neilbartlett/color-temperature\n **/\n\nimport temperature2rgb from './temperature2rgb.js';\nimport { unpack } from '../../utils/index.js';\nconst { round } = Math;\n\nconst rgb2temperature = (...args) => {\n    const rgb = unpack(args, 'rgb');\n    const r = rgb[0],\n        b = rgb[2];\n    let minTemp = 1000;\n    let maxTemp = 40000;\n    const eps = 0.4;\n    let temp;\n    while (maxTemp - minTemp > eps) {\n        temp = (maxTemp + minTemp) * 0.5;\n        const rgb = temperature2rgb(temp);\n        if (rgb[2] / rgb[0] >= b / r) {\n            maxTemp = temp;\n        } else {\n            minTemp = temp;\n        }\n    }\n    return round(temp);\n};\n\nexport default rgb2temperature;\n","import chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport temperature2rgb from './temperature2rgb.js';\nimport rgb2temperature from './rgb2temperature.js';\n\nColor.prototype.temp =\n    Color.prototype.kelvin =\n    Color.prototype.temperature =\n        function () {\n            return rgb2temperature(this._rgb);\n        };\n\nconst temp = (...args) => new Color(...args, 'temp');\nObject.assign(chroma, { temp, kelvin: temp, temperature: temp });\n\ninput.format.temp =\n    input.format.kelvin =\n    input.format.temperature =\n        temperature2rgb;\n\nexport { temp, temp as kelvin, temp as temperature };\n","import { unpack, type } from '../../utils/index.js';\nimport chroma from '../../chroma.js';\nimport Color from '../../Color.js';\nimport input from '../input.js';\nimport oklch2rgb from './oklch2rgb.js';\nimport rgb2oklch from './rgb2oklch.js';\n\nColor.prototype.oklch = function () {\n    return rgb2oklch(this._rgb);\n};\n\nconst oklch = (...args) => new Color(...args, 'oklch');\nObject.assign(chroma, { oklch });\n\ninput.format.oklch = oklch2rgb;\n\ninput.autodetect.push({\n    p: 2,\n    test: (...args) => {\n        args = unpack(args, 'oklch');\n        if (type(args) === 'array' && args.length === 3) {\n            return 'oklch';\n        }\n    }\n});\n\nexport { oklch };\n","// feel free to comment out anything to rollup\n// a smaller chroma.js bundle\nimport chroma from './src/chroma.js';\n\n// io --> convert colors\nimport './src/io/named/index.js';\n\n// operators --> modify existing Colors\nimport './src/ops/alpha.js';\nimport './src/ops/clipped.js';\nimport './src/ops/darken.js';\nimport './src/ops/get.js';\nimport './src/ops/luminance.js';\nimport './src/ops/mix.js';\nimport './src/ops/premultiply.js';\nimport './src/ops/saturate.js';\nimport './src/ops/set.js';\nimport './src/ops/shade.js';\n\n// interpolators\nimport './src/interpolator/rgb.js';\nimport './src/interpolator/lrgb.js';\nimport './src/interpolator/lab.js';\nimport './src/interpolator/lch.js';\nimport './src/interpolator/num.js';\nimport './src/interpolator/hcg.js';\nimport './src/interpolator/hsi.js';\nimport './src/interpolator/hsl.js';\nimport './src/interpolator/hsv.js';\nimport './src/interpolator/oklab.js';\nimport './src/interpolator/oklch.js';\n\n// generators -- > create new colors\nimport average from './src/generator/average.js';\nimport bezier from './src/generator/bezier.js';\nimport blend from './src/generator/blend.js';\nimport cubehelix from './src/generator/cubehelix.js';\nimport mix from './src/generator/mix.js';\nimport random from './src/generator/random.js';\nimport scale from './src/generator/scale.js';\n\n// other utility methods\nimport { analyze } from './src/utils/analyze.js';\nimport contrast from './src/utils/contrast.js';\nimport contrastAPCA from './src/utils/contrastAPCA.js';\nimport deltaE from './src/utils/delta-e.js';\nimport distance from './src/utils/distance.js';\nimport { limits } from './src/utils/analyze.js';\nimport valid from './src/utils/valid.js';\nimport input from './src/io/input.js';\n\n// scale\nimport scales from './src/utils/scales.js';\n\n// colors\nimport colors from './src/colors/w3cx11.js';\nimport brewer from './src/colors/colorbrewer.js';\nimport Color from './src/Color.js';\n\nObject.assign(chroma, {\n    analyze,\n    average,\n    bezier,\n    blend,\n    brewer,\n    Color,\n    colors,\n    contrast,\n    contrastAPCA,\n    cubehelix,\n    deltaE,\n    distance,\n    input,\n    interpolate: mix,\n    limits,\n    mix,\n    random,\n    scale,\n    scales,\n    valid\n});\n\nexport default chroma;\n\nexport {\n    analyze,\n    average,\n    bezier,\n    blend,\n    brewer,\n    Color,\n    colors,\n    contrast,\n    contrastAPCA,\n    cubehelix,\n    deltaE,\n    distance,\n    input,\n    limits,\n    mix,\n    mix as interpolate,\n    random,\n    scale,\n    scales,\n    valid\n};\n\nexport * from './src/io/cmyk/index.js';\nexport * from './src/io/css/index.js';\nexport * from './src/io/gl/index.js';\nexport * from './src/io/hcg/index.js';\nexport * from './src/io/hex/index.js';\nexport * from './src/io/hsi/index.js';\nexport * from './src/io/hsl/index.js';\nexport * from './src/io/hsv/index.js';\nexport * from './src/io/lab/index.js';\nexport * from './src/io/lch/index.js';\nexport * from './src/io/num/index.js';\nexport * from './src/io/rgb/index.js';\nexport * from './src/io/temp/index.js';\nexport * from './src/io/oklab/index.js';\nexport * from './src/io/oklch/index.js';\n","import UZIP from \"uzip\";\nimport { IndexedPolyhedron } from \"./common\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport chroma from \"chroma-js\";\n\nfunction getColorMapping(colors: chroma.Color[], projectedColors: chroma.Color[]): number[] {\n    const projectedLabs = projectedColors.map(c => c.lab());\n\n    return colors.map((targetColor, i) => {\n        const targetLab = targetColor.lab();\n\n        let closestIndex = 0;\n        let minDelta = Infinity;\n        projectedLabs.forEach((projectedLab, index) => {\n            const deltaL = targetLab[0] - projectedLab[0];\n            const deltaA = targetLab[1] - projectedLab[1];\n            const deltaB = targetLab[2] - projectedLab[2];\n            const d = Math.sqrt(deltaL * deltaL + deltaA * deltaA + deltaB * deltaB);\n            if (d < minDelta) {\n                minDelta = d;\n                closestIndex = index;\n            }\n        });\n        return closestIndex;\n    });\n}\n\n// Reverse-engineered from PrusaSlicer / BambuStudio's output.\nconst PAINT_COLOR_MAP = ['', '8', '0C', '1C', '2C', '3C', '4C', '5C', '6C', '7C', '8C', '9C', 'AC', 'BC', 'CC', 'DC'];\n\nexport function export3MF(data: IndexedPolyhedron, extruderColors?: chroma.Color[]): Blob {\n    const objectUuid = uuidv4();\n    const buildUuid = uuidv4();\n\n    const dataColors = data.colors.map(([r, g, b, a]) => chroma.rgb(r*255, g*255, b*255, a*255));\n    const extruderIndexByColorIndex = extruderColors &&\n        getColorMapping(dataColors, extruderColors);\n\n    if (extruderColors) {\n        console.log('Extruder colors:');\n        for (const c of extruderColors) {\n            console.log(`- ${c.name()}`);\n        }\n        console.log('Model color mapping:');\n        dataColors.forEach((from, i) => {\n            const extruderIndex = extruderIndexByColorIndex![i];\n            const to = extruderColors[extruderIndex];\n            console.log(`- ${from.name()} -> ${to?.name()} (${PAINT_COLOR_MAP[extruderIndex]})`);\n        });\n    }\n\n    const paintColorByColorIndex = extruderIndexByColorIndex?.map(i => PAINT_COLOR_MAP[i]);\n    \n    const archive = {\n        '3D/3dmodel.model': new TextEncoder().encode([\n            '<?xml version=\"1.0\" encoding=\"utf-8\"?>',\n            '<model unit=\"millimeter\" xml:lang=\"en-US\" xmlns=\"http://schemas.microsoft.com/3dmanufacturing/core/2015/02\" xmlns:p=\"http://schemas.microsoft.com/3dmanufacturing/production/2015/06\">',\n                '<meta name=\"BambuStudio:3mfVersion\" value=\"1\"/>',\n                '<meta name=\"slic3rpe:Version3mf\" value=\"1\"/>',\n                '<meta name=\"slic3rpe:MmPaintingVersion\" value=\"1\"/>',\n                '<resources>',\n                    '<basematerials id=\"2\">',\n                    ...data.colors.map((color, i) => `<base name=\"color_${i}\" displaycolor=\"${chroma.rgb(...color).hex()}\"/>`),\n                    '</basematerials>',\n                    `<object id=\"1\" name=\"OpenSCAD Model\" type=\"model\" p:UUID=\"${objectUuid}\" pid=\"2\" pindex=\"0\">`,\n                        '<mesh>',\n                            '<vertices>',\n                                ...data.vertices.map((vertex, i) => `<vertex x=\"${vertex.x}\" y=\"${vertex.y}\" z=\"${vertex.z}\" />`),\n                            '</vertices>',\n                            '<triangles>',\n                                ...data.faces.map((face, i) => {\n                                    const { vertices, colorIndex } = face;\n                                    if (vertices.length != 3) throw new Error('Face must have 3 vertices');\n                                    const attrs = vertices.map((v, i) => `v${i + 1}=\"${v}\"`);\n                                    if (colorIndex > 0) {\n                                        attrs.push(`pid=\"2\" p1=\"${colorIndex}\"`);\n                                    }\n                                    const paintColor = paintColorByColorIndex && paintColorByColorIndex[colorIndex];\n                                    if (paintColor) {\n                                        attrs.push(`paint_color=\"${paintColor}\"`);\n                                    }\n                                    return `<triangle ${attrs.join(' ')} />`;\n                                }),\n                            '</triangles>',\n                        '</mesh>',\n                    '</object>',\n                '</resources>',\n                `<build p:UUID=\"${buildUuid}}\">`,\n                    `<item objectid=\"1\" p:UUID=\"${objectUuid}\"/>`,\n                '</build>',\n            '</model>',\n        ].join('\\n')),\n        '[Content_Types].xml': new TextEncoder().encode([\n            '<?xml version=\"1.0\" encoding=\"utf-8\"?>',\n            '<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">',\n                '<Default Extension=\"model\" ContentType=\"application/vnd.ms-package.3dmanufacturing-3dmodel+xml\"/>',\n            '</Types>',\n        ].join('\\n')),\n        '_rels/.rels': new TextEncoder().encode([\n            '<?xml version=\"1.0\" encoding=\"utf-8\"?>',\n            '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">',\n            '<Relationship Type=\"http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel\" Target=\"/3D/3dmodel.model\" Id=\"rel0\"/>',\n            '</Relationships>',\n        ].join('\\n')),\n    };\n    return new Blob([UZIP.encode(archive)], {type: 'model/3mf'});\n}\n\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport { checkSyntax, render, RenderArgs, RenderOutput } from \"../runner/actions.ts\";\nimport { MultiLayoutComponentId, SingleLayoutComponentId, State, StatePersister } from \"./app-state.ts\";\nimport { VALID_EXPORT_FORMATS_2D, VALID_EXPORT_FORMATS_3D } from './formats.ts';\nimport { bubbleUpDeepMutations } from \"./deep-mutate.ts\";\nimport { downloadUrl, fetchSource, formatBytes, formatMillis, readFileAsDataURL } from '../utils.ts'\nimport { CustomizerValue, CustomizerValuePrimitive, CustomizerValues, ParameterSet } from './customizer-types.ts';\n\nimport JSZip from 'jszip';\nimport { ProcessStreams } from \"../runner/openscad-runner.ts\";\nimport { is2DFormatExtension } from \"./formats.ts\";\nimport { parseOff } from \"../io/import_off.ts\";\nimport { exportGlb } from \"../io/export_glb.ts\";\nimport { export3MF } from \"../io/export_3mf.ts\";\nimport chroma from \"chroma-js\";\n\nconst githubRx = /^https:\\/\\/github.com\\/([^/]+)\\/([^/]+)\\/blob\\/(.+)$/;\n\nfunction valuesEqual(a: CustomizerValuePrimitive | undefined, b: CustomizerValuePrimitive | undefined) {\n  if (Array.isArray(a) && Array.isArray(b)) {\n    if (a.length !== b.length) return false;\n    return a.every((value, index) => value === b[index]);\n  }\n  return a === b;\n}\n\nexport function buildCustomizerValues(\n  parameterSet: ParameterSet | undefined,\n  vars: State['params']['vars'] | undefined\n): CustomizerValues {\n  const values: CustomizerValues = {};\n  if (!parameterSet) {\n    return values;\n  }\n\n  for (const parameter of parameterSet.parameters ?? []) {\n    const currentValue = vars?.[parameter.name];\n    const entry: CustomizerValue = {\n      value: currentValue ?? parameter.initial,\n      type: parameter.type,\n      initial: parameter.initial,\n      group: parameter.group,\n      caption: parameter.caption,\n    };\n\n    if ('min' in parameter) {\n      entry.min = parameter.min;\n    }\n    if ('max' in parameter) {\n      entry.max = parameter.max;\n    }\n    if ('step' in parameter) {\n      entry.step = parameter.step;\n    }\n    if ('options' in parameter && parameter.options) {\n      entry.options = parameter.options;\n    }\n\n    values[parameter.name] = entry;\n  }\n\n  return values;\n}\n\nexport class Model {\n  constructor(private fs: FS, public state: State, private setStateCallback?: (state: State) => void, \n    private statePersister?: StatePersister) {\n  }\n  \n  init() {\n    if (!this.state.output && !this.state.lastCheckerRun && !this.state.previewing && !this.state.checkingSyntax && !this.state.rendering) {\n      this.processSource();\n    }\n  }\n\n  private setState(state: State) {\n    this.state = state;\n    this.statePersister && this.statePersister.set(state);\n    this.setStateCallback && this.setStateCallback(state);\n  }\n\n  mutate(f: (state: State) => void) {\n    const mutated = bubbleUpDeepMutations(this.state, f);\n    // No matter how deep the mutation happened, the top-level object's identity\n    // will have changed iff the mutated values are different.\n    if (mutated !== this.state) {\n      this.setState(mutated);\n      return true;\n    }\n\n    return false;\n  }\n\n  setFormats(\n      exportFormat2D: keyof typeof VALID_EXPORT_FORMATS_2D | undefined,\n      exportFormat3D: keyof typeof VALID_EXPORT_FORMATS_3D | undefined) {\n    this.mutate(s => {\n      if (exportFormat2D != null) s.params.exportFormat2D = exportFormat2D;\n      if (exportFormat3D != null) s.params.exportFormat3D = exportFormat3D;\n    });\n  }\n  setVar(name: string, value: CustomizerValuePrimitive) {\n    this.setVars({[name]: value});\n  }\n\n  setVars(vars: Record<string, CustomizerValuePrimitive>) {\n    if (!vars || Object.keys(vars).length === 0) {\n      return;\n    }\n\n    const changed = this.mutate(s => {\n      const currentVars = s.params.vars ?? {};\n      let updatedVars = currentVars;\n\n      for (const [key, newValue] of Object.entries(vars)) {\n        if (valuesEqual(currentVars[key], newValue)) {\n          continue;\n        }\n\n        if (updatedVars === currentVars) {\n          updatedVars = {...currentVars};\n        }\n\n        updatedVars[key] = newValue;\n      }\n\n      if (updatedVars !== currentVars) {\n        s.params.vars = updatedVars;\n      }\n    });\n\n    if (changed) {\n      this.render({isPreview: true, now: false});\n    }\n  }\n\n  set logsVisible(value: boolean) {\n    if (value) {\n      if (this.state.view.layout.mode === 'single') {\n        this.changeSingleVisibility('editor');\n      } else {\n        this.changeMultiVisibility('editor', true);  \n      }\n    }\n    this.mutate(s => s.view.logs = value);\n  }\n\n  isComponentFullyVisible(id: SingleLayoutComponentId) {\n    if (this.state.view.layout.mode === 'multi') {\n      return this.state.view.layout[id];\n    } else {\n      return this.state.view.layout.focus === id;\n    }\n  }\n\n  changeLayout(mode: 'multi' | 'single') {\n    if (this.state.view.layout.mode === mode) return;\n    this.mutate(s => {\n      s.view.layout = s.view.layout.mode === 'multi'\n        ? {\n          mode: 'single',\n          focus: s.view.layout.editor ? 'editor' : s.view.layout.viewer ? 'viewer' : 'customizer'\n        }\n        : {\n          mode: 'multi',\n          editor: s.view.layout.focus === 'editor',\n          viewer: s.view.layout.focus === 'viewer',\n          customizer: s.view.layout.focus === 'customizer',\n        }\n    });\n  }\n  changeSingleVisibility(focus: SingleLayoutComponentId) {\n    this.mutate(s => {\n      if (s.view.layout.mode !== 'single') throw new Error('Wrong mode');\n      s.view.layout.focus = focus;\n      if (focus !== 'editor') {\n        s.view.logs = false;\n      }\n    });\n  }\n\n  changeMultiVisibility(target: MultiLayoutComponentId, visible: boolean) {\n    this.mutate(s => {\n      if (s.view.layout.mode !== 'multi') throw new Error('Wrong mode');\n      s.view.layout[target] = visible\n      if ((s.view.layout.customizer ? 1 : 0) + (s.view.layout.editor ? 1 : 0) + (s.view.layout.viewer ? 1 : 0) == 0) {\n        // Select at least one panel\n        // s.view.layout.editor = true;\n        s.view.layout[target] = !visible;\n        if (target === 'editor' && !visible) {\n          s.view.logs = false;\n        }\n      }\n    })\n  }\n\n  openFile(path: string) {\n    // console.log(`openFile: ${path}`);\n    if (this.mutate(s => {\n      if (s.params.activePath != path) {\n        const readSource = (path: string) => {\n          try {\n            return new TextDecoder(\"utf-8\").decode(this.fs.readFileSync(path));\n          } catch (e) {\n            console.error('Error while reading file:', e);\n            return '';\n          }\n        };\n        // Remove source of previous active path if it's unmodified\n        const activePathContent = readSource(s.params.activePath);\n        s.params.sources = s.params.sources.filter(src => src.path !== s.params.activePath || src.content != activePathContent);\n\n        s.params.activePath = path;\n        if (!s.params.sources.find(src => src.path === path)) {\n          const content = readSource(path);\n          s.params.sources = [...s.params.sources, {path, content}];\n        }\n        s.lastCheckerRun = undefined;\n        s.output = undefined;\n        s.export = undefined;\n        s.preview = undefined;\n        s.currentRunLogs = undefined;\n        s.error = undefined;\n        s.is2D = undefined;\n        console.log('Opened file:', path);\n      }\n    })) {\n      this.processSource();\n    }\n  }\n\n  get source(): string {\n    return this.state.params.sources.find(src => src.path === this.state.params.activePath)?.content ?? '';\n  }\n  set source(source: string) {\n    if (this.mutate(s => s.params.sources = s.params.sources.map(src => src.path === s.params.activePath ? {path: src.path, content: source} : src))) {\n      this.processSource();\n    }\n  }\n\n  private async processSource() {\n    let src = this.state.params.sources.find(src => src.path === this.state.params.activePath);\n    if (src && src.content == null) {\n      let {path, url} = src;\n      // Transform https://github.com/tenstad/keyboard/blob/main/keyboard.scad to https://raw.githubusercontent.com/tenstad/keyboard/refs/heads/main/keyboard.scad\n      let match;\n      if (url && (match = url.match(githubRx))) {\n        url = `https://raw.githubusercontent.com/${match[1]}/${match[2]}/refs/heads/${match[3]}`;\n      }\n      const content = new TextDecoder().decode(await fetchSource(this.fs, {path, url}));\n      this.mutate(s => {\n        s.params.sources = s.params.sources.map(src => src.path === s.params.activePath ? {...src, content} : src);\n      });\n    }\n    if (this.source.trim() !== '') {\n      if (this.state.params.activePath.endsWith('.scad')) {\n        this.checkSyntax();\n      }\n      this.render({isPreview: true, now: false});\n    }\n  }\n\n  async checkSyntax() {\n    this.mutate(s => s.checkingSyntax = true);\n    try {\n      const checkerRun = await checkSyntax({\n        activePath: this.state.params.activePath,\n        sources: this.state.params.sources,\n      })({now: false});\n      this.mutate(s => {\n        s.lastCheckerRun = checkerRun;\n        s.parameterSet = checkerRun?.parameterSet;\n        s.checkingSyntax = false;\n      });\n    } catch (err) {\n      console.error('Error while checking syntax:', err)\n    }\n  }\n\n  rawStreamsCallback(ps: ProcessStreams) {\n    this.mutate(s => {\n      if ('stdout' in ps) {\n        s.currentRunLogs?.push(['stdout', ps.stdout]);\n      } else {\n        s.currentRunLogs?.push(['stderr', ps.stderr]);\n      }\n    });\n  }\n\n  async export() {\n    if (this.state.output) {\n      const normalPassThrough = \n        (this.state.is2D && this.state.params.exportFormat2D === 'svg')\n        || (!this.state.is2D && this.state.params.exportFormat3D === 'off');\n\n      const glbPassThrough =\n        (!this.state.is2D && this.state.params.exportFormat3D === 'glb')\n        && (this.state.output.displayFile?.name.endsWith('.glb') ?? false)\n        && (this.state.output.displayFileURL != null);\n\n      if (normalPassThrough || glbPassThrough) {\n        this.mutate(s => s.export = s.output);\n        if (glbPassThrough) {\n          downloadUrl(this.state.output.displayFileURL!, this.state.output.displayFile!.name);\n        } else {\n          downloadUrl(this.state.output.outFileURL, this.state.output.outFile.name);\n        }\n        return;\n      }\n    }\n    if (!this.state.is2D && this.state.params.exportFormat3D == '3mf' && !this.state.params.extruderColors) {\n      this.mutate(s => this.state.view.extruderPickerVisibility = 'exporting');\n      return;\n    }\n    this.mutate(s => {\n      s.currentRunLogs ??= [];\n      s.exporting = true;\n    });\n\n    if (!this.state.output?.outFile || !this.state.output?.outFileURL) {\n      throw new Error('No output file to export');\n    }\n\n    const {features, exportFormat2D, exportFormat3D} = this.state.params;\n    const exportFormat = this.state.is2D ? exportFormat2D : exportFormat3D;\n\n    try {\n      let output: RenderOutput;\n      if (exportFormat === '3mf') {\n        const start = performance.now();\n        const data = parseOff(await this.state.output.outFile.text());\n        const exportedData = export3MF(data, this.state.params.extruderColors?.map(c => chroma(c)));\n        const elapsedMillis = performance.now() - start;\n        output = {\n          outFile: new File([exportedData], this.state.output.outFile.name.replace('.off', '.3mf')),\n          elapsedMillis,\n          logText: '',\n          markers: [],\n        };\n      } else {\n        output = await render({\n          mountArchives: false,\n          scadPath: '/export.scad',\n          sources: [\n            {\n              path: '/export.scad',\n              content: `import(\"${this.state.output?.outFile.name}\");`\n            },\n            {\n              path: this.state.output?.outFile.name,\n              url: this.state.output?.outFileURL,\n            }\n          ],\n          extraArgs: [], isPreview: false,\n          features,\n          renderFormat: exportFormat,\n          streamsCallback: ps => console.log('Export', JSON.stringify(ps)),\n        })({now: true});\n      }\n      \n      const outFileURL = URL.createObjectURL(output.outFile);\n      this.mutate(s => {\n        s.exporting = false;\n        if (s.export?.outFileURL?.startsWith('blob:') ?? false) {\n          URL.revokeObjectURL(s.export!.outFileURL);\n        }\n        s.export = {\n          outFile: output.outFile,\n          outFileURL,\n          elapsedMillis: output.elapsedMillis,\n          formattedElapsedMillis: formatMillis(output.elapsedMillis),\n          formattedOutFileSize: formatBytes(output.outFile.size),\n        };\n        downloadUrl(s.export.outFileURL, output.outFile.name);\n      });\n    } catch (err) {\n      this.mutate(s => {\n        s.exporting = false;\n        console.error('Error while exporting:', err)\n        s.error = `${err}`;\n      });\n    }\n  }\n\n  async saveProject() {\n    if (this.state.params.sources.length == 1) {\n      const content = this.state.params.sources[0].content;\n      const contentBytes = new TextEncoder().encode(content);\n      const blob = new Blob([contentBytes], {type: 'text/plain'});\n      const file = new File([blob], this.state.params.activePath.split('/').pop()!);\n      downloadUrl(URL.createObjectURL(file), file.name);\n    } else {\n      const zip = new JSZip();\n      for (const source of this.state.params.sources) {\n        let path = source.path\n        if (path.startsWith('/')) {\n          path = path.substring(1);\n        }\n        zip.file(path, await fetchSource(this.fs, source));\n      }\n      zip.generateAsync({type: 'blob'}).then(blob => {\n        const file = new File([blob], 'project.zip');\n        downloadUrl(URL.createObjectURL(file), file.name);\n      });\n    }\n  }\n\n  async render({isPreview, mountArchives, now, retryInOtherDim}: {isPreview: boolean, mountArchives?: boolean, now: boolean, retryInOtherDim?: boolean}) {\n    // console.log(JSON.stringify(this.state, null, 2));\n    mountArchives ??= true;\n    retryInOtherDim ??= true;\n    const setRendering = (s: State, value: boolean) => {\n      if (isPreview) {\n        s.previewing = value;\n      } else {\n        s.rendering = value;\n      }\n    }\n    this.mutate(s => {\n      s.currentRunLogs = [];\n      setRendering(s, true);\n    });\n\n    let {\n      activePath,\n      sources,\n      vars,\n      features,\n    } = this.state.params;\n\n    let is2D = this.state.is2D;\n\n    const extension = activePath.split('.').pop() ?? '';\n    if (!activePath.endsWith('.scad')) {\n      const resourcePath = activePath;\n      const loaderPath = '/load-resource.scad';\n      is2D = is2DFormatExtension(extension);\n      \n      mountArchives = false;\n      activePath = loaderPath;\n      sources = [\n        {\n          path: activePath,\n          content: `${is2D ? 'linear_extrude(1) ' : ''} import(\"${resourcePath}\");`,\n        },\n        ...sources.filter(s => s.path === resourcePath),\n      ];\n    }\n\n    const renderArgs: RenderArgs = {\n      mountArchives,\n      scadPath: activePath,\n      sources,\n      vars,\n      features,\n      isPreview,\n      renderFormat: this.state.is2D ? 'svg' : 'off',\n      streamsCallback: this.rawStreamsCallback.bind(this)\n    };\n    try {\n      let output = await render(renderArgs)({now});\n      let displayFile = output.outFile;\n      if (output.outFile.name.endsWith('.svg') || output.outFile.name.endsWith('.dxf')) {\n        is2D = true;\n        const fn = output.outFile.name;\n        const extrudedOutput = await render({\n          mountArchives: false,\n          scadPath: '/extruded.scad',\n          sources: [\n            {\n              path: '/extruded.scad',\n              content: `linear_extrude(0.1) import(\"${fn}\");`,\n            },\n            {\n              path: `/${fn}`,\n              url: await readFileAsDataURL(output.outFile),\n            },\n          ],\n          vars: {},\n          features,\n          isPreview: false,\n          renderFormat: 'off',\n          streamsCallback: this.rawStreamsCallback.bind(this)\n        })({now});\n        displayFile = extrudedOutput.outFile;\n      } else {\n        is2D = false;\n      }\n      if (displayFile.name.endsWith('.off')) {\n        const offData = parseOff(await displayFile.text());\n        const includeBuildPlate = this.state.view.showBuildPlate ?? true;\n        displayFile = new File([await exportGlb(offData, undefined, includeBuildPlate)], displayFile.name.replace('.off', '.glb'));\n      }\n      const outFileURL = URL.createObjectURL(output.outFile);\n      const displayFileURL = displayFile && await readFileAsDataURL(displayFile);\n      this.mutate(s => {\n        setRendering(s, false);\n        s.error = undefined;\n        s.is2D = is2D;\n        s.lastCheckerRun = {\n          logText: output.logText,\n          markers: output.markers,\n        }\n        if (s.output?.outFileURL?.startsWith('blob:') ?? false) {\n          URL.revokeObjectURL(s.output!.outFileURL);\n        }\n        if (s.output?.displayFileURL?.startsWith('blob:') ?? false) {\n          URL.revokeObjectURL(s.output!.displayFileURL!);\n        }\n\n        s.output = {\n          isPreview: isPreview,\n          outFile: output.outFile,\n          outFileURL,\n          displayFile,\n          displayFileURL,\n          elapsedMillis: output.elapsedMillis,\n          formattedElapsedMillis: formatMillis(output.elapsedMillis),\n          formattedOutFileSize: formatBytes(output.outFile.size),\n        };\n\n        if (!isPreview) {\n          const audio = document.getElementById('complete-sound') as HTMLAudioElement;\n          audio?.play();\n        }\n      });\n    } catch (err) {\n      this.mutate(s => {\n        setRendering(s, false);\n        console.error('Error while doing ' + (isPreview ? 'preview' : 'rendering') + ':', err)\n        s.error = `${err}`;\n      });\n    }\n    if (retryInOtherDim) {\n      let is2D: boolean | undefined;\n      let is3D: boolean | undefined;\n      let isMixed: boolean | undefined;\n      for (const [pipe, line] of this.state.currentRunLogs ?? []) {\n        if (line == 'Current top level object is not a 3D object.') {\n          is3D = false;\n        } else if (line == 'Top level object is a 3D object:') {\n          is3D = true;\n        } else if (line == 'Current top level object is not a 2D object.') {\n          is2D = false;\n        } else if (line == 'Top level object is a 2D object:') {\n          is2D = true;\n        } else if (line.includes('WARNING: Mixing 2D and 3D objects is not supported')) {\n          isMixed = true;\n        }\n      }\n      if (is2D === false || is3D === false) {//} || isMixed !== undefined) {\n        this.mutate(s => s.is2D = !(is2D === false));\n        this.render({isPreview, now: true, retryInOtherDim: false});\n        return;\n      }\n    }\n  }\n}\n","function _arrayLikeToArray(r, a) {\n  (null == a || a > r.length) && (a = r.length);\n  for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];\n  return n;\n}\nfunction _arrayWithHoles(r) {\n  if (Array.isArray(r)) return r;\n}\nfunction _defineProperty(e, r, t) {\n  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: true,\n    configurable: true,\n    writable: true\n  }) : e[r] = t, e;\n}\nfunction _iterableToArrayLimit(r, l) {\n  var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n  if (null != t) {\n    var e,\n      n,\n      i,\n      u,\n      a = [],\n      f = true,\n      o = false;\n    try {\n      if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n    } catch (r) {\n      o = true, n = r;\n    } finally {\n      try {\n        if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;\n      } finally {\n        if (o) throw n;\n      }\n    }\n    return a;\n  }\n}\nfunction _nonIterableRest() {\n  throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nfunction ownKeys(e, r) {\n  var t = Object.keys(e);\n  if (Object.getOwnPropertySymbols) {\n    var o = Object.getOwnPropertySymbols(e);\n    r && (o = o.filter(function (r) {\n      return Object.getOwnPropertyDescriptor(e, r).enumerable;\n    })), t.push.apply(t, o);\n  }\n  return t;\n}\nfunction _objectSpread2(e) {\n  for (var r = 1; r < arguments.length; r++) {\n    var t = null != arguments[r] ? arguments[r] : {};\n    r % 2 ? ownKeys(Object(t), true).forEach(function (r) {\n      _defineProperty(e, r, t[r]);\n    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n      Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n    });\n  }\n  return e;\n}\nfunction _objectWithoutProperties(e, t) {\n  if (null == e) return {};\n  var o,\n    r,\n    i = _objectWithoutPropertiesLoose(e, t);\n  if (Object.getOwnPropertySymbols) {\n    var n = Object.getOwnPropertySymbols(e);\n    for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);\n  }\n  return i;\n}\nfunction _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nfunction _slicedToArray(r, e) {\n  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r);\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}\nfunction _unsupportedIterableToArray(r, a) {\n  if (r) {\n    if (\"string\" == typeof r) return _arrayLikeToArray(r, a);\n    var t = {}.toString.call(r).slice(8, -1);\n    return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;\n  }\n}\n\nexport { _arrayLikeToArray as arrayLikeToArray, _arrayWithHoles as arrayWithHoles, _defineProperty as defineProperty, _iterableToArrayLimit as iterableToArrayLimit, _nonIterableRest as nonIterableRest, _objectSpread2 as objectSpread2, _objectWithoutProperties as objectWithoutProperties, _objectWithoutPropertiesLoose as objectWithoutPropertiesLoose, _slicedToArray as slicedToArray, _toPrimitive as toPrimitive, _toPropertyKey as toPropertyKey, _unsupportedIterableToArray as unsupportedIterableToArray };\n","function _defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n  var keys = Object.keys(object);\n\n  if (Object.getOwnPropertySymbols) {\n    var symbols = Object.getOwnPropertySymbols(object);\n    if (enumerableOnly) symbols = symbols.filter(function (sym) {\n      return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n    });\n    keys.push.apply(keys, symbols);\n  }\n\n  return keys;\n}\n\nfunction _objectSpread2(target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i] != null ? arguments[i] : {};\n\n    if (i % 2) {\n      ownKeys(Object(source), true).forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    } else if (Object.getOwnPropertyDescriptors) {\n      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n    } else {\n      ownKeys(Object(source)).forEach(function (key) {\n        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n      });\n    }\n  }\n\n  return target;\n}\n\nfunction compose() {\n  for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n    fns[_key] = arguments[_key];\n  }\n\n  return function (x) {\n    return fns.reduceRight(function (y, f) {\n      return f(y);\n    }, x);\n  };\n}\n\nfunction curry(fn) {\n  return function curried() {\n    var _this = this;\n\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    return args.length >= fn.length ? fn.apply(this, args) : function () {\n      for (var _len3 = arguments.length, nextArgs = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n        nextArgs[_key3] = arguments[_key3];\n      }\n\n      return curried.apply(_this, [].concat(args, nextArgs));\n    };\n  };\n}\n\nfunction isObject(value) {\n  return {}.toString.call(value).includes('Object');\n}\n\nfunction isEmpty(obj) {\n  return !Object.keys(obj).length;\n}\n\nfunction isFunction(value) {\n  return typeof value === 'function';\n}\n\nfunction hasOwnProperty(object, property) {\n  return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nfunction validateChanges(initial, changes) {\n  if (!isObject(changes)) errorHandler('changeType');\n  if (Object.keys(changes).some(function (field) {\n    return !hasOwnProperty(initial, field);\n  })) errorHandler('changeField');\n  return changes;\n}\n\nfunction validateSelector(selector) {\n  if (!isFunction(selector)) errorHandler('selectorType');\n}\n\nfunction validateHandler(handler) {\n  if (!(isFunction(handler) || isObject(handler))) errorHandler('handlerType');\n  if (isObject(handler) && Object.values(handler).some(function (_handler) {\n    return !isFunction(_handler);\n  })) errorHandler('handlersType');\n}\n\nfunction validateInitial(initial) {\n  if (!initial) errorHandler('initialIsRequired');\n  if (!isObject(initial)) errorHandler('initialType');\n  if (isEmpty(initial)) errorHandler('initialContent');\n}\n\nfunction throwError(errorMessages, type) {\n  throw new Error(errorMessages[type] || errorMessages[\"default\"]);\n}\n\nvar errorMessages = {\n  initialIsRequired: 'initial state is required',\n  initialType: 'initial state should be an object',\n  initialContent: 'initial state shouldn\\'t be an empty object',\n  handlerType: 'handler should be an object or a function',\n  handlersType: 'all handlers should be a functions',\n  selectorType: 'selector should be a function',\n  changeType: 'provided value of changes should be an object',\n  changeField: 'it seams you want to change a field in the state which is not specified in the \"initial\" state',\n  \"default\": 'an unknown error accured in `state-local` package'\n};\nvar errorHandler = curry(throwError)(errorMessages);\nvar validators = {\n  changes: validateChanges,\n  selector: validateSelector,\n  handler: validateHandler,\n  initial: validateInitial\n};\n\nfunction create(initial) {\n  var handler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  validators.initial(initial);\n  validators.handler(handler);\n  var state = {\n    current: initial\n  };\n  var didUpdate = curry(didStateUpdate)(state, handler);\n  var update = curry(updateState)(state);\n  var validate = curry(validators.changes)(initial);\n  var getChanges = curry(extractChanges)(state);\n\n  function getState() {\n    var selector = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function (state) {\n      return state;\n    };\n    validators.selector(selector);\n    return selector(state.current);\n  }\n\n  function setState(causedChanges) {\n    compose(didUpdate, update, validate, getChanges)(causedChanges);\n  }\n\n  return [getState, setState];\n}\n\nfunction extractChanges(state, causedChanges) {\n  return isFunction(causedChanges) ? causedChanges(state.current) : causedChanges;\n}\n\nfunction updateState(state, changes) {\n  state.current = _objectSpread2(_objectSpread2({}, state.current), changes);\n  return changes;\n}\n\nfunction didStateUpdate(state, handler, changes) {\n  isFunction(handler) ? handler(state.current) : Object.keys(changes).forEach(function (field) {\n    var _handler$field;\n\n    return (_handler$field = handler[field]) === null || _handler$field === void 0 ? void 0 : _handler$field.call(handler, state.current[field]);\n  });\n  return changes;\n}\n\nvar index = {\n  create: create\n};\n\nexport default index;\n","var config = {\n  paths: {\n    vs: 'https://cdn.jsdelivr.net/npm/monaco-editor@0.55.1/min/vs'\n  }\n};\n\nexport { config as default };\n","function curry(fn) {\n  return function curried() {\n    var _this = this;\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return args.length >= fn.length ? fn.apply(this, args) : function () {\n      for (var _len2 = arguments.length, nextArgs = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n        nextArgs[_key2] = arguments[_key2];\n      }\n      return curried.apply(_this, [].concat(args, nextArgs));\n    };\n  };\n}\n\nexport { curry as default };\n","function isObject(value) {\n  return {}.toString.call(value).includes('Object');\n}\n\nexport { isObject as default };\n","import curry from '../utils/curry.js';\nimport isObject from '../utils/isObject.js';\n\n/**\n * validates the configuration object and informs about deprecation\n * @param {Object} config - the configuration object \n * @return {Object} config - the validated configuration object\n */\nfunction validateConfig(config) {\n  if (!config) errorHandler('configIsRequired');\n  if (!isObject(config)) errorHandler('configType');\n  if (config.urls) {\n    informAboutDeprecation();\n    return {\n      paths: {\n        vs: config.urls.monacoBase\n      }\n    };\n  }\n  return config;\n}\n\n/**\n * logs deprecation message\n */\nfunction informAboutDeprecation() {\n  console.warn(errorMessages.deprecation);\n}\nfunction throwError(errorMessages, type) {\n  throw new Error(errorMessages[type] || errorMessages[\"default\"]);\n}\nvar errorMessages = {\n  configIsRequired: 'the configuration object is required',\n  configType: 'the configuration object should be an object',\n  \"default\": 'an unknown error accured in `@monaco-editor/loader` package',\n  deprecation: \"Deprecation warning!\\n    You are using deprecated way of configuration.\\n\\n    Instead of using\\n      monaco.config({ urls: { monacoBase: '...' } })\\n    use\\n      monaco.config({ paths: { vs: '...' } })\\n\\n    For more please check the link https://github.com/suren-atoyan/monaco-loader#config\\n  \"\n};\nvar errorHandler = curry(throwError)(errorMessages);\nvar validators = {\n  config: validateConfig\n};\n\nexport { validators as default, errorHandler, errorMessages };\n","var compose = function compose() {\n  for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {\n    fns[_key] = arguments[_key];\n  }\n  return function (x) {\n    return fns.reduceRight(function (y, f) {\n      return f(y);\n    }, x);\n  };\n};\n\nexport { compose as default };\n","import { objectSpread2 as _objectSpread2 } from '../_virtual/_rollupPluginBabelHelpers.js';\n\nfunction merge(target, source) {\n  Object.keys(source).forEach(function (key) {\n    if (source[key] instanceof Object) {\n      if (target[key]) {\n        Object.assign(source[key], merge(target[key], source[key]));\n      }\n    }\n  });\n  return _objectSpread2(_objectSpread2({}, target), source);\n}\n\nexport { merge as default };\n","// The source (has been changed) is https://github.com/facebook/react/issues/5465#issuecomment-157888325\n\nvar CANCELATION_MESSAGE = {\n  type: 'cancelation',\n  msg: 'operation is manually canceled'\n};\nfunction makeCancelable(promise) {\n  var hasCanceled_ = false;\n  var wrappedPromise = new Promise(function (resolve, reject) {\n    promise.then(function (val) {\n      return hasCanceled_ ? reject(CANCELATION_MESSAGE) : resolve(val);\n    });\n    promise[\"catch\"](reject);\n  });\n  return wrappedPromise.cancel = function () {\n    return hasCanceled_ = true;\n  }, wrappedPromise;\n}\n\nexport { CANCELATION_MESSAGE, makeCancelable as default };\n","import { slicedToArray as _slicedToArray, objectWithoutProperties as _objectWithoutProperties } from '../_virtual/_rollupPluginBabelHelpers.js';\nimport state from 'state-local';\nimport config$1 from '../config/index.js';\nimport validators from '../validators/index.js';\nimport compose from '../utils/compose.js';\nimport merge from '../utils/deepMerge.js';\nimport makeCancelable from '../utils/makeCancelable.js';\n\nvar _excluded = [\"monaco\"];\n\n/** the local state of the module */\nvar _state$create = state.create({\n    config: config$1,\n    isInitialized: false,\n    resolve: null,\n    reject: null,\n    monaco: null\n  }),\n  _state$create2 = _slicedToArray(_state$create, 2),\n  getState = _state$create2[0],\n  setState = _state$create2[1];\n\n/**\n * set the loader configuration\n * @param {Object} config - the configuration object\n */\nfunction config(globalConfig) {\n  var _validators$config = validators.config(globalConfig),\n    monaco = _validators$config.monaco,\n    config = _objectWithoutProperties(_validators$config, _excluded);\n  setState(function (state) {\n    return {\n      config: merge(state.config, config),\n      monaco: monaco\n    };\n  });\n}\n\n/**\n * handles the initialization of the monaco-editor\n * @return {Promise} - returns an instance of monaco (with a cancelable promise)\n */\nfunction init() {\n  var state = getState(function (_ref) {\n    var monaco = _ref.monaco,\n      isInitialized = _ref.isInitialized,\n      resolve = _ref.resolve;\n    return {\n      monaco: monaco,\n      isInitialized: isInitialized,\n      resolve: resolve\n    };\n  });\n  if (!state.isInitialized) {\n    setState({\n      isInitialized: true\n    });\n    if (state.monaco) {\n      state.resolve(state.monaco);\n      return makeCancelable(wrapperPromise);\n    }\n    if (window.monaco && window.monaco.editor) {\n      storeMonacoInstance(window.monaco);\n      state.resolve(window.monaco);\n      return makeCancelable(wrapperPromise);\n    }\n    compose(injectScripts, getMonacoLoaderScript)(configureLoader);\n  }\n  return makeCancelable(wrapperPromise);\n}\n\n/**\n * injects provided scripts into the document.body\n * @param {Object} script - an HTML script element\n * @return {Object} - the injected HTML script element\n */\nfunction injectScripts(script) {\n  return document.body.appendChild(script);\n}\n\n/**\n * creates an HTML script element with/without provided src\n * @param {string} [src] - the source path of the script\n * @return {Object} - the created HTML script element\n */\nfunction createScript(src) {\n  var script = document.createElement('script');\n  return src && (script.src = src), script;\n}\n\n/**\n * creates an HTML script element with the monaco loader src\n * @return {Object} - the created HTML script element\n */\nfunction getMonacoLoaderScript(configureLoader) {\n  var state = getState(function (_ref2) {\n    var config = _ref2.config,\n      reject = _ref2.reject;\n    return {\n      config: config,\n      reject: reject\n    };\n  });\n  var loaderScript = createScript(\"\".concat(state.config.paths.vs, \"/loader.js\"));\n  loaderScript.onload = function () {\n    return configureLoader();\n  };\n  loaderScript.onerror = state.reject;\n  return loaderScript;\n}\n\n/**\n * configures the monaco loader\n */\nfunction configureLoader() {\n  var state = getState(function (_ref3) {\n    var config = _ref3.config,\n      resolve = _ref3.resolve,\n      reject = _ref3.reject;\n    return {\n      config: config,\n      resolve: resolve,\n      reject: reject\n    };\n  });\n  var require = window.require;\n  require.config(state.config);\n  require(['vs/editor/editor.main'], function (loaded) {\n    var monaco = loaded.m /* for 0.53 & 0.54 */ || loaded /* for other versions */;\n    storeMonacoInstance(monaco);\n    state.resolve(monaco);\n  }, function (error) {\n    state.reject(error);\n  });\n}\n\n/**\n * store monaco instance in local state\n */\nfunction storeMonacoInstance(monaco) {\n  if (!getState().monaco) {\n    setState({\n      monaco: monaco\n    });\n  }\n}\n\n/**\n * internal helper function\n * extracts stored monaco instance\n * @return {Object|null} - the monaco instance\n */\nfunction __getMonacoInstance() {\n  return getState(function (_ref4) {\n    var monaco = _ref4.monaco;\n    return monaco;\n  });\n}\nvar wrapperPromise = new Promise(function (resolve, reject) {\n  return setState({\n    resolve: resolve,\n    reject: reject\n  });\n});\nvar loader = {\n  config: config,\n  init: init,\n  __getMonacoInstance: __getMonacoInstance\n};\n\nexport { loader as default };\n","import _t from\"@monaco-editor/loader\";import{memo as Te}from\"react\";import ke,{useState as re,useRef as S,useCallback as oe,useEffect as ne}from\"react\";import Se from\"@monaco-editor/loader\";import{memo as ye}from\"react\";import K from\"react\";var le={wrapper:{display:\"flex\",position:\"relative\",textAlign:\"initial\"},fullWidth:{width:\"100%\"},hide:{display:\"none\"}},v=le;import me from\"react\";var ae={container:{display:\"flex\",height:\"100%\",width:\"100%\",justifyContent:\"center\",alignItems:\"center\"}},Y=ae;function Me({children:e}){return me.createElement(\"div\",{style:Y.container},e)}var Z=Me;var $=Z;function Ee({width:e,height:r,isEditorReady:n,loading:t,_ref:a,className:m,wrapperProps:E}){return K.createElement(\"section\",{style:{...v.wrapper,width:e,height:r},...E},!n&&K.createElement($,null,t),K.createElement(\"div\",{ref:a,style:{...v.fullWidth,...!n&&v.hide},className:m}))}var ee=Ee;var H=ye(ee);import{useEffect as xe}from\"react\";function Ce(e){xe(e,[])}var k=Ce;import{useEffect as ge,useRef as Re}from\"react\";function he(e,r,n=!0){let t=Re(!0);ge(t.current||!n?()=>{t.current=!1}:e,r)}var l=he;function D(){}function h(e,r,n,t){return De(e,t)||be(e,r,n,t)}function De(e,r){return e.editor.getModel(te(e,r))}function be(e,r,n,t){return e.editor.createModel(r,n,t?te(e,t):void 0)}function te(e,r){return e.Uri.parse(r)}function Oe({original:e,modified:r,language:n,originalLanguage:t,modifiedLanguage:a,originalModelPath:m,modifiedModelPath:E,keepCurrentOriginalModel:g=!1,keepCurrentModifiedModel:N=!1,theme:x=\"light\",loading:P=\"Loading...\",options:y={},height:V=\"100%\",width:z=\"100%\",className:F,wrapperProps:j={},beforeMount:A=D,onMount:q=D}){let[M,O]=re(!1),[T,s]=re(!0),u=S(null),c=S(null),w=S(null),d=S(q),o=S(A),b=S(!1);k(()=>{let i=Se.init();return i.then(f=>(c.current=f)&&s(!1)).catch(f=>f?.type!==\"cancelation\"&&console.error(\"Monaco initialization: error:\",f)),()=>u.current?I():i.cancel()}),l(()=>{if(u.current&&c.current){let i=u.current.getOriginalEditor(),f=h(c.current,e||\"\",t||n||\"text\",m||\"\");f!==i.getModel()&&i.setModel(f)}},[m],M),l(()=>{if(u.current&&c.current){let i=u.current.getModifiedEditor(),f=h(c.current,r||\"\",a||n||\"text\",E||\"\");f!==i.getModel()&&i.setModel(f)}},[E],M),l(()=>{let i=u.current.getModifiedEditor();i.getOption(c.current.editor.EditorOption.readOnly)?i.setValue(r||\"\"):r!==i.getValue()&&(i.executeEdits(\"\",[{range:i.getModel().getFullModelRange(),text:r||\"\",forceMoveMarkers:!0}]),i.pushUndoStop())},[r],M),l(()=>{u.current?.getModel()?.original.setValue(e||\"\")},[e],M),l(()=>{let{original:i,modified:f}=u.current.getModel();c.current.editor.setModelLanguage(i,t||n||\"text\"),c.current.editor.setModelLanguage(f,a||n||\"text\")},[n,t,a],M),l(()=>{c.current?.editor.setTheme(x)},[x],M),l(()=>{u.current?.updateOptions(y)},[y],M);let L=oe(()=>{if(!c.current)return;o.current(c.current);let i=h(c.current,e||\"\",t||n||\"text\",m||\"\"),f=h(c.current,r||\"\",a||n||\"text\",E||\"\");u.current?.setModel({original:i,modified:f})},[n,r,a,e,t,m,E]),U=oe(()=>{!b.current&&w.current&&(u.current=c.current.editor.createDiffEditor(w.current,{automaticLayout:!0,...y}),L(),c.current?.editor.setTheme(x),O(!0),b.current=!0)},[y,x,L]);ne(()=>{M&&d.current(u.current,c.current)},[M]),ne(()=>{!T&&!M&&U()},[T,M,U]);function I(){let i=u.current?.getModel();g||i?.original?.dispose(),N||i?.modified?.dispose(),u.current?.dispose()}return ke.createElement(H,{width:z,height:V,isEditorReady:M,loading:P,_ref:w,className:F,wrapperProps:j})}var ie=Oe;var we=Te(ie);import{useState as Ie}from\"react\";import ce from\"@monaco-editor/loader\";function Pe(){let[e,r]=Ie(ce.__getMonacoInstance());return k(()=>{let n;return e||(n=ce.init(),n.then(t=>{r(t)})),()=>n?.cancel()}),e}var Le=Pe;import{memo as ze}from\"react\";import We,{useState as ue,useEffect as W,useRef as C,useCallback as _e}from\"react\";import Ne from\"@monaco-editor/loader\";import{useEffect as Ue,useRef as ve}from\"react\";function He(e){let r=ve();return Ue(()=>{r.current=e},[e]),r.current}var se=He;var _=new Map;function Ve({defaultValue:e,defaultLanguage:r,defaultPath:n,value:t,language:a,path:m,theme:E=\"light\",line:g,loading:N=\"Loading...\",options:x={},overrideServices:P={},saveViewState:y=!0,keepCurrentModel:V=!1,width:z=\"100%\",height:F=\"100%\",className:j,wrapperProps:A={},beforeMount:q=D,onMount:M=D,onChange:O,onValidate:T=D}){let[s,u]=ue(!1),[c,w]=ue(!0),d=C(null),o=C(null),b=C(null),L=C(M),U=C(q),I=C(),i=C(t),f=se(m),Q=C(!1),B=C(!1);k(()=>{let p=Ne.init();return p.then(R=>(d.current=R)&&w(!1)).catch(R=>R?.type!==\"cancelation\"&&console.error(\"Monaco initialization: error:\",R)),()=>o.current?pe():p.cancel()}),l(()=>{let p=h(d.current,e||t||\"\",r||a||\"\",m||n||\"\");p!==o.current?.getModel()&&(y&&_.set(f,o.current?.saveViewState()),o.current?.setModel(p),y&&o.current?.restoreViewState(_.get(m)))},[m],s),l(()=>{o.current?.updateOptions(x)},[x],s),l(()=>{!o.current||t===void 0||(o.current.getOption(d.current.editor.EditorOption.readOnly)?o.current.setValue(t):t!==o.current.getValue()&&(B.current=!0,o.current.executeEdits(\"\",[{range:o.current.getModel().getFullModelRange(),text:t,forceMoveMarkers:!0}]),o.current.pushUndoStop(),B.current=!1))},[t],s),l(()=>{let p=o.current?.getModel();p&&a&&d.current?.editor.setModelLanguage(p,a)},[a],s),l(()=>{g!==void 0&&o.current?.revealLine(g)},[g],s),l(()=>{d.current?.editor.setTheme(E)},[E],s);let X=_e(()=>{if(!(!b.current||!d.current)&&!Q.current){U.current(d.current);let p=m||n,R=h(d.current,t||e||\"\",r||a||\"\",p||\"\");o.current=d.current?.editor.create(b.current,{model:R,automaticLayout:!0,...x},P),y&&o.current.restoreViewState(_.get(p)),d.current.editor.setTheme(E),g!==void 0&&o.current.revealLine(g),u(!0),Q.current=!0}},[e,r,n,t,a,m,x,P,y,E,g]);W(()=>{s&&L.current(o.current,d.current)},[s]),W(()=>{!c&&!s&&X()},[c,s,X]),i.current=t,W(()=>{s&&O&&(I.current?.dispose(),I.current=o.current?.onDidChangeModelContent(p=>{B.current||O(o.current.getValue(),p)}))},[s,O]),W(()=>{if(s){let p=d.current.editor.onDidChangeMarkers(R=>{let G=o.current.getModel()?.uri;if(G&&R.find(J=>J.path===G.path)){let J=d.current.editor.getModelMarkers({resource:G});T?.(J)}});return()=>{p?.dispose()}}return()=>{}},[s,T]);function pe(){I.current?.dispose(),V?y&&_.set(m,o.current.saveViewState()):o.current.getModel()?.dispose(),o.current.dispose()}return We.createElement(H,{width:z,height:F,isEditorReady:s,loading:N,_ref:b,className:j,wrapperProps:A})}var fe=Ve;var de=ze(fe);var Ft=de;export{we as DiffEditor,de as Editor,Ft as default,_t as loader,Le as useMonaco};\n//# sourceMappingURL=index.mjs.map","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport * as monaco from 'monaco-editor/esm/vs/editor/editor.api';\n\nexport default {\n  lineNumbers: 'on',\n  scrollBeyondLastLine: false,\n  fontSize: 12,\n  language: 'openscad',\n  tabSize: 2,\n  wordWrap: 'on',\n  wrappingStrategy: 'advanced',\n  suggest: {\n    localityBonus: true,\n    showStatusBar: true,\n    preview: true,\n  },\n  codeLens: true,\n  wordBasedSuggestions: \"off\",\n} as monaco.editor.IStandaloneEditorConstructionOptions;\n","const common = {\n  black: '#000',\n  white: '#fff'\n};\nexport default common;","const red = {\n  50: '#ffebee',\n  100: '#ffcdd2',\n  200: '#ef9a9a',\n  300: '#e57373',\n  400: '#ef5350',\n  500: '#f44336',\n  600: '#e53935',\n  700: '#d32f2f',\n  800: '#c62828',\n  900: '#b71c1c',\n  A100: '#ff8a80',\n  A200: '#ff5252',\n  A400: '#ff1744',\n  A700: '#d50000'\n};\nexport default red;","const purple = {\n  50: '#f3e5f5',\n  100: '#e1bee7',\n  200: '#ce93d8',\n  300: '#ba68c8',\n  400: '#ab47bc',\n  500: '#9c27b0',\n  600: '#8e24aa',\n  700: '#7b1fa2',\n  800: '#6a1b9a',\n  900: '#4a148c',\n  A100: '#ea80fc',\n  A200: '#e040fb',\n  A400: '#d500f9',\n  A700: '#aa00ff'\n};\nexport default purple;","const blue = {\n  50: '#e3f2fd',\n  100: '#bbdefb',\n  200: '#90caf9',\n  300: '#64b5f6',\n  400: '#42a5f5',\n  500: '#2196f3',\n  600: '#1e88e5',\n  700: '#1976d2',\n  800: '#1565c0',\n  900: '#0d47a1',\n  A100: '#82b1ff',\n  A200: '#448aff',\n  A400: '#2979ff',\n  A700: '#2962ff'\n};\nexport default blue;","const lightBlue = {\n  50: '#e1f5fe',\n  100: '#b3e5fc',\n  200: '#81d4fa',\n  300: '#4fc3f7',\n  400: '#29b6f6',\n  500: '#03a9f4',\n  600: '#039be5',\n  700: '#0288d1',\n  800: '#0277bd',\n  900: '#01579b',\n  A100: '#80d8ff',\n  A200: '#40c4ff',\n  A400: '#00b0ff',\n  A700: '#0091ea'\n};\nexport default lightBlue;","const green = {\n  50: '#e8f5e9',\n  100: '#c8e6c9',\n  200: '#a5d6a7',\n  300: '#81c784',\n  400: '#66bb6a',\n  500: '#4caf50',\n  600: '#43a047',\n  700: '#388e3c',\n  800: '#2e7d32',\n  900: '#1b5e20',\n  A100: '#b9f6ca',\n  A200: '#69f0ae',\n  A400: '#00e676',\n  A700: '#00c853'\n};\nexport default green;","const orange = {\n  50: '#fff3e0',\n  100: '#ffe0b2',\n  200: '#ffcc80',\n  300: '#ffb74d',\n  400: '#ffa726',\n  500: '#ff9800',\n  600: '#fb8c00',\n  700: '#f57c00',\n  800: '#ef6c00',\n  900: '#e65100',\n  A100: '#ffd180',\n  A200: '#ffab40',\n  A400: '#ff9100',\n  A700: '#ff6d00'\n};\nexport default orange;","const grey = {\n  50: '#fafafa',\n  100: '#f5f5f5',\n  200: '#eeeeee',\n  300: '#e0e0e0',\n  400: '#bdbdbd',\n  500: '#9e9e9e',\n  600: '#757575',\n  700: '#616161',\n  800: '#424242',\n  900: '#212121',\n  A100: '#f5f5f5',\n  A200: '#eeeeee',\n  A400: '#bdbdbd',\n  A700: '#616161'\n};\nexport default grey;","/**\n * WARNING: Don't import this directly. It's imported by the code generated by\n * `@mui/interal-babel-plugin-minify-errors`. Make sure to always use string literals in `Error`\n * constructors to ensure the plugin works as expected. Supported patterns include:\n *   throw new Error('My message');\n *   throw new Error(`My message: ${foo}`);\n *   throw new Error(`My message: ${foo}` + 'another string');\n *   ...\n * @param {number} code\n */\nexport default function formatMuiErrorMessage(code, ...args) {\n  const url = new URL(`https://mui.com/production-error/?code=${code}`);\n  args.forEach(arg => url.searchParams.append('args[]', arg));\n  return `Minified MUI error #${code}; visit ${url} for the full message.`;\n}","export default '$$material';","function _extends() {\n  return _extends = Object.assign ? Object.assign.bind() : function (n) {\n    for (var e = 1; e < arguments.length; e++) {\n      var t = arguments[e];\n      for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n    }\n    return n;\n  }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","var isDevelopment = false;\n\n/*\n\nBased off glamor's StyleSheet, thanks Sunil ❤️\n\nhigh performance StyleSheet for css-in-js systems\n\n- uses multiple style tags behind the scenes for millions of rules\n- uses `insertRule` for appending in production for *much* faster performance\n\n// usage\n\nimport { StyleSheet } from '@emotion/sheet'\n\nlet styleSheet = new StyleSheet({ key: '', container: document.head })\n\nstyleSheet.insert('#box { border: 1px solid red; }')\n- appends a css rule into the stylesheet\n\nstyleSheet.flush()\n- empties the stylesheet of all its contents\n\n*/\n\nfunction sheetForTag(tag) {\n  if (tag.sheet) {\n    return tag.sheet;\n  } // this weirdness brought to you by firefox\n\n  /* istanbul ignore next */\n\n\n  for (var i = 0; i < document.styleSheets.length; i++) {\n    if (document.styleSheets[i].ownerNode === tag) {\n      return document.styleSheets[i];\n    }\n  } // this function should always return with a value\n  // TS can't understand it though so we make it stop complaining here\n\n\n  return undefined;\n}\n\nfunction createStyleElement(options) {\n  var tag = document.createElement('style');\n  tag.setAttribute('data-emotion', options.key);\n\n  if (options.nonce !== undefined) {\n    tag.setAttribute('nonce', options.nonce);\n  }\n\n  tag.appendChild(document.createTextNode(''));\n  tag.setAttribute('data-s', '');\n  return tag;\n}\n\nvar StyleSheet = /*#__PURE__*/function () {\n  // Using Node instead of HTMLElement since container may be a ShadowRoot\n  function StyleSheet(options) {\n    var _this = this;\n\n    this._insertTag = function (tag) {\n      var before;\n\n      if (_this.tags.length === 0) {\n        if (_this.insertionPoint) {\n          before = _this.insertionPoint.nextSibling;\n        } else if (_this.prepend) {\n          before = _this.container.firstChild;\n        } else {\n          before = _this.before;\n        }\n      } else {\n        before = _this.tags[_this.tags.length - 1].nextSibling;\n      }\n\n      _this.container.insertBefore(tag, before);\n\n      _this.tags.push(tag);\n    };\n\n    this.isSpeedy = options.speedy === undefined ? !isDevelopment : options.speedy;\n    this.tags = [];\n    this.ctr = 0;\n    this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets\n\n    this.key = options.key;\n    this.container = options.container;\n    this.prepend = options.prepend;\n    this.insertionPoint = options.insertionPoint;\n    this.before = null;\n  }\n\n  var _proto = StyleSheet.prototype;\n\n  _proto.hydrate = function hydrate(nodes) {\n    nodes.forEach(this._insertTag);\n  };\n\n  _proto.insert = function insert(rule) {\n    // the max length is how many rules we have per style tag, it's 65000 in speedy mode\n    // it's 1 in dev because we insert source maps that map a single rule to a location\n    // and you can only have one source map per style tag\n    if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {\n      this._insertTag(createStyleElement(this));\n    }\n\n    var tag = this.tags[this.tags.length - 1];\n\n    if (this.isSpeedy) {\n      var sheet = sheetForTag(tag);\n\n      try {\n        // this is the ultrafast version, works across browsers\n        // the big drawback is that the css won't be editable in devtools\n        sheet.insertRule(rule, sheet.cssRules.length);\n      } catch (e) {\n      }\n    } else {\n      tag.appendChild(document.createTextNode(rule));\n    }\n\n    this.ctr++;\n  };\n\n  _proto.flush = function flush() {\n    this.tags.forEach(function (tag) {\n      var _tag$parentNode;\n\n      return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag);\n    });\n    this.tags = [];\n    this.ctr = 0;\n  };\n\n  return StyleSheet;\n}();\n\nexport { StyleSheet };\n","export var MS = '-ms-'\nexport var MOZ = '-moz-'\nexport var WEBKIT = '-webkit-'\n\nexport var COMMENT = 'comm'\nexport var RULESET = 'rule'\nexport var DECLARATION = 'decl'\n\nexport var PAGE = '@page'\nexport var MEDIA = '@media'\nexport var IMPORT = '@import'\nexport var CHARSET = '@charset'\nexport var VIEWPORT = '@viewport'\nexport var SUPPORTS = '@supports'\nexport var DOCUMENT = '@document'\nexport var NAMESPACE = '@namespace'\nexport var KEYFRAMES = '@keyframes'\nexport var FONT_FACE = '@font-face'\nexport var COUNTER_STYLE = '@counter-style'\nexport var FONT_FEATURE_VALUES = '@font-feature-values'\nexport var LAYER = '@layer'\n","/**\n * @param {number}\n * @return {number}\n */\nexport var abs = Math.abs\n\n/**\n * @param {number}\n * @return {string}\n */\nexport var from = String.fromCharCode\n\n/**\n * @param {object}\n * @return {object}\n */\nexport var assign = Object.assign\n\n/**\n * @param {string} value\n * @param {number} length\n * @return {number}\n */\nexport function hash (value, length) {\n\treturn charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0\n}\n\n/**\n * @param {string} value\n * @return {string}\n */\nexport function trim (value) {\n\treturn value.trim()\n}\n\n/**\n * @param {string} value\n * @param {RegExp} pattern\n * @return {string?}\n */\nexport function match (value, pattern) {\n\treturn (value = pattern.exec(value)) ? value[0] : value\n}\n\n/**\n * @param {string} value\n * @param {(string|RegExp)} pattern\n * @param {string} replacement\n * @return {string}\n */\nexport function replace (value, pattern, replacement) {\n\treturn value.replace(pattern, replacement)\n}\n\n/**\n * @param {string} value\n * @param {string} search\n * @return {number}\n */\nexport function indexof (value, search) {\n\treturn value.indexOf(search)\n}\n\n/**\n * @param {string} value\n * @param {number} index\n * @return {number}\n */\nexport function charat (value, index) {\n\treturn value.charCodeAt(index) | 0\n}\n\n/**\n * @param {string} value\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function substr (value, begin, end) {\n\treturn value.slice(begin, end)\n}\n\n/**\n * @param {string} value\n * @return {number}\n */\nexport function strlen (value) {\n\treturn value.length\n}\n\n/**\n * @param {any[]} value\n * @return {number}\n */\nexport function sizeof (value) {\n\treturn value.length\n}\n\n/**\n * @param {any} value\n * @param {any[]} array\n * @return {any}\n */\nexport function append (value, array) {\n\treturn array.push(value), value\n}\n\n/**\n * @param {string[]} array\n * @param {function} callback\n * @return {string}\n */\nexport function combine (array, callback) {\n\treturn array.map(callback).join('')\n}\n","import {from, trim, charat, strlen, substr, append, assign} from './Utility.js'\n\nexport var line = 1\nexport var column = 1\nexport var length = 0\nexport var position = 0\nexport var character = 0\nexport var characters = ''\n\n/**\n * @param {string} value\n * @param {object | null} root\n * @param {object | null} parent\n * @param {string} type\n * @param {string[] | string} props\n * @param {object[] | string} children\n * @param {number} length\n */\nexport function node (value, root, parent, type, props, children, length) {\n\treturn {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}\n}\n\n/**\n * @param {object} root\n * @param {object} props\n * @return {object}\n */\nexport function copy (root, props) {\n\treturn assign(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)\n}\n\n/**\n * @return {number}\n */\nexport function char () {\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function prev () {\n\tcharacter = position > 0 ? charat(characters, --position) : 0\n\n\tif (column--, character === 10)\n\t\tcolumn = 1, line--\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function next () {\n\tcharacter = position < length ? charat(characters, position++) : 0\n\n\tif (column++, character === 10)\n\t\tcolumn = 1, line++\n\n\treturn character\n}\n\n/**\n * @return {number}\n */\nexport function peek () {\n\treturn charat(characters, position)\n}\n\n/**\n * @return {number}\n */\nexport function caret () {\n\treturn position\n}\n\n/**\n * @param {number} begin\n * @param {number} end\n * @return {string}\n */\nexport function slice (begin, end) {\n\treturn substr(characters, begin, end)\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function token (type) {\n\tswitch (type) {\n\t\t// \\0 \\t \\n \\r \\s whitespace token\n\t\tcase 0: case 9: case 10: case 13: case 32:\n\t\t\treturn 5\n\t\t// ! + , / > @ ~ isolate token\n\t\tcase 33: case 43: case 44: case 47: case 62: case 64: case 126:\n\t\t// ; { } breakpoint token\n\t\tcase 59: case 123: case 125:\n\t\t\treturn 4\n\t\t// : accompanied token\n\t\tcase 58:\n\t\t\treturn 3\n\t\t// \" ' ( [ opening delimit token\n\t\tcase 34: case 39: case 40: case 91:\n\t\t\treturn 2\n\t\t// ) ] closing delimit token\n\t\tcase 41: case 93:\n\t\t\treturn 1\n\t}\n\n\treturn 0\n}\n\n/**\n * @param {string} value\n * @return {any[]}\n */\nexport function alloc (value) {\n\treturn line = column = 1, length = strlen(characters = value), position = 0, []\n}\n\n/**\n * @param {any} value\n * @return {any}\n */\nexport function dealloc (value) {\n\treturn characters = '', value\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function delimit (type) {\n\treturn trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))\n}\n\n/**\n * @param {string} value\n * @return {string[]}\n */\nexport function tokenize (value) {\n\treturn dealloc(tokenizer(alloc(value)))\n}\n\n/**\n * @param {number} type\n * @return {string}\n */\nexport function whitespace (type) {\n\twhile (character = peek())\n\t\tif (character < 33)\n\t\t\tnext()\n\t\telse\n\t\t\tbreak\n\n\treturn token(type) > 2 || token(character) > 3 ? '' : ' '\n}\n\n/**\n * @param {string[]} children\n * @return {string[]}\n */\nexport function tokenizer (children) {\n\twhile (next())\n\t\tswitch (token(character)) {\n\t\t\tcase 0: append(identifier(position - 1), children)\n\t\t\t\tbreak\n\t\t\tcase 2: append(delimit(character), children)\n\t\t\t\tbreak\n\t\t\tdefault: append(from(character), children)\n\t\t}\n\n\treturn children\n}\n\n/**\n * @param {number} index\n * @param {number} count\n * @return {string}\n */\nexport function escaping (index, count) {\n\twhile (--count && next())\n\t\t// not 0-9 A-F a-f\n\t\tif (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))\n\t\t\tbreak\n\n\treturn slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))\n}\n\n/**\n * @param {number} type\n * @return {number}\n */\nexport function delimiter (type) {\n\twhile (next())\n\t\tswitch (character) {\n\t\t\t// ] ) \" '\n\t\t\tcase type:\n\t\t\t\treturn position\n\t\t\t// \" '\n\t\t\tcase 34: case 39:\n\t\t\t\tif (type !== 34 && type !== 39)\n\t\t\t\t\tdelimiter(character)\n\t\t\t\tbreak\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (type === 41)\n\t\t\t\t\tdelimiter(type)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tnext()\n\t\t\t\tbreak\n\t\t}\n\n\treturn position\n}\n\n/**\n * @param {number} type\n * @param {number} index\n * @return {number}\n */\nexport function commenter (type, index) {\n\twhile (next())\n\t\t// //\n\t\tif (type + character === 47 + 10)\n\t\t\tbreak\n\t\t// /*\n\t\telse if (type + character === 42 + 42 && peek() === 47)\n\t\t\tbreak\n\n\treturn '/*' + slice(index, position - 1) + '*' + from(type === 47 ? type : next())\n}\n\n/**\n * @param {number} index\n * @return {string}\n */\nexport function identifier (index) {\n\twhile (!token(peek()))\n\t\tnext()\n\n\treturn slice(index, position)\n}\n","import {COMMENT, RULESET, DECLARATION} from './Enum.js'\nimport {abs, charat, trim, from, sizeof, strlen, substr, append, replace, indexof} from './Utility.js'\nimport {node, char, prev, next, peek, caret, alloc, dealloc, delimit, whitespace, escaping, identifier, commenter} from './Tokenizer.js'\n\n/**\n * @param {string} value\n * @return {object[]}\n */\nexport function compile (value) {\n\treturn dealloc(parse('', null, null, null, [''], value = alloc(value), 0, [0], value))\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {string[]} rule\n * @param {string[]} rules\n * @param {string[]} rulesets\n * @param {number[]} pseudo\n * @param {number[]} points\n * @param {string[]} declarations\n * @return {object}\n */\nexport function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {\n\tvar index = 0\n\tvar offset = 0\n\tvar length = pseudo\n\tvar atrule = 0\n\tvar property = 0\n\tvar previous = 0\n\tvar variable = 1\n\tvar scanning = 1\n\tvar ampersand = 1\n\tvar character = 0\n\tvar type = ''\n\tvar props = rules\n\tvar children = rulesets\n\tvar reference = rule\n\tvar characters = type\n\n\twhile (scanning)\n\t\tswitch (previous = character, character = next()) {\n\t\t\t// (\n\t\t\tcase 40:\n\t\t\t\tif (previous != 108 && charat(characters, length - 1) == 58) {\n\t\t\t\t\tif (indexof(characters += replace(delimit(character), '&', '&\\f'), '&\\f') != -1)\n\t\t\t\t\t\tampersand = -1\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t// \" ' [\n\t\t\tcase 34: case 39: case 91:\n\t\t\t\tcharacters += delimit(character)\n\t\t\t\tbreak\n\t\t\t// \\t \\n \\r \\s\n\t\t\tcase 9: case 10: case 13: case 32:\n\t\t\t\tcharacters += whitespace(previous)\n\t\t\t\tbreak\n\t\t\t// \\\n\t\t\tcase 92:\n\t\t\t\tcharacters += escaping(caret() - 1, 7)\n\t\t\t\tcontinue\n\t\t\t// /\n\t\t\tcase 47:\n\t\t\t\tswitch (peek()) {\n\t\t\t\t\tcase 42: case 47:\n\t\t\t\t\t\tappend(comment(commenter(next(), caret()), root, parent), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcharacters += '/'\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t// {\n\t\t\tcase 123 * variable:\n\t\t\t\tpoints[index++] = strlen(characters) * ampersand\n\t\t\t// } ; \\0\n\t\t\tcase 125 * variable: case 59: case 0:\n\t\t\t\tswitch (character) {\n\t\t\t\t\t// \\0 }\n\t\t\t\t\tcase 0: case 125: scanning = 0\n\t\t\t\t\t// ;\n\t\t\t\t\tcase 59 + offset: if (ampersand == -1) characters = replace(characters, /\\f/g, '')\n\t\t\t\t\t\tif (property > 0 && (strlen(characters) - length))\n\t\t\t\t\t\t\tappend(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration(replace(characters, ' ', '') + ';', rule, parent, length - 2), declarations)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @ ;\n\t\t\t\t\tcase 59: characters += ';'\n\t\t\t\t\t// { rule/at-rule\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tappend(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)\n\n\t\t\t\t\t\tif (character === 123)\n\t\t\t\t\t\t\tif (offset === 0)\n\t\t\t\t\t\t\t\tparse(characters, root, reference, reference, props, rulesets, length, points, children)\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tswitch (atrule === 99 && charat(characters, 3) === 110 ? 100 : atrule) {\n\t\t\t\t\t\t\t\t\t// d l m s\n\t\t\t\t\t\t\t\t\tcase 100: case 108: case 109: case 115:\n\t\t\t\t\t\t\t\t\t\tparse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)\n\t\t\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tparse(characters, reference, reference, reference, [''], children, 0, points, children)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tindex = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo\n\t\t\t\tbreak\n\t\t\t// :\n\t\t\tcase 58:\n\t\t\t\tlength = 1 + strlen(characters), property = previous\n\t\t\tdefault:\n\t\t\t\tif (variable < 1)\n\t\t\t\t\tif (character == 123)\n\t\t\t\t\t\t--variable\n\t\t\t\t\telse if (character == 125 && variable++ == 0 && prev() == 125)\n\t\t\t\t\t\tcontinue\n\n\t\t\t\tswitch (characters += from(character), character * variable) {\n\t\t\t\t\t// &\n\t\t\t\t\tcase 38:\n\t\t\t\t\t\tampersand = offset > 0 ? 1 : (characters += '\\f', -1)\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// ,\n\t\t\t\t\tcase 44:\n\t\t\t\t\t\tpoints[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// @\n\t\t\t\t\tcase 64:\n\t\t\t\t\t\t// -\n\t\t\t\t\t\tif (peek() === 45)\n\t\t\t\t\t\t\tcharacters += delimit(next())\n\n\t\t\t\t\t\tatrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++\n\t\t\t\t\t\tbreak\n\t\t\t\t\t// -\n\t\t\t\t\tcase 45:\n\t\t\t\t\t\tif (previous === 45 && strlen(characters) == 2)\n\t\t\t\t\t\t\tvariable = 0\n\t\t\t\t}\n\t\t}\n\n\treturn rulesets\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} index\n * @param {number} offset\n * @param {string[]} rules\n * @param {number[]} points\n * @param {string} type\n * @param {string[]} props\n * @param {string[]} children\n * @param {number} length\n * @return {object}\n */\nexport function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {\n\tvar post = offset - 1\n\tvar rule = offset === 0 ? rules : ['']\n\tvar size = sizeof(rule)\n\n\tfor (var i = 0, j = 0, k = 0; i < index; ++i)\n\t\tfor (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x)\n\t\t\tif (z = trim(j > 0 ? rule[x] + ' ' + y : replace(y, /&\\f/g, rule[x])))\n\t\t\t\tprops[k++] = z\n\n\treturn node(value, root, parent, offset === 0 ? RULESET : type, props, children, length)\n}\n\n/**\n * @param {number} value\n * @param {object} root\n * @param {object?} parent\n * @return {object}\n */\nexport function comment (value, root, parent) {\n\treturn node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0)\n}\n\n/**\n * @param {string} value\n * @param {object} root\n * @param {object?} parent\n * @param {number} length\n * @return {object}\n */\nexport function declaration (value, root, parent, length) {\n\treturn node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length)\n}\n","import {IMPORT, LAYER, COMMENT, RULESET, DECLARATION, KEYFRAMES} from './Enum.js'\nimport {strlen, sizeof} from './Utility.js'\n\n/**\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function serialize (children, callback) {\n\tvar output = ''\n\tvar length = sizeof(children)\n\n\tfor (var i = 0; i < length; i++)\n\t\toutput += callback(children[i], i, children, callback) || ''\n\n\treturn output\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n * @return {string}\n */\nexport function stringify (element, index, children, callback) {\n\tswitch (element.type) {\n\t\tcase LAYER: if (element.children.length) break\n\t\tcase IMPORT: case DECLARATION: return element.return = element.return || element.value\n\t\tcase COMMENT: return ''\n\t\tcase KEYFRAMES: return element.return = element.value + '{' + serialize(element.children, callback) + '}'\n\t\tcase RULESET: element.value = element.props.join(',')\n\t}\n\n\treturn strlen(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''\n}\n","import {MS, MOZ, WEBKIT, RULESET, KEYFRAMES, DECLARATION} from './Enum.js'\nimport {match, charat, substr, strlen, sizeof, replace, combine} from './Utility.js'\nimport {copy, tokenize} from './Tokenizer.js'\nimport {serialize} from './Serializer.js'\nimport {prefix} from './Prefixer.js'\n\n/**\n * @param {function[]} collection\n * @return {function}\n */\nexport function middleware (collection) {\n\tvar length = sizeof(collection)\n\n\treturn function (element, index, children, callback) {\n\t\tvar output = ''\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\toutput += collection[i](element, index, children, callback) || ''\n\n\t\treturn output\n\t}\n}\n\n/**\n * @param {function} callback\n * @return {function}\n */\nexport function rulesheet (callback) {\n\treturn function (element) {\n\t\tif (!element.root)\n\t\t\tif (element = element.return)\n\t\t\t\tcallback(element)\n\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n * @param {function} callback\n */\nexport function prefixer (element, index, children, callback) {\n\tif (element.length > -1)\n\t\tif (!element.return)\n\t\t\tswitch (element.type) {\n\t\t\t\tcase DECLARATION: element.return = prefix(element.value, element.length, children)\n\t\t\t\t\treturn\n\t\t\t\tcase KEYFRAMES:\n\t\t\t\t\treturn serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)\n\t\t\t\tcase RULESET:\n\t\t\t\t\tif (element.length)\n\t\t\t\t\t\treturn combine(element.props, function (value) {\n\t\t\t\t\t\t\tswitch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n\t\t\t\t\t\t\t\t// :read-(only|write)\n\t\t\t\t\t\t\t\tcase ':read-only': case ':read-write':\n\t\t\t\t\t\t\t\t\treturn serialize([copy(element, {props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]})], callback)\n\t\t\t\t\t\t\t\t// :placeholder\n\t\t\t\t\t\t\t\tcase '::placeholder':\n\t\t\t\t\t\t\t\t\treturn serialize([\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]}),\n\t\t\t\t\t\t\t\t\t\tcopy(element, {props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]})\n\t\t\t\t\t\t\t\t\t], callback)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn ''\n\t\t\t\t\t\t})\n\t\t\t}\n}\n\n/**\n * @param {object} element\n * @param {number} index\n * @param {object[]} children\n */\nexport function namespace (element) {\n\tswitch (element.type) {\n\t\tcase RULESET:\n\t\t\telement.props = element.props.map(function (value) {\n\t\t\t\treturn combine(tokenize(value), function (value, index, children) {\n\t\t\t\t\tswitch (charat(value, 0)) {\n\t\t\t\t\t\t// \\f\n\t\t\t\t\t\tcase 12:\n\t\t\t\t\t\t\treturn substr(value, 1, strlen(value))\n\t\t\t\t\t\t// \\0 ( + > ~\n\t\t\t\t\t\tcase 0: case 40: case 43: case 62: case 126:\n\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t// :\n\t\t\t\t\t\tcase 58:\n\t\t\t\t\t\t\tif (children[++index] === 'global')\n\t\t\t\t\t\t\t\tchildren[index] = '', children[++index] = '\\f' + substr(children[index], index = 1, -1)\n\t\t\t\t\t\t// \\s\n\t\t\t\t\t\tcase 32:\n\t\t\t\t\t\t\treturn index === 1 ? '' : value\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tswitch (index) {\n\t\t\t\t\t\t\t\tcase 0: element = value\n\t\t\t\t\t\t\t\t\treturn sizeof(children) > 1 ? '' : value\n\t\t\t\t\t\t\t\tcase index = sizeof(children) - 1: case 2:\n\t\t\t\t\t\t\t\t\treturn index === 2 ? value + element + element : value + element\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn value\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t}\n}\n","function memoize(fn) {\n  var cache = Object.create(null);\n  return function (arg) {\n    if (cache[arg] === undefined) cache[arg] = fn(arg);\n    return cache[arg];\n  };\n}\n\nexport { memoize as default };\n","import { StyleSheet } from '@emotion/sheet';\nimport { dealloc, alloc, next, token, from, peek, delimit, slice, position, RULESET, combine, match, serialize, copy, replace, WEBKIT, MOZ, MS, KEYFRAMES, DECLARATION, hash, charat, strlen, indexof, stringify, rulesheet, middleware, compile } from 'stylis';\nimport '@emotion/weak-memoize';\nimport '@emotion/memoize';\n\nvar identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {\n  var previous = 0;\n  var character = 0;\n\n  while (true) {\n    previous = character;\n    character = peek(); // &\\f\n\n    if (previous === 38 && character === 12) {\n      points[index] = 1;\n    }\n\n    if (token(character)) {\n      break;\n    }\n\n    next();\n  }\n\n  return slice(begin, position);\n};\n\nvar toRules = function toRules(parsed, points) {\n  // pretend we've started with a comma\n  var index = -1;\n  var character = 44;\n\n  do {\n    switch (token(character)) {\n      case 0:\n        // &\\f\n        if (character === 38 && peek() === 12) {\n          // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings\n          // stylis inserts \\f after & to know when & where it should replace this sequence with the context selector\n          // and when it should just concatenate the outer and inner selectors\n          // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here\n          points[index] = 1;\n        }\n\n        parsed[index] += identifierWithPointTracking(position - 1, points, index);\n        break;\n\n      case 2:\n        parsed[index] += delimit(character);\n        break;\n\n      case 4:\n        // comma\n        if (character === 44) {\n          // colon\n          parsed[++index] = peek() === 58 ? '&\\f' : '';\n          points[index] = parsed[index].length;\n          break;\n        }\n\n      // fallthrough\n\n      default:\n        parsed[index] += from(character);\n    }\n  } while (character = next());\n\n  return parsed;\n};\n\nvar getRules = function getRules(value, points) {\n  return dealloc(toRules(alloc(value), points));\n}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11\n\n\nvar fixedElements = /* #__PURE__ */new WeakMap();\nvar compat = function compat(element) {\n  if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo\n  // negative .length indicates that this rule has been already prefixed\n  element.length < 1) {\n    return;\n  }\n\n  var value = element.value;\n  var parent = element.parent;\n  var isImplicitRule = element.column === parent.column && element.line === parent.line;\n\n  while (parent.type !== 'rule') {\n    parent = parent.parent;\n    if (!parent) return;\n  } // short-circuit for the simplest case\n\n\n  if (element.props.length === 1 && value.charCodeAt(0) !== 58\n  /* colon */\n  && !fixedElements.get(parent)) {\n    return;\n  } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)\n  // then the props has already been manipulated beforehand as they that array is shared between it and its \"rule parent\"\n\n\n  if (isImplicitRule) {\n    return;\n  }\n\n  fixedElements.set(element, true);\n  var points = [];\n  var rules = getRules(value, points);\n  var parentRules = parent.props;\n\n  for (var i = 0, k = 0; i < rules.length; i++) {\n    for (var j = 0; j < parentRules.length; j++, k++) {\n      element.props[k] = points[i] ? rules[i].replace(/&\\f/g, parentRules[j]) : parentRules[j] + \" \" + rules[i];\n    }\n  }\n};\nvar removeLabel = function removeLabel(element) {\n  if (element.type === 'decl') {\n    var value = element.value;\n\n    if ( // charcode for l\n    value.charCodeAt(0) === 108 && // charcode for b\n    value.charCodeAt(2) === 98) {\n      // this ignores label\n      element[\"return\"] = '';\n      element.value = '';\n    }\n  }\n};\n\n/* eslint-disable no-fallthrough */\n\nfunction prefix(value, length) {\n  switch (hash(value, length)) {\n    // color-adjust\n    case 5103:\n      return WEBKIT + 'print-' + value + value;\n    // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)\n\n    case 5737:\n    case 4201:\n    case 3177:\n    case 3433:\n    case 1641:\n    case 4457:\n    case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break\n\n    case 5572:\n    case 6356:\n    case 5844:\n    case 3191:\n    case 6645:\n    case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,\n\n    case 6391:\n    case 5879:\n    case 5623:\n    case 6135:\n    case 4599:\n    case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)\n\n    case 4215:\n    case 6389:\n    case 5109:\n    case 5365:\n    case 5621:\n    case 3829:\n      return WEBKIT + value + value;\n    // appearance, user-select, transform, hyphens, text-size-adjust\n\n    case 5349:\n    case 4246:\n    case 4810:\n    case 6968:\n    case 2756:\n      return WEBKIT + value + MOZ + value + MS + value + value;\n    // flex, flex-direction\n\n    case 6828:\n    case 4268:\n      return WEBKIT + value + MS + value + value;\n    // order\n\n    case 6165:\n      return WEBKIT + value + MS + 'flex-' + value + value;\n    // align-items\n\n    case 5187:\n      return WEBKIT + value + replace(value, /(\\w+).+(:[^]+)/, WEBKIT + 'box-$1$2' + MS + 'flex-$1$2') + value;\n    // align-self\n\n    case 5443:\n      return WEBKIT + value + MS + 'flex-item-' + replace(value, /flex-|-self/, '') + value;\n    // align-content\n\n    case 4675:\n      return WEBKIT + value + MS + 'flex-line-pack' + replace(value, /align-content|flex-|-self/, '') + value;\n    // flex-shrink\n\n    case 5548:\n      return WEBKIT + value + MS + replace(value, 'shrink', 'negative') + value;\n    // flex-basis\n\n    case 5292:\n      return WEBKIT + value + MS + replace(value, 'basis', 'preferred-size') + value;\n    // flex-grow\n\n    case 6060:\n      return WEBKIT + 'box-' + replace(value, '-grow', '') + WEBKIT + value + MS + replace(value, 'grow', 'positive') + value;\n    // transition\n\n    case 4554:\n      return WEBKIT + replace(value, /([^-])(transform)/g, '$1' + WEBKIT + '$2') + value;\n    // cursor\n\n    case 6187:\n      return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + '$1'), /(image-set)/, WEBKIT + '$1'), value, '') + value;\n    // background, background-image\n\n    case 5495:\n    case 3959:\n      return replace(value, /(image-set\\([^]*)/, WEBKIT + '$1' + '$`$1');\n    // justify-content\n\n    case 4968:\n      return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + 'box-pack:$3' + MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + WEBKIT + value + value;\n    // (margin|padding)-inline-(start|end)\n\n    case 4095:\n    case 3583:\n    case 4068:\n    case 2532:\n      return replace(value, /(.+)-inline(.+)/, WEBKIT + '$1$2') + value;\n    // (min|max)?(width|height|inline-size|block-size)\n\n    case 8116:\n    case 7059:\n    case 5753:\n    case 5535:\n    case 5445:\n    case 5701:\n    case 4933:\n    case 4677:\n    case 5533:\n    case 5789:\n    case 5021:\n    case 4765:\n      // stretch, max-content, min-content, fill-available\n      if (strlen(value) - 1 - length > 6) switch (charat(value, length + 1)) {\n        // (m)ax-content, (m)in-content\n        case 109:\n          // -\n          if (charat(value, length + 4) !== 45) break;\n        // (f)ill-available, (f)it-content\n\n        case 102:\n          return replace(value, /(.+:)(.+)-([^]+)/, '$1' + WEBKIT + '$2-$3' + '$1' + MOZ + (charat(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;\n        // (s)tretch\n\n        case 115:\n          return ~indexof(value, 'stretch') ? prefix(replace(value, 'stretch', 'fill-available'), length) + value : value;\n      }\n      break;\n    // position: sticky\n\n    case 4949:\n      // (s)ticky?\n      if (charat(value, length + 1) !== 115) break;\n    // display: (flex|inline-flex)\n\n    case 6444:\n      switch (charat(value, strlen(value) - 3 - (~indexof(value, '!important') && 10))) {\n        // stic(k)y\n        case 107:\n          return replace(value, ':', ':' + WEBKIT) + value;\n        // (inline-)?fl(e)x\n\n        case 101:\n          return replace(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + WEBKIT + (charat(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + WEBKIT + '$2$3' + '$1' + MS + '$2box$3') + value;\n      }\n\n      break;\n    // writing-mode\n\n    case 5936:\n      switch (charat(value, length + 11)) {\n        // vertical-l(r)\n        case 114:\n          return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb') + value;\n        // vertical-r(l)\n\n        case 108:\n          return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'tb-rl') + value;\n        // horizontal(-)tb\n\n        case 45:\n          return WEBKIT + value + MS + replace(value, /[svh]\\w+-[tblr]{2}/, 'lr') + value;\n      }\n\n      return WEBKIT + value + MS + value + value;\n  }\n\n  return value;\n}\n\nvar prefixer = function prefixer(element, index, children, callback) {\n  if (element.length > -1) if (!element[\"return\"]) switch (element.type) {\n    case DECLARATION:\n      element[\"return\"] = prefix(element.value, element.length);\n      break;\n\n    case KEYFRAMES:\n      return serialize([copy(element, {\n        value: replace(element.value, '@', '@' + WEBKIT)\n      })], callback);\n\n    case RULESET:\n      if (element.length) return combine(element.props, function (value) {\n        switch (match(value, /(::plac\\w+|:read-\\w+)/)) {\n          // :read-(only|write)\n          case ':read-only':\n          case ':read-write':\n            return serialize([copy(element, {\n              props: [replace(value, /:(read-\\w+)/, ':' + MOZ + '$1')]\n            })], callback);\n          // :placeholder\n\n          case '::placeholder':\n            return serialize([copy(element, {\n              props: [replace(value, /:(plac\\w+)/, ':' + WEBKIT + 'input-$1')]\n            }), copy(element, {\n              props: [replace(value, /:(plac\\w+)/, ':' + MOZ + '$1')]\n            }), copy(element, {\n              props: [replace(value, /:(plac\\w+)/, MS + 'input-$1')]\n            })], callback);\n        }\n\n        return '';\n      });\n  }\n};\n\nvar defaultStylisPlugins = [prefixer];\n\nvar createCache = function createCache(options) {\n  var key = options.key;\n\n  if (key === 'css') {\n    var ssrStyles = document.querySelectorAll(\"style[data-emotion]:not([data-s])\"); // get SSRed styles out of the way of React's hydration\n    // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)\n    // note this very very intentionally targets all style elements regardless of the key to ensure\n    // that creating a cache works inside of render of a React component\n\n    Array.prototype.forEach.call(ssrStyles, function (node) {\n      // we want to only move elements which have a space in the data-emotion attribute value\n      // because that indicates that it is an Emotion 11 server-side rendered style elements\n      // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector\n      // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)\n      // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles\n      // will not result in the Emotion 10 styles being destroyed\n      var dataEmotionAttribute = node.getAttribute('data-emotion');\n\n      if (dataEmotionAttribute.indexOf(' ') === -1) {\n        return;\n      }\n\n      document.head.appendChild(node);\n      node.setAttribute('data-s', '');\n    });\n  }\n\n  var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;\n\n  var inserted = {};\n  var container;\n  var nodesToHydrate = [];\n\n  {\n    container = options.container || document.head;\n    Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which\n    // means that the style elements we're looking at are only Emotion 11 server-rendered style elements\n    document.querySelectorAll(\"style[data-emotion^=\\\"\" + key + \" \\\"]\"), function (node) {\n      var attrib = node.getAttribute(\"data-emotion\").split(' ');\n\n      for (var i = 1; i < attrib.length; i++) {\n        inserted[attrib[i]] = true;\n      }\n\n      nodesToHydrate.push(node);\n    });\n  }\n\n  var _insert;\n\n  var omnipresentPlugins = [compat, removeLabel];\n\n  {\n    var currentSheet;\n    var finalizingPlugins = [stringify, rulesheet(function (rule) {\n      currentSheet.insert(rule);\n    })];\n    var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));\n\n    var stylis = function stylis(styles) {\n      return serialize(compile(styles), serializer);\n    };\n\n    _insert = function insert(selector, serialized, sheet, shouldCache) {\n      currentSheet = sheet;\n\n      stylis(selector ? selector + \"{\" + serialized.styles + \"}\" : serialized.styles);\n\n      if (shouldCache) {\n        cache.inserted[serialized.name] = true;\n      }\n    };\n  }\n\n  var cache = {\n    key: key,\n    sheet: new StyleSheet({\n      key: key,\n      container: container,\n      nonce: options.nonce,\n      speedy: options.speedy,\n      prepend: options.prepend,\n      insertionPoint: options.insertionPoint\n    }),\n    nonce: options.nonce,\n    inserted: inserted,\n    registered: {},\n    insert: _insert\n  };\n  cache.sheet.hydrate(nodesToHydrate);\n  return cache;\n};\n\nexport { createCache as default };\n","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","/** @license React v16.13.1\n * react-is.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n  (function() {\n'use strict';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\n// (unstable) APIs that have been removed. Can we remove the symbols?\n\nvar REACT_ASYNC_MODE_TYPE = hasSymbol ? Symbol.for('react.async_mode') : 0xeacf;\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\n\nfunction isValidElementType(type) {\n  return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n  type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction typeOf(object) {\n  if (typeof object === 'object' && object !== null) {\n    var $$typeof = object.$$typeof;\n\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        var type = object.type;\n\n        switch (type) {\n          case REACT_ASYNC_MODE_TYPE:\n          case REACT_CONCURRENT_MODE_TYPE:\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n            return type;\n\n          default:\n            var $$typeofType = type && type.$$typeof;\n\n            switch ($$typeofType) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n              case REACT_PROVIDER_TYPE:\n                return $$typeofType;\n\n              default:\n                return $$typeof;\n            }\n\n        }\n\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n\n  return undefined;\n} // AsyncMode is deprecated along with isAsyncMode\n\nvar AsyncMode = REACT_ASYNC_MODE_TYPE;\nvar ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\nvar ContextConsumer = REACT_CONTEXT_TYPE;\nvar ContextProvider = REACT_PROVIDER_TYPE;\nvar Element = REACT_ELEMENT_TYPE;\nvar ForwardRef = REACT_FORWARD_REF_TYPE;\nvar Fragment = REACT_FRAGMENT_TYPE;\nvar Lazy = REACT_LAZY_TYPE;\nvar Memo = REACT_MEMO_TYPE;\nvar Portal = REACT_PORTAL_TYPE;\nvar Profiler = REACT_PROFILER_TYPE;\nvar StrictMode = REACT_STRICT_MODE_TYPE;\nvar Suspense = REACT_SUSPENSE_TYPE;\nvar hasWarnedAboutDeprecatedIsAsyncMode = false; // AsyncMode should be deprecated\n\nfunction isAsyncMode(object) {\n  {\n    if (!hasWarnedAboutDeprecatedIsAsyncMode) {\n      hasWarnedAboutDeprecatedIsAsyncMode = true; // Using console['warn'] to evade Babel and ESLint\n\n      console['warn']('The ReactIs.isAsyncMode() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactIs.isConcurrentMode() instead. It has the exact same API.');\n    }\n  }\n\n  return isConcurrentMode(object) || typeOf(object) === REACT_ASYNC_MODE_TYPE;\n}\nfunction isConcurrentMode(object) {\n  return typeOf(object) === REACT_CONCURRENT_MODE_TYPE;\n}\nfunction isContextConsumer(object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n}\nfunction isContextProvider(object) {\n  return typeOf(object) === REACT_PROVIDER_TYPE;\n}\nfunction isElement(object) {\n  return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\nfunction isForwardRef(object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n}\nfunction isFragment(object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n}\nfunction isLazy(object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n}\nfunction isMemo(object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n}\nfunction isPortal(object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n}\nfunction isProfiler(object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n}\nfunction isStrictMode(object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n}\nfunction isSuspense(object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n}\n\nexports.AsyncMode = AsyncMode;\nexports.ConcurrentMode = ConcurrentMode;\nexports.ContextConsumer = ContextConsumer;\nexports.ContextProvider = ContextProvider;\nexports.Element = Element;\nexports.ForwardRef = ForwardRef;\nexports.Fragment = Fragment;\nexports.Lazy = Lazy;\nexports.Memo = Memo;\nexports.Portal = Portal;\nexports.Profiler = Profiler;\nexports.StrictMode = StrictMode;\nexports.Suspense = Suspense;\nexports.isAsyncMode = isAsyncMode;\nexports.isConcurrentMode = isConcurrentMode;\nexports.isContextConsumer = isContextConsumer;\nexports.isContextProvider = isContextProvider;\nexports.isElement = isElement;\nexports.isForwardRef = isForwardRef;\nexports.isFragment = isFragment;\nexports.isLazy = isLazy;\nexports.isMemo = isMemo;\nexports.isPortal = isPortal;\nexports.isProfiler = isProfiler;\nexports.isStrictMode = isStrictMode;\nexports.isSuspense = isSuspense;\nexports.isValidElementType = isValidElementType;\nexports.typeOf = typeOf;\n  })();\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  '$$typeof': true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  '$$typeof': true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n  // React v16.11 and below\n  if (reactIs.isMemo(component)) {\n    return MEMO_STATICS;\n  } // React v16.12 and above\n\n\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    if (objectPrototype) {\n      var inheritedComponent = getPrototypeOf(sourceComponent);\n\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n      }\n    }\n\n    var keys = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    var targetStatics = getStatics(targetComponent);\n    var sourceStatics = getStatics(sourceComponent);\n\n    for (var i = 0; i < keys.length; ++i) {\n      var key = keys[i];\n\n      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {}\n      }\n    }\n  }\n\n  return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","var isBrowser = true;\n\nfunction getRegisteredStyles(registered, registeredStyles, classNames) {\n  var rawClassName = '';\n  classNames.split(' ').forEach(function (className) {\n    if (registered[className] !== undefined) {\n      registeredStyles.push(registered[className] + \";\");\n    } else if (className) {\n      rawClassName += className + \" \";\n    }\n  });\n  return rawClassName;\n}\nvar registerStyles = function registerStyles(cache, serialized, isStringTag) {\n  var className = cache.key + \"-\" + serialized.name;\n\n  if ( // we only need to add the styles to the registered cache if the\n  // class name could be used further down\n  // the tree but if it's a string tag, we know it won't\n  // so we don't have to add it to registered cache.\n  // this improves memory usage since we can avoid storing the whole style string\n  (isStringTag === false || // we need to always store it if we're in compat mode and\n  // in node since emotion-server relies on whether a style is in\n  // the registered cache to know whether a style is global or not\n  // also, note that this check will be dead code eliminated in the browser\n  isBrowser === false ) && cache.registered[className] === undefined) {\n    cache.registered[className] = serialized.styles;\n  }\n};\nvar insertStyles = function insertStyles(cache, serialized, isStringTag) {\n  registerStyles(cache, serialized, isStringTag);\n  var className = cache.key + \"-\" + serialized.name;\n\n  if (cache.inserted[serialized.name] === undefined) {\n    var current = serialized;\n\n    do {\n      cache.insert(serialized === current ? \".\" + className : '', current, cache.sheet, true);\n\n      current = current.next;\n    } while (current !== undefined);\n  }\n};\n\nexport { getRegisteredStyles, insertStyles, registerStyles };\n","/* eslint-disable */\n// Inspired by https://github.com/garycourt/murmurhash-js\n// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86\nfunction murmur2(str) {\n  // 'm' and 'r' are mixing constants generated offline.\n  // They're not really 'magic', they just happen to work well.\n  // const m = 0x5bd1e995;\n  // const r = 24;\n  // Initialize the hash\n  var h = 0; // Mix 4 bytes at a time into the hash\n\n  var k,\n      i = 0,\n      len = str.length;\n\n  for (; len >= 4; ++i, len -= 4) {\n    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;\n    k =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);\n    k ^=\n    /* k >>> r: */\n    k >>> 24;\n    h =\n    /* Math.imul(k, m): */\n    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^\n    /* Math.imul(h, m): */\n    (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Handle the last few bytes of the input array\n\n\n  switch (len) {\n    case 3:\n      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;\n\n    case 2:\n      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;\n\n    case 1:\n      h ^= str.charCodeAt(i) & 0xff;\n      h =\n      /* Math.imul(h, m): */\n      (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  } // Do a few final mixes of the hash to ensure the last few\n  // bytes are well-incorporated.\n\n\n  h ^= h >>> 13;\n  h =\n  /* Math.imul(h, m): */\n  (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);\n  return ((h ^ h >>> 15) >>> 0).toString(36);\n}\n\nexport { murmur2 as default };\n","var unitlessKeys = {\n  animationIterationCount: 1,\n  aspectRatio: 1,\n  borderImageOutset: 1,\n  borderImageSlice: 1,\n  borderImageWidth: 1,\n  boxFlex: 1,\n  boxFlexGroup: 1,\n  boxOrdinalGroup: 1,\n  columnCount: 1,\n  columns: 1,\n  flex: 1,\n  flexGrow: 1,\n  flexPositive: 1,\n  flexShrink: 1,\n  flexNegative: 1,\n  flexOrder: 1,\n  gridRow: 1,\n  gridRowEnd: 1,\n  gridRowSpan: 1,\n  gridRowStart: 1,\n  gridColumn: 1,\n  gridColumnEnd: 1,\n  gridColumnSpan: 1,\n  gridColumnStart: 1,\n  msGridRow: 1,\n  msGridRowSpan: 1,\n  msGridColumn: 1,\n  msGridColumnSpan: 1,\n  fontWeight: 1,\n  lineHeight: 1,\n  opacity: 1,\n  order: 1,\n  orphans: 1,\n  scale: 1,\n  tabSize: 1,\n  widows: 1,\n  zIndex: 1,\n  zoom: 1,\n  WebkitLineClamp: 1,\n  // SVG-related properties\n  fillOpacity: 1,\n  floodOpacity: 1,\n  stopOpacity: 1,\n  strokeDasharray: 1,\n  strokeDashoffset: 1,\n  strokeMiterlimit: 1,\n  strokeOpacity: 1,\n  strokeWidth: 1\n};\n\nexport { unitlessKeys as default };\n","import hashString from '@emotion/hash';\nimport unitless from '@emotion/unitless';\nimport memoize from '@emotion/memoize';\n\nvar isDevelopment = false;\n\nvar hyphenateRegex = /[A-Z]|^ms/g;\nvar animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;\n\nvar isCustomProperty = function isCustomProperty(property) {\n  return property.charCodeAt(1) === 45;\n};\n\nvar isProcessableValue = function isProcessableValue(value) {\n  return value != null && typeof value !== 'boolean';\n};\n\nvar processStyleName = /* #__PURE__ */memoize(function (styleName) {\n  return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();\n});\n\nvar processStyleValue = function processStyleValue(key, value) {\n  switch (key) {\n    case 'animation':\n    case 'animationName':\n      {\n        if (typeof value === 'string') {\n          return value.replace(animationRegex, function (match, p1, p2) {\n            cursor = {\n              name: p1,\n              styles: p2,\n              next: cursor\n            };\n            return p1;\n          });\n        }\n      }\n  }\n\n  if (unitless[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {\n    return value + 'px';\n  }\n\n  return value;\n};\n\nvar noComponentSelectorMessage = 'Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.';\n\nfunction handleInterpolation(mergedProps, registered, interpolation) {\n  if (interpolation == null) {\n    return '';\n  }\n\n  var componentSelector = interpolation;\n\n  if (componentSelector.__emotion_styles !== undefined) {\n\n    return componentSelector;\n  }\n\n  switch (typeof interpolation) {\n    case 'boolean':\n      {\n        return '';\n      }\n\n    case 'object':\n      {\n        var keyframes = interpolation;\n\n        if (keyframes.anim === 1) {\n          cursor = {\n            name: keyframes.name,\n            styles: keyframes.styles,\n            next: cursor\n          };\n          return keyframes.name;\n        }\n\n        var serializedStyles = interpolation;\n\n        if (serializedStyles.styles !== undefined) {\n          var next = serializedStyles.next;\n\n          if (next !== undefined) {\n            // not the most efficient thing ever but this is a pretty rare case\n            // and there will be very few iterations of this generally\n            while (next !== undefined) {\n              cursor = {\n                name: next.name,\n                styles: next.styles,\n                next: cursor\n              };\n              next = next.next;\n            }\n          }\n\n          var styles = serializedStyles.styles + \";\";\n          return styles;\n        }\n\n        return createStringFromObject(mergedProps, registered, interpolation);\n      }\n\n    case 'function':\n      {\n        if (mergedProps !== undefined) {\n          var previousCursor = cursor;\n          var result = interpolation(mergedProps);\n          cursor = previousCursor;\n          return handleInterpolation(mergedProps, registered, result);\n        }\n\n        break;\n      }\n  } // finalize string values (regular strings and functions interpolated into css calls)\n\n\n  var asString = interpolation;\n\n  if (registered == null) {\n    return asString;\n  }\n\n  var cached = registered[asString];\n  return cached !== undefined ? cached : asString;\n}\n\nfunction createStringFromObject(mergedProps, registered, obj) {\n  var string = '';\n\n  if (Array.isArray(obj)) {\n    for (var i = 0; i < obj.length; i++) {\n      string += handleInterpolation(mergedProps, registered, obj[i]) + \";\";\n    }\n  } else {\n    for (var key in obj) {\n      var value = obj[key];\n\n      if (typeof value !== 'object') {\n        var asString = value;\n\n        if (registered != null && registered[asString] !== undefined) {\n          string += key + \"{\" + registered[asString] + \"}\";\n        } else if (isProcessableValue(asString)) {\n          string += processStyleName(key) + \":\" + processStyleValue(key, asString) + \";\";\n        }\n      } else {\n        if (key === 'NO_COMPONENT_SELECTOR' && isDevelopment) {\n          throw new Error(noComponentSelectorMessage);\n        }\n\n        if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {\n          for (var _i = 0; _i < value.length; _i++) {\n            if (isProcessableValue(value[_i])) {\n              string += processStyleName(key) + \":\" + processStyleValue(key, value[_i]) + \";\";\n            }\n          }\n        } else {\n          var interpolated = handleInterpolation(mergedProps, registered, value);\n\n          switch (key) {\n            case 'animation':\n            case 'animationName':\n              {\n                string += processStyleName(key) + \":\" + interpolated + \";\";\n                break;\n              }\n\n            default:\n              {\n\n                string += key + \"{\" + interpolated + \"}\";\n              }\n          }\n        }\n      }\n    }\n  }\n\n  return string;\n}\n\nvar labelPattern = /label:\\s*([^\\s;{]+)\\s*(;|$)/g; // this is the cursor for keyframes\n// keyframes are stored on the SerializedStyles object as a linked list\n\nvar cursor;\nfunction serializeStyles(args, registered, mergedProps) {\n  if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {\n    return args[0];\n  }\n\n  var stringMode = true;\n  var styles = '';\n  cursor = undefined;\n  var strings = args[0];\n\n  if (strings == null || strings.raw === undefined) {\n    stringMode = false;\n    styles += handleInterpolation(mergedProps, registered, strings);\n  } else {\n    var asTemplateStringsArr = strings;\n\n    styles += asTemplateStringsArr[0];\n  } // we start at 1 since we've already handled the first arg\n\n\n  for (var i = 1; i < args.length; i++) {\n    styles += handleInterpolation(mergedProps, registered, args[i]);\n\n    if (stringMode) {\n      var templateStringsArr = strings;\n\n      styles += templateStringsArr[i];\n    }\n  } // using a global regex with .exec is stateful so lastIndex has to be reset each time\n\n\n  labelPattern.lastIndex = 0;\n  var identifierName = '';\n  var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5\n\n  while ((match = labelPattern.exec(styles)) !== null) {\n    identifierName += '-' + match[1];\n  }\n\n  var name = hashString(styles) + identifierName;\n\n  return {\n    name: name,\n    styles: styles,\n    next: cursor\n  };\n}\n\nexport { serializeStyles };\n","import * as React from 'react';\n\nvar syncFallback = function syncFallback(create) {\n  return create();\n};\n\nvar useInsertionEffect = React['useInsertion' + 'Effect'] ? React['useInsertion' + 'Effect'] : false;\nvar useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback;\nvar useInsertionEffectWithLayoutFallback = useInsertionEffect || React.useLayoutEffect;\n\nexport { useInsertionEffectAlwaysWithSyncFallback, useInsertionEffectWithLayoutFallback };\n","import * as React from 'react';\nimport { useContext, forwardRef } from 'react';\nimport createCache from '@emotion/cache';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport weakMemoize from '@emotion/weak-memoize';\nimport hoistNonReactStatics from '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\n\nvar isDevelopment = false;\n\nvar EmotionCacheContext = /* #__PURE__ */React.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case\n// because this module is primarily intended for the browser and node\n// but it's also required in react native and similar environments sometimes\n// and we could have a special build just for that\n// but this is much easier and the native packages\n// might use a different theme context in the future anyway\ntypeof HTMLElement !== 'undefined' ? /* #__PURE__ */createCache({\n  key: 'css'\n}) : null);\n\nvar CacheProvider = EmotionCacheContext.Provider;\nvar __unsafe_useEmotionCache = function useEmotionCache() {\n  return useContext(EmotionCacheContext);\n};\n\nvar withEmotionCache = function withEmotionCache(func) {\n  return /*#__PURE__*/forwardRef(function (props, ref) {\n    // the cache will never be null in the browser\n    var cache = useContext(EmotionCacheContext);\n    return func(props, cache, ref);\n  });\n};\n\nvar ThemeContext = /* #__PURE__ */React.createContext({});\n\nvar useTheme = function useTheme() {\n  return React.useContext(ThemeContext);\n};\n\nvar getTheme = function getTheme(outerTheme, theme) {\n  if (typeof theme === 'function') {\n    var mergedTheme = theme(outerTheme);\n\n    return mergedTheme;\n  }\n\n  return _extends({}, outerTheme, theme);\n};\n\nvar createCacheWithTheme = /* #__PURE__ */weakMemoize(function (outerTheme) {\n  return weakMemoize(function (theme) {\n    return getTheme(outerTheme, theme);\n  });\n});\nvar ThemeProvider = function ThemeProvider(props) {\n  var theme = React.useContext(ThemeContext);\n\n  if (props.theme !== theme) {\n    theme = createCacheWithTheme(theme)(props.theme);\n  }\n\n  return /*#__PURE__*/React.createElement(ThemeContext.Provider, {\n    value: theme\n  }, props.children);\n};\nfunction withTheme(Component) {\n  var componentName = Component.displayName || Component.name || 'Component';\n  var WithTheme = /*#__PURE__*/React.forwardRef(function render(props, ref) {\n    var theme = React.useContext(ThemeContext);\n    return /*#__PURE__*/React.createElement(Component, _extends({\n      theme: theme,\n      ref: ref\n    }, props));\n  });\n  WithTheme.displayName = \"WithTheme(\" + componentName + \")\";\n  return hoistNonReactStatics(WithTheme, Component);\n}\n\nvar hasOwn = {}.hasOwnProperty;\n\nvar typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';\nvar createEmotionProps = function createEmotionProps(type, props) {\n\n  var newProps = {};\n\n  for (var _key in props) {\n    if (hasOwn.call(props, _key)) {\n      newProps[_key] = props[_key];\n    }\n  }\n\n  newProps[typePropName] = type; // Runtime labeling is an opt-in feature because:\n\n  return newProps;\n};\n\nvar Insertion = function Insertion(_ref) {\n  var cache = _ref.cache,\n      serialized = _ref.serialized,\n      isStringTag = _ref.isStringTag;\n  registerStyles(cache, serialized, isStringTag);\n  useInsertionEffectAlwaysWithSyncFallback(function () {\n    return insertStyles(cache, serialized, isStringTag);\n  });\n\n  return null;\n};\n\nvar Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {\n  var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works\n  // not passing the registered cache to serializeStyles because it would\n  // make certain babel optimisations not possible\n\n  if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {\n    cssProp = cache.registered[cssProp];\n  }\n\n  var WrappedComponent = props[typePropName];\n  var registeredStyles = [cssProp];\n  var className = '';\n\n  if (typeof props.className === 'string') {\n    className = getRegisteredStyles(cache.registered, registeredStyles, props.className);\n  } else if (props.className != null) {\n    className = props.className + \" \";\n  }\n\n  var serialized = serializeStyles(registeredStyles, undefined, React.useContext(ThemeContext));\n\n  className += cache.key + \"-\" + serialized.name;\n  var newProps = {};\n\n  for (var _key2 in props) {\n    if (hasOwn.call(props, _key2) && _key2 !== 'css' && _key2 !== typePropName && (!isDevelopment )) {\n      newProps[_key2] = props[_key2];\n    }\n  }\n\n  newProps.className = className;\n\n  if (ref) {\n    newProps.ref = ref;\n  }\n\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n    cache: cache,\n    serialized: serialized,\n    isStringTag: typeof WrappedComponent === 'string'\n  }), /*#__PURE__*/React.createElement(WrappedComponent, newProps));\n});\n\nvar Emotion$1 = Emotion;\n\nexport { CacheProvider as C, Emotion$1 as E, ThemeContext as T, __unsafe_useEmotionCache as _, ThemeProvider as a, withTheme as b, createEmotionProps as c, hasOwn as h, isDevelopment as i, useTheme as u, withEmotionCache as w };\n","import { h as hasOwn, E as Emotion, c as createEmotionProps, w as withEmotionCache, T as ThemeContext, i as isDevelopment } from './emotion-element-f0de968e.browser.esm.js';\nexport { C as CacheProvider, T as ThemeContext, a as ThemeProvider, _ as __unsafe_useEmotionCache, u as useTheme, w as withEmotionCache, b as withTheme } from './emotion-element-f0de968e.browser.esm.js';\nimport * as React from 'react';\nimport { insertStyles, registerStyles, getRegisteredStyles } from '@emotion/utils';\nimport { useInsertionEffectWithLayoutFallback, useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\nimport { serializeStyles } from '@emotion/serialize';\nimport '@emotion/cache';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/weak-memoize';\nimport '../_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js';\nimport 'hoist-non-react-statics';\n\nvar jsx = function jsx(type, props) {\n  // eslint-disable-next-line prefer-rest-params\n  var args = arguments;\n\n  if (props == null || !hasOwn.call(props, 'css')) {\n    return React.createElement.apply(undefined, args);\n  }\n\n  var argsLength = args.length;\n  var createElementArgArray = new Array(argsLength);\n  createElementArgArray[0] = Emotion;\n  createElementArgArray[1] = createEmotionProps(type, props);\n\n  for (var i = 2; i < argsLength; i++) {\n    createElementArgArray[i] = args[i];\n  }\n\n  return React.createElement.apply(null, createElementArgArray);\n};\n\n(function (_jsx) {\n  var JSX;\n\n  (function (_JSX) {})(JSX || (JSX = _jsx.JSX || (_jsx.JSX = {})));\n})(jsx || (jsx = {}));\n\n// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild\n// initial client-side render from SSR, use place of hydrating tag\n\nvar Global = /* #__PURE__ */withEmotionCache(function (props, cache) {\n\n  var styles = props.styles;\n  var serialized = serializeStyles([styles], undefined, React.useContext(ThemeContext));\n  // but it is based on a constant that will never change at runtime\n  // it's effectively like having two implementations and switching them out\n  // so it's not actually breaking anything\n\n\n  var sheetRef = React.useRef();\n  useInsertionEffectWithLayoutFallback(function () {\n    var key = cache.key + \"-global\"; // use case of https://github.com/emotion-js/emotion/issues/2675\n\n    var sheet = new cache.sheet.constructor({\n      key: key,\n      nonce: cache.sheet.nonce,\n      container: cache.sheet.container,\n      speedy: cache.sheet.isSpeedy\n    });\n    var rehydrating = false;\n    var node = document.querySelector(\"style[data-emotion=\\\"\" + key + \" \" + serialized.name + \"\\\"]\");\n\n    if (cache.sheet.tags.length) {\n      sheet.before = cache.sheet.tags[0];\n    }\n\n    if (node !== null) {\n      rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other <Global/>s\n\n      node.setAttribute('data-emotion', key);\n      sheet.hydrate([node]);\n    }\n\n    sheetRef.current = [sheet, rehydrating];\n    return function () {\n      sheet.flush();\n    };\n  }, [cache]);\n  useInsertionEffectWithLayoutFallback(function () {\n    var sheetRefCurrent = sheetRef.current;\n    var sheet = sheetRefCurrent[0],\n        rehydrating = sheetRefCurrent[1];\n\n    if (rehydrating) {\n      sheetRefCurrent[1] = false;\n      return;\n    }\n\n    if (serialized.next !== undefined) {\n      // insert keyframes\n      insertStyles(cache, serialized.next, true);\n    }\n\n    if (sheet.tags.length) {\n      // if this doesn't exist then it will be null so the style element will be appended\n      var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;\n      sheet.before = element;\n      sheet.flush();\n    }\n\n    cache.insert(\"\", serialized, sheet, false);\n  }, [cache, serialized.name]);\n  return null;\n});\n\nfunction css() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  return serializeStyles(args);\n}\n\nfunction keyframes() {\n  var insertable = css.apply(void 0, arguments);\n  var name = \"animation-\" + insertable.name;\n  return {\n    name: name,\n    styles: \"@keyframes \" + name + \"{\" + insertable.styles + \"}\",\n    anim: 1,\n    toString: function toString() {\n      return \"_EMO_\" + this.name + \"_\" + this.styles + \"_EMO_\";\n    }\n  };\n}\n\nvar classnames = function classnames(args) {\n  var len = args.length;\n  var i = 0;\n  var cls = '';\n\n  for (; i < len; i++) {\n    var arg = args[i];\n    if (arg == null) continue;\n    var toAdd = void 0;\n\n    switch (typeof arg) {\n      case 'boolean':\n        break;\n\n      case 'object':\n        {\n          if (Array.isArray(arg)) {\n            toAdd = classnames(arg);\n          } else {\n\n            toAdd = '';\n\n            for (var k in arg) {\n              if (arg[k] && k) {\n                toAdd && (toAdd += ' ');\n                toAdd += k;\n              }\n            }\n          }\n\n          break;\n        }\n\n      default:\n        {\n          toAdd = arg;\n        }\n    }\n\n    if (toAdd) {\n      cls && (cls += ' ');\n      cls += toAdd;\n    }\n  }\n\n  return cls;\n};\n\nfunction merge(registered, css, className) {\n  var registeredStyles = [];\n  var rawClassName = getRegisteredStyles(registered, registeredStyles, className);\n\n  if (registeredStyles.length < 2) {\n    return className;\n  }\n\n  return rawClassName + css(registeredStyles);\n}\n\nvar Insertion = function Insertion(_ref) {\n  var cache = _ref.cache,\n      serializedArr = _ref.serializedArr;\n  useInsertionEffectAlwaysWithSyncFallback(function () {\n\n    for (var i = 0; i < serializedArr.length; i++) {\n      insertStyles(cache, serializedArr[i], false);\n    }\n  });\n\n  return null;\n};\n\nvar ClassNames = /* #__PURE__ */withEmotionCache(function (props, cache) {\n  var hasRendered = false;\n  var serializedArr = [];\n\n  var css = function css() {\n    if (hasRendered && isDevelopment) {\n      throw new Error('css can only be used during render');\n    }\n\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    var serialized = serializeStyles(args, cache.registered);\n    serializedArr.push(serialized); // registration has to happen here as the result of this might get consumed by `cx`\n\n    registerStyles(cache, serialized, false);\n    return cache.key + \"-\" + serialized.name;\n  };\n\n  var cx = function cx() {\n    if (hasRendered && isDevelopment) {\n      throw new Error('cx can only be used during render');\n    }\n\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n\n    return merge(cache.registered, css, classnames(args));\n  };\n\n  var content = {\n    css: css,\n    cx: cx,\n    theme: React.useContext(ThemeContext)\n  };\n  var ele = props.children(content);\n  hasRendered = true;\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n    cache: cache,\n    serializedArr: serializedArr\n  }), ele);\n});\n\nexport { ClassNames, Global, jsx as createElement, css, jsx, keyframes };\n","import memoize from '@emotion/memoize';\n\n// eslint-disable-next-line no-undef\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|disableRemotePlayback|download|draggable|encType|enterKeyHint|fetchpriority|fetchPriority|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|popover|popoverTarget|popoverTargetAction|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar isPropValid = /* #__PURE__ */memoize(function (prop) {\n  return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n  /* o */\n  && prop.charCodeAt(1) === 110\n  /* n */\n  && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport { isPropValid as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { withEmotionCache, ThemeContext } from '@emotion/react';\nimport { serializeStyles } from '@emotion/serialize';\nimport { useInsertionEffectAlwaysWithSyncFallback } from '@emotion/use-insertion-effect-with-fallbacks';\nimport { getRegisteredStyles, registerStyles, insertStyles } from '@emotion/utils';\nimport * as React from 'react';\nimport isPropValid from '@emotion/is-prop-valid';\n\nvar isDevelopment = false;\n\nvar testOmitPropsOnStringTag = isPropValid;\n\nvar testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {\n  return key !== 'theme';\n};\n\nvar getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {\n  return typeof tag === 'string' && // 96 is one less than the char code\n  // for \"a\" so this is checking that\n  // it's a lowercase character\n  tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;\n};\nvar composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {\n  var shouldForwardProp;\n\n  if (options) {\n    var optionsShouldForwardProp = options.shouldForwardProp;\n    shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {\n      return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);\n    } : optionsShouldForwardProp;\n  }\n\n  if (typeof shouldForwardProp !== 'function' && isReal) {\n    shouldForwardProp = tag.__emotion_forwardProp;\n  }\n\n  return shouldForwardProp;\n};\n\nvar Insertion = function Insertion(_ref) {\n  var cache = _ref.cache,\n      serialized = _ref.serialized,\n      isStringTag = _ref.isStringTag;\n  registerStyles(cache, serialized, isStringTag);\n  useInsertionEffectAlwaysWithSyncFallback(function () {\n    return insertStyles(cache, serialized, isStringTag);\n  });\n\n  return null;\n};\n\nvar createStyled = function createStyled(tag, options) {\n\n  var isReal = tag.__emotion_real === tag;\n  var baseTag = isReal && tag.__emotion_base || tag;\n  var identifierName;\n  var targetClassName;\n\n  if (options !== undefined) {\n    identifierName = options.label;\n    targetClassName = options.target;\n  }\n\n  var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);\n  var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);\n  var shouldUseAs = !defaultShouldForwardProp('as');\n  return function () {\n    // eslint-disable-next-line prefer-rest-params\n    var args = arguments;\n    var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];\n\n    if (identifierName !== undefined) {\n      styles.push(\"label:\" + identifierName + \";\");\n    }\n\n    if (args[0] == null || args[0].raw === undefined) {\n      // eslint-disable-next-line prefer-spread\n      styles.push.apply(styles, args);\n    } else {\n      var templateStringsArr = args[0];\n\n      styles.push(templateStringsArr[0]);\n      var len = args.length;\n      var i = 1;\n\n      for (; i < len; i++) {\n\n        styles.push(args[i], templateStringsArr[i]);\n      }\n    }\n\n    var Styled = withEmotionCache(function (props, cache, ref) {\n      var FinalTag = shouldUseAs && props.as || baseTag;\n      var className = '';\n      var classInterpolations = [];\n      var mergedProps = props;\n\n      if (props.theme == null) {\n        mergedProps = {};\n\n        for (var key in props) {\n          mergedProps[key] = props[key];\n        }\n\n        mergedProps.theme = React.useContext(ThemeContext);\n      }\n\n      if (typeof props.className === 'string') {\n        className = getRegisteredStyles(cache.registered, classInterpolations, props.className);\n      } else if (props.className != null) {\n        className = props.className + \" \";\n      }\n\n      var serialized = serializeStyles(styles.concat(classInterpolations), cache.registered, mergedProps);\n      className += cache.key + \"-\" + serialized.name;\n\n      if (targetClassName !== undefined) {\n        className += \" \" + targetClassName;\n      }\n\n      var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(FinalTag) : defaultShouldForwardProp;\n      var newProps = {};\n\n      for (var _key in props) {\n        if (shouldUseAs && _key === 'as') continue;\n\n        if (finalShouldForwardProp(_key)) {\n          newProps[_key] = props[_key];\n        }\n      }\n\n      newProps.className = className;\n\n      if (ref) {\n        newProps.ref = ref;\n      }\n\n      return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Insertion, {\n        cache: cache,\n        serialized: serialized,\n        isStringTag: typeof FinalTag === 'string'\n      }), /*#__PURE__*/React.createElement(FinalTag, newProps));\n    });\n    Styled.displayName = identifierName !== undefined ? identifierName : \"Styled(\" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + \")\";\n    Styled.defaultProps = tag.defaultProps;\n    Styled.__emotion_real = Styled;\n    Styled.__emotion_base = baseTag;\n    Styled.__emotion_styles = styles;\n    Styled.__emotion_forwardProp = shouldForwardProp;\n    Object.defineProperty(Styled, 'toString', {\n      value: function value() {\n        if (targetClassName === undefined && isDevelopment) {\n          return 'NO_COMPONENT_SELECTOR';\n        }\n\n        return \".\" + targetClassName;\n      }\n    });\n\n    Styled.withComponent = function (nextTag, nextOptions) {\n      var newStyled = createStyled(nextTag, _extends({}, options, nextOptions, {\n        shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)\n      }));\n      return newStyled.apply(void 0, styles);\n    };\n\n    return Styled;\n  };\n};\n\nexport { createStyled as default };\n","import createStyled from '../base/dist/emotion-styled-base.browser.esm.js';\nimport '@babel/runtime/helpers/extends';\nimport '@emotion/react';\nimport '@emotion/serialize';\nimport '@emotion/use-insertion-effect-with-fallbacks';\nimport '@emotion/utils';\nimport 'react';\nimport '@emotion/is-prop-valid';\n\nvar tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG\n'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];\n\n// bind it to avoid mutating the original function\nvar styled = createStyled.bind(null);\ntags.forEach(function (tagName) {\n  styled[tagName] = styled(tagName);\n});\n\nexport { styled as default };\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc');  // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n","module.exports = Function.call.bind(Object.prototype.hasOwnProperty);\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n  var loggedTypeFailures = {};\n  var has = require('./lib/has');\n\n  printWarning = function(text) {\n    var message = 'Warning: ' + text;\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) { /**/ }\n  };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n  if (process.env.NODE_ENV !== 'production') {\n    for (var typeSpecName in typeSpecs) {\n      if (has(typeSpecs, typeSpecName)) {\n        var error;\n        // Prop type validation may throw. In case they do, we don't want to\n        // fail the render phase where it didn't fail before. So we log it.\n        // After these have been cleaned up, we'll let them throw.\n        try {\n          // This is intentionally an invariant that gets caught. It's the same\n          // behavior as without this statement except with a better message.\n          if (typeof typeSpecs[typeSpecName] !== 'function') {\n            var err = Error(\n              (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n              'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.' +\n              'This often happens because of typos such as `PropTypes.function` instead of `PropTypes.func`.'\n            );\n            err.name = 'Invariant Violation';\n            throw err;\n          }\n          error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n        } catch (ex) {\n          error = ex;\n        }\n        if (error && !(error instanceof Error)) {\n          printWarning(\n            (componentName || 'React class') + ': type specification of ' +\n            location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n            'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n            'You may have forgotten to pass an argument to the type checker ' +\n            'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n            'shape all require an argument).'\n          );\n        }\n        if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n          // Only monitor this failure once because there tends to be a lot of the\n          // same error.\n          loggedTypeFailures[error.message] = true;\n\n          var stack = getStack ? getStack() : '';\n\n          printWarning(\n            'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n          );\n        }\n      }\n    }\n  }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n  if (process.env.NODE_ENV !== 'production') {\n    loggedTypeFailures = {};\n  }\n}\n\nmodule.exports = checkPropTypes;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactIs = require('react-is');\nvar assign = require('object-assign');\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\nvar has = require('./lib/has');\nvar checkPropTypes = require('./checkPropTypes');\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n  printWarning = function(text) {\n    var message = 'Warning: ' + text;\n    if (typeof console !== 'undefined') {\n      console.error(message);\n    }\n    try {\n      // --- Welcome to debugging React ---\n      // This error was thrown as a convenience so that you can use this stack\n      // to find the callsite that caused this warning to fire.\n      throw new Error(message);\n    } catch (x) {}\n  };\n}\n\nfunction emptyFunctionThatReturnsNull() {\n  return null;\n}\n\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\n  /* global Symbol */\n  var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\n  var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\n\n  /**\n   * Returns the iterator method function contained on the iterable object.\n   *\n   * Be sure to invoke the function with the iterable as context:\n   *\n   *     var iteratorFn = getIteratorFn(myIterable);\n   *     if (iteratorFn) {\n   *       var iterator = iteratorFn.call(myIterable);\n   *       ...\n   *     }\n   *\n   * @param {?object} maybeIterable\n   * @return {?function}\n   */\n  function getIteratorFn(maybeIterable) {\n    var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\n    if (typeof iteratorFn === 'function') {\n      return iteratorFn;\n    }\n  }\n\n  /**\n   * Collection of methods that allow declaration and validation of props that are\n   * supplied to React components. Example usage:\n   *\n   *   var Props = require('ReactPropTypes');\n   *   var MyArticle = React.createClass({\n   *     propTypes: {\n   *       // An optional string prop named \"description\".\n   *       description: Props.string,\n   *\n   *       // A required enum prop named \"category\".\n   *       category: Props.oneOf(['News','Photos']).isRequired,\n   *\n   *       // A prop named \"dialog\" that requires an instance of Dialog.\n   *       dialog: Props.instanceOf(Dialog).isRequired\n   *     },\n   *     render: function() { ... }\n   *   });\n   *\n   * A more formal specification of how these methods are used:\n   *\n   *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\n   *   decl := ReactPropTypes.{type}(.isRequired)?\n   *\n   * Each and every declaration produces a function with the same signature. This\n   * allows the creation of custom validation functions. For example:\n   *\n   *  var MyLink = React.createClass({\n   *    propTypes: {\n   *      // An optional string or URI prop named \"href\".\n   *      href: function(props, propName, componentName) {\n   *        var propValue = props[propName];\n   *        if (propValue != null && typeof propValue !== 'string' &&\n   *            !(propValue instanceof URI)) {\n   *          return new Error(\n   *            'Expected a string or an URI for ' + propName + ' in ' +\n   *            componentName\n   *          );\n   *        }\n   *      }\n   *    },\n   *    render: function() {...}\n   *  });\n   *\n   * @internal\n   */\n\n  var ANONYMOUS = '<<anonymous>>';\n\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\n  var ReactPropTypes = {\n    array: createPrimitiveTypeChecker('array'),\n    bigint: createPrimitiveTypeChecker('bigint'),\n    bool: createPrimitiveTypeChecker('boolean'),\n    func: createPrimitiveTypeChecker('function'),\n    number: createPrimitiveTypeChecker('number'),\n    object: createPrimitiveTypeChecker('object'),\n    string: createPrimitiveTypeChecker('string'),\n    symbol: createPrimitiveTypeChecker('symbol'),\n\n    any: createAnyTypeChecker(),\n    arrayOf: createArrayOfTypeChecker,\n    element: createElementTypeChecker(),\n    elementType: createElementTypeTypeChecker(),\n    instanceOf: createInstanceTypeChecker,\n    node: createNodeChecker(),\n    objectOf: createObjectOfTypeChecker,\n    oneOf: createEnumTypeChecker,\n    oneOfType: createUnionTypeChecker,\n    shape: createShapeTypeChecker,\n    exact: createStrictShapeTypeChecker,\n  };\n\n  /**\n   * inlined Object.is polyfill to avoid requiring consumers ship their own\n   * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n   */\n  /*eslint-disable no-self-compare*/\n  function is(x, y) {\n    // SameValue algorithm\n    if (x === y) {\n      // Steps 1-5, 7-10\n      // Steps 6.b-6.e: +0 != -0\n      return x !== 0 || 1 / x === 1 / y;\n    } else {\n      // Step 6.a: NaN == NaN\n      return x !== x && y !== y;\n    }\n  }\n  /*eslint-enable no-self-compare*/\n\n  /**\n   * We use an Error-like object for backward compatibility as people may call\n   * PropTypes directly and inspect their output. However, we don't use real\n   * Errors anymore. We don't inspect their stack anyway, and creating them\n   * is prohibitively expensive if they are created too often, such as what\n   * happens in oneOfType() for any type before the one that matched.\n   */\n  function PropTypeError(message, data) {\n    this.message = message;\n    this.data = data && typeof data === 'object' ? data: {};\n    this.stack = '';\n  }\n  // Make `instanceof Error` still work for returned errors.\n  PropTypeError.prototype = Error.prototype;\n\n  function createChainableTypeChecker(validate) {\n    if (process.env.NODE_ENV !== 'production') {\n      var manualPropTypeCallCache = {};\n      var manualPropTypeWarningCount = 0;\n    }\n    function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\n      componentName = componentName || ANONYMOUS;\n      propFullName = propFullName || propName;\n\n      if (secret !== ReactPropTypesSecret) {\n        if (throwOnDirectAccess) {\n          // New behavior only for users of `prop-types` package\n          var err = new Error(\n            'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n            'Use `PropTypes.checkPropTypes()` to call them. ' +\n            'Read more at http://fb.me/use-check-prop-types'\n          );\n          err.name = 'Invariant Violation';\n          throw err;\n        } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') {\n          // Old behavior for people using React.PropTypes\n          var cacheKey = componentName + ':' + propName;\n          if (\n            !manualPropTypeCallCache[cacheKey] &&\n            // Avoid spamming the console because they are often not actionable except for lib authors\n            manualPropTypeWarningCount < 3\n          ) {\n            printWarning(\n              'You are manually calling a React.PropTypes validation ' +\n              'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\n              'and will throw in the standalone `prop-types` package. ' +\n              'You may be seeing this warning due to a third-party PropTypes ' +\n              'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\n            );\n            manualPropTypeCallCache[cacheKey] = true;\n            manualPropTypeWarningCount++;\n          }\n        }\n      }\n      if (props[propName] == null) {\n        if (isRequired) {\n          if (props[propName] === null) {\n            return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\n          }\n          return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\n        }\n        return null;\n      } else {\n        return validate(props, propName, componentName, location, propFullName);\n      }\n    }\n\n    var chainedCheckType = checkType.bind(null, false);\n    chainedCheckType.isRequired = checkType.bind(null, true);\n\n    return chainedCheckType;\n  }\n\n  function createPrimitiveTypeChecker(expectedType) {\n    function validate(props, propName, componentName, location, propFullName, secret) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== expectedType) {\n        // `propValue` being instance of, say, date/regexp, pass the 'object'\n        // check, but we can offer a more precise error message here rather than\n        // 'of type `object`'.\n        var preciseType = getPreciseType(propValue);\n\n        return new PropTypeError(\n          'Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'),\n          {expectedType: expectedType}\n        );\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createAnyTypeChecker() {\n    return createChainableTypeChecker(emptyFunctionThatReturnsNull);\n  }\n\n  function createArrayOfTypeChecker(typeChecker) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (typeof typeChecker !== 'function') {\n        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\n      }\n      var propValue = props[propName];\n      if (!Array.isArray(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\n      }\n      for (var i = 0; i < propValue.length; i++) {\n        var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\n        if (error instanceof Error) {\n          return error;\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createElementTypeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      if (!isValidElement(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createElementTypeTypeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      if (!ReactIs.isValidElementType(propValue)) {\n        var propType = getPropType(propValue);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement type.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createInstanceTypeChecker(expectedClass) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (!(props[propName] instanceof expectedClass)) {\n        var expectedClassName = expectedClass.name || ANONYMOUS;\n        var actualClassName = getClassName(props[propName]);\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createEnumTypeChecker(expectedValues) {\n    if (!Array.isArray(expectedValues)) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (arguments.length > 1) {\n          printWarning(\n            'Invalid arguments supplied to oneOf, expected an array, got ' + arguments.length + ' arguments. ' +\n            'A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z]).'\n          );\n        } else {\n          printWarning('Invalid argument supplied to oneOf, expected an array.');\n        }\n      }\n      return emptyFunctionThatReturnsNull;\n    }\n\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      for (var i = 0; i < expectedValues.length; i++) {\n        if (is(propValue, expectedValues[i])) {\n          return null;\n        }\n      }\n\n      var valuesString = JSON.stringify(expectedValues, function replacer(key, value) {\n        var type = getPreciseType(value);\n        if (type === 'symbol') {\n          return String(value);\n        }\n        return value;\n      });\n      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + String(propValue) + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createObjectOfTypeChecker(typeChecker) {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (typeof typeChecker !== 'function') {\n        return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\n      }\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\n      }\n      for (var key in propValue) {\n        if (has(propValue, key)) {\n          var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n          if (error instanceof Error) {\n            return error;\n          }\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createUnionTypeChecker(arrayOfTypeCheckers) {\n    if (!Array.isArray(arrayOfTypeCheckers)) {\n      process.env.NODE_ENV !== 'production' ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : void 0;\n      return emptyFunctionThatReturnsNull;\n    }\n\n    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n      var checker = arrayOfTypeCheckers[i];\n      if (typeof checker !== 'function') {\n        printWarning(\n          'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\n          'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\n        );\n        return emptyFunctionThatReturnsNull;\n      }\n    }\n\n    function validate(props, propName, componentName, location, propFullName) {\n      var expectedTypes = [];\n      for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\n        var checker = arrayOfTypeCheckers[i];\n        var checkerResult = checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret);\n        if (checkerResult == null) {\n          return null;\n        }\n        if (checkerResult.data && has(checkerResult.data, 'expectedType')) {\n          expectedTypes.push(checkerResult.data.expectedType);\n        }\n      }\n      var expectedTypesMessage = (expectedTypes.length > 0) ? ', expected one of type [' + expectedTypes.join(', ') + ']': '';\n      return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`' + expectedTypesMessage + '.'));\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createNodeChecker() {\n    function validate(props, propName, componentName, location, propFullName) {\n      if (!isNode(props[propName])) {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function invalidValidatorError(componentName, location, propFullName, key, type) {\n    return new PropTypeError(\n      (componentName || 'React class') + ': ' + location + ' type `' + propFullName + '.' + key + '` is invalid; ' +\n      'it must be a function, usually from the `prop-types` package, but received `' + type + '`.'\n    );\n  }\n\n  function createShapeTypeChecker(shapeTypes) {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n      }\n      for (var key in shapeTypes) {\n        var checker = shapeTypes[key];\n        if (typeof checker !== 'function') {\n          return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n        }\n        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n        if (error) {\n          return error;\n        }\n      }\n      return null;\n    }\n    return createChainableTypeChecker(validate);\n  }\n\n  function createStrictShapeTypeChecker(shapeTypes) {\n    function validate(props, propName, componentName, location, propFullName) {\n      var propValue = props[propName];\n      var propType = getPropType(propValue);\n      if (propType !== 'object') {\n        return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\n      }\n      // We need to check all keys in case some are required but missing from props.\n      var allKeys = assign({}, props[propName], shapeTypes);\n      for (var key in allKeys) {\n        var checker = shapeTypes[key];\n        if (has(shapeTypes, key) && typeof checker !== 'function') {\n          return invalidValidatorError(componentName, location, propFullName, key, getPreciseType(checker));\n        }\n        if (!checker) {\n          return new PropTypeError(\n            'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\n            '\\nBad object: ' + JSON.stringify(props[propName], null, '  ') +\n            '\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, '  ')\n          );\n        }\n        var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\n        if (error) {\n          return error;\n        }\n      }\n      return null;\n    }\n\n    return createChainableTypeChecker(validate);\n  }\n\n  function isNode(propValue) {\n    switch (typeof propValue) {\n      case 'number':\n      case 'string':\n      case 'undefined':\n        return true;\n      case 'boolean':\n        return !propValue;\n      case 'object':\n        if (Array.isArray(propValue)) {\n          return propValue.every(isNode);\n        }\n        if (propValue === null || isValidElement(propValue)) {\n          return true;\n        }\n\n        var iteratorFn = getIteratorFn(propValue);\n        if (iteratorFn) {\n          var iterator = iteratorFn.call(propValue);\n          var step;\n          if (iteratorFn !== propValue.entries) {\n            while (!(step = iterator.next()).done) {\n              if (!isNode(step.value)) {\n                return false;\n              }\n            }\n          } else {\n            // Iterator will provide entry [k,v] tuples rather than values.\n            while (!(step = iterator.next()).done) {\n              var entry = step.value;\n              if (entry) {\n                if (!isNode(entry[1])) {\n                  return false;\n                }\n              }\n            }\n          }\n        } else {\n          return false;\n        }\n\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  function isSymbol(propType, propValue) {\n    // Native Symbol.\n    if (propType === 'symbol') {\n      return true;\n    }\n\n    // falsy value can't be a Symbol\n    if (!propValue) {\n      return false;\n    }\n\n    // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\n    if (propValue['@@toStringTag'] === 'Symbol') {\n      return true;\n    }\n\n    // Fallback for non-spec compliant Symbols which are polyfilled.\n    if (typeof Symbol === 'function' && propValue instanceof Symbol) {\n      return true;\n    }\n\n    return false;\n  }\n\n  // Equivalent of `typeof` but with special handling for array and regexp.\n  function getPropType(propValue) {\n    var propType = typeof propValue;\n    if (Array.isArray(propValue)) {\n      return 'array';\n    }\n    if (propValue instanceof RegExp) {\n      // Old webkits (at least until Android 4.0) return 'function' rather than\n      // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\n      // passes PropTypes.object.\n      return 'object';\n    }\n    if (isSymbol(propType, propValue)) {\n      return 'symbol';\n    }\n    return propType;\n  }\n\n  // This handles more types than `getPropType`. Only used for error messages.\n  // See `createPrimitiveTypeChecker`.\n  function getPreciseType(propValue) {\n    if (typeof propValue === 'undefined' || propValue === null) {\n      return '' + propValue;\n    }\n    var propType = getPropType(propValue);\n    if (propType === 'object') {\n      if (propValue instanceof Date) {\n        return 'date';\n      } else if (propValue instanceof RegExp) {\n        return 'regexp';\n      }\n    }\n    return propType;\n  }\n\n  // Returns a string that is postfixed to a warning about an invalid type.\n  // For example, \"undefined\" or \"of type array\"\n  function getPostfixForTypeWarning(value) {\n    var type = getPreciseType(value);\n    switch (type) {\n      case 'array':\n      case 'object':\n        return 'an ' + type;\n      case 'boolean':\n      case 'date':\n      case 'regexp':\n        return 'a ' + type;\n      default:\n        return type;\n    }\n  }\n\n  // Returns class name of the object, if any.\n  function getClassName(propValue) {\n    if (!propValue.constructor || !propValue.constructor.name) {\n      return ANONYMOUS;\n    }\n    return propValue.constructor.name;\n  }\n\n  ReactPropTypes.checkPropTypes = checkPropTypes;\n  ReactPropTypes.resetWarningCache = checkPropTypes.resetWarningCache;\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n\nfunction emptyFunction() {}\nfunction emptyFunctionWithReset() {}\nemptyFunctionWithReset.resetWarningCache = emptyFunction;\n\nmodule.exports = function() {\n  function shim(props, propName, componentName, location, propFullName, secret) {\n    if (secret === ReactPropTypesSecret) {\n      // It is still safe when called from React.\n      return;\n    }\n    var err = new Error(\n      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\n      'Use PropTypes.checkPropTypes() to call them. ' +\n      'Read more at http://fb.me/use-check-prop-types'\n    );\n    err.name = 'Invariant Violation';\n    throw err;\n  };\n  shim.isRequired = shim;\n  function getShim() {\n    return shim;\n  };\n  // Important!\n  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.\n  var ReactPropTypes = {\n    array: shim,\n    bigint: shim,\n    bool: shim,\n    func: shim,\n    number: shim,\n    object: shim,\n    string: shim,\n    symbol: shim,\n\n    any: shim,\n    arrayOf: getShim,\n    element: shim,\n    elementType: shim,\n    instanceOf: getShim,\n    node: shim,\n    objectOf: getShim,\n    oneOf: getShim,\n    oneOfType: getShim,\n    shape: getShim,\n    exact: getShim,\n\n    checkPropTypes: emptyFunctionWithReset,\n    resetWarningCache: emptyFunction\n  };\n\n  ReactPropTypes.PropTypes = ReactPropTypes;\n\n  return ReactPropTypes;\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nif (process.env.NODE_ENV !== 'production') {\n  var ReactIs = require('react-is');\n\n  // By explicitly using `prop-types` you are opting into new development behavior.\n  // http://fb.me/prop-types-in-prod\n  var throwOnDirectAccess = true;\n  module.exports = require('./factoryWithTypeCheckers')(ReactIs.isElement, throwOnDirectAccess);\n} else {\n  // By explicitly using `prop-types` you are opting into new production behavior.\n  // http://fb.me/prop-types-in-prod\n  module.exports = require('./factoryWithThrowingShims')();\n}\n","'use client';\n\nimport PropTypes from 'prop-types';\nimport { Global } from '@emotion/react';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction isEmpty(obj) {\n  return obj === undefined || obj === null || Object.keys(obj).length === 0;\n}\nexport default function GlobalStyles(props) {\n  const {\n    styles,\n    defaultTheme = {}\n  } = props;\n  const globalStyles = typeof styles === 'function' ? themeInput => styles(isEmpty(themeInput) ? defaultTheme : themeInput) : styles;\n  return /*#__PURE__*/_jsx(Global, {\n    styles: globalStyles\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? GlobalStyles.propTypes = {\n  defaultTheme: PropTypes.object,\n  styles: PropTypes.oneOfType([PropTypes.array, PropTypes.string, PropTypes.object, PropTypes.func])\n} : void 0;","/**\n * @mui/styled-engine v7.3.5\n *\n * @license MIT\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use client';\n\n/* eslint-disable no-underscore-dangle */\nimport emStyled from '@emotion/styled';\nimport { serializeStyles as emSerializeStyles } from '@emotion/serialize';\nexport default function styled(tag, options) {\n  const stylesFactory = emStyled(tag, options);\n  if (process.env.NODE_ENV !== 'production') {\n    return (...styles) => {\n      const component = typeof tag === 'string' ? `\"${tag}\"` : 'component';\n      if (styles.length === 0) {\n        console.error([`MUI: Seems like you called \\`styled(${component})()\\` without a \\`style\\` argument.`, 'You must provide a `styles` argument: `styled(\"div\")(styleYouForgotToPass)`.'].join('\\n'));\n      } else if (styles.some(style => style === undefined)) {\n        console.error(`MUI: the styled(${component})(...args) API requires all its args to be defined.`);\n      }\n      return stylesFactory(...styles);\n    };\n  }\n  return stylesFactory;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_mutateStyles(tag, processor) {\n  // Emotion attaches all the styles as `__emotion_styles`.\n  // Ref: https://github.com/emotion-js/emotion/blob/16d971d0da229596d6bcc39d282ba9753c9ee7cf/packages/styled/src/base.js#L186\n  if (Array.isArray(tag.__emotion_styles)) {\n    tag.__emotion_styles = processor(tag.__emotion_styles);\n  }\n}\n\n// Emotion only accepts an array, but we want to avoid allocations\nconst wrapper = [];\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_serializeStyles(styles) {\n  wrapper[0] = styles;\n  return emSerializeStyles(wrapper);\n}\nexport { ThemeContext, keyframes, css } from '@emotion/react';\nexport { default as StyledEngineProvider } from \"./StyledEngineProvider/index.js\";\nexport { default as GlobalStyles } from \"./GlobalStyles/index.js\";","/**\n * @license React\n * react-is.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n  REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction typeOf(object) {\n  if (\"object\" === typeof object && null !== object) {\n    var $$typeof = object.$$typeof;\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        switch (((object = object.type), object)) {\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n          case REACT_SUSPENSE_LIST_TYPE:\n          case REACT_VIEW_TRANSITION_TYPE:\n            return object;\n          default:\n            switch (((object = object && object.$$typeof), object)) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n                return object;\n              case REACT_CONSUMER_TYPE:\n                return object;\n              default:\n                return $$typeof;\n            }\n        }\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n}\nexports.ContextConsumer = REACT_CONSUMER_TYPE;\nexports.ContextProvider = REACT_CONTEXT_TYPE;\nexports.Element = REACT_ELEMENT_TYPE;\nexports.ForwardRef = REACT_FORWARD_REF_TYPE;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Lazy = REACT_LAZY_TYPE;\nexports.Memo = REACT_MEMO_TYPE;\nexports.Portal = REACT_PORTAL_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nexports.isContextConsumer = function (object) {\n  return typeOf(object) === REACT_CONSUMER_TYPE;\n};\nexports.isContextProvider = function (object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n};\nexports.isElement = function (object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n};\nexports.isForwardRef = function (object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n};\nexports.isFragment = function (object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n};\nexports.isLazy = function (object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n};\nexports.isMemo = function (object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n};\nexports.isPortal = function (object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n};\nexports.isProfiler = function (object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n};\nexports.isStrictMode = function (object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n};\nexports.isSuspense = function (object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n};\nexports.isSuspenseList = function (object) {\n  return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n};\nexports.isValidElementType = function (type) {\n  return \"string\" === typeof type ||\n    \"function\" === typeof type ||\n    type === REACT_FRAGMENT_TYPE ||\n    type === REACT_PROFILER_TYPE ||\n    type === REACT_STRICT_MODE_TYPE ||\n    type === REACT_SUSPENSE_TYPE ||\n    type === REACT_SUSPENSE_LIST_TYPE ||\n    (\"object\" === typeof type &&\n      null !== type &&\n      (type.$$typeof === REACT_LAZY_TYPE ||\n        type.$$typeof === REACT_MEMO_TYPE ||\n        type.$$typeof === REACT_CONTEXT_TYPE ||\n        type.$$typeof === REACT_CONSUMER_TYPE ||\n        type.$$typeof === REACT_FORWARD_REF_TYPE ||\n        type.$$typeof === REACT_CLIENT_REFERENCE ||\n        void 0 !== type.getModuleId))\n    ? !0\n    : !1;\n};\nexports.typeOf = typeOf;\n","/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n  (function () {\n    function typeOf(object) {\n      if (\"object\" === typeof object && null !== object) {\n        var $$typeof = object.$$typeof;\n        switch ($$typeof) {\n          case REACT_ELEMENT_TYPE:\n            switch (((object = object.type), object)) {\n              case REACT_FRAGMENT_TYPE:\n              case REACT_PROFILER_TYPE:\n              case REACT_STRICT_MODE_TYPE:\n              case REACT_SUSPENSE_TYPE:\n              case REACT_SUSPENSE_LIST_TYPE:\n              case REACT_VIEW_TRANSITION_TYPE:\n                return object;\n              default:\n                switch (((object = object && object.$$typeof), object)) {\n                  case REACT_CONTEXT_TYPE:\n                  case REACT_FORWARD_REF_TYPE:\n                  case REACT_LAZY_TYPE:\n                  case REACT_MEMO_TYPE:\n                    return object;\n                  case REACT_CONSUMER_TYPE:\n                    return object;\n                  default:\n                    return $$typeof;\n                }\n            }\n          case REACT_PORTAL_TYPE:\n            return $$typeof;\n        }\n      }\n    }\n    var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n      REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n      REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n      REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n      REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n      REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n      REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n      REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n      REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n      REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n      REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n      REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n      REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n      REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\n    exports.ContextConsumer = REACT_CONSUMER_TYPE;\n    exports.ContextProvider = REACT_CONTEXT_TYPE;\n    exports.Element = REACT_ELEMENT_TYPE;\n    exports.ForwardRef = REACT_FORWARD_REF_TYPE;\n    exports.Fragment = REACT_FRAGMENT_TYPE;\n    exports.Lazy = REACT_LAZY_TYPE;\n    exports.Memo = REACT_MEMO_TYPE;\n    exports.Portal = REACT_PORTAL_TYPE;\n    exports.Profiler = REACT_PROFILER_TYPE;\n    exports.StrictMode = REACT_STRICT_MODE_TYPE;\n    exports.Suspense = REACT_SUSPENSE_TYPE;\n    exports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\n    exports.isContextConsumer = function (object) {\n      return typeOf(object) === REACT_CONSUMER_TYPE;\n    };\n    exports.isContextProvider = function (object) {\n      return typeOf(object) === REACT_CONTEXT_TYPE;\n    };\n    exports.isElement = function (object) {\n      return (\n        \"object\" === typeof object &&\n        null !== object &&\n        object.$$typeof === REACT_ELEMENT_TYPE\n      );\n    };\n    exports.isForwardRef = function (object) {\n      return typeOf(object) === REACT_FORWARD_REF_TYPE;\n    };\n    exports.isFragment = function (object) {\n      return typeOf(object) === REACT_FRAGMENT_TYPE;\n    };\n    exports.isLazy = function (object) {\n      return typeOf(object) === REACT_LAZY_TYPE;\n    };\n    exports.isMemo = function (object) {\n      return typeOf(object) === REACT_MEMO_TYPE;\n    };\n    exports.isPortal = function (object) {\n      return typeOf(object) === REACT_PORTAL_TYPE;\n    };\n    exports.isProfiler = function (object) {\n      return typeOf(object) === REACT_PROFILER_TYPE;\n    };\n    exports.isStrictMode = function (object) {\n      return typeOf(object) === REACT_STRICT_MODE_TYPE;\n    };\n    exports.isSuspense = function (object) {\n      return typeOf(object) === REACT_SUSPENSE_TYPE;\n    };\n    exports.isSuspenseList = function (object) {\n      return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n    };\n    exports.isValidElementType = function (type) {\n      return \"string\" === typeof type ||\n        \"function\" === typeof type ||\n        type === REACT_FRAGMENT_TYPE ||\n        type === REACT_PROFILER_TYPE ||\n        type === REACT_STRICT_MODE_TYPE ||\n        type === REACT_SUSPENSE_TYPE ||\n        type === REACT_SUSPENSE_LIST_TYPE ||\n        (\"object\" === typeof type &&\n          null !== type &&\n          (type.$$typeof === REACT_LAZY_TYPE ||\n            type.$$typeof === REACT_MEMO_TYPE ||\n            type.$$typeof === REACT_CONTEXT_TYPE ||\n            type.$$typeof === REACT_CONSUMER_TYPE ||\n            type.$$typeof === REACT_FORWARD_REF_TYPE ||\n            type.$$typeof === REACT_CLIENT_REFERENCE ||\n            void 0 !== type.getModuleId))\n        ? !0\n        : !1;\n    };\n    exports.typeOf = typeOf;\n  })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","import * as React from 'react';\nimport { isValidElementType } from 'react-is';\n\n// https://github.com/sindresorhus/is-plain-obj/blob/main/index.js\nexport function isPlainObject(item) {\n  if (typeof item !== 'object' || item === null) {\n    return false;\n  }\n  const prototype = Object.getPrototypeOf(item);\n  return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in item) && !(Symbol.iterator in item);\n}\nfunction deepClone(source) {\n  if (/*#__PURE__*/React.isValidElement(source) || isValidElementType(source) || !isPlainObject(source)) {\n    return source;\n  }\n  const output = {};\n  Object.keys(source).forEach(key => {\n    output[key] = deepClone(source[key]);\n  });\n  return output;\n}\n\n/**\n * Merge objects deeply.\n * It will shallow copy React elements.\n *\n * If `options.clone` is set to `false` the source object will be merged directly into the target object.\n *\n * @example\n * ```ts\n * deepmerge({ a: { b: 1 }, d: 2 }, { a: { c: 2 }, d: 4 });\n * // => { a: { b: 1, c: 2 }, d: 4 }\n * ````\n *\n * @param target The target object.\n * @param source The source object.\n * @param options The merge options.\n * @param options.clone Set to `false` to merge the source object directly into the target object.\n * @returns The merged object.\n */\nexport default function deepmerge(target, source, options = {\n  clone: true\n}) {\n  const output = options.clone ? {\n    ...target\n  } : target;\n  if (isPlainObject(target) && isPlainObject(source)) {\n    Object.keys(source).forEach(key => {\n      if (/*#__PURE__*/React.isValidElement(source[key]) || isValidElementType(source[key])) {\n        output[key] = source[key];\n      } else if (isPlainObject(source[key]) &&\n      // Avoid prototype pollution\n      Object.prototype.hasOwnProperty.call(target, key) && isPlainObject(target[key])) {\n        // Since `output` is a clone of `target` and we have narrowed `target` in this block we can cast to the same type.\n        output[key] = deepmerge(target[key], source[key], options);\n      } else if (options.clone) {\n        output[key] = isPlainObject(source[key]) ? deepClone(source[key]) : source[key];\n      } else {\n        output[key] = source[key];\n      }\n    });\n  }\n  return output;\n}","// Sorted ASC by size. That's important.\n// It can't be configured as it's used statically for propTypes.\nexport const breakpointKeys = ['xs', 'sm', 'md', 'lg', 'xl'];\nconst sortBreakpointsValues = values => {\n  const breakpointsAsArray = Object.keys(values).map(key => ({\n    key,\n    val: values[key]\n  })) || [];\n  // Sort in ascending order\n  breakpointsAsArray.sort((breakpoint1, breakpoint2) => breakpoint1.val - breakpoint2.val);\n  return breakpointsAsArray.reduce((acc, obj) => {\n    return {\n      ...acc,\n      [obj.key]: obj.val\n    };\n  }, {});\n};\n\n// Keep in mind that @media is inclusive by the CSS specification.\nexport default function createBreakpoints(breakpoints) {\n  const {\n    // The breakpoint **start** at this value.\n    // For instance with the first breakpoint xs: [xs, sm).\n    values = {\n      xs: 0,\n      // phone\n      sm: 600,\n      // tablet\n      md: 900,\n      // small laptop\n      lg: 1200,\n      // desktop\n      xl: 1536 // large screen\n    },\n    unit = 'px',\n    step = 5,\n    ...other\n  } = breakpoints;\n  const sortedValues = sortBreakpointsValues(values);\n  const keys = Object.keys(sortedValues);\n  function up(key) {\n    const value = typeof values[key] === 'number' ? values[key] : key;\n    return `@media (min-width:${value}${unit})`;\n  }\n  function down(key) {\n    const value = typeof values[key] === 'number' ? values[key] : key;\n    return `@media (max-width:${value - step / 100}${unit})`;\n  }\n  function between(start, end) {\n    const endIndex = keys.indexOf(end);\n    return `@media (min-width:${typeof values[start] === 'number' ? values[start] : start}${unit}) and ` + `(max-width:${(endIndex !== -1 && typeof values[keys[endIndex]] === 'number' ? values[keys[endIndex]] : end) - step / 100}${unit})`;\n  }\n  function only(key) {\n    if (keys.indexOf(key) + 1 < keys.length) {\n      return between(key, keys[keys.indexOf(key) + 1]);\n    }\n    return up(key);\n  }\n  function not(key) {\n    // handle first and last key separately, for better readability\n    const keyIndex = keys.indexOf(key);\n    if (keyIndex === 0) {\n      return up(keys[1]);\n    }\n    if (keyIndex === keys.length - 1) {\n      return down(keys[keyIndex]);\n    }\n    return between(key, keys[keys.indexOf(key) + 1]).replace('@media', '@media not all and');\n  }\n  return {\n    keys,\n    values: sortedValues,\n    up,\n    down,\n    between,\n    only,\n    not,\n    unit,\n    ...other\n  };\n}","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n/**\n * For using in `sx` prop to sort the breakpoint from low to high.\n * Note: this function does not work and will not support multiple units.\n *       e.g. input: { '@container (min-width:300px)': '1rem', '@container (min-width:40rem)': '2rem' }\n *            output: { '@container (min-width:40rem)': '2rem', '@container (min-width:300px)': '1rem' } // since 40 < 300 even though 40rem > 300px\n */\nexport function sortContainerQueries(theme, css) {\n  if (!theme.containerQueries) {\n    return css;\n  }\n  const sorted = Object.keys(css).filter(key => key.startsWith('@container')).sort((a, b) => {\n    const regex = /min-width:\\s*([0-9.]+)/;\n    return +(a.match(regex)?.[1] || 0) - +(b.match(regex)?.[1] || 0);\n  });\n  if (!sorted.length) {\n    return css;\n  }\n  return sorted.reduce((acc, key) => {\n    const value = css[key];\n    delete acc[key];\n    acc[key] = value;\n    return acc;\n  }, {\n    ...css\n  });\n}\nexport function isCqShorthand(breakpointKeys, value) {\n  return value === '@' || value.startsWith('@') && (breakpointKeys.some(key => value.startsWith(`@${key}`)) || !!value.match(/^@\\d/));\n}\nexport function getContainerQuery(theme, shorthand) {\n  const matches = shorthand.match(/^@([^/]+)?\\/?(.+)?$/);\n  if (!matches) {\n    if (process.env.NODE_ENV !== 'production') {\n      throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The provided shorthand ${`(${shorthand})`} is invalid. The format should be \\`@<breakpoint | number>\\` or \\`@<breakpoint | number>/<container>\\`.\\n` + 'For example, `@sm` or `@600` or `@40rem/sidebar`.' : _formatErrorMessage(18, `(${shorthand})`));\n    }\n    return null;\n  }\n  const [, containerQuery, containerName] = matches;\n  const value = Number.isNaN(+containerQuery) ? containerQuery || 0 : +containerQuery;\n  return theme.containerQueries(containerName).up(value);\n}\nexport default function cssContainerQueries(themeInput) {\n  const toContainerQuery = (mediaQuery, name) => mediaQuery.replace('@media', name ? `@container ${name}` : '@container');\n  function attachCq(node, name) {\n    node.up = (...args) => toContainerQuery(themeInput.breakpoints.up(...args), name);\n    node.down = (...args) => toContainerQuery(themeInput.breakpoints.down(...args), name);\n    node.between = (...args) => toContainerQuery(themeInput.breakpoints.between(...args), name);\n    node.only = (...args) => toContainerQuery(themeInput.breakpoints.only(...args), name);\n    node.not = (...args) => {\n      const result = toContainerQuery(themeInput.breakpoints.not(...args), name);\n      if (result.includes('not all and')) {\n        // `@container` does not work with `not all and`, so need to invert the logic\n        return result.replace('not all and ', '').replace('min-width:', 'width<').replace('max-width:', 'width>').replace('and', 'or');\n      }\n      return result;\n    };\n  }\n  const node = {};\n  const containerQueries = name => {\n    attachCq(node, name);\n    return node;\n  };\n  attachCq(containerQueries);\n  return {\n    ...themeInput,\n    containerQueries\n  };\n}","const shape = {\n  borderRadius: 4\n};\nexport default shape;","import PropTypes from 'prop-types';\nconst responsivePropType = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.object, PropTypes.array]) : {};\nexport default responsivePropType;","import deepmerge from '@mui/utils/deepmerge';\nfunction merge(acc, item) {\n  if (!item) {\n    return acc;\n  }\n  return deepmerge(acc, item, {\n    clone: false // No need to clone deep, it's way faster.\n  });\n}\nexport default merge;","import PropTypes from 'prop-types';\nimport deepmerge from '@mui/utils/deepmerge';\nimport merge from \"../merge/index.js\";\nimport { isCqShorthand, getContainerQuery } from \"../cssContainerQueries/index.js\";\n\n// The breakpoint **start** at this value.\n// For instance with the first breakpoint xs: [xs, sm[.\nexport const values = {\n  xs: 0,\n  // phone\n  sm: 600,\n  // tablet\n  md: 900,\n  // small laptop\n  lg: 1200,\n  // desktop\n  xl: 1536 // large screen\n};\nconst defaultBreakpoints = {\n  // Sorted ASC by size. That's important.\n  // It can't be configured as it's used statically for propTypes.\n  keys: ['xs', 'sm', 'md', 'lg', 'xl'],\n  up: key => `@media (min-width:${values[key]}px)`\n};\nconst defaultContainerQueries = {\n  containerQueries: containerName => ({\n    up: key => {\n      let result = typeof key === 'number' ? key : values[key] || key;\n      if (typeof result === 'number') {\n        result = `${result}px`;\n      }\n      return containerName ? `@container ${containerName} (min-width:${result})` : `@container (min-width:${result})`;\n    }\n  })\n};\nexport function handleBreakpoints(props, propValue, styleFromPropValue) {\n  const theme = props.theme || {};\n  if (Array.isArray(propValue)) {\n    const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n    return propValue.reduce((acc, item, index) => {\n      acc[themeBreakpoints.up(themeBreakpoints.keys[index])] = styleFromPropValue(propValue[index]);\n      return acc;\n    }, {});\n  }\n  if (typeof propValue === 'object') {\n    const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n    return Object.keys(propValue).reduce((acc, breakpoint) => {\n      if (isCqShorthand(themeBreakpoints.keys, breakpoint)) {\n        const containerKey = getContainerQuery(theme.containerQueries ? theme : defaultContainerQueries, breakpoint);\n        if (containerKey) {\n          acc[containerKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n        }\n      }\n      // key is breakpoint\n      else if (Object.keys(themeBreakpoints.values || values).includes(breakpoint)) {\n        const mediaKey = themeBreakpoints.up(breakpoint);\n        acc[mediaKey] = styleFromPropValue(propValue[breakpoint], breakpoint);\n      } else {\n        const cssKey = breakpoint;\n        acc[cssKey] = propValue[cssKey];\n      }\n      return acc;\n    }, {});\n  }\n  const output = styleFromPropValue(propValue);\n  return output;\n}\nfunction breakpoints(styleFunction) {\n  // false positive\n  // eslint-disable-next-line react/function-component-definition\n  const newStyleFunction = props => {\n    const theme = props.theme || {};\n    const base = styleFunction(props);\n    const themeBreakpoints = theme.breakpoints || defaultBreakpoints;\n    const extended = themeBreakpoints.keys.reduce((acc, key) => {\n      if (props[key]) {\n        acc = acc || {};\n        acc[themeBreakpoints.up(key)] = styleFunction({\n          theme,\n          ...props[key]\n        });\n      }\n      return acc;\n    }, null);\n    return merge(base, extended);\n  };\n  newStyleFunction.propTypes = process.env.NODE_ENV !== 'production' ? {\n    ...styleFunction.propTypes,\n    xs: PropTypes.object,\n    sm: PropTypes.object,\n    md: PropTypes.object,\n    lg: PropTypes.object,\n    xl: PropTypes.object\n  } : {};\n  newStyleFunction.filterProps = ['xs', 'sm', 'md', 'lg', 'xl', ...styleFunction.filterProps];\n  return newStyleFunction;\n}\nexport function createEmptyBreakpointObject(breakpointsInput = {}) {\n  const breakpointsInOrder = breakpointsInput.keys?.reduce((acc, key) => {\n    const breakpointStyleKey = breakpointsInput.up(key);\n    acc[breakpointStyleKey] = {};\n    return acc;\n  }, {});\n  return breakpointsInOrder || {};\n}\nexport function removeUnusedBreakpoints(breakpointKeys, style) {\n  return breakpointKeys.reduce((acc, key) => {\n    const breakpointOutput = acc[key];\n    const isBreakpointUnused = !breakpointOutput || Object.keys(breakpointOutput).length === 0;\n    if (isBreakpointUnused) {\n      delete acc[key];\n    }\n    return acc;\n  }, style);\n}\nexport function mergeBreakpointsInOrder(breakpointsInput, ...styles) {\n  const emptyBreakpoints = createEmptyBreakpointObject(breakpointsInput);\n  const mergedOutput = [emptyBreakpoints, ...styles].reduce((prev, next) => deepmerge(prev, next), {});\n  return removeUnusedBreakpoints(Object.keys(emptyBreakpoints), mergedOutput);\n}\n\n// compute base for responsive values; e.g.,\n// [1,2,3] => {xs: true, sm: true, md: true}\n// {xs: 1, sm: 2, md: 3} => {xs: true, sm: true, md: true}\nexport function computeBreakpointsBase(breakpointValues, themeBreakpoints) {\n  // fixed value\n  if (typeof breakpointValues !== 'object') {\n    return {};\n  }\n  const base = {};\n  const breakpointsKeys = Object.keys(themeBreakpoints);\n  if (Array.isArray(breakpointValues)) {\n    breakpointsKeys.forEach((breakpoint, i) => {\n      if (i < breakpointValues.length) {\n        base[breakpoint] = true;\n      }\n    });\n  } else {\n    breakpointsKeys.forEach(breakpoint => {\n      if (breakpointValues[breakpoint] != null) {\n        base[breakpoint] = true;\n      }\n    });\n  }\n  return base;\n}\nexport function resolveBreakpointValues({\n  values: breakpointValues,\n  breakpoints: themeBreakpoints,\n  base: customBase\n}) {\n  const base = customBase || computeBreakpointsBase(breakpointValues, themeBreakpoints);\n  const keys = Object.keys(base);\n  if (keys.length === 0) {\n    return breakpointValues;\n  }\n  let previous;\n  return keys.reduce((acc, breakpoint, i) => {\n    if (Array.isArray(breakpointValues)) {\n      acc[breakpoint] = breakpointValues[i] != null ? breakpointValues[i] : breakpointValues[previous];\n      previous = i;\n    } else if (typeof breakpointValues === 'object') {\n      acc[breakpoint] = breakpointValues[breakpoint] != null ? breakpointValues[breakpoint] : breakpointValues[previous];\n      previous = breakpoint;\n    } else {\n      acc[breakpoint] = breakpointValues;\n    }\n    return acc;\n  }, {});\n}\nexport default breakpoints;","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n// It should to be noted that this function isn't equivalent to `text-transform: capitalize`.\n//\n// A strict capitalization should uppercase the first letter of each word in the sentence.\n// We only handle the first word.\nexport default function capitalize(string) {\n  if (typeof string !== 'string') {\n    throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: `capitalize(string)` expects a string argument.' : _formatErrorMessage(7));\n  }\n  return string.charAt(0).toUpperCase() + string.slice(1);\n}","import capitalize from '@mui/utils/capitalize';\nimport responsivePropType from \"../responsivePropType/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nexport function getPath(obj, path, checkVars = true) {\n  if (!path || typeof path !== 'string') {\n    return null;\n  }\n\n  // Check if CSS variables are used\n  if (obj && obj.vars && checkVars) {\n    const val = `vars.${path}`.split('.').reduce((acc, item) => acc && acc[item] ? acc[item] : null, obj);\n    if (val != null) {\n      return val;\n    }\n  }\n  return path.split('.').reduce((acc, item) => {\n    if (acc && acc[item] != null) {\n      return acc[item];\n    }\n    return null;\n  }, obj);\n}\nexport function getStyleValue(themeMapping, transform, propValueFinal, userValue = propValueFinal) {\n  let value;\n  if (typeof themeMapping === 'function') {\n    value = themeMapping(propValueFinal);\n  } else if (Array.isArray(themeMapping)) {\n    value = themeMapping[propValueFinal] || userValue;\n  } else {\n    value = getPath(themeMapping, propValueFinal) || userValue;\n  }\n  if (transform) {\n    value = transform(value, userValue, themeMapping);\n  }\n  return value;\n}\nfunction style(options) {\n  const {\n    prop,\n    cssProperty = options.prop,\n    themeKey,\n    transform\n  } = options;\n\n  // false positive\n  // eslint-disable-next-line react/function-component-definition\n  const fn = props => {\n    if (props[prop] == null) {\n      return null;\n    }\n    const propValue = props[prop];\n    const theme = props.theme;\n    const themeMapping = getPath(theme, themeKey) || {};\n    const styleFromPropValue = propValueFinal => {\n      let value = getStyleValue(themeMapping, transform, propValueFinal);\n      if (propValueFinal === value && typeof propValueFinal === 'string') {\n        // Haven't found value\n        value = getStyleValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n      }\n      if (cssProperty === false) {\n        return value;\n      }\n      return {\n        [cssProperty]: value\n      };\n    };\n    return handleBreakpoints(props, propValue, styleFromPropValue);\n  };\n  fn.propTypes = process.env.NODE_ENV !== 'production' ? {\n    [prop]: responsivePropType\n  } : {};\n  fn.filterProps = [prop];\n  return fn;\n}\nexport default style;","export default function memoize(fn) {\n  const cache = {};\n  return arg => {\n    if (cache[arg] === undefined) {\n      cache[arg] = fn(arg);\n    }\n    return cache[arg];\n  };\n}","import responsivePropType from \"../responsivePropType/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nimport { getPath } from \"../style/index.js\";\nimport merge from \"../merge/index.js\";\nimport memoize from \"../memoize/index.js\";\nconst properties = {\n  m: 'margin',\n  p: 'padding'\n};\nconst directions = {\n  t: 'Top',\n  r: 'Right',\n  b: 'Bottom',\n  l: 'Left',\n  x: ['Left', 'Right'],\n  y: ['Top', 'Bottom']\n};\nconst aliases = {\n  marginX: 'mx',\n  marginY: 'my',\n  paddingX: 'px',\n  paddingY: 'py'\n};\n\n// memoize() impact:\n// From 300,000 ops/sec\n// To 350,000 ops/sec\nconst getCssProperties = memoize(prop => {\n  // It's not a shorthand notation.\n  if (prop.length > 2) {\n    if (aliases[prop]) {\n      prop = aliases[prop];\n    } else {\n      return [prop];\n    }\n  }\n  const [a, b] = prop.split('');\n  const property = properties[a];\n  const direction = directions[b] || '';\n  return Array.isArray(direction) ? direction.map(dir => property + dir) : [property + direction];\n});\nexport const marginKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd'];\nexport const paddingKeys = ['p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd'];\nconst spacingKeys = [...marginKeys, ...paddingKeys];\nexport function createUnaryUnit(theme, themeKey, defaultValue, propName) {\n  const themeSpacing = getPath(theme, themeKey, true) ?? defaultValue;\n  if (typeof themeSpacing === 'number' || typeof themeSpacing === 'string') {\n    return val => {\n      if (typeof val === 'string') {\n        return val;\n      }\n      if (process.env.NODE_ENV !== 'production') {\n        if (typeof val !== 'number') {\n          console.error(`MUI: Expected ${propName} argument to be a number or a string, got ${val}.`);\n        }\n      }\n      if (typeof themeSpacing === 'string') {\n        if (themeSpacing.startsWith('var(') && val === 0) {\n          return 0;\n        }\n        if (themeSpacing.startsWith('var(') && val === 1) {\n          return themeSpacing;\n        }\n        return `calc(${val} * ${themeSpacing})`;\n      }\n      return themeSpacing * val;\n    };\n  }\n  if (Array.isArray(themeSpacing)) {\n    return val => {\n      if (typeof val === 'string') {\n        return val;\n      }\n      const abs = Math.abs(val);\n      if (process.env.NODE_ENV !== 'production') {\n        if (!Number.isInteger(abs)) {\n          console.error([`MUI: The \\`theme.${themeKey}\\` array type cannot be combined with non integer values.` + `You should either use an integer value that can be used as index, or define the \\`theme.${themeKey}\\` as a number.`].join('\\n'));\n        } else if (abs > themeSpacing.length - 1) {\n          console.error([`MUI: The value provided (${abs}) overflows.`, `The supported values are: ${JSON.stringify(themeSpacing)}.`, `${abs} > ${themeSpacing.length - 1}, you need to add the missing values.`].join('\\n'));\n        }\n      }\n      const transformed = themeSpacing[abs];\n      if (val >= 0) {\n        return transformed;\n      }\n      if (typeof transformed === 'number') {\n        return -transformed;\n      }\n      if (typeof transformed === 'string' && transformed.startsWith('var(')) {\n        return `calc(-1 * ${transformed})`;\n      }\n      return `-${transformed}`;\n    };\n  }\n  if (typeof themeSpacing === 'function') {\n    return themeSpacing;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    console.error([`MUI: The \\`theme.${themeKey}\\` value (${themeSpacing}) is invalid.`, 'It should be a number, an array or a function.'].join('\\n'));\n  }\n  return () => undefined;\n}\nexport function createUnarySpacing(theme) {\n  return createUnaryUnit(theme, 'spacing', 8, 'spacing');\n}\nexport function getValue(transformer, propValue) {\n  if (typeof propValue === 'string' || propValue == null) {\n    return propValue;\n  }\n  return transformer(propValue);\n}\nexport function getStyleFromPropValue(cssProperties, transformer) {\n  return propValue => cssProperties.reduce((acc, cssProperty) => {\n    acc[cssProperty] = getValue(transformer, propValue);\n    return acc;\n  }, {});\n}\nfunction resolveCssProperty(props, keys, prop, transformer) {\n  // Using a hash computation over an array iteration could be faster, but with only 28 items,\n  // it's doesn't worth the bundle size.\n  if (!keys.includes(prop)) {\n    return null;\n  }\n  const cssProperties = getCssProperties(prop);\n  const styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);\n  const propValue = props[prop];\n  return handleBreakpoints(props, propValue, styleFromPropValue);\n}\nfunction style(props, keys) {\n  const transformer = createUnarySpacing(props.theme);\n  return Object.keys(props).map(prop => resolveCssProperty(props, keys, prop, transformer)).reduce(merge, {});\n}\nexport function margin(props) {\n  return style(props, marginKeys);\n}\nmargin.propTypes = process.env.NODE_ENV !== 'production' ? marginKeys.reduce((obj, key) => {\n  obj[key] = responsivePropType;\n  return obj;\n}, {}) : {};\nmargin.filterProps = marginKeys;\nexport function padding(props) {\n  return style(props, paddingKeys);\n}\npadding.propTypes = process.env.NODE_ENV !== 'production' ? paddingKeys.reduce((obj, key) => {\n  obj[key] = responsivePropType;\n  return obj;\n}, {}) : {};\npadding.filterProps = paddingKeys;\nfunction spacing(props) {\n  return style(props, spacingKeys);\n}\nspacing.propTypes = process.env.NODE_ENV !== 'production' ? spacingKeys.reduce((obj, key) => {\n  obj[key] = responsivePropType;\n  return obj;\n}, {}) : {};\nspacing.filterProps = spacingKeys;\nexport default spacing;","import { createUnarySpacing } from \"../spacing/index.js\";\n\n// The different signatures imply different meaning for their arguments that can't be expressed structurally.\n// We express the difference with variable names.\n\nexport default function createSpacing(spacingInput = 8,\n// Material Design layouts are visually balanced. Most measurements align to an 8dp grid, which aligns both spacing and the overall layout.\n// Smaller components, such as icons, can align to a 4dp grid.\n// https://m2.material.io/design/layout/understanding-layout.html\ntransform = createUnarySpacing({\n  spacing: spacingInput\n})) {\n  // Already transformed.\n  if (spacingInput.mui) {\n    return spacingInput;\n  }\n  const spacing = (...argsInput) => {\n    if (process.env.NODE_ENV !== 'production') {\n      if (!(argsInput.length <= 4)) {\n        console.error(`MUI: Too many arguments provided, expected between 0 and 4, got ${argsInput.length}`);\n      }\n    }\n    const args = argsInput.length === 0 ? [1] : argsInput;\n    return args.map(argument => {\n      const output = transform(argument);\n      return typeof output === 'number' ? `${output}px` : output;\n    }).join(' ');\n  };\n  spacing.mui = true;\n  return spacing;\n}","import merge from \"../merge/index.js\";\nfunction compose(...styles) {\n  const handlers = styles.reduce((acc, style) => {\n    style.filterProps.forEach(prop => {\n      acc[prop] = style;\n    });\n    return acc;\n  }, {});\n\n  // false positive\n  // eslint-disable-next-line react/function-component-definition\n  const fn = props => {\n    return Object.keys(props).reduce((acc, prop) => {\n      if (handlers[prop]) {\n        return merge(acc, handlers[prop](props));\n      }\n      return acc;\n    }, {});\n  };\n  fn.propTypes = process.env.NODE_ENV !== 'production' ? styles.reduce((acc, style) => Object.assign(acc, style.propTypes), {}) : {};\n  fn.filterProps = styles.reduce((acc, style) => acc.concat(style.filterProps), []);\n  return fn;\n}\nexport default compose;","import responsivePropType from \"../responsivePropType/index.js\";\nimport style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { createUnaryUnit, getValue } from \"../spacing/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nexport function borderTransform(value) {\n  if (typeof value !== 'number') {\n    return value;\n  }\n  return `${value}px solid`;\n}\nfunction createBorderStyle(prop, transform) {\n  return style({\n    prop,\n    themeKey: 'borders',\n    transform\n  });\n}\nexport const border = createBorderStyle('border', borderTransform);\nexport const borderTop = createBorderStyle('borderTop', borderTransform);\nexport const borderRight = createBorderStyle('borderRight', borderTransform);\nexport const borderBottom = createBorderStyle('borderBottom', borderTransform);\nexport const borderLeft = createBorderStyle('borderLeft', borderTransform);\nexport const borderColor = createBorderStyle('borderColor');\nexport const borderTopColor = createBorderStyle('borderTopColor');\nexport const borderRightColor = createBorderStyle('borderRightColor');\nexport const borderBottomColor = createBorderStyle('borderBottomColor');\nexport const borderLeftColor = createBorderStyle('borderLeftColor');\nexport const outline = createBorderStyle('outline', borderTransform);\nexport const outlineColor = createBorderStyle('outlineColor');\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const borderRadius = props => {\n  if (props.borderRadius !== undefined && props.borderRadius !== null) {\n    const transformer = createUnaryUnit(props.theme, 'shape.borderRadius', 4, 'borderRadius');\n    const styleFromPropValue = propValue => ({\n      borderRadius: getValue(transformer, propValue)\n    });\n    return handleBreakpoints(props, props.borderRadius, styleFromPropValue);\n  }\n  return null;\n};\nborderRadius.propTypes = process.env.NODE_ENV !== 'production' ? {\n  borderRadius: responsivePropType\n} : {};\nborderRadius.filterProps = ['borderRadius'];\nconst borders = compose(border, borderTop, borderRight, borderBottom, borderLeft, borderColor, borderTopColor, borderRightColor, borderBottomColor, borderLeftColor, borderRadius, outline, outlineColor);\nexport default borders;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { createUnaryUnit, getValue } from \"../spacing/index.js\";\nimport { handleBreakpoints } from \"../breakpoints/index.js\";\nimport responsivePropType from \"../responsivePropType/index.js\";\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const gap = props => {\n  if (props.gap !== undefined && props.gap !== null) {\n    const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'gap');\n    const styleFromPropValue = propValue => ({\n      gap: getValue(transformer, propValue)\n    });\n    return handleBreakpoints(props, props.gap, styleFromPropValue);\n  }\n  return null;\n};\ngap.propTypes = process.env.NODE_ENV !== 'production' ? {\n  gap: responsivePropType\n} : {};\ngap.filterProps = ['gap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const columnGap = props => {\n  if (props.columnGap !== undefined && props.columnGap !== null) {\n    const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'columnGap');\n    const styleFromPropValue = propValue => ({\n      columnGap: getValue(transformer, propValue)\n    });\n    return handleBreakpoints(props, props.columnGap, styleFromPropValue);\n  }\n  return null;\n};\ncolumnGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n  columnGap: responsivePropType\n} : {};\ncolumnGap.filterProps = ['columnGap'];\n\n// false positive\n// eslint-disable-next-line react/function-component-definition\nexport const rowGap = props => {\n  if (props.rowGap !== undefined && props.rowGap !== null) {\n    const transformer = createUnaryUnit(props.theme, 'spacing', 8, 'rowGap');\n    const styleFromPropValue = propValue => ({\n      rowGap: getValue(transformer, propValue)\n    });\n    return handleBreakpoints(props, props.rowGap, styleFromPropValue);\n  }\n  return null;\n};\nrowGap.propTypes = process.env.NODE_ENV !== 'production' ? {\n  rowGap: responsivePropType\n} : {};\nrowGap.filterProps = ['rowGap'];\nexport const gridColumn = style({\n  prop: 'gridColumn'\n});\nexport const gridRow = style({\n  prop: 'gridRow'\n});\nexport const gridAutoFlow = style({\n  prop: 'gridAutoFlow'\n});\nexport const gridAutoColumns = style({\n  prop: 'gridAutoColumns'\n});\nexport const gridAutoRows = style({\n  prop: 'gridAutoRows'\n});\nexport const gridTemplateColumns = style({\n  prop: 'gridTemplateColumns'\n});\nexport const gridTemplateRows = style({\n  prop: 'gridTemplateRows'\n});\nexport const gridTemplateAreas = style({\n  prop: 'gridTemplateAreas'\n});\nexport const gridArea = style({\n  prop: 'gridArea'\n});\nconst grid = compose(gap, columnGap, rowGap, gridColumn, gridRow, gridAutoFlow, gridAutoColumns, gridAutoRows, gridTemplateColumns, gridTemplateRows, gridTemplateAreas, gridArea);\nexport default grid;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nexport function paletteTransform(value, userValue) {\n  if (userValue === 'grey') {\n    return userValue;\n  }\n  return value;\n}\nexport const color = style({\n  prop: 'color',\n  themeKey: 'palette',\n  transform: paletteTransform\n});\nexport const bgcolor = style({\n  prop: 'bgcolor',\n  cssProperty: 'backgroundColor',\n  themeKey: 'palette',\n  transform: paletteTransform\n});\nexport const backgroundColor = style({\n  prop: 'backgroundColor',\n  themeKey: 'palette',\n  transform: paletteTransform\n});\nconst palette = compose(color, bgcolor, backgroundColor);\nexport default palette;","import style from \"../style/index.js\";\nimport compose from \"../compose/index.js\";\nimport { handleBreakpoints, values as breakpointsValues } from \"../breakpoints/index.js\";\nexport function sizingTransform(value) {\n  return value <= 1 && value !== 0 ? `${value * 100}%` : value;\n}\nexport const width = style({\n  prop: 'width',\n  transform: sizingTransform\n});\nexport const maxWidth = props => {\n  if (props.maxWidth !== undefined && props.maxWidth !== null) {\n    const styleFromPropValue = propValue => {\n      const breakpoint = props.theme?.breakpoints?.values?.[propValue] || breakpointsValues[propValue];\n      if (!breakpoint) {\n        return {\n          maxWidth: sizingTransform(propValue)\n        };\n      }\n      if (props.theme?.breakpoints?.unit !== 'px') {\n        return {\n          maxWidth: `${breakpoint}${props.theme.breakpoints.unit}`\n        };\n      }\n      return {\n        maxWidth: breakpoint\n      };\n    };\n    return handleBreakpoints(props, props.maxWidth, styleFromPropValue);\n  }\n  return null;\n};\nmaxWidth.filterProps = ['maxWidth'];\nexport const minWidth = style({\n  prop: 'minWidth',\n  transform: sizingTransform\n});\nexport const height = style({\n  prop: 'height',\n  transform: sizingTransform\n});\nexport const maxHeight = style({\n  prop: 'maxHeight',\n  transform: sizingTransform\n});\nexport const minHeight = style({\n  prop: 'minHeight',\n  transform: sizingTransform\n});\nexport const sizeWidth = style({\n  prop: 'size',\n  cssProperty: 'width',\n  transform: sizingTransform\n});\nexport const sizeHeight = style({\n  prop: 'size',\n  cssProperty: 'height',\n  transform: sizingTransform\n});\nexport const boxSizing = style({\n  prop: 'boxSizing'\n});\nconst sizing = compose(width, maxWidth, minWidth, height, maxHeight, minHeight, boxSizing);\nexport default sizing;","import { padding, margin } from \"../spacing/index.js\";\nimport { borderRadius, borderTransform } from \"../borders/index.js\";\nimport { gap, rowGap, columnGap } from \"../cssGrid/index.js\";\nimport { paletteTransform } from \"../palette/index.js\";\nimport { maxWidth, sizingTransform } from \"../sizing/index.js\";\nconst defaultSxConfig = {\n  // borders\n  border: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderTop: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderRight: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderBottom: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderLeft: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  borderColor: {\n    themeKey: 'palette'\n  },\n  borderTopColor: {\n    themeKey: 'palette'\n  },\n  borderRightColor: {\n    themeKey: 'palette'\n  },\n  borderBottomColor: {\n    themeKey: 'palette'\n  },\n  borderLeftColor: {\n    themeKey: 'palette'\n  },\n  outline: {\n    themeKey: 'borders',\n    transform: borderTransform\n  },\n  outlineColor: {\n    themeKey: 'palette'\n  },\n  borderRadius: {\n    themeKey: 'shape.borderRadius',\n    style: borderRadius\n  },\n  // palette\n  color: {\n    themeKey: 'palette',\n    transform: paletteTransform\n  },\n  bgcolor: {\n    themeKey: 'palette',\n    cssProperty: 'backgroundColor',\n    transform: paletteTransform\n  },\n  backgroundColor: {\n    themeKey: 'palette',\n    transform: paletteTransform\n  },\n  // spacing\n  p: {\n    style: padding\n  },\n  pt: {\n    style: padding\n  },\n  pr: {\n    style: padding\n  },\n  pb: {\n    style: padding\n  },\n  pl: {\n    style: padding\n  },\n  px: {\n    style: padding\n  },\n  py: {\n    style: padding\n  },\n  padding: {\n    style: padding\n  },\n  paddingTop: {\n    style: padding\n  },\n  paddingRight: {\n    style: padding\n  },\n  paddingBottom: {\n    style: padding\n  },\n  paddingLeft: {\n    style: padding\n  },\n  paddingX: {\n    style: padding\n  },\n  paddingY: {\n    style: padding\n  },\n  paddingInline: {\n    style: padding\n  },\n  paddingInlineStart: {\n    style: padding\n  },\n  paddingInlineEnd: {\n    style: padding\n  },\n  paddingBlock: {\n    style: padding\n  },\n  paddingBlockStart: {\n    style: padding\n  },\n  paddingBlockEnd: {\n    style: padding\n  },\n  m: {\n    style: margin\n  },\n  mt: {\n    style: margin\n  },\n  mr: {\n    style: margin\n  },\n  mb: {\n    style: margin\n  },\n  ml: {\n    style: margin\n  },\n  mx: {\n    style: margin\n  },\n  my: {\n    style: margin\n  },\n  margin: {\n    style: margin\n  },\n  marginTop: {\n    style: margin\n  },\n  marginRight: {\n    style: margin\n  },\n  marginBottom: {\n    style: margin\n  },\n  marginLeft: {\n    style: margin\n  },\n  marginX: {\n    style: margin\n  },\n  marginY: {\n    style: margin\n  },\n  marginInline: {\n    style: margin\n  },\n  marginInlineStart: {\n    style: margin\n  },\n  marginInlineEnd: {\n    style: margin\n  },\n  marginBlock: {\n    style: margin\n  },\n  marginBlockStart: {\n    style: margin\n  },\n  marginBlockEnd: {\n    style: margin\n  },\n  // display\n  displayPrint: {\n    cssProperty: false,\n    transform: value => ({\n      '@media print': {\n        display: value\n      }\n    })\n  },\n  display: {},\n  overflow: {},\n  textOverflow: {},\n  visibility: {},\n  whiteSpace: {},\n  // flexbox\n  flexBasis: {},\n  flexDirection: {},\n  flexWrap: {},\n  justifyContent: {},\n  alignItems: {},\n  alignContent: {},\n  order: {},\n  flex: {},\n  flexGrow: {},\n  flexShrink: {},\n  alignSelf: {},\n  justifyItems: {},\n  justifySelf: {},\n  // grid\n  gap: {\n    style: gap\n  },\n  rowGap: {\n    style: rowGap\n  },\n  columnGap: {\n    style: columnGap\n  },\n  gridColumn: {},\n  gridRow: {},\n  gridAutoFlow: {},\n  gridAutoColumns: {},\n  gridAutoRows: {},\n  gridTemplateColumns: {},\n  gridTemplateRows: {},\n  gridTemplateAreas: {},\n  gridArea: {},\n  // positions\n  position: {},\n  zIndex: {\n    themeKey: 'zIndex'\n  },\n  top: {},\n  right: {},\n  bottom: {},\n  left: {},\n  // shadows\n  boxShadow: {\n    themeKey: 'shadows'\n  },\n  // sizing\n  width: {\n    transform: sizingTransform\n  },\n  maxWidth: {\n    style: maxWidth\n  },\n  minWidth: {\n    transform: sizingTransform\n  },\n  height: {\n    transform: sizingTransform\n  },\n  maxHeight: {\n    transform: sizingTransform\n  },\n  minHeight: {\n    transform: sizingTransform\n  },\n  boxSizing: {},\n  // typography\n  font: {\n    themeKey: 'font'\n  },\n  fontFamily: {\n    themeKey: 'typography'\n  },\n  fontSize: {\n    themeKey: 'typography'\n  },\n  fontStyle: {\n    themeKey: 'typography'\n  },\n  fontWeight: {\n    themeKey: 'typography'\n  },\n  letterSpacing: {},\n  textTransform: {},\n  lineHeight: {},\n  textAlign: {},\n  typography: {\n    cssProperty: false,\n    themeKey: 'typography'\n  }\n};\nexport default defaultSxConfig;","import capitalize from '@mui/utils/capitalize';\nimport merge from \"../merge/index.js\";\nimport { getPath, getStyleValue as getValue } from \"../style/index.js\";\nimport { handleBreakpoints, createEmptyBreakpointObject, removeUnusedBreakpoints } from \"../breakpoints/index.js\";\nimport { sortContainerQueries } from \"../cssContainerQueries/index.js\";\nimport defaultSxConfig from \"./defaultSxConfig.js\";\nfunction objectsHaveSameKeys(...objects) {\n  const allKeys = objects.reduce((keys, object) => keys.concat(Object.keys(object)), []);\n  const union = new Set(allKeys);\n  return objects.every(object => union.size === Object.keys(object).length);\n}\nfunction callIfFn(maybeFn, arg) {\n  return typeof maybeFn === 'function' ? maybeFn(arg) : maybeFn;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function unstable_createStyleFunctionSx() {\n  function getThemeValue(prop, val, theme, config) {\n    const props = {\n      [prop]: val,\n      theme\n    };\n    const options = config[prop];\n    if (!options) {\n      return {\n        [prop]: val\n      };\n    }\n    const {\n      cssProperty = prop,\n      themeKey,\n      transform,\n      style\n    } = options;\n    if (val == null) {\n      return null;\n    }\n\n    // TODO v6: remove, see https://github.com/mui/material-ui/pull/38123\n    if (themeKey === 'typography' && val === 'inherit') {\n      return {\n        [prop]: val\n      };\n    }\n    const themeMapping = getPath(theme, themeKey) || {};\n    if (style) {\n      return style(props);\n    }\n    const styleFromPropValue = propValueFinal => {\n      let value = getValue(themeMapping, transform, propValueFinal);\n      if (propValueFinal === value && typeof propValueFinal === 'string') {\n        // Haven't found value\n        value = getValue(themeMapping, transform, `${prop}${propValueFinal === 'default' ? '' : capitalize(propValueFinal)}`, propValueFinal);\n      }\n      if (cssProperty === false) {\n        return value;\n      }\n      return {\n        [cssProperty]: value\n      };\n    };\n    return handleBreakpoints(props, val, styleFromPropValue);\n  }\n  function styleFunctionSx(props) {\n    const {\n      sx,\n      theme = {},\n      nested\n    } = props || {};\n    if (!sx) {\n      return null; // Emotion & styled-components will neglect null\n    }\n    const config = theme.unstable_sxConfig ?? defaultSxConfig;\n\n    /*\n     * Receive `sxInput` as object or callback\n     * and then recursively check keys & values to create media query object styles.\n     * (the result will be used in `styled`)\n     */\n    function traverse(sxInput) {\n      let sxObject = sxInput;\n      if (typeof sxInput === 'function') {\n        sxObject = sxInput(theme);\n      } else if (typeof sxInput !== 'object') {\n        // value\n        return sxInput;\n      }\n      if (!sxObject) {\n        return null;\n      }\n      const emptyBreakpoints = createEmptyBreakpointObject(theme.breakpoints);\n      const breakpointsKeys = Object.keys(emptyBreakpoints);\n      let css = emptyBreakpoints;\n      Object.keys(sxObject).forEach(styleKey => {\n        const value = callIfFn(sxObject[styleKey], theme);\n        if (value !== null && value !== undefined) {\n          if (typeof value === 'object') {\n            if (config[styleKey]) {\n              css = merge(css, getThemeValue(styleKey, value, theme, config));\n            } else {\n              const breakpointsValues = handleBreakpoints({\n                theme\n              }, value, x => ({\n                [styleKey]: x\n              }));\n              if (objectsHaveSameKeys(breakpointsValues, value)) {\n                css[styleKey] = styleFunctionSx({\n                  sx: value,\n                  theme,\n                  nested: true\n                });\n              } else {\n                css = merge(css, breakpointsValues);\n              }\n            }\n          } else {\n            css = merge(css, getThemeValue(styleKey, value, theme, config));\n          }\n        }\n      });\n      if (!nested && theme.modularCssLayers) {\n        return {\n          '@layer sx': sortContainerQueries(theme, removeUnusedBreakpoints(breakpointsKeys, css))\n        };\n      }\n      return sortContainerQueries(theme, removeUnusedBreakpoints(breakpointsKeys, css));\n    }\n    return Array.isArray(sx) ? sx.map(traverse) : traverse(sx);\n  }\n  return styleFunctionSx;\n}\nconst styleFunctionSx = unstable_createStyleFunctionSx();\nstyleFunctionSx.filterProps = ['sx'];\nexport default styleFunctionSx;","/**\n * A universal utility to style components with multiple color modes. Always use it from the theme object.\n * It works with:\n *  - [Basic theme](https://mui.com/material-ui/customization/dark-mode/)\n *  - [CSS theme variables](https://mui.com/material-ui/customization/css-theme-variables/overview/)\n *  - Zero-runtime engine\n *\n * Tips: Use an array over object spread and place `theme.applyStyles()` last.\n *\n * With the styled function:\n * ✅ [{ background: '#e5e5e5' }, theme.applyStyles('dark', { background: '#1c1c1c' })]\n * 🚫 { background: '#e5e5e5', ...theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * With the sx prop:\n * ✅ [{ background: '#e5e5e5' }, theme => theme.applyStyles('dark', { background: '#1c1c1c' })]\n * 🚫 { background: '#e5e5e5', ...theme => theme.applyStyles('dark', { background: '#1c1c1c' })}\n *\n * @example\n * 1. using with `styled`:\n * ```jsx\n *   const Component = styled('div')(({ theme }) => [\n *     { background: '#e5e5e5' },\n *     theme.applyStyles('dark', {\n *       background: '#1c1c1c',\n *       color: '#fff',\n *     }),\n *   ]);\n * ```\n *\n * @example\n * 2. using with `sx` prop:\n * ```jsx\n *   <Box sx={[\n *     { background: '#e5e5e5' },\n *     theme => theme.applyStyles('dark', {\n *        background: '#1c1c1c',\n *        color: '#fff',\n *      }),\n *     ]}\n *   />\n * ```\n *\n * @example\n * 3. theming a component:\n * ```jsx\n *   extendTheme({\n *     components: {\n *       MuiButton: {\n *         styleOverrides: {\n *           root: ({ theme }) => [\n *             { background: '#e5e5e5' },\n *             theme.applyStyles('dark', {\n *               background: '#1c1c1c',\n *               color: '#fff',\n *             }),\n *           ],\n *         },\n *       }\n *     }\n *   })\n *```\n */\nexport default function applyStyles(key, styles) {\n  // @ts-expect-error this is 'any' type\n  const theme = this;\n  if (theme.vars) {\n    if (!theme.colorSchemes?.[key] || typeof theme.getColorSchemeSelector !== 'function') {\n      return {};\n    }\n    // If CssVarsProvider is used as a provider, returns '*:where({selector}) &'\n    let selector = theme.getColorSchemeSelector(key);\n    if (selector === '&') {\n      return styles;\n    }\n    if (selector.includes('data-') || selector.includes('.')) {\n      // '*' is required as a workaround for Emotion issue (https://github.com/emotion-js/emotion/issues/2836)\n      selector = `*:where(${selector.replace(/\\s*&$/, '')}) &`;\n    }\n    return {\n      [selector]: styles\n    };\n  }\n  if (theme.palette.mode === key) {\n    return styles;\n  }\n  return {};\n}","import deepmerge from '@mui/utils/deepmerge';\nimport createBreakpoints from \"../createBreakpoints/createBreakpoints.js\";\nimport cssContainerQueries from \"../cssContainerQueries/index.js\";\nimport shape from \"./shape.js\";\nimport createSpacing from \"./createSpacing.js\";\nimport styleFunctionSx from \"../styleFunctionSx/styleFunctionSx.js\";\nimport defaultSxConfig from \"../styleFunctionSx/defaultSxConfig.js\";\nimport applyStyles from \"./applyStyles.js\";\nfunction createTheme(options = {}, ...args) {\n  const {\n    breakpoints: breakpointsInput = {},\n    palette: paletteInput = {},\n    spacing: spacingInput,\n    shape: shapeInput = {},\n    ...other\n  } = options;\n  const breakpoints = createBreakpoints(breakpointsInput);\n  const spacing = createSpacing(spacingInput);\n  let muiTheme = deepmerge({\n    breakpoints,\n    direction: 'ltr',\n    components: {},\n    // Inject component definitions.\n    palette: {\n      mode: 'light',\n      ...paletteInput\n    },\n    spacing,\n    shape: {\n      ...shape,\n      ...shapeInput\n    }\n  }, other);\n  muiTheme = cssContainerQueries(muiTheme);\n  muiTheme.applyStyles = applyStyles;\n  muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n  muiTheme.unstable_sxConfig = {\n    ...defaultSxConfig,\n    ...other?.unstable_sxConfig\n  };\n  muiTheme.unstable_sx = function sx(props) {\n    return styleFunctionSx({\n      sx: props,\n      theme: this\n    });\n  };\n  return muiTheme;\n}\nexport default createTheme;","'use client';\n\nimport * as React from 'react';\nimport { ThemeContext } from '@mui/styled-engine';\nfunction isObjectEmpty(obj) {\n  return Object.keys(obj).length === 0;\n}\nfunction useTheme(defaultTheme = null) {\n  const contextTheme = React.useContext(ThemeContext);\n  return !contextTheme || isObjectEmpty(contextTheme) ? defaultTheme : contextTheme;\n}\nexport default useTheme;","'use client';\n\nimport createTheme from \"../createTheme/index.js\";\nimport useThemeWithoutDefault from \"../useThemeWithoutDefault/index.js\";\nexport const systemDefaultTheme = createTheme();\nfunction useTheme(defaultTheme = systemDefaultTheme) {\n  return useThemeWithoutDefault(defaultTheme);\n}\nexport default useTheme;","'use client';\n\nimport PropTypes from 'prop-types';\nimport { GlobalStyles as MuiGlobalStyles, internal_serializeStyles as serializeStyles } from '@mui/styled-engine';\nimport useTheme from \"../useTheme/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction wrapGlobalLayer(styles) {\n  const serialized = serializeStyles(styles);\n  if (styles !== serialized && serialized.styles) {\n    if (!serialized.styles.match(/^@layer\\s+[^{]*$/)) {\n      // If the styles are not already wrapped in a layer, wrap them in a global layer.\n      serialized.styles = `@layer global{${serialized.styles}}`;\n    }\n    return serialized;\n  }\n  return styles;\n}\nfunction GlobalStyles({\n  styles,\n  themeId,\n  defaultTheme = {}\n}) {\n  const upperTheme = useTheme(defaultTheme);\n  const resolvedTheme = themeId ? upperTheme[themeId] || upperTheme : upperTheme;\n  let globalStyles = typeof styles === 'function' ? styles(resolvedTheme) : styles;\n  if (resolvedTheme.modularCssLayers) {\n    if (Array.isArray(globalStyles)) {\n      globalStyles = globalStyles.map(styleArg => {\n        if (typeof styleArg === 'function') {\n          return wrapGlobalLayer(styleArg(resolvedTheme));\n        }\n        return wrapGlobalLayer(styleArg);\n      });\n    } else {\n      globalStyles = wrapGlobalLayer(globalStyles);\n    }\n  }\n  return /*#__PURE__*/_jsx(MuiGlobalStyles, {\n    styles: globalStyles\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? GlobalStyles.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * @ignore\n   */\n  defaultTheme: PropTypes.object,\n  /**\n   * @ignore\n   */\n  styles: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.array, PropTypes.func, PropTypes.number, PropTypes.object, PropTypes.string, PropTypes.bool]),\n  /**\n   * @ignore\n   */\n  themeId: PropTypes.string\n} : void 0;\nexport default GlobalStyles;","import { isPlainObject } from '@mui/utils/deepmerge';\nimport defaultSxConfig from \"./defaultSxConfig.js\";\nconst splitProps = props => {\n  const result = {\n    systemProps: {},\n    otherProps: {}\n  };\n  const config = props?.theme?.unstable_sxConfig ?? defaultSxConfig;\n  Object.keys(props).forEach(prop => {\n    if (config[prop]) {\n      result.systemProps[prop] = props[prop];\n    } else {\n      result.otherProps[prop] = props[prop];\n    }\n  });\n  return result;\n};\nexport default function extendSxProp(props) {\n  const {\n    sx: inSx,\n    ...other\n  } = props;\n  const {\n    systemProps,\n    otherProps\n  } = splitProps(other);\n  let finalSx;\n  if (Array.isArray(inSx)) {\n    finalSx = [systemProps, ...inSx];\n  } else if (typeof inSx === 'function') {\n    finalSx = (...args) => {\n      const result = inSx(...args);\n      if (!isPlainObject(result)) {\n        return systemProps;\n      }\n      return {\n        ...systemProps,\n        ...result\n      };\n    };\n  } else {\n    finalSx = {\n      ...systemProps,\n      ...inSx\n    };\n  }\n  return {\n    ...otherProps,\n    sx: finalSx\n  };\n}","const defaultGenerator = componentName => componentName;\nconst createClassNameGenerator = () => {\n  let generate = defaultGenerator;\n  return {\n    configure(generator) {\n      generate = generator;\n    },\n    generate(componentName) {\n      return generate(componentName);\n    },\n    reset() {\n      generate = defaultGenerator;\n    }\n  };\n};\nconst ClassNameGenerator = createClassNameGenerator();\nexport default ClassNameGenerator;","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","'use client';\n\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport styled from '@mui/styled-engine';\nimport styleFunctionSx, { extendSxProp } from \"../styleFunctionSx/index.js\";\nimport useTheme from \"../useTheme/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function createBox(options = {}) {\n  const {\n    themeId,\n    defaultTheme,\n    defaultClassName = 'MuiBox-root',\n    generateClassName\n  } = options;\n  const BoxRoot = styled('div', {\n    shouldForwardProp: prop => prop !== 'theme' && prop !== 'sx' && prop !== 'as'\n  })(styleFunctionSx);\n  const Box = /*#__PURE__*/React.forwardRef(function Box(inProps, ref) {\n    const theme = useTheme(defaultTheme);\n    const {\n      className,\n      component = 'div',\n      ...other\n    } = extendSxProp(inProps);\n    return /*#__PURE__*/_jsx(BoxRoot, {\n      as: component,\n      ref: ref,\n      className: clsx(className, generateClassName ? generateClassName(defaultClassName) : defaultClassName),\n      theme: themeId ? theme[themeId] || theme : theme,\n      ...other\n    });\n  });\n  return Box;\n}","import ClassNameGenerator from \"../ClassNameGenerator/index.js\";\nexport const globalStateClasses = {\n  active: 'active',\n  checked: 'checked',\n  completed: 'completed',\n  disabled: 'disabled',\n  error: 'error',\n  expanded: 'expanded',\n  focused: 'focused',\n  focusVisible: 'focusVisible',\n  open: 'open',\n  readOnly: 'readOnly',\n  required: 'required',\n  selected: 'selected'\n};\nexport default function generateUtilityClass(componentName, slot, globalStatePrefix = 'Mui') {\n  const globalStateClass = globalStateClasses[slot];\n  return globalStateClass ? `${globalStatePrefix}-${globalStateClass}` : `${ClassNameGenerator.generate(componentName)}-${slot}`;\n}\nexport function isGlobalState(slot) {\n  return globalStateClasses[slot] !== undefined;\n}","import generateUtilityClass from \"../generateUtilityClass/index.js\";\nexport default function generateUtilityClasses(componentName, slots, globalStatePrefix = 'Mui') {\n  const result = {};\n  slots.forEach(slot => {\n    result[slot] = generateUtilityClass(componentName, slot, globalStatePrefix);\n  });\n  return result;\n}","import { ForwardRef, Memo } from 'react-is';\nfunction getFunctionComponentName(Component, fallback = '') {\n  return Component.displayName || Component.name || fallback;\n}\nfunction getWrappedName(outerType, innerType, wrapperName) {\n  const functionName = getFunctionComponentName(innerType);\n  return outerType.displayName || (functionName !== '' ? `${wrapperName}(${functionName})` : wrapperName);\n}\n\n/**\n * cherry-pick from\n * https://github.com/facebook/react/blob/769b1f270e1251d9dbdce0fcbd9e92e502d059b8/packages/shared/getComponentName.js\n * originally forked from recompose/getDisplayName\n */\nexport default function getDisplayName(Component) {\n  if (Component == null) {\n    return undefined;\n  }\n  if (typeof Component === 'string') {\n    return Component;\n  }\n  if (typeof Component === 'function') {\n    return getFunctionComponentName(Component, 'Component');\n  }\n\n  // TypeScript can't have components as objects but they exist in the form of `memo` or `Suspense`\n  if (typeof Component === 'object') {\n    switch (Component.$$typeof) {\n      case ForwardRef:\n        return getWrappedName(Component, Component.render, 'ForwardRef');\n      case Memo:\n        return getWrappedName(Component, Component.type, 'memo');\n      default:\n        return undefined;\n    }\n  }\n  return undefined;\n}","import { internal_serializeStyles } from '@mui/styled-engine';\nexport default function preprocessStyles(input) {\n  const {\n    variants,\n    ...style\n  } = input;\n  const result = {\n    variants,\n    style: internal_serializeStyles(style),\n    isProcessed: true\n  };\n\n  // Not supported on styled-components\n  if (result.style === style) {\n    return result;\n  }\n  if (variants) {\n    variants.forEach(variant => {\n      if (typeof variant.style !== 'function') {\n        variant.style = internal_serializeStyles(variant.style);\n      }\n    });\n  }\n  return result;\n}","import styledEngineStyled, { internal_mutateStyles as mutateStyles, internal_serializeStyles as serializeStyles } from '@mui/styled-engine';\nimport { isPlainObject } from '@mui/utils/deepmerge';\nimport capitalize from '@mui/utils/capitalize';\nimport getDisplayName from '@mui/utils/getDisplayName';\nimport createTheme from \"../createTheme/index.js\";\nimport styleFunctionSx from \"../styleFunctionSx/index.js\";\nimport preprocessStyles from \"../preprocessStyles.js\";\n\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable no-labels */\n/* eslint-disable no-lone-blocks */\n\nexport const systemDefaultTheme = createTheme();\n\n// Update /system/styled/#api in case if this changes\nexport function shouldForwardProp(prop) {\n  return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nfunction shallowLayer(serialized, layerName) {\n  if (layerName && serialized && typeof serialized === 'object' && serialized.styles && !serialized.styles.startsWith('@layer') // only add the layer if it is not already there.\n  ) {\n    serialized.styles = `@layer ${layerName}{${String(serialized.styles)}}`;\n  }\n  return serialized;\n}\nfunction defaultOverridesResolver(slot) {\n  if (!slot) {\n    return null;\n  }\n  return (_props, styles) => styles[slot];\n}\nfunction attachTheme(props, themeId, defaultTheme) {\n  props.theme = isObjectEmpty(props.theme) ? defaultTheme : props.theme[themeId] || props.theme;\n}\nfunction processStyle(props, style, layerName) {\n  /*\n   * Style types:\n   *  - null/undefined\n   *  - string\n   *  - CSS style object: { [cssKey]: [cssValue], variants }\n   *  - Processed style object: { style, variants, isProcessed: true }\n   *  - Array of any of the above\n   */\n\n  const resolvedStyle = typeof style === 'function' ? style(props) : style;\n  if (Array.isArray(resolvedStyle)) {\n    return resolvedStyle.flatMap(subStyle => processStyle(props, subStyle, layerName));\n  }\n  if (Array.isArray(resolvedStyle?.variants)) {\n    let rootStyle;\n    if (resolvedStyle.isProcessed) {\n      rootStyle = layerName ? shallowLayer(resolvedStyle.style, layerName) : resolvedStyle.style;\n    } else {\n      const {\n        variants,\n        ...otherStyles\n      } = resolvedStyle;\n      rootStyle = layerName ? shallowLayer(serializeStyles(otherStyles), layerName) : otherStyles;\n    }\n    return processStyleVariants(props, resolvedStyle.variants, [rootStyle], layerName);\n  }\n  if (resolvedStyle?.isProcessed) {\n    return layerName ? shallowLayer(serializeStyles(resolvedStyle.style), layerName) : resolvedStyle.style;\n  }\n  return layerName ? shallowLayer(serializeStyles(resolvedStyle), layerName) : resolvedStyle;\n}\nfunction processStyleVariants(props, variants, results = [], layerName = undefined) {\n  let mergedState; // We might not need it, initialized lazily\n\n  variantLoop: for (let i = 0; i < variants.length; i += 1) {\n    const variant = variants[i];\n    if (typeof variant.props === 'function') {\n      mergedState ??= {\n        ...props,\n        ...props.ownerState,\n        ownerState: props.ownerState\n      };\n      if (!variant.props(mergedState)) {\n        continue;\n      }\n    } else {\n      for (const key in variant.props) {\n        if (props[key] !== variant.props[key] && props.ownerState?.[key] !== variant.props[key]) {\n          continue variantLoop;\n        }\n      }\n    }\n    if (typeof variant.style === 'function') {\n      mergedState ??= {\n        ...props,\n        ...props.ownerState,\n        ownerState: props.ownerState\n      };\n      results.push(layerName ? shallowLayer(serializeStyles(variant.style(mergedState)), layerName) : variant.style(mergedState));\n    } else {\n      results.push(layerName ? shallowLayer(serializeStyles(variant.style), layerName) : variant.style);\n    }\n  }\n  return results;\n}\nexport default function createStyled(input = {}) {\n  const {\n    themeId,\n    defaultTheme = systemDefaultTheme,\n    rootShouldForwardProp = shouldForwardProp,\n    slotShouldForwardProp = shouldForwardProp\n  } = input;\n  function styleAttachTheme(props) {\n    attachTheme(props, themeId, defaultTheme);\n  }\n  const styled = (tag, inputOptions = {}) => {\n    // If `tag` is already a styled component, filter out the `sx` style function\n    // to prevent unnecessary styles generated by the composite components.\n    mutateStyles(tag, styles => styles.filter(style => style !== styleFunctionSx));\n    const {\n      name: componentName,\n      slot: componentSlot,\n      skipVariantsResolver: inputSkipVariantsResolver,\n      skipSx: inputSkipSx,\n      // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n      // For more details: https://github.com/mui/material-ui/pull/37908\n      overridesResolver = defaultOverridesResolver(lowercaseFirstLetter(componentSlot)),\n      ...options\n    } = inputOptions;\n    const layerName = componentName && componentName.startsWith('Mui') || !!componentSlot ? 'components' : 'custom';\n\n    // if skipVariantsResolver option is defined, take the value, otherwise, true for root and false for other slots.\n    const skipVariantsResolver = inputSkipVariantsResolver !== undefined ? inputSkipVariantsResolver :\n    // TODO v6: remove `Root` in the next major release\n    // For more details: https://github.com/mui/material-ui/pull/37908\n    componentSlot && componentSlot !== 'Root' && componentSlot !== 'root' || false;\n    const skipSx = inputSkipSx || false;\n    let shouldForwardPropOption = shouldForwardProp;\n\n    // TODO v6: remove `Root` in the next major release\n    // For more details: https://github.com/mui/material-ui/pull/37908\n    if (componentSlot === 'Root' || componentSlot === 'root') {\n      shouldForwardPropOption = rootShouldForwardProp;\n    } else if (componentSlot) {\n      // any other slot specified\n      shouldForwardPropOption = slotShouldForwardProp;\n    } else if (isStringTag(tag)) {\n      // for string (html) tag, preserve the behavior in emotion & styled-components.\n      shouldForwardPropOption = undefined;\n    }\n    const defaultStyledResolver = styledEngineStyled(tag, {\n      shouldForwardProp: shouldForwardPropOption,\n      label: generateStyledLabel(componentName, componentSlot),\n      ...options\n    });\n    const transformStyle = style => {\n      // - On the server Emotion doesn't use React.forwardRef for creating components, so the created\n      //   component stays as a function. This condition makes sure that we do not interpolate functions\n      //   which are basically components used as a selectors.\n      // - `style` could be a styled component from a babel plugin for component selectors, This condition\n      //   makes sure that we do not interpolate them.\n      if (style.__emotion_real === style) {\n        return style;\n      }\n      if (typeof style === 'function') {\n        return function styleFunctionProcessor(props) {\n          return processStyle(props, style, props.theme.modularCssLayers ? layerName : undefined);\n        };\n      }\n      if (isPlainObject(style)) {\n        const serialized = preprocessStyles(style);\n        return function styleObjectProcessor(props) {\n          if (!serialized.variants) {\n            return props.theme.modularCssLayers ? shallowLayer(serialized.style, layerName) : serialized.style;\n          }\n          return processStyle(props, serialized, props.theme.modularCssLayers ? layerName : undefined);\n        };\n      }\n      return style;\n    };\n    const muiStyledResolver = (...expressionsInput) => {\n      const expressionsHead = [];\n      const expressionsBody = expressionsInput.map(transformStyle);\n      const expressionsTail = [];\n\n      // Preprocess `props` to set the scoped theme value.\n      // This must run before any other expression.\n      expressionsHead.push(styleAttachTheme);\n      if (componentName && overridesResolver) {\n        expressionsTail.push(function styleThemeOverrides(props) {\n          const theme = props.theme;\n          const styleOverrides = theme.components?.[componentName]?.styleOverrides;\n          if (!styleOverrides) {\n            return null;\n          }\n          const resolvedStyleOverrides = {};\n\n          // TODO: v7 remove iteration and use `resolveStyleArg(styleOverrides[slot])` directly\n          // eslint-disable-next-line guard-for-in\n          for (const slotKey in styleOverrides) {\n            resolvedStyleOverrides[slotKey] = processStyle(props, styleOverrides[slotKey], props.theme.modularCssLayers ? 'theme' : undefined);\n          }\n          return overridesResolver(props, resolvedStyleOverrides);\n        });\n      }\n      if (componentName && !skipVariantsResolver) {\n        expressionsTail.push(function styleThemeVariants(props) {\n          const theme = props.theme;\n          const themeVariants = theme?.components?.[componentName]?.variants;\n          if (!themeVariants) {\n            return null;\n          }\n          return processStyleVariants(props, themeVariants, [], props.theme.modularCssLayers ? 'theme' : undefined);\n        });\n      }\n      if (!skipSx) {\n        expressionsTail.push(styleFunctionSx);\n      }\n\n      // This function can be called as a tagged template, so the first argument would contain\n      // CSS `string[]` values.\n      if (Array.isArray(expressionsBody[0])) {\n        const inputStrings = expressionsBody.shift();\n\n        // We need to add placeholders in the tagged template for the custom functions we have\n        // possibly added (attachTheme, overrides, variants, and sx).\n        const placeholdersHead = new Array(expressionsHead.length).fill('');\n        const placeholdersTail = new Array(expressionsTail.length).fill('');\n        let outputStrings;\n        // prettier-ignore\n        {\n          outputStrings = [...placeholdersHead, ...inputStrings, ...placeholdersTail];\n          outputStrings.raw = [...placeholdersHead, ...inputStrings.raw, ...placeholdersTail];\n        }\n\n        // The only case where we put something before `attachTheme`\n        expressionsHead.unshift(outputStrings);\n      }\n      const expressions = [...expressionsHead, ...expressionsBody, ...expressionsTail];\n      const Component = defaultStyledResolver(...expressions);\n      if (tag.muiName) {\n        Component.muiName = tag.muiName;\n      }\n      if (process.env.NODE_ENV !== 'production') {\n        Component.displayName = generateDisplayName(componentName, componentSlot, tag);\n      }\n      return Component;\n    };\n    if (defaultStyledResolver.withConfig) {\n      muiStyledResolver.withConfig = defaultStyledResolver.withConfig;\n    }\n    return muiStyledResolver;\n  };\n  return styled;\n}\nfunction generateDisplayName(componentName, componentSlot, tag) {\n  if (componentName) {\n    return `${componentName}${capitalize(componentSlot || '')}`;\n  }\n  return `Styled(${getDisplayName(tag)})`;\n}\nfunction generateStyledLabel(componentName, componentSlot) {\n  let label;\n  if (process.env.NODE_ENV !== 'production') {\n    if (componentName) {\n      // TODO v6: remove `lowercaseFirstLetter()` in the next major release\n      // For more details: https://github.com/mui/material-ui/pull/37908\n      label = `${componentName}-${lowercaseFirstLetter(componentSlot || 'Root')}`;\n    }\n  }\n  return label;\n}\nfunction isObjectEmpty(object) {\n  // eslint-disable-next-line\n  for (const _ in object) {\n    return false;\n  }\n  return true;\n}\n\n// https://github.com/emotion-js/emotion/blob/26ded6109fcd8ca9875cc2ce4564fee678a3f3c5/packages/styled/src/utils.js#L40\nfunction isStringTag(tag) {\n  return typeof tag === 'string' &&\n  // 96 is one less than the char code\n  // for \"a\" so this is checking that\n  // it's a lowercase character\n  tag.charCodeAt(0) > 96;\n}\nfunction lowercaseFirstLetter(string) {\n  if (!string) {\n    return string;\n  }\n  return string.charAt(0).toLowerCase() + string.slice(1);\n}","import clsx from 'clsx';\n\n/**\n * Add keys, values of `defaultProps` that does not exist in `props`\n * @param defaultProps\n * @param props\n * @param mergeClassNameAndStyle If `true`, merges `className` and `style` props instead of overriding them.\n *   When `false` (default), props override defaultProps. When `true`, `className` values are concatenated\n *   and `style` objects are merged with props taking precedence.\n * @returns resolved props\n */\nexport default function resolveProps(defaultProps, props, mergeClassNameAndStyle = false) {\n  const output = {\n    ...props\n  };\n  for (const key in defaultProps) {\n    if (Object.prototype.hasOwnProperty.call(defaultProps, key)) {\n      const propName = key;\n      if (propName === 'components' || propName === 'slots') {\n        output[propName] = {\n          ...defaultProps[propName],\n          ...output[propName]\n        };\n      } else if (propName === 'componentsProps' || propName === 'slotProps') {\n        const defaultSlotProps = defaultProps[propName];\n        const slotProps = props[propName];\n        if (!slotProps) {\n          output[propName] = defaultSlotProps || {};\n        } else if (!defaultSlotProps) {\n          output[propName] = slotProps;\n        } else {\n          output[propName] = {\n            ...slotProps\n          };\n          for (const slotKey in defaultSlotProps) {\n            if (Object.prototype.hasOwnProperty.call(defaultSlotProps, slotKey)) {\n              const slotPropName = slotKey;\n              output[propName][slotPropName] = resolveProps(defaultSlotProps[slotPropName], slotProps[slotPropName], mergeClassNameAndStyle);\n            }\n          }\n        }\n      } else if (propName === 'className' && mergeClassNameAndStyle && props.className) {\n        output.className = clsx(defaultProps?.className, props?.className);\n      } else if (propName === 'style' && mergeClassNameAndStyle && props.style) {\n        output.style = {\n          ...defaultProps?.style,\n          ...props?.style\n        };\n      } else if (output[propName] === undefined) {\n        output[propName] = defaultProps[propName];\n      }\n    }\n  }\n  return output;\n}","'use client';\n\nimport * as React from 'react';\n\n/**\n * A version of `React.useLayoutEffect` that does not show a warning when server-side rendering.\n * This is useful for effects that are only needed for client-side rendering but not for SSR.\n *\n * Before you use this hook, make sure to read https://gist.github.com/gaearon/e7d97cdf38a2907924ea12e4ebdf3c85\n * and confirm it doesn't apply to your use-case.\n */\nconst useEnhancedEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nexport default useEnhancedEffect;","function clamp(val, min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER) {\n  return Math.max(min, Math.min(val, max));\n}\nexport default clamp;","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\n/* eslint-disable @typescript-eslint/naming-convention */\nimport clamp from '@mui/utils/clamp';\n\n/**\n * Returns a number whose value is limited to the given range.\n * @param {number} value The value to be clamped\n * @param {number} min The lower boundary of the output range\n * @param {number} max The upper boundary of the output range\n * @returns {number} A number in the range [min, max]\n */\nfunction clampWrapper(value, min = 0, max = 1) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (value < min || value > max) {\n      console.error(`MUI: The value provided ${value} is out of range [${min}, ${max}].`);\n    }\n  }\n  return clamp(value, min, max);\n}\n\n/**\n * Converts a color from CSS hex format to CSS rgb format.\n * @param {string} color - Hex color, i.e. #nnn or #nnnnnn\n * @returns {string} A CSS rgb color string\n */\nexport function hexToRgb(color) {\n  color = color.slice(1);\n  const re = new RegExp(`.{1,${color.length >= 6 ? 2 : 1}}`, 'g');\n  let colors = color.match(re);\n  if (colors && colors[0].length === 1) {\n    colors = colors.map(n => n + n);\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (color.length !== color.trim().length) {\n      console.error(`MUI: The color: \"${color}\" is invalid. Make sure the color input doesn't contain leading/trailing space.`);\n    }\n  }\n  return colors ? `rgb${colors.length === 4 ? 'a' : ''}(${colors.map((n, index) => {\n    return index < 3 ? parseInt(n, 16) : Math.round(parseInt(n, 16) / 255 * 1000) / 1000;\n  }).join(', ')})` : '';\n}\nfunction intToHex(int) {\n  const hex = int.toString(16);\n  return hex.length === 1 ? `0${hex}` : hex;\n}\n\n/**\n * Returns an object with the type and values of a color.\n *\n * Note: Does not support rgb % values.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {object} - A MUI color object: {type: string, values: number[]}\n */\nexport function decomposeColor(color) {\n  // Idempotent\n  if (color.type) {\n    return color;\n  }\n  if (color.charAt(0) === '#') {\n    return decomposeColor(hexToRgb(color));\n  }\n  const marker = color.indexOf('(');\n  const type = color.substring(0, marker);\n  if (!['rgb', 'rgba', 'hsl', 'hsla', 'color'].includes(type)) {\n    throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: Unsupported \\`${color}\\` color.\\n` + 'The following formats are supported: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().' : _formatErrorMessage(9, color));\n  }\n  let values = color.substring(marker + 1, color.length - 1);\n  let colorSpace;\n  if (type === 'color') {\n    values = values.split(' ');\n    colorSpace = values.shift();\n    if (values.length === 4 && values[3].charAt(0) === '/') {\n      values[3] = values[3].slice(1);\n    }\n    if (!['srgb', 'display-p3', 'a98-rgb', 'prophoto-rgb', 'rec-2020'].includes(colorSpace)) {\n      throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: unsupported \\`${colorSpace}\\` color space.\\n` + 'The following color spaces are supported: srgb, display-p3, a98-rgb, prophoto-rgb, rec-2020.' : _formatErrorMessage(10, colorSpace));\n    }\n  } else {\n    values = values.split(',');\n  }\n  values = values.map(value => parseFloat(value));\n  return {\n    type,\n    values,\n    colorSpace\n  };\n}\n\n/**\n * Returns a channel created from the input color.\n *\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {string} - The channel for the color, that can be used in rgba or hsla colors\n */\nexport const colorChannel = color => {\n  const decomposedColor = decomposeColor(color);\n  return decomposedColor.values.slice(0, 3).map((val, idx) => decomposedColor.type.includes('hsl') && idx !== 0 ? `${val}%` : val).join(' ');\n};\nexport const private_safeColorChannel = (color, warning) => {\n  try {\n    return colorChannel(color);\n  } catch (error) {\n    if (warning && process.env.NODE_ENV !== 'production') {\n      console.warn(warning);\n    }\n    return color;\n  }\n};\n\n/**\n * Converts a color object with type and values to a string.\n * @param {object} color - Decomposed color\n * @param {string} color.type - One of: 'rgb', 'rgba', 'hsl', 'hsla', 'color'\n * @param {array} color.values - [n,n,n] or [n,n,n,n]\n * @returns {string} A CSS color string\n */\nexport function recomposeColor(color) {\n  const {\n    type,\n    colorSpace\n  } = color;\n  let {\n    values\n  } = color;\n  if (type.includes('rgb')) {\n    // Only convert the first 3 values to int (i.e. not alpha)\n    values = values.map((n, i) => i < 3 ? parseInt(n, 10) : n);\n  } else if (type.includes('hsl')) {\n    values[1] = `${values[1]}%`;\n    values[2] = `${values[2]}%`;\n  }\n  if (type.includes('color')) {\n    values = `${colorSpace} ${values.join(' ')}`;\n  } else {\n    values = `${values.join(', ')}`;\n  }\n  return `${type}(${values})`;\n}\n\n/**\n * Converts a color from CSS rgb format to CSS hex format.\n * @param {string} color - RGB color, i.e. rgb(n, n, n)\n * @returns {string} A CSS rgb color string, i.e. #nnnnnn\n */\nexport function rgbToHex(color) {\n  // Idempotent\n  if (color.startsWith('#')) {\n    return color;\n  }\n  const {\n    values\n  } = decomposeColor(color);\n  return `#${values.map((n, i) => intToHex(i === 3 ? Math.round(255 * n) : n)).join('')}`;\n}\n\n/**\n * Converts a color from hsl format to rgb format.\n * @param {string} color - HSL color values\n * @returns {string} rgb color values\n */\nexport function hslToRgb(color) {\n  color = decomposeColor(color);\n  const {\n    values\n  } = color;\n  const h = values[0];\n  const s = values[1] / 100;\n  const l = values[2] / 100;\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  let type = 'rgb';\n  const rgb = [Math.round(f(0) * 255), Math.round(f(8) * 255), Math.round(f(4) * 255)];\n  if (color.type === 'hsla') {\n    type += 'a';\n    rgb.push(values[3]);\n  }\n  return recomposeColor({\n    type,\n    values: rgb\n  });\n}\n/**\n * The relative brightness of any point in a color space,\n * normalized to 0 for darkest black and 1 for lightest white.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @returns {number} The relative brightness of the color in the range 0 - 1\n */\nexport function getLuminance(color) {\n  color = decomposeColor(color);\n  let rgb = color.type === 'hsl' || color.type === 'hsla' ? decomposeColor(hslToRgb(color)).values : color.values;\n  rgb = rgb.map(val => {\n    if (color.type !== 'color') {\n      val /= 255; // normalized\n    }\n    return val <= 0.03928 ? val / 12.92 : ((val + 0.055) / 1.055) ** 2.4;\n  });\n\n  // Truncate at 3 digits\n  return Number((0.2126 * rgb[0] + 0.7152 * rgb[1] + 0.0722 * rgb[2]).toFixed(3));\n}\n\n/**\n * Calculates the contrast ratio between two colors.\n *\n * Formula: https://www.w3.org/TR/WCAG20-TECHS/G17.html#G17-tests\n * @param {string} foreground - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @param {string} background - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla()\n * @returns {number} A contrast ratio value in the range 0 - 21.\n */\nexport function getContrastRatio(foreground, background) {\n  const lumA = getLuminance(foreground);\n  const lumB = getLuminance(background);\n  return (Math.max(lumA, lumB) + 0.05) / (Math.min(lumA, lumB) + 0.05);\n}\n\n/**\n * Sets the absolute transparency of a color.\n * Any existing alpha values are overwritten.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} value - value to set the alpha channel to in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function alpha(color, value) {\n  color = decomposeColor(color);\n  value = clampWrapper(value);\n  if (color.type === 'rgb' || color.type === 'hsl') {\n    color.type += 'a';\n  }\n  if (color.type === 'color') {\n    color.values[3] = `/${value}`;\n  } else {\n    color.values[3] = value;\n  }\n  return recomposeColor(color);\n}\nexport function private_safeAlpha(color, value, warning) {\n  try {\n    return alpha(color, value);\n  } catch (error) {\n    if (warning && process.env.NODE_ENV !== 'production') {\n      console.warn(warning);\n    }\n    return color;\n  }\n}\n\n/**\n * Darkens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function darken(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clampWrapper(coefficient);\n  if (color.type.includes('hsl')) {\n    color.values[2] *= 1 - coefficient;\n  } else if (color.type.includes('rgb') || color.type.includes('color')) {\n    for (let i = 0; i < 3; i += 1) {\n      color.values[i] *= 1 - coefficient;\n    }\n  }\n  return recomposeColor(color);\n}\nexport function private_safeDarken(color, coefficient, warning) {\n  try {\n    return darken(color, coefficient);\n  } catch (error) {\n    if (warning && process.env.NODE_ENV !== 'production') {\n      console.warn(warning);\n    }\n    return color;\n  }\n}\n\n/**\n * Lightens a color.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function lighten(color, coefficient) {\n  color = decomposeColor(color);\n  coefficient = clampWrapper(coefficient);\n  if (color.type.includes('hsl')) {\n    color.values[2] += (100 - color.values[2]) * coefficient;\n  } else if (color.type.includes('rgb')) {\n    for (let i = 0; i < 3; i += 1) {\n      color.values[i] += (255 - color.values[i]) * coefficient;\n    }\n  } else if (color.type.includes('color')) {\n    for (let i = 0; i < 3; i += 1) {\n      color.values[i] += (1 - color.values[i]) * coefficient;\n    }\n  }\n  return recomposeColor(color);\n}\nexport function private_safeLighten(color, coefficient, warning) {\n  try {\n    return lighten(color, coefficient);\n  } catch (error) {\n    if (warning && process.env.NODE_ENV !== 'production') {\n      console.warn(warning);\n    }\n    return color;\n  }\n}\n\n/**\n * Darken or lighten a color, depending on its luminance.\n * Light colors are darkened, dark colors are lightened.\n * @param {string} color - CSS color, i.e. one of: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color()\n * @param {number} coefficient=0.15 - multiplier in the range 0 - 1\n * @returns {string} A CSS color string. Hex input values are returned as rgb\n */\nexport function emphasize(color, coefficient = 0.15) {\n  return getLuminance(color) > 0.5 ? darken(color, coefficient) : lighten(color, coefficient);\n}\nexport function private_safeEmphasize(color, coefficient, warning) {\n  try {\n    return emphasize(color, coefficient);\n  } catch (error) {\n    if (warning && process.env.NODE_ENV !== 'production') {\n      console.warn(warning);\n    }\n    return color;\n  }\n}\n\n/**\n * Blend a transparent overlay color with a background color, resulting in a single\n * RGB color.\n * @param {string} background - CSS color\n * @param {string} overlay - CSS color\n * @param {number} opacity - Opacity multiplier in the range 0 - 1\n * @param {number} [gamma=1.0] - Gamma correction factor. For gamma-correct blending, 2.2 is usual.\n */\nexport function blend(background, overlay, opacity, gamma = 1.0) {\n  const blendChannel = (b, o) => Math.round((b ** (1 / gamma) * (1 - opacity) + o ** (1 / gamma) * opacity) ** gamma);\n  const backgroundColor = decomposeColor(background);\n  const overlayColor = decomposeColor(overlay);\n  const rgb = [blendChannel(backgroundColor.values[0], overlayColor.values[0]), blendChannel(backgroundColor.values[1], overlayColor.values[1]), blendChannel(backgroundColor.values[2], overlayColor.values[2])];\n  return recomposeColor({\n    type: 'rgb',\n    values: rgb\n  });\n}","// This module is based on https://github.com/airbnb/prop-types-exact repository.\n// However, in order to reduce the number of dependencies and to remove some extra safe checks\n// the module was forked.\n\nconst specialProperty = 'exact-prop: \\u200b';\nexport default function exactProp(propTypes) {\n  if (process.env.NODE_ENV === 'production') {\n    return propTypes;\n  }\n  return {\n    ...propTypes,\n    [specialProperty]: props => {\n      const unsupportedProps = Object.keys(props).filter(prop => !propTypes.hasOwnProperty(prop));\n      if (unsupportedProps.length > 0) {\n        return new Error(`The following props are not supported: ${unsupportedProps.map(prop => `\\`${prop}\\``).join(', ')}. Please remove them.`);\n      }\n      return null;\n    }\n  };\n}","'use client';\n\nimport * as React from 'react';\nconst ThemeContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== 'production') {\n  ThemeContext.displayName = 'ThemeContext';\n}\nexport default ThemeContext;","import * as React from 'react';\nimport ThemeContext from \"./ThemeContext.js\";\nexport default function useTheme() {\n  const theme = React.useContext(ThemeContext);\n  if (process.env.NODE_ENV !== 'production') {\n    // TODO: uncomment once we enable eslint-plugin-react-compiler eslint-disable-next-line react-compiler/react-compiler\n    // eslint-disable-next-line react-hooks/rules-of-hooks -- It's not required to run React.useDebugValue in production\n    React.useDebugValue(theme);\n  }\n  return theme;\n}","const hasSymbol = typeof Symbol === 'function' && Symbol.for;\nexport default hasSymbol ? Symbol.for('mui.nested') : '__THEME_NESTED__';","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport exactProp from '@mui/utils/exactProp';\nimport ThemeContext from \"../useTheme/ThemeContext.js\";\nimport useTheme from \"../useTheme/index.js\";\nimport nested from \"./nested.js\";\n\n// To support composition of theme.\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction mergeOuterLocalTheme(outerTheme, localTheme) {\n  if (typeof localTheme === 'function') {\n    const mergedTheme = localTheme(outerTheme);\n    if (process.env.NODE_ENV !== 'production') {\n      if (!mergedTheme) {\n        console.error(['MUI: You should return an object from your theme function, i.e.', '<ThemeProvider theme={() => ({})} />'].join('\\n'));\n      }\n    }\n    return mergedTheme;\n  }\n  return {\n    ...outerTheme,\n    ...localTheme\n  };\n}\n\n/**\n * This component takes a `theme` prop.\n * It makes the `theme` available down the React tree thanks to React context.\n * This component should preferably be used at **the root of your component tree**.\n */\nfunction ThemeProvider(props) {\n  const {\n    children,\n    theme: localTheme\n  } = props;\n  const outerTheme = useTheme();\n  if (process.env.NODE_ENV !== 'production') {\n    if (outerTheme === null && typeof localTheme === 'function') {\n      console.error(['MUI: You are providing a theme function prop to the ThemeProvider component:', '<ThemeProvider theme={outerTheme => outerTheme} />', '', 'However, no outer theme is present.', 'Make sure a theme is already injected higher in the React tree ' + 'or provide a theme object.'].join('\\n'));\n    }\n  }\n  const theme = React.useMemo(() => {\n    const output = outerTheme === null ? {\n      ...localTheme\n    } : mergeOuterLocalTheme(outerTheme, localTheme);\n    if (output != null) {\n      output[nested] = outerTheme !== null;\n    }\n    return output;\n  }, [localTheme, outerTheme]);\n  return /*#__PURE__*/_jsx(ThemeContext.Provider, {\n    value: theme,\n    children: children\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? ThemeProvider.propTypes = {\n  /**\n   * Your component tree.\n   */\n  children: PropTypes.node,\n  /**\n   * A theme object. You can provide a function to extend the outer theme.\n   */\n  theme: PropTypes.oneOfType([PropTypes.object, PropTypes.func]).isRequired\n} : void 0;\nif (process.env.NODE_ENV !== 'production') {\n  process.env.NODE_ENV !== \"production\" ? ThemeProvider.propTypes = exactProp(ThemeProvider.propTypes) : void 0;\n}\nexport default ThemeProvider;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst RtlContext = /*#__PURE__*/React.createContext();\nfunction RtlProvider({\n  value,\n  ...props\n}) {\n  return /*#__PURE__*/_jsx(RtlContext.Provider, {\n    value: value ?? true,\n    ...props\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? RtlProvider.propTypes = {\n  children: PropTypes.node,\n  value: PropTypes.bool\n} : void 0;\nexport const useRtl = () => {\n  const value = React.useContext(RtlContext);\n  return value ?? false;\n};\nexport default RtlProvider;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport resolveProps from '@mui/utils/resolveProps';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst PropsContext = /*#__PURE__*/React.createContext(undefined);\nfunction DefaultPropsProvider({\n  value,\n  children\n}) {\n  return /*#__PURE__*/_jsx(PropsContext.Provider, {\n    value: value,\n    children: children\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? DefaultPropsProvider.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * @ignore\n   */\n  children: PropTypes.node,\n  /**\n   * @ignore\n   */\n  value: PropTypes.object\n} : void 0;\nfunction getThemeProps(params) {\n  const {\n    theme,\n    name,\n    props\n  } = params;\n  if (!theme || !theme.components || !theme.components[name]) {\n    return props;\n  }\n  const config = theme.components[name];\n  if (config.defaultProps) {\n    // compatible with v5 signature\n    return resolveProps(config.defaultProps, props, theme.components.mergeClassNameAndStyle);\n  }\n  if (!config.styleOverrides && !config.variants) {\n    // v6 signature, no property 'defaultProps'\n    return resolveProps(config, props, theme.components.mergeClassNameAndStyle);\n  }\n  return props;\n}\nexport function useDefaultProps({\n  props,\n  name\n}) {\n  const ctx = React.useContext(PropsContext);\n  return getThemeProps({\n    props,\n    name,\n    theme: {\n      components: ctx\n    }\n  });\n}\nexport default DefaultPropsProvider;","'use client';\n\nimport * as React from 'react';\nlet globalId = 0;\n\n// TODO React 17: Remove `useGlobalId` once React 17 support is removed\nfunction useGlobalId(idOverride) {\n  const [defaultId, setDefaultId] = React.useState(idOverride);\n  const id = idOverride || defaultId;\n  React.useEffect(() => {\n    if (defaultId == null) {\n      // Fallback to this default id when possible.\n      // Use the incrementing value for client-side rendering only.\n      // We can't use it server-side.\n      // If you want to use random values please consider the Birthday Problem: https://en.wikipedia.org/wiki/Birthday_problem\n      globalId += 1;\n      setDefaultId(`mui-${globalId}`);\n    }\n  }, [defaultId]);\n  return id;\n}\n\n// See https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379 for why\nconst safeReact = {\n  ...React\n};\nconst maybeReactUseId = safeReact.useId;\n\n/**\n *\n * @example <div id={useId()} />\n * @param idOverride\n * @returns {string}\n */\nexport default function useId(idOverride) {\n  // React.useId() is only available from React 17.0.0.\n  if (maybeReactUseId !== undefined) {\n    const reactId = maybeReactUseId();\n    return idOverride ?? reactId;\n  }\n\n  // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n  // eslint-disable-next-line react-hooks/rules-of-hooks -- `React.useId` is invariant at runtime.\n  return useGlobalId(idOverride);\n}","import useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nimport useId from '@mui/utils/useId';\nimport GlobalStyles from \"../GlobalStyles/index.js\";\nimport useThemeWithoutDefault from \"../useThemeWithoutDefault/index.js\";\n\n/**\n * This hook returns a `GlobalStyles` component that sets the CSS layer order (for server-side rendering).\n * Then on client-side, it injects the CSS layer order into the document head to ensure that the layer order is always present first before other Emotion styles.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function useLayerOrder(theme) {\n  const upperTheme = useThemeWithoutDefault();\n  const id = useId() || '';\n  const {\n    modularCssLayers\n  } = theme;\n  let layerOrder = 'mui.global, mui.components, mui.theme, mui.custom, mui.sx';\n  if (!modularCssLayers || upperTheme !== null) {\n    // skip this hook if upper theme exists.\n    layerOrder = '';\n  } else if (typeof modularCssLayers === 'string') {\n    layerOrder = modularCssLayers.replace(/mui(?!\\.)/g, layerOrder);\n  } else {\n    layerOrder = `@layer ${layerOrder};`;\n  }\n  useEnhancedEffect(() => {\n    const head = document.querySelector('head');\n    if (!head) {\n      return;\n    }\n    const firstChild = head.firstChild;\n    if (layerOrder) {\n      // Only insert if first child doesn't have data-mui-layer-order attribute\n      if (firstChild && firstChild.hasAttribute?.('data-mui-layer-order') && firstChild.getAttribute('data-mui-layer-order') === id) {\n        return;\n      }\n      const styleElement = document.createElement('style');\n      styleElement.setAttribute('data-mui-layer-order', id);\n      styleElement.textContent = layerOrder;\n      head.prepend(styleElement);\n    } else {\n      head.querySelector(`style[data-mui-layer-order=\"${id}\"]`)?.remove();\n    }\n  }, [layerOrder, id]);\n  if (!layerOrder) {\n    return null;\n  }\n  return /*#__PURE__*/_jsx(GlobalStyles, {\n    styles: layerOrder\n  });\n}","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { ThemeProvider as MuiThemeProvider, useTheme as usePrivateTheme } from '@mui/private-theming';\nimport exactProp from '@mui/utils/exactProp';\nimport { ThemeContext as StyledEngineThemeContext } from '@mui/styled-engine';\nimport useThemeWithoutDefault from \"../useThemeWithoutDefault/index.js\";\nimport RtlProvider from \"../RtlProvider/index.js\";\nimport DefaultPropsProvider from \"../DefaultPropsProvider/index.js\";\nimport useLayerOrder from \"./useLayerOrder.js\";\nimport { jsxs as _jsxs, jsx as _jsx } from \"react/jsx-runtime\";\nconst EMPTY_THEME = {};\nfunction useThemeScoping(themeId, upperTheme, localTheme, isPrivate = false) {\n  return React.useMemo(() => {\n    const resolvedTheme = themeId ? upperTheme[themeId] || upperTheme : upperTheme;\n    if (typeof localTheme === 'function') {\n      const mergedTheme = localTheme(resolvedTheme);\n      const result = themeId ? {\n        ...upperTheme,\n        [themeId]: mergedTheme\n      } : mergedTheme;\n      // must return a function for the private theme to NOT merge with the upper theme.\n      // see the test case \"use provided theme from a callback\" in ThemeProvider.test.js\n      if (isPrivate) {\n        return () => result;\n      }\n      return result;\n    }\n    return themeId ? {\n      ...upperTheme,\n      [themeId]: localTheme\n    } : {\n      ...upperTheme,\n      ...localTheme\n    };\n  }, [themeId, upperTheme, localTheme, isPrivate]);\n}\n\n/**\n * This component makes the `theme` available down the React tree.\n * It should preferably be used at **the root of your component tree**.\n *\n * <ThemeProvider theme={theme}> // existing use case\n * <ThemeProvider theme={{ id: theme }}> // theme scoping\n */\nfunction ThemeProvider(props) {\n  const {\n    children,\n    theme: localTheme,\n    themeId\n  } = props;\n  const upperTheme = useThemeWithoutDefault(EMPTY_THEME);\n  const upperPrivateTheme = usePrivateTheme() || EMPTY_THEME;\n  if (process.env.NODE_ENV !== 'production') {\n    if (upperTheme === null && typeof localTheme === 'function' || themeId && upperTheme && !upperTheme[themeId] && typeof localTheme === 'function') {\n      console.error(['MUI: You are providing a theme function prop to the ThemeProvider component:', '<ThemeProvider theme={outerTheme => outerTheme} />', '', 'However, no outer theme is present.', 'Make sure a theme is already injected higher in the React tree ' + 'or provide a theme object.'].join('\\n'));\n    }\n  }\n  const engineTheme = useThemeScoping(themeId, upperTheme, localTheme);\n  const privateTheme = useThemeScoping(themeId, upperPrivateTheme, localTheme, true);\n  const rtlValue = (themeId ? engineTheme[themeId] : engineTheme).direction === 'rtl';\n  const layerOrder = useLayerOrder(engineTheme);\n  return /*#__PURE__*/_jsx(MuiThemeProvider, {\n    theme: privateTheme,\n    children: /*#__PURE__*/_jsx(StyledEngineThemeContext.Provider, {\n      value: engineTheme,\n      children: /*#__PURE__*/_jsx(RtlProvider, {\n        value: rtlValue,\n        children: /*#__PURE__*/_jsxs(DefaultPropsProvider, {\n          value: themeId ? engineTheme[themeId].components : engineTheme.components,\n          children: [layerOrder, children]\n        })\n      })\n    })\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? ThemeProvider.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Your component tree.\n   */\n  children: PropTypes.node,\n  /**\n   * A theme object. You can provide a function to extend the outer theme.\n   */\n  theme: PropTypes.oneOfType([PropTypes.func, PropTypes.object]).isRequired,\n  /**\n   * The design system's unique id for getting the corresponded theme when there are multiple design systems.\n   */\n  themeId: PropTypes.string\n} : void 0;\nif (process.env.NODE_ENV !== 'production') {\n  process.env.NODE_ENV !== \"production\" ? ThemeProvider.propTypes = exactProp(ThemeProvider.propTypes) : void 0;\n}\nexport default ThemeProvider;","import preprocessStyles from \"./preprocessStyles.js\";\n\n/* eslint-disable @typescript-eslint/naming-convention */\n\n// We need to pass an argument as `{ theme }` for PigmentCSS, but we don't want to\n// allocate more objects.\nconst arg = {\n  theme: undefined\n};\n\n/**\n * Memoize style function on theme.\n * Intended to be used in styled() calls that only need access to the theme.\n */\nexport default function unstable_memoTheme(styleFn) {\n  let lastValue;\n  let lastTheme;\n  return function styleMemoized(props) {\n    let value = lastValue;\n    if (value === undefined || props.theme !== lastTheme) {\n      arg.theme = props.theme;\n      value = preprocessStyles(styleFn(arg));\n      lastValue = value;\n      lastTheme = props.theme;\n    }\n    return value;\n  };\n}","import { jsx as _jsx } from \"react/jsx-runtime\";\nexport const DEFAULT_MODE_STORAGE_KEY = 'mode';\nexport const DEFAULT_COLOR_SCHEME_STORAGE_KEY = 'color-scheme';\nexport const DEFAULT_ATTRIBUTE = 'data-color-scheme';\nexport default function InitColorSchemeScript(options) {\n  const {\n    defaultMode = 'system',\n    defaultLightColorScheme = 'light',\n    defaultDarkColorScheme = 'dark',\n    modeStorageKey = DEFAULT_MODE_STORAGE_KEY,\n    colorSchemeStorageKey = DEFAULT_COLOR_SCHEME_STORAGE_KEY,\n    attribute: initialAttribute = DEFAULT_ATTRIBUTE,\n    colorSchemeNode = 'document.documentElement',\n    nonce\n  } = options || {};\n  let setter = '';\n  let attribute = initialAttribute;\n  if (initialAttribute === 'class') {\n    attribute = '.%s';\n  }\n  if (initialAttribute === 'data') {\n    attribute = '[data-%s]';\n  }\n  if (attribute.startsWith('.')) {\n    const selector = attribute.substring(1);\n    setter += `${colorSchemeNode}.classList.remove('${selector}'.replace('%s', light), '${selector}'.replace('%s', dark));\n      ${colorSchemeNode}.classList.add('${selector}'.replace('%s', colorScheme));`;\n  }\n  const matches = attribute.match(/\\[([^[\\]]+)\\]/); // case [data-color-scheme='%s'] or [data-color-scheme]\n  if (matches) {\n    const [attr, value] = matches[1].split('=');\n    if (!value) {\n      setter += `${colorSchemeNode}.removeAttribute('${attr}'.replace('%s', light));\n      ${colorSchemeNode}.removeAttribute('${attr}'.replace('%s', dark));`;\n    }\n    setter += `\n      ${colorSchemeNode}.setAttribute('${attr}'.replace('%s', colorScheme), ${value ? `${value}.replace('%s', colorScheme)` : '\"\"'});`;\n  } else {\n    setter += `${colorSchemeNode}.setAttribute('${attribute}', colorScheme);`;\n  }\n  return /*#__PURE__*/_jsx(\"script\", {\n    suppressHydrationWarning: true,\n    nonce: typeof window === 'undefined' ? nonce : ''\n    // eslint-disable-next-line react/no-danger\n    ,\n    dangerouslySetInnerHTML: {\n      __html: `(function() {\ntry {\n  let colorScheme = '';\n  const mode = localStorage.getItem('${modeStorageKey}') || '${defaultMode}';\n  const dark = localStorage.getItem('${colorSchemeStorageKey}-dark') || '${defaultDarkColorScheme}';\n  const light = localStorage.getItem('${colorSchemeStorageKey}-light') || '${defaultLightColorScheme}';\n  if (mode === 'system') {\n    // handle system mode\n    const mql = window.matchMedia('(prefers-color-scheme: dark)');\n    if (mql.matches) {\n      colorScheme = dark\n    } else {\n      colorScheme = light\n    }\n  }\n  if (mode === 'light') {\n    colorScheme = light;\n  }\n  if (mode === 'dark') {\n    colorScheme = dark;\n  }\n  if (colorScheme) {\n    ${setter}\n  }\n} catch(e){}})();`\n    }\n  }, \"mui-color-scheme-init\");\n}","function noop() {}\nconst localStorageManager = ({\n  key,\n  storageWindow\n}) => {\n  if (!storageWindow && typeof window !== 'undefined') {\n    storageWindow = window;\n  }\n  return {\n    get(defaultValue) {\n      if (typeof window === 'undefined') {\n        return undefined;\n      }\n      if (!storageWindow) {\n        return defaultValue;\n      }\n      let value;\n      try {\n        value = storageWindow.localStorage.getItem(key);\n      } catch {\n        // Unsupported\n      }\n      return value || defaultValue;\n    },\n    set: value => {\n      if (storageWindow) {\n        try {\n          storageWindow.localStorage.setItem(key, value);\n        } catch {\n          // Unsupported\n        }\n      }\n    },\n    subscribe: handler => {\n      if (!storageWindow) {\n        return noop;\n      }\n      const listener = event => {\n        const value = event.newValue;\n        if (event.key === key) {\n          handler(value);\n        }\n      };\n      storageWindow.addEventListener('storage', listener);\n      return () => {\n        storageWindow.removeEventListener('storage', listener);\n      };\n    }\n  };\n};\nexport default localStorageManager;","'use client';\n\nimport * as React from 'react';\nimport { DEFAULT_MODE_STORAGE_KEY, DEFAULT_COLOR_SCHEME_STORAGE_KEY } from \"../InitColorSchemeScript/InitColorSchemeScript.js\";\nimport localStorageManager from \"./localStorageManager.js\";\nfunction noop() {}\nexport function getSystemMode(mode) {\n  if (typeof window !== 'undefined' && typeof window.matchMedia === 'function' && mode === 'system') {\n    const mql = window.matchMedia('(prefers-color-scheme: dark)');\n    if (mql.matches) {\n      return 'dark';\n    }\n    return 'light';\n  }\n  return undefined;\n}\nfunction processState(state, callback) {\n  if (state.mode === 'light' || state.mode === 'system' && state.systemMode === 'light') {\n    return callback('light');\n  }\n  if (state.mode === 'dark' || state.mode === 'system' && state.systemMode === 'dark') {\n    return callback('dark');\n  }\n  return undefined;\n}\nexport function getColorScheme(state) {\n  return processState(state, mode => {\n    if (mode === 'light') {\n      return state.lightColorScheme;\n    }\n    if (mode === 'dark') {\n      return state.darkColorScheme;\n    }\n    return undefined;\n  });\n}\nexport default function useCurrentColorScheme(options) {\n  const {\n    defaultMode = 'light',\n    defaultLightColorScheme,\n    defaultDarkColorScheme,\n    supportedColorSchemes = [],\n    modeStorageKey = DEFAULT_MODE_STORAGE_KEY,\n    colorSchemeStorageKey = DEFAULT_COLOR_SCHEME_STORAGE_KEY,\n    storageWindow = typeof window === 'undefined' ? undefined : window,\n    storageManager = localStorageManager,\n    noSsr = false\n  } = options;\n  const joinedColorSchemes = supportedColorSchemes.join(',');\n  const isMultiSchemes = supportedColorSchemes.length > 1;\n  const modeStorage = React.useMemo(() => storageManager?.({\n    key: modeStorageKey,\n    storageWindow\n  }), [storageManager, modeStorageKey, storageWindow]);\n  const lightStorage = React.useMemo(() => storageManager?.({\n    key: `${colorSchemeStorageKey}-light`,\n    storageWindow\n  }), [storageManager, colorSchemeStorageKey, storageWindow]);\n  const darkStorage = React.useMemo(() => storageManager?.({\n    key: `${colorSchemeStorageKey}-dark`,\n    storageWindow\n  }), [storageManager, colorSchemeStorageKey, storageWindow]);\n  const [state, setState] = React.useState(() => {\n    const initialMode = modeStorage?.get(defaultMode) || defaultMode;\n    const lightColorScheme = lightStorage?.get(defaultLightColorScheme) || defaultLightColorScheme;\n    const darkColorScheme = darkStorage?.get(defaultDarkColorScheme) || defaultDarkColorScheme;\n    return {\n      mode: initialMode,\n      systemMode: getSystemMode(initialMode),\n      lightColorScheme,\n      darkColorScheme\n    };\n  });\n  const [isClient, setIsClient] = React.useState(noSsr || !isMultiSchemes);\n  React.useEffect(() => {\n    setIsClient(true); // to rerender the component after hydration\n  }, []);\n  const colorScheme = getColorScheme(state);\n  const setMode = React.useCallback(mode => {\n    setState(currentState => {\n      if (mode === currentState.mode) {\n        // do nothing if mode does not change\n        return currentState;\n      }\n      const newMode = mode ?? defaultMode;\n      modeStorage?.set(newMode);\n      return {\n        ...currentState,\n        mode: newMode,\n        systemMode: getSystemMode(newMode)\n      };\n    });\n  }, [modeStorage, defaultMode]);\n  const setColorScheme = React.useCallback(value => {\n    if (!value) {\n      setState(currentState => {\n        lightStorage?.set(defaultLightColorScheme);\n        darkStorage?.set(defaultDarkColorScheme);\n        return {\n          ...currentState,\n          lightColorScheme: defaultLightColorScheme,\n          darkColorScheme: defaultDarkColorScheme\n        };\n      });\n    } else if (typeof value === 'string') {\n      if (value && !joinedColorSchemes.includes(value)) {\n        console.error(`\\`${value}\\` does not exist in \\`theme.colorSchemes\\`.`);\n      } else {\n        setState(currentState => {\n          const newState = {\n            ...currentState\n          };\n          processState(currentState, mode => {\n            if (mode === 'light') {\n              lightStorage?.set(value);\n              newState.lightColorScheme = value;\n            }\n            if (mode === 'dark') {\n              darkStorage?.set(value);\n              newState.darkColorScheme = value;\n            }\n          });\n          return newState;\n        });\n      }\n    } else {\n      setState(currentState => {\n        const newState = {\n          ...currentState\n        };\n        const newLightColorScheme = value.light === null ? defaultLightColorScheme : value.light;\n        const newDarkColorScheme = value.dark === null ? defaultDarkColorScheme : value.dark;\n        if (newLightColorScheme) {\n          if (!joinedColorSchemes.includes(newLightColorScheme)) {\n            console.error(`\\`${newLightColorScheme}\\` does not exist in \\`theme.colorSchemes\\`.`);\n          } else {\n            newState.lightColorScheme = newLightColorScheme;\n            lightStorage?.set(newLightColorScheme);\n          }\n        }\n        if (newDarkColorScheme) {\n          if (!joinedColorSchemes.includes(newDarkColorScheme)) {\n            console.error(`\\`${newDarkColorScheme}\\` does not exist in \\`theme.colorSchemes\\`.`);\n          } else {\n            newState.darkColorScheme = newDarkColorScheme;\n            darkStorage?.set(newDarkColorScheme);\n          }\n        }\n        return newState;\n      });\n    }\n  }, [joinedColorSchemes, lightStorage, darkStorage, defaultLightColorScheme, defaultDarkColorScheme]);\n  const handleMediaQuery = React.useCallback(event => {\n    if (state.mode === 'system') {\n      setState(currentState => {\n        const systemMode = event?.matches ? 'dark' : 'light';\n\n        // Early exit, nothing changed.\n        if (currentState.systemMode === systemMode) {\n          return currentState;\n        }\n        return {\n          ...currentState,\n          systemMode\n        };\n      });\n    }\n  }, [state.mode]);\n\n  // Ref hack to avoid adding handleMediaQuery as a dep\n  const mediaListener = React.useRef(handleMediaQuery);\n  mediaListener.current = handleMediaQuery;\n  React.useEffect(() => {\n    if (typeof window.matchMedia !== 'function' || !isMultiSchemes) {\n      return undefined;\n    }\n    const handler = (...args) => mediaListener.current(...args);\n\n    // Always listen to System preference\n    const media = window.matchMedia('(prefers-color-scheme: dark)');\n\n    // Intentionally use deprecated listener methods to support iOS & old browsers\n    media.addListener(handler);\n    handler(media);\n    return () => {\n      media.removeListener(handler);\n    };\n  }, [isMultiSchemes]);\n\n  // Handle when localStorage has changed\n  React.useEffect(() => {\n    if (isMultiSchemes) {\n      const unsubscribeMode = modeStorage?.subscribe(value => {\n        if (!value || ['light', 'dark', 'system'].includes(value)) {\n          setMode(value || defaultMode);\n        }\n      }) || noop;\n      const unsubscribeLight = lightStorage?.subscribe(value => {\n        if (!value || joinedColorSchemes.match(value)) {\n          setColorScheme({\n            light: value\n          });\n        }\n      }) || noop;\n      const unsubscribeDark = darkStorage?.subscribe(value => {\n        if (!value || joinedColorSchemes.match(value)) {\n          setColorScheme({\n            dark: value\n          });\n        }\n      }) || noop;\n      return () => {\n        unsubscribeMode();\n        unsubscribeLight();\n        unsubscribeDark();\n      };\n    }\n    return undefined;\n  }, [setColorScheme, setMode, joinedColorSchemes, defaultMode, storageWindow, isMultiSchemes, modeStorage, lightStorage, darkStorage]);\n  return {\n    ...state,\n    mode: isClient ? state.mode : undefined,\n    systemMode: isClient ? state.systemMode : undefined,\n    colorScheme: isClient ? colorScheme : undefined,\n    setMode,\n    setColorScheme\n  };\n}","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { GlobalStyles } from '@mui/styled-engine';\nimport { useTheme as muiUseTheme } from '@mui/private-theming';\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nimport ThemeProvider from \"../ThemeProvider/index.js\";\nimport InitColorSchemeScript, { DEFAULT_COLOR_SCHEME_STORAGE_KEY, DEFAULT_MODE_STORAGE_KEY } from \"../InitColorSchemeScript/InitColorSchemeScript.js\";\nimport useCurrentColorScheme from \"./useCurrentColorScheme.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport const DISABLE_CSS_TRANSITION = '*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}';\nexport default function createCssVarsProvider(options) {\n  const {\n    themeId,\n    /**\n     * This `theme` object needs to follow a certain structure to\n     * be used correctly by the finel `CssVarsProvider`. It should have a\n     * `colorSchemes` key with the light and dark (and any other) palette.\n     * It should also ideally have a vars object created using `prepareCssVars`.\n     */\n    theme: defaultTheme = {},\n    modeStorageKey: defaultModeStorageKey = DEFAULT_MODE_STORAGE_KEY,\n    colorSchemeStorageKey: defaultColorSchemeStorageKey = DEFAULT_COLOR_SCHEME_STORAGE_KEY,\n    disableTransitionOnChange: designSystemTransitionOnChange = false,\n    defaultColorScheme,\n    resolveTheme\n  } = options;\n  const defaultContext = {\n    allColorSchemes: [],\n    colorScheme: undefined,\n    darkColorScheme: undefined,\n    lightColorScheme: undefined,\n    mode: undefined,\n    setColorScheme: () => {},\n    setMode: () => {},\n    systemMode: undefined\n  };\n  const ColorSchemeContext = /*#__PURE__*/React.createContext(undefined);\n  if (process.env.NODE_ENV !== 'production') {\n    ColorSchemeContext.displayName = 'ColorSchemeContext';\n  }\n  const useColorScheme = () => React.useContext(ColorSchemeContext) || defaultContext;\n  const defaultColorSchemes = {};\n  const defaultComponents = {};\n  function CssVarsProvider(props) {\n    const {\n      children,\n      theme: themeProp,\n      modeStorageKey = defaultModeStorageKey,\n      colorSchemeStorageKey = defaultColorSchemeStorageKey,\n      disableTransitionOnChange = designSystemTransitionOnChange,\n      storageManager,\n      storageWindow = typeof window === 'undefined' ? undefined : window,\n      documentNode = typeof document === 'undefined' ? undefined : document,\n      colorSchemeNode = typeof document === 'undefined' ? undefined : document.documentElement,\n      disableNestedContext = false,\n      disableStyleSheetGeneration = false,\n      defaultMode: initialMode = 'system',\n      forceThemeRerender = false,\n      noSsr\n    } = props;\n    const hasMounted = React.useRef(false);\n    const upperTheme = muiUseTheme();\n    const ctx = React.useContext(ColorSchemeContext);\n    const nested = !!ctx && !disableNestedContext;\n    const initialTheme = React.useMemo(() => {\n      if (themeProp) {\n        return themeProp;\n      }\n      return typeof defaultTheme === 'function' ? defaultTheme() : defaultTheme;\n    }, [themeProp]);\n    const scopedTheme = initialTheme[themeId];\n    const restThemeProp = scopedTheme || initialTheme;\n    const {\n      colorSchemes = defaultColorSchemes,\n      components = defaultComponents,\n      cssVarPrefix\n    } = restThemeProp;\n    const joinedColorSchemes = Object.keys(colorSchemes).filter(k => !!colorSchemes[k]).join(',');\n    const allColorSchemes = React.useMemo(() => joinedColorSchemes.split(','), [joinedColorSchemes]);\n    const defaultLightColorScheme = typeof defaultColorScheme === 'string' ? defaultColorScheme : defaultColorScheme.light;\n    const defaultDarkColorScheme = typeof defaultColorScheme === 'string' ? defaultColorScheme : defaultColorScheme.dark;\n    const defaultMode = colorSchemes[defaultLightColorScheme] && colorSchemes[defaultDarkColorScheme] ? initialMode : colorSchemes[restThemeProp.defaultColorScheme]?.palette?.mode || restThemeProp.palette?.mode;\n\n    // 1. Get the data about the `mode`, `colorScheme`, and setter functions.\n    const {\n      mode: stateMode,\n      setMode,\n      systemMode,\n      lightColorScheme,\n      darkColorScheme,\n      colorScheme: stateColorScheme,\n      setColorScheme\n    } = useCurrentColorScheme({\n      supportedColorSchemes: allColorSchemes,\n      defaultLightColorScheme,\n      defaultDarkColorScheme,\n      modeStorageKey,\n      colorSchemeStorageKey,\n      defaultMode,\n      storageManager,\n      storageWindow,\n      noSsr\n    });\n    let mode = stateMode;\n    let colorScheme = stateColorScheme;\n    if (nested) {\n      mode = ctx.mode;\n      colorScheme = ctx.colorScheme;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      if (forceThemeRerender && !restThemeProp.vars) {\n        console.warn(['MUI: The `forceThemeRerender` prop should only be used with CSS theme variables.', 'Note that it will slow down the app when changing between modes, so only do this when you cannot find a better solution.'].join('\\n'));\n      }\n    }\n\n    // `colorScheme` is undefined on the server and hydration phase\n    let calculatedColorScheme = colorScheme || restThemeProp.defaultColorScheme;\n    if (restThemeProp.vars && !forceThemeRerender) {\n      calculatedColorScheme = restThemeProp.defaultColorScheme;\n    }\n    const memoTheme = React.useMemo(() => {\n      // 2. get the `vars` object that refers to the CSS custom properties\n      const themeVars = restThemeProp.generateThemeVars?.() || restThemeProp.vars;\n\n      // 3. Start composing the theme object\n      const theme = {\n        ...restThemeProp,\n        components,\n        colorSchemes,\n        cssVarPrefix,\n        vars: themeVars\n      };\n      if (typeof theme.generateSpacing === 'function') {\n        theme.spacing = theme.generateSpacing();\n      }\n\n      // 4. Resolve the color scheme and merge it to the theme\n      if (calculatedColorScheme) {\n        const scheme = colorSchemes[calculatedColorScheme];\n        if (scheme && typeof scheme === 'object') {\n          // 4.1 Merge the selected color scheme to the theme\n          Object.keys(scheme).forEach(schemeKey => {\n            if (scheme[schemeKey] && typeof scheme[schemeKey] === 'object') {\n              // shallow merge the 1st level structure of the theme.\n              theme[schemeKey] = {\n                ...theme[schemeKey],\n                ...scheme[schemeKey]\n              };\n            } else {\n              theme[schemeKey] = scheme[schemeKey];\n            }\n          });\n        }\n      }\n      return resolveTheme ? resolveTheme(theme) : theme;\n    }, [restThemeProp, calculatedColorScheme, components, colorSchemes, cssVarPrefix]);\n\n    // 5. Declaring effects\n    // 5.1 Updates the selector value to use the current color scheme which tells CSS to use the proper stylesheet.\n    const colorSchemeSelector = restThemeProp.colorSchemeSelector;\n    useEnhancedEffect(() => {\n      if (colorScheme && colorSchemeNode && colorSchemeSelector && colorSchemeSelector !== 'media') {\n        const selector = colorSchemeSelector;\n        let rule = colorSchemeSelector;\n        if (selector === 'class') {\n          rule = `.%s`;\n        }\n        if (selector === 'data') {\n          rule = `[data-%s]`;\n        }\n        if (selector?.startsWith('data-') && !selector.includes('%s')) {\n          // 'data-mui-color-scheme' -> '[data-mui-color-scheme=\"%s\"]'\n          rule = `[${selector}=\"%s\"]`;\n        }\n        if (rule.startsWith('.')) {\n          colorSchemeNode.classList.remove(...allColorSchemes.map(scheme => rule.substring(1).replace('%s', scheme)));\n          colorSchemeNode.classList.add(rule.substring(1).replace('%s', colorScheme));\n        } else {\n          const matches = rule.replace('%s', colorScheme).match(/\\[([^\\]]+)\\]/);\n          if (matches) {\n            const [attr, value] = matches[1].split('=');\n            if (!value) {\n              // for attributes like `data-theme-dark`, `data-theme-light`\n              // remove all the existing data attributes before setting the new one\n              allColorSchemes.forEach(scheme => {\n                colorSchemeNode.removeAttribute(attr.replace(colorScheme, scheme));\n              });\n            }\n            colorSchemeNode.setAttribute(attr, value ? value.replace(/\"|'/g, '') : '');\n          } else {\n            colorSchemeNode.setAttribute(rule, colorScheme);\n          }\n        }\n      }\n    }, [colorScheme, colorSchemeSelector, colorSchemeNode, allColorSchemes]);\n\n    // 5.2 Remove the CSS transition when color scheme changes to create instant experience.\n    // credit: https://github.com/pacocoursey/next-themes/blob/b5c2bad50de2d61ad7b52a9c5cdc801a78507d7a/index.tsx#L313\n    React.useEffect(() => {\n      let timer;\n      if (disableTransitionOnChange && hasMounted.current && documentNode) {\n        const css = documentNode.createElement('style');\n        css.appendChild(documentNode.createTextNode(DISABLE_CSS_TRANSITION));\n        documentNode.head.appendChild(css);\n\n        // Force browser repaint\n        (() => window.getComputedStyle(documentNode.body))();\n        timer = setTimeout(() => {\n          documentNode.head.removeChild(css);\n        }, 1);\n      }\n      return () => {\n        clearTimeout(timer);\n      };\n    }, [colorScheme, disableTransitionOnChange, documentNode]);\n    React.useEffect(() => {\n      hasMounted.current = true;\n      return () => {\n        hasMounted.current = false;\n      };\n    }, []);\n    const contextValue = React.useMemo(() => ({\n      allColorSchemes,\n      colorScheme,\n      darkColorScheme,\n      lightColorScheme,\n      mode,\n      setColorScheme,\n      setMode: process.env.NODE_ENV === 'production' ? setMode : newMode => {\n        if (memoTheme.colorSchemeSelector === 'media') {\n          console.error(['MUI: The `setMode` function has no effect if `colorSchemeSelector` is `media` (`media` is the default value).', 'To toggle the mode manually, please configure `colorSchemeSelector` to use a class or data attribute.', 'To learn more, visit https://mui.com/material-ui/customization/css-theme-variables/configuration/#toggling-dark-mode-manually'].join('\\n'));\n        }\n        setMode(newMode);\n      },\n      systemMode\n    }), [allColorSchemes, colorScheme, darkColorScheme, lightColorScheme, mode, setColorScheme, setMode, systemMode, memoTheme.colorSchemeSelector]);\n    let shouldGenerateStyleSheet = true;\n    if (disableStyleSheetGeneration || restThemeProp.cssVariables === false || nested && upperTheme?.cssVarPrefix === cssVarPrefix) {\n      shouldGenerateStyleSheet = false;\n    }\n    const element = /*#__PURE__*/_jsxs(React.Fragment, {\n      children: [/*#__PURE__*/_jsx(ThemeProvider, {\n        themeId: scopedTheme ? themeId : undefined,\n        theme: memoTheme,\n        children: children\n      }), shouldGenerateStyleSheet && /*#__PURE__*/_jsx(GlobalStyles, {\n        styles: memoTheme.generateStyleSheets?.() || []\n      })]\n    });\n    if (nested) {\n      return element;\n    }\n    return /*#__PURE__*/_jsx(ColorSchemeContext.Provider, {\n      value: contextValue,\n      children: element\n    });\n  }\n  process.env.NODE_ENV !== \"production\" ? CssVarsProvider.propTypes = {\n    /**\n     * The component tree.\n     */\n    children: PropTypes.node,\n    /**\n     * The node used to attach the color-scheme attribute\n     */\n    colorSchemeNode: PropTypes.any,\n    /**\n     * localStorage key used to store `colorScheme`\n     */\n    colorSchemeStorageKey: PropTypes.string,\n    /**\n     * The default mode when the storage is empty,\n     * require the theme to have `colorSchemes` with light and dark.\n     */\n    defaultMode: PropTypes.string,\n    /**\n     * If `true`, the provider creates its own context and generate stylesheet as if it is a root `CssVarsProvider`.\n     */\n    disableNestedContext: PropTypes.bool,\n    /**\n     * If `true`, the style sheet won't be generated.\n     *\n     * This is useful for controlling nested CssVarsProvider behavior.\n     */\n    disableStyleSheetGeneration: PropTypes.bool,\n    /**\n     * Disable CSS transitions when switching between modes or color schemes.\n     */\n    disableTransitionOnChange: PropTypes.bool,\n    /**\n     * The document to attach the attribute to.\n     */\n    documentNode: PropTypes.any,\n    /**\n     * If `true`, theme values are recalculated when the mode changes.\n     */\n    forceThemeRerender: PropTypes.bool,\n    /**\n     * The key in the local storage used to store current color scheme.\n     */\n    modeStorageKey: PropTypes.string,\n    /**\n     * If `true`, the mode will be the same value as the storage without an extra rerendering after the hydration.\n     * You should use this option in conjunction with `InitColorSchemeScript` component.\n     */\n    noSsr: PropTypes.bool,\n    /**\n     * The storage manager to be used for storing the mode and color scheme\n     * @default using `window.localStorage`\n     */\n    storageManager: PropTypes.func,\n    /**\n     * The window that attaches the 'storage' event listener.\n     * @default window\n     */\n    storageWindow: PropTypes.any,\n    /**\n     * The calculated theme object that will be passed through context.\n     */\n    theme: PropTypes.object\n  } : void 0;\n  const defaultLightColorScheme = typeof defaultColorScheme === 'string' ? defaultColorScheme : defaultColorScheme.light;\n  const defaultDarkColorScheme = typeof defaultColorScheme === 'string' ? defaultColorScheme : defaultColorScheme.dark;\n  const getInitColorSchemeScript = params => InitColorSchemeScript({\n    colorSchemeStorageKey: defaultColorSchemeStorageKey,\n    defaultLightColorScheme,\n    defaultDarkColorScheme,\n    modeStorageKey: defaultModeStorageKey,\n    ...params\n  });\n  return {\n    CssVarsProvider,\n    useColorScheme,\n    getInitColorSchemeScript\n  };\n}","/**\n * The benefit of this function is to help developers get CSS var from theme without specifying the whole variable\n * and they does not need to remember the prefix (defined once).\n */\nexport default function createGetCssVar(prefix = '') {\n  function appendVar(...vars) {\n    if (!vars.length) {\n      return '';\n    }\n    const value = vars[0];\n    if (typeof value === 'string' && !value.match(/(#|\\(|\\)|(-?(\\d*\\.)?\\d+)(px|em|%|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc))|^(-?(\\d*\\.)?\\d+)$|(\\d+ \\d+ \\d+)/)) {\n      return `, var(--${prefix ? `${prefix}-` : ''}${value}${appendVar(...vars.slice(1))})`;\n    }\n    return `, ${value}`;\n  }\n\n  // AdditionalVars makes `getCssVar` less strict, so it can be use like this `getCssVar('non-mui-variable')` without type error.\n  const getCssVar = (field, ...fallbacks) => {\n    return `var(--${prefix ? `${prefix}-` : ''}${field}${appendVar(...fallbacks)})`;\n  };\n  return getCssVar;\n}","/**\n * This function create an object from keys, value and then assign to target\n *\n * @param {Object} obj : the target object to be assigned\n * @param {string[]} keys\n * @param {string | number} value\n *\n * @example\n * const source = {}\n * assignNestedKeys(source, ['palette', 'primary'], 'var(--palette-primary)')\n * console.log(source) // { palette: { primary: 'var(--palette-primary)' } }\n *\n * @example\n * const source = { palette: { primary: 'var(--palette-primary)' } }\n * assignNestedKeys(source, ['palette', 'secondary'], 'var(--palette-secondary)')\n * console.log(source) // { palette: { primary: 'var(--palette-primary)', secondary: 'var(--palette-secondary)' } }\n */\nexport const assignNestedKeys = (obj, keys, value, arrayKeys = []) => {\n  let temp = obj;\n  keys.forEach((k, index) => {\n    if (index === keys.length - 1) {\n      if (Array.isArray(temp)) {\n        temp[Number(k)] = value;\n      } else if (temp && typeof temp === 'object') {\n        temp[k] = value;\n      }\n    } else if (temp && typeof temp === 'object') {\n      if (!temp[k]) {\n        temp[k] = arrayKeys.includes(k) ? [] : {};\n      }\n      temp = temp[k];\n    }\n  });\n};\n\n/**\n *\n * @param {Object} obj : source object\n * @param {Function} callback : a function that will be called when\n *                   - the deepest key in source object is reached\n *                   - the value of the deepest key is NOT `undefined` | `null`\n *\n * @example\n * walkObjectDeep({ palette: { primary: { main: '#000000' } } }, console.log)\n * // ['palette', 'primary', 'main'] '#000000'\n */\nexport const walkObjectDeep = (obj, callback, shouldSkipPaths) => {\n  function recurse(object, parentKeys = [], arrayKeys = []) {\n    Object.entries(object).forEach(([key, value]) => {\n      if (!shouldSkipPaths || shouldSkipPaths && !shouldSkipPaths([...parentKeys, key])) {\n        if (value !== undefined && value !== null) {\n          if (typeof value === 'object' && Object.keys(value).length > 0) {\n            recurse(value, [...parentKeys, key], Array.isArray(value) ? [...arrayKeys, key] : arrayKeys);\n          } else {\n            callback([...parentKeys, key], value, arrayKeys);\n          }\n        }\n      }\n    });\n  }\n  recurse(obj);\n};\nconst getCssValue = (keys, value) => {\n  if (typeof value === 'number') {\n    if (['lineHeight', 'fontWeight', 'opacity', 'zIndex'].some(prop => keys.includes(prop))) {\n      // CSS property that are unitless\n      return value;\n    }\n    const lastKey = keys[keys.length - 1];\n    if (lastKey.toLowerCase().includes('opacity')) {\n      // opacity values are unitless\n      return value;\n    }\n    return `${value}px`;\n  }\n  return value;\n};\n\n/**\n * a function that parse theme and return { css, vars }\n *\n * @param {Object} theme\n * @param {{\n *  prefix?: string,\n *  shouldSkipGeneratingVar?: (objectPathKeys: Array<string>, value: string | number) => boolean\n * }} options.\n *  `prefix`: The prefix of the generated CSS variables. This function does not change the value.\n *\n * @returns {{ css: Object, vars: Object }} `css` is the stylesheet, `vars` is an object to get css variable (same structure as theme).\n *\n * @example\n * const { css, vars } = parser({\n *   fontSize: 12,\n *   lineHeight: 1.2,\n *   palette: { primary: { 500: 'var(--color)' } }\n * }, { prefix: 'foo' })\n *\n * console.log(css) // { '--foo-fontSize': '12px', '--foo-lineHeight': 1.2, '--foo-palette-primary-500': 'var(--color)' }\n * console.log(vars) // { fontSize: 'var(--foo-fontSize)', lineHeight: 'var(--foo-lineHeight)', palette: { primary: { 500: 'var(--foo-palette-primary-500)' } } }\n */\nexport default function cssVarsParser(theme, options) {\n  const {\n    prefix,\n    shouldSkipGeneratingVar\n  } = options || {};\n  const css = {};\n  const vars = {};\n  const varsWithDefaults = {};\n  walkObjectDeep(theme, (keys, value, arrayKeys) => {\n    if (typeof value === 'string' || typeof value === 'number') {\n      if (!shouldSkipGeneratingVar || !shouldSkipGeneratingVar(keys, value)) {\n        // only create css & var if `shouldSkipGeneratingVar` return false\n        const cssVar = `--${prefix ? `${prefix}-` : ''}${keys.join('-')}`;\n        const resolvedValue = getCssValue(keys, value);\n        Object.assign(css, {\n          [cssVar]: resolvedValue\n        });\n        assignNestedKeys(vars, keys, `var(${cssVar})`, arrayKeys);\n        assignNestedKeys(varsWithDefaults, keys, `var(${cssVar}, ${resolvedValue})`, arrayKeys);\n      }\n    }\n  }, keys => keys[0] === 'vars' // skip 'vars/*' paths\n  );\n  return {\n    css,\n    vars,\n    varsWithDefaults\n  };\n}","import deepmerge from '@mui/utils/deepmerge';\nimport cssVarsParser from \"./cssVarsParser.js\";\nfunction prepareCssVars(theme, parserConfig = {}) {\n  const {\n    getSelector = defaultGetSelector,\n    disableCssColorScheme,\n    colorSchemeSelector: selector,\n    enableContrastVars\n  } = parserConfig;\n  // @ts-ignore - ignore components do not exist\n  const {\n    colorSchemes = {},\n    components,\n    defaultColorScheme = 'light',\n    ...otherTheme\n  } = theme;\n  const {\n    vars: rootVars,\n    css: rootCss,\n    varsWithDefaults: rootVarsWithDefaults\n  } = cssVarsParser(otherTheme, parserConfig);\n  let themeVars = rootVarsWithDefaults;\n  const colorSchemesMap = {};\n  const {\n    [defaultColorScheme]: defaultScheme,\n    ...otherColorSchemes\n  } = colorSchemes;\n  Object.entries(otherColorSchemes || {}).forEach(([key, scheme]) => {\n    const {\n      vars,\n      css,\n      varsWithDefaults\n    } = cssVarsParser(scheme, parserConfig);\n    themeVars = deepmerge(themeVars, varsWithDefaults);\n    colorSchemesMap[key] = {\n      css,\n      vars\n    };\n  });\n  if (defaultScheme) {\n    // default color scheme vars should be merged last to set as default\n    const {\n      css,\n      vars,\n      varsWithDefaults\n    } = cssVarsParser(defaultScheme, parserConfig);\n    themeVars = deepmerge(themeVars, varsWithDefaults);\n    colorSchemesMap[defaultColorScheme] = {\n      css,\n      vars\n    };\n  }\n  function defaultGetSelector(colorScheme, cssObject) {\n    let rule = selector;\n    if (selector === 'class') {\n      rule = '.%s';\n    }\n    if (selector === 'data') {\n      rule = '[data-%s]';\n    }\n    if (selector?.startsWith('data-') && !selector.includes('%s')) {\n      // 'data-joy-color-scheme' -> '[data-joy-color-scheme=\"%s\"]'\n      rule = `[${selector}=\"%s\"]`;\n    }\n    if (colorScheme) {\n      if (rule === 'media') {\n        if (theme.defaultColorScheme === colorScheme) {\n          return ':root';\n        }\n        const mode = colorSchemes[colorScheme]?.palette?.mode || colorScheme;\n        return {\n          [`@media (prefers-color-scheme: ${mode})`]: {\n            ':root': cssObject\n          }\n        };\n      }\n      if (rule) {\n        if (theme.defaultColorScheme === colorScheme) {\n          return `:root, ${rule.replace('%s', String(colorScheme))}`;\n        }\n        return rule.replace('%s', String(colorScheme));\n      }\n    }\n    return ':root';\n  }\n  const generateThemeVars = () => {\n    let vars = {\n      ...rootVars\n    };\n    Object.entries(colorSchemesMap).forEach(([, {\n      vars: schemeVars\n    }]) => {\n      vars = deepmerge(vars, schemeVars);\n    });\n    return vars;\n  };\n  const generateStyleSheets = () => {\n    const stylesheets = [];\n    const colorScheme = theme.defaultColorScheme || 'light';\n    function insertStyleSheet(key, css) {\n      if (Object.keys(css).length) {\n        stylesheets.push(typeof key === 'string' ? {\n          [key]: {\n            ...css\n          }\n        } : key);\n      }\n    }\n    insertStyleSheet(getSelector(undefined, {\n      ...rootCss\n    }), rootCss);\n    const {\n      [colorScheme]: defaultSchemeVal,\n      ...other\n    } = colorSchemesMap;\n    if (defaultSchemeVal) {\n      // default color scheme has to come before other color schemes\n      const {\n        css\n      } = defaultSchemeVal;\n      const cssColorSheme = colorSchemes[colorScheme]?.palette?.mode;\n      const finalCss = !disableCssColorScheme && cssColorSheme ? {\n        colorScheme: cssColorSheme,\n        ...css\n      } : {\n        ...css\n      };\n      insertStyleSheet(getSelector(colorScheme, {\n        ...finalCss\n      }), finalCss);\n    }\n    Object.entries(other).forEach(([key, {\n      css\n    }]) => {\n      const cssColorSheme = colorSchemes[key]?.palette?.mode;\n      const finalCss = !disableCssColorScheme && cssColorSheme ? {\n        colorScheme: cssColorSheme,\n        ...css\n      } : {\n        ...css\n      };\n      insertStyleSheet(getSelector(key, {\n        ...finalCss\n      }), finalCss);\n    });\n    if (enableContrastVars) {\n      stylesheets.push({\n        ':root': {\n          // use double underscore to indicate that these are private variables\n          '--__l-threshold': '0.7',\n          '--__l': 'clamp(0, (l / var(--__l-threshold) - 1) * -infinity, 1)',\n          '--__a': 'clamp(0.87, (l / var(--__l-threshold) - 1) * -infinity, 1)' // 0.87 is the default alpha value for black text.\n        }\n      });\n    }\n    return stylesheets;\n  };\n  return {\n    vars: themeVars,\n    generateThemeVars,\n    generateStyleSheets\n  };\n}\nexport default prepareCssVars;","/* eslint-disable import/prefer-default-export */\nexport function createGetColorSchemeSelector(selector) {\n  return function getColorSchemeSelector(colorScheme) {\n    if (selector === 'media') {\n      if (process.env.NODE_ENV !== 'production') {\n        if (colorScheme !== 'light' && colorScheme !== 'dark') {\n          console.error(`MUI: @media (prefers-color-scheme) supports only 'light' or 'dark', but receive '${colorScheme}'.`);\n        }\n      }\n      return `@media (prefers-color-scheme: ${colorScheme})`;\n    }\n    if (selector) {\n      if (selector.startsWith('data-') && !selector.includes('%s')) {\n        return `[${selector}=\"${colorScheme}\"] &`;\n      }\n      if (selector === 'class') {\n        return `.${colorScheme} &`;\n      }\n      if (selector === 'data') {\n        return `[data-${colorScheme}] &`;\n      }\n      return `${selector.replace('%s', colorScheme)} &`;\n    }\n    return '&';\n  };\n}","/* eslint no-restricted-syntax: 0, prefer-template: 0, guard-for-in: 0\n   ---\n   These rules are preventing the performance optimizations below.\n */\n\n/**\n * Compose classes from multiple sources.\n *\n * @example\n * ```tsx\n * const slots = {\n *  root: ['root', 'primary'],\n *  label: ['label'],\n * };\n *\n * const getUtilityClass = (slot) => `MuiButton-${slot}`;\n *\n * const classes = {\n *   root: 'my-root-class',\n * };\n *\n * const output = composeClasses(slots, getUtilityClass, classes);\n * // {\n * //   root: 'MuiButton-root MuiButton-primary my-root-class',\n * //   label: 'MuiButton-label',\n * // }\n * ```\n *\n * @param slots a list of classes for each possible slot\n * @param getUtilityClass a function to resolve the class based on the slot name\n * @param classes the input classes from props\n * @returns the resolved classes for all slots\n */\nexport default function composeClasses(slots, getUtilityClass, classes = undefined) {\n  const output = {};\n  for (const slotName in slots) {\n    const slot = slots[slotName];\n    let buffer = '';\n    let start = true;\n    for (let i = 0; i < slot.length; i += 1) {\n      const value = slot[i];\n      if (value) {\n        buffer += (start === true ? '' : ' ') + getUtilityClass(value);\n        start = false;\n        if (classes && classes[value]) {\n          buffer += ' ' + classes[value];\n        }\n      }\n    }\n    output[slotName] = buffer;\n  }\n  return output;\n}","import * as React from 'react';\nexport default function isMuiElement(element, muiNames) {\n  return /*#__PURE__*/React.isValidElement(element) && muiNames.indexOf(\n  // For server components `muiName` is available in element.type._payload.value.muiName\n  // relevant info - https://github.com/facebook/react/blob/2807d781a08db8e9873687fccc25c0f12b4fb3d4/packages/react/src/ReactLazy.js#L45\n  // eslint-disable-next-line no-underscore-dangle\n  element.type.muiName ?? element.type?._payload?.value?.muiName) !== -1;\n}","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nimport deepmerge from '@mui/utils/deepmerge';\nimport { darken, getContrastRatio, lighten } from '@mui/system/colorManipulator';\nimport common from \"../colors/common.js\";\nimport grey from \"../colors/grey.js\";\nimport purple from \"../colors/purple.js\";\nimport red from \"../colors/red.js\";\nimport orange from \"../colors/orange.js\";\nimport blue from \"../colors/blue.js\";\nimport lightBlue from \"../colors/lightBlue.js\";\nimport green from \"../colors/green.js\";\nfunction getLight() {\n  return {\n    // The colors used to style the text.\n    text: {\n      // The most important text.\n      primary: 'rgba(0, 0, 0, 0.87)',\n      // Secondary text.\n      secondary: 'rgba(0, 0, 0, 0.6)',\n      // Disabled text have even lower visual prominence.\n      disabled: 'rgba(0, 0, 0, 0.38)'\n    },\n    // The color used to divide different elements.\n    divider: 'rgba(0, 0, 0, 0.12)',\n    // The background colors used to style the surfaces.\n    // Consistency between these values is important.\n    background: {\n      paper: common.white,\n      default: common.white\n    },\n    // The colors used to style the action elements.\n    action: {\n      // The color of an active action like an icon button.\n      active: 'rgba(0, 0, 0, 0.54)',\n      // The color of an hovered action.\n      hover: 'rgba(0, 0, 0, 0.04)',\n      hoverOpacity: 0.04,\n      // The color of a selected action.\n      selected: 'rgba(0, 0, 0, 0.08)',\n      selectedOpacity: 0.08,\n      // The color of a disabled action.\n      disabled: 'rgba(0, 0, 0, 0.26)',\n      // The background color of a disabled action.\n      disabledBackground: 'rgba(0, 0, 0, 0.12)',\n      disabledOpacity: 0.38,\n      focus: 'rgba(0, 0, 0, 0.12)',\n      focusOpacity: 0.12,\n      activatedOpacity: 0.12\n    }\n  };\n}\nexport const light = getLight();\nfunction getDark() {\n  return {\n    text: {\n      primary: common.white,\n      secondary: 'rgba(255, 255, 255, 0.7)',\n      disabled: 'rgba(255, 255, 255, 0.5)',\n      icon: 'rgba(255, 255, 255, 0.5)'\n    },\n    divider: 'rgba(255, 255, 255, 0.12)',\n    background: {\n      paper: '#121212',\n      default: '#121212'\n    },\n    action: {\n      active: common.white,\n      hover: 'rgba(255, 255, 255, 0.08)',\n      hoverOpacity: 0.08,\n      selected: 'rgba(255, 255, 255, 0.16)',\n      selectedOpacity: 0.16,\n      disabled: 'rgba(255, 255, 255, 0.3)',\n      disabledBackground: 'rgba(255, 255, 255, 0.12)',\n      disabledOpacity: 0.38,\n      focus: 'rgba(255, 255, 255, 0.12)',\n      focusOpacity: 0.12,\n      activatedOpacity: 0.24\n    }\n  };\n}\nexport const dark = getDark();\nfunction addLightOrDark(intent, direction, shade, tonalOffset) {\n  const tonalOffsetLight = tonalOffset.light || tonalOffset;\n  const tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n  if (!intent[direction]) {\n    if (intent.hasOwnProperty(shade)) {\n      intent[direction] = intent[shade];\n    } else if (direction === 'light') {\n      intent.light = lighten(intent.main, tonalOffsetLight);\n    } else if (direction === 'dark') {\n      intent.dark = darken(intent.main, tonalOffsetDark);\n    }\n  }\n}\nfunction mixLightOrDark(colorSpace, intent, direction, shade, tonalOffset) {\n  const tonalOffsetLight = tonalOffset.light || tonalOffset;\n  const tonalOffsetDark = tonalOffset.dark || tonalOffset * 1.5;\n  if (!intent[direction]) {\n    if (intent.hasOwnProperty(shade)) {\n      intent[direction] = intent[shade];\n    } else if (direction === 'light') {\n      intent.light = `color-mix(in ${colorSpace}, ${intent.main}, #fff ${(tonalOffsetLight * 100).toFixed(0)}%)`;\n    } else if (direction === 'dark') {\n      intent.dark = `color-mix(in ${colorSpace}, ${intent.main}, #000 ${(tonalOffsetDark * 100).toFixed(0)}%)`;\n    }\n  }\n}\nfunction getDefaultPrimary(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: blue[200],\n      light: blue[50],\n      dark: blue[400]\n    };\n  }\n  return {\n    main: blue[700],\n    light: blue[400],\n    dark: blue[800]\n  };\n}\nfunction getDefaultSecondary(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: purple[200],\n      light: purple[50],\n      dark: purple[400]\n    };\n  }\n  return {\n    main: purple[500],\n    light: purple[300],\n    dark: purple[700]\n  };\n}\nfunction getDefaultError(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: red[500],\n      light: red[300],\n      dark: red[700]\n    };\n  }\n  return {\n    main: red[700],\n    light: red[400],\n    dark: red[800]\n  };\n}\nfunction getDefaultInfo(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: lightBlue[400],\n      light: lightBlue[300],\n      dark: lightBlue[700]\n    };\n  }\n  return {\n    main: lightBlue[700],\n    light: lightBlue[500],\n    dark: lightBlue[900]\n  };\n}\nfunction getDefaultSuccess(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: green[400],\n      light: green[300],\n      dark: green[700]\n    };\n  }\n  return {\n    main: green[800],\n    light: green[500],\n    dark: green[900]\n  };\n}\nfunction getDefaultWarning(mode = 'light') {\n  if (mode === 'dark') {\n    return {\n      main: orange[400],\n      light: orange[300],\n      dark: orange[700]\n    };\n  }\n  return {\n    main: '#ed6c02',\n    // closest to orange[800] that pass 3:1.\n    light: orange[500],\n    dark: orange[900]\n  };\n}\n\n// Use the same name as the experimental CSS `contrast-color` function.\nexport function contrastColor(background) {\n  return `oklch(from ${background} var(--__l) 0 h / var(--__a))`;\n}\nexport default function createPalette(palette) {\n  const {\n    mode = 'light',\n    contrastThreshold = 3,\n    tonalOffset = 0.2,\n    colorSpace,\n    ...other\n  } = palette;\n  const primary = palette.primary || getDefaultPrimary(mode);\n  const secondary = palette.secondary || getDefaultSecondary(mode);\n  const error = palette.error || getDefaultError(mode);\n  const info = palette.info || getDefaultInfo(mode);\n  const success = palette.success || getDefaultSuccess(mode);\n  const warning = palette.warning || getDefaultWarning(mode);\n\n  // Use the same logic as\n  // Bootstrap: https://github.com/twbs/bootstrap/blob/1d6e3710dd447de1a200f29e8fa521f8a0908f70/scss/_functions.scss#L59\n  // and material-components-web https://github.com/material-components/material-components-web/blob/ac46b8863c4dab9fc22c4c662dc6bd1b65dd652f/packages/mdc-theme/_functions.scss#L54\n  function getContrastText(background) {\n    if (colorSpace) {\n      return contrastColor(background);\n    }\n    const contrastText = getContrastRatio(background, dark.text.primary) >= contrastThreshold ? dark.text.primary : light.text.primary;\n    if (process.env.NODE_ENV !== 'production') {\n      const contrast = getContrastRatio(background, contrastText);\n      if (contrast < 3) {\n        console.error([`MUI: The contrast ratio of ${contrast}:1 for ${contrastText} on ${background}`, 'falls below the WCAG recommended absolute minimum contrast ratio of 3:1.', 'https://www.w3.org/TR/2008/REC-WCAG20-20081211/#visual-audio-contrast-contrast'].join('\\n'));\n      }\n    }\n    return contrastText;\n  }\n  const augmentColor = ({\n    color,\n    name,\n    mainShade = 500,\n    lightShade = 300,\n    darkShade = 700\n  }) => {\n    color = {\n      ...color\n    };\n    if (!color.main && color[mainShade]) {\n      color.main = color[mainShade];\n    }\n    if (!color.hasOwnProperty('main')) {\n      throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\\n` + `The color object needs to have a \\`main\\` property or a \\`${mainShade}\\` property.` : _formatErrorMessage(11, name ? ` (${name})` : '', mainShade));\n    }\n    if (typeof color.main !== 'string') {\n      throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The color${name ? ` (${name})` : ''} provided to augmentColor(color) is invalid.\\n` + `\\`color.main\\` should be a string, but \\`${JSON.stringify(color.main)}\\` was provided instead.\\n` + '\\n' + 'Did you intend to use one of the following approaches?\\n' + '\\n' + 'import { green } from \"@mui/material/colors\";\\n' + '\\n' + 'const theme1 = createTheme({ palette: {\\n' + '  primary: green,\\n' + '} });\\n' + '\\n' + 'const theme2 = createTheme({ palette: {\\n' + '  primary: { main: green[500] },\\n' + '} });' : _formatErrorMessage(12, name ? ` (${name})` : '', JSON.stringify(color.main)));\n    }\n    if (colorSpace) {\n      mixLightOrDark(colorSpace, color, 'light', lightShade, tonalOffset);\n      mixLightOrDark(colorSpace, color, 'dark', darkShade, tonalOffset);\n    } else {\n      addLightOrDark(color, 'light', lightShade, tonalOffset);\n      addLightOrDark(color, 'dark', darkShade, tonalOffset);\n    }\n    if (!color.contrastText) {\n      color.contrastText = getContrastText(color.main);\n    }\n    return color;\n  };\n  let modeHydrated;\n  if (mode === 'light') {\n    modeHydrated = getLight();\n  } else if (mode === 'dark') {\n    modeHydrated = getDark();\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    if (!modeHydrated) {\n      console.error(`MUI: The palette mode \\`${mode}\\` is not supported.`);\n    }\n  }\n  const paletteOutput = deepmerge({\n    // A collection of common colors.\n    common: {\n      ...common\n    },\n    // prevent mutable object.\n    // The palette mode, can be light or dark.\n    mode,\n    // The colors used to represent primary interface elements for a user.\n    primary: augmentColor({\n      color: primary,\n      name: 'primary'\n    }),\n    // The colors used to represent secondary interface elements for a user.\n    secondary: augmentColor({\n      color: secondary,\n      name: 'secondary',\n      mainShade: 'A400',\n      lightShade: 'A200',\n      darkShade: 'A700'\n    }),\n    // The colors used to represent interface elements that the user should be made aware of.\n    error: augmentColor({\n      color: error,\n      name: 'error'\n    }),\n    // The colors used to represent potentially dangerous actions or important messages.\n    warning: augmentColor({\n      color: warning,\n      name: 'warning'\n    }),\n    // The colors used to present information to the user that is neutral and not necessarily important.\n    info: augmentColor({\n      color: info,\n      name: 'info'\n    }),\n    // The colors used to indicate the successful completion of an action that user triggered.\n    success: augmentColor({\n      color: success,\n      name: 'success'\n    }),\n    // The grey colors.\n    grey,\n    // Used by `getContrastText()` to maximize the contrast between\n    // the background and the text.\n    contrastThreshold,\n    // Takes a background color and returns the text color that maximizes the contrast.\n    getContrastText,\n    // Generate a rich color object.\n    augmentColor,\n    // Used by the functions below to shift a color's luminance by approximately\n    // two indexes within its tonal palette.\n    // E.g., shift from Red 500 to Red 300 or Red 700.\n    tonalOffset,\n    // The light and dark mode object.\n    ...modeHydrated\n  }, other);\n  return paletteOutput;\n}","export default function prepareTypographyVars(typography) {\n  const vars = {};\n  const entries = Object.entries(typography);\n  entries.forEach(entry => {\n    const [key, value] = entry;\n    if (typeof value === 'object') {\n      vars[key] = `${value.fontStyle ? `${value.fontStyle} ` : ''}${value.fontVariant ? `${value.fontVariant} ` : ''}${value.fontWeight ? `${value.fontWeight} ` : ''}${value.fontStretch ? `${value.fontStretch} ` : ''}${value.fontSize || ''}${value.lineHeight ? `/${value.lineHeight} ` : ''}${value.fontFamily || ''}`;\n    }\n  });\n  return vars;\n}","export default function createMixins(breakpoints, mixins) {\n  return {\n    toolbar: {\n      minHeight: 56,\n      [breakpoints.up('xs')]: {\n        '@media (orientation: landscape)': {\n          minHeight: 48\n        }\n      },\n      [breakpoints.up('sm')]: {\n        minHeight: 64\n      }\n    },\n    ...mixins\n  };\n}","import deepmerge from '@mui/utils/deepmerge';\nfunction round(value) {\n  return Math.round(value * 1e5) / 1e5;\n}\nconst caseAllCaps = {\n  textTransform: 'uppercase'\n};\nconst defaultFontFamily = '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif';\n\n/**\n * @see @link{https://m2.material.io/design/typography/the-type-system.html}\n * @see @link{https://m2.material.io/design/typography/understanding-typography.html}\n */\nexport default function createTypography(palette, typography) {\n  const {\n    fontFamily = defaultFontFamily,\n    // The default font size of the Material Specification.\n    fontSize = 14,\n    // px\n    fontWeightLight = 300,\n    fontWeightRegular = 400,\n    fontWeightMedium = 500,\n    fontWeightBold = 700,\n    // Tell MUI what's the font-size on the html element.\n    // 16px is the default font-size used by browsers.\n    htmlFontSize = 16,\n    // Apply the CSS properties to all the variants.\n    allVariants,\n    pxToRem: pxToRem2,\n    ...other\n  } = typeof typography === 'function' ? typography(palette) : typography;\n  if (process.env.NODE_ENV !== 'production') {\n    if (typeof fontSize !== 'number') {\n      console.error('MUI: `fontSize` is required to be a number.');\n    }\n    if (typeof htmlFontSize !== 'number') {\n      console.error('MUI: `htmlFontSize` is required to be a number.');\n    }\n  }\n  const coef = fontSize / 14;\n  const pxToRem = pxToRem2 || (size => `${size / htmlFontSize * coef}rem`);\n  const buildVariant = (fontWeight, size, lineHeight, letterSpacing, casing) => ({\n    fontFamily,\n    fontWeight,\n    fontSize: pxToRem(size),\n    // Unitless following https://meyerweb.com/eric/thoughts/2006/02/08/unitless-line-heights/\n    lineHeight,\n    // The letter spacing was designed for the Roboto font-family. Using the same letter-spacing\n    // across font-families can cause issues with the kerning.\n    ...(fontFamily === defaultFontFamily ? {\n      letterSpacing: `${round(letterSpacing / size)}em`\n    } : {}),\n    ...casing,\n    ...allVariants\n  });\n  const variants = {\n    h1: buildVariant(fontWeightLight, 96, 1.167, -1.5),\n    h2: buildVariant(fontWeightLight, 60, 1.2, -0.5),\n    h3: buildVariant(fontWeightRegular, 48, 1.167, 0),\n    h4: buildVariant(fontWeightRegular, 34, 1.235, 0.25),\n    h5: buildVariant(fontWeightRegular, 24, 1.334, 0),\n    h6: buildVariant(fontWeightMedium, 20, 1.6, 0.15),\n    subtitle1: buildVariant(fontWeightRegular, 16, 1.75, 0.15),\n    subtitle2: buildVariant(fontWeightMedium, 14, 1.57, 0.1),\n    body1: buildVariant(fontWeightRegular, 16, 1.5, 0.15),\n    body2: buildVariant(fontWeightRegular, 14, 1.43, 0.15),\n    button: buildVariant(fontWeightMedium, 14, 1.75, 0.4, caseAllCaps),\n    caption: buildVariant(fontWeightRegular, 12, 1.66, 0.4),\n    overline: buildVariant(fontWeightRegular, 12, 2.66, 1, caseAllCaps),\n    // TODO v6: Remove handling of 'inherit' variant from the theme as it is already handled in Material UI's Typography component. Also, remember to remove the associated types.\n    inherit: {\n      fontFamily: 'inherit',\n      fontWeight: 'inherit',\n      fontSize: 'inherit',\n      lineHeight: 'inherit',\n      letterSpacing: 'inherit'\n    }\n  };\n  return deepmerge({\n    htmlFontSize,\n    pxToRem,\n    fontFamily,\n    fontSize,\n    fontWeightLight,\n    fontWeightRegular,\n    fontWeightMedium,\n    fontWeightBold,\n    ...variants\n  }, other, {\n    clone: false // No need to clone deep\n  });\n}","const shadowKeyUmbraOpacity = 0.2;\nconst shadowKeyPenumbraOpacity = 0.14;\nconst shadowAmbientShadowOpacity = 0.12;\nfunction createShadow(...px) {\n  return [`${px[0]}px ${px[1]}px ${px[2]}px ${px[3]}px rgba(0,0,0,${shadowKeyUmbraOpacity})`, `${px[4]}px ${px[5]}px ${px[6]}px ${px[7]}px rgba(0,0,0,${shadowKeyPenumbraOpacity})`, `${px[8]}px ${px[9]}px ${px[10]}px ${px[11]}px rgba(0,0,0,${shadowAmbientShadowOpacity})`].join(',');\n}\n\n// Values from https://github.com/material-components/material-components-web/blob/be8747f94574669cb5e7add1a7c54fa41a89cec7/packages/mdc-elevation/_variables.scss\nconst shadows = ['none', createShadow(0, 2, 1, -1, 0, 1, 1, 0, 0, 1, 3, 0), createShadow(0, 3, 1, -2, 0, 2, 2, 0, 0, 1, 5, 0), createShadow(0, 3, 3, -2, 0, 3, 4, 0, 0, 1, 8, 0), createShadow(0, 2, 4, -1, 0, 4, 5, 0, 0, 1, 10, 0), createShadow(0, 3, 5, -1, 0, 5, 8, 0, 0, 1, 14, 0), createShadow(0, 3, 5, -1, 0, 6, 10, 0, 0, 1, 18, 0), createShadow(0, 4, 5, -2, 0, 7, 10, 1, 0, 2, 16, 1), createShadow(0, 5, 5, -3, 0, 8, 10, 1, 0, 3, 14, 2), createShadow(0, 5, 6, -3, 0, 9, 12, 1, 0, 3, 16, 2), createShadow(0, 6, 6, -3, 0, 10, 14, 1, 0, 4, 18, 3), createShadow(0, 6, 7, -4, 0, 11, 15, 1, 0, 4, 20, 3), createShadow(0, 7, 8, -4, 0, 12, 17, 2, 0, 5, 22, 4), createShadow(0, 7, 8, -4, 0, 13, 19, 2, 0, 5, 24, 4), createShadow(0, 7, 9, -4, 0, 14, 21, 2, 0, 5, 26, 4), createShadow(0, 8, 9, -5, 0, 15, 22, 2, 0, 6, 28, 5), createShadow(0, 8, 10, -5, 0, 16, 24, 2, 0, 6, 30, 5), createShadow(0, 8, 11, -5, 0, 17, 26, 2, 0, 6, 32, 5), createShadow(0, 9, 11, -5, 0, 18, 28, 2, 0, 7, 34, 6), createShadow(0, 9, 12, -6, 0, 19, 29, 2, 0, 7, 36, 6), createShadow(0, 10, 13, -6, 0, 20, 31, 3, 0, 8, 38, 7), createShadow(0, 10, 13, -6, 0, 21, 33, 3, 0, 8, 40, 7), createShadow(0, 10, 14, -6, 0, 22, 35, 3, 0, 8, 42, 7), createShadow(0, 11, 14, -7, 0, 23, 36, 3, 0, 9, 44, 8), createShadow(0, 11, 15, -7, 0, 24, 38, 3, 0, 9, 46, 8)];\nexport default shadows;","// Follow https://material.google.com/motion/duration-easing.html#duration-easing-natural-easing-curves\n// to learn the context in which each easing should be used.\nexport const easing = {\n  // This is the most common easing curve.\n  easeInOut: 'cubic-bezier(0.4, 0, 0.2, 1)',\n  // Objects enter the screen at full velocity from off-screen and\n  // slowly decelerate to a resting point.\n  easeOut: 'cubic-bezier(0.0, 0, 0.2, 1)',\n  // Objects leave the screen at full velocity. They do not decelerate when off-screen.\n  easeIn: 'cubic-bezier(0.4, 0, 1, 1)',\n  // The sharp curve is used by objects that may return to the screen at any time.\n  sharp: 'cubic-bezier(0.4, 0, 0.6, 1)'\n};\n\n// Follow https://m2.material.io/guidelines/motion/duration-easing.html#duration-easing-common-durations\n// to learn when use what timing\nexport const duration = {\n  shortest: 150,\n  shorter: 200,\n  short: 250,\n  // most basic recommended timing\n  standard: 300,\n  // this is to be used in complex animations\n  complex: 375,\n  // recommended when something is entering screen\n  enteringScreen: 225,\n  // recommended when something is leaving screen\n  leavingScreen: 195\n};\nfunction formatMs(milliseconds) {\n  return `${Math.round(milliseconds)}ms`;\n}\nfunction getAutoHeightDuration(height) {\n  if (!height) {\n    return 0;\n  }\n  const constant = height / 36;\n\n  // https://www.desmos.com/calculator/vbrp3ggqet\n  return Math.min(Math.round((4 + 15 * constant ** 0.25 + constant / 5) * 10), 3000);\n}\nexport default function createTransitions(inputTransitions) {\n  const mergedEasing = {\n    ...easing,\n    ...inputTransitions.easing\n  };\n  const mergedDuration = {\n    ...duration,\n    ...inputTransitions.duration\n  };\n  const create = (props = ['all'], options = {}) => {\n    const {\n      duration: durationOption = mergedDuration.standard,\n      easing: easingOption = mergedEasing.easeInOut,\n      delay = 0,\n      ...other\n    } = options;\n    if (process.env.NODE_ENV !== 'production') {\n      const isString = value => typeof value === 'string';\n      const isNumber = value => !Number.isNaN(parseFloat(value));\n      if (!isString(props) && !Array.isArray(props)) {\n        console.error('MUI: Argument \"props\" must be a string or Array.');\n      }\n      if (!isNumber(durationOption) && !isString(durationOption)) {\n        console.error(`MUI: Argument \"duration\" must be a number or a string but found ${durationOption}.`);\n      }\n      if (!isString(easingOption)) {\n        console.error('MUI: Argument \"easing\" must be a string.');\n      }\n      if (!isNumber(delay) && !isString(delay)) {\n        console.error('MUI: Argument \"delay\" must be a number or a string.');\n      }\n      if (typeof options !== 'object') {\n        console.error(['MUI: Secong argument of transition.create must be an object.', \"Arguments should be either `create('prop1', options)` or `create(['prop1', 'prop2'], options)`\"].join('\\n'));\n      }\n      if (Object.keys(other).length !== 0) {\n        console.error(`MUI: Unrecognized argument(s) [${Object.keys(other).join(',')}].`);\n      }\n    }\n    return (Array.isArray(props) ? props : [props]).map(animatedProp => `${animatedProp} ${typeof durationOption === 'string' ? durationOption : formatMs(durationOption)} ${easingOption} ${typeof delay === 'string' ? delay : formatMs(delay)}`).join(',');\n  };\n  return {\n    getAutoHeightDuration,\n    create,\n    ...inputTransitions,\n    easing: mergedEasing,\n    duration: mergedDuration\n  };\n}","// We need to centralize the zIndex definitions as they work\n// like global values in the browser.\nconst zIndex = {\n  mobileStepper: 1000,\n  fab: 1050,\n  speedDial: 1050,\n  appBar: 1100,\n  drawer: 1200,\n  modal: 1300,\n  snackbar: 1400,\n  tooltip: 1500\n};\nexport default zIndex;","/* eslint-disable import/prefer-default-export */\nimport { isPlainObject } from '@mui/utils/deepmerge';\nfunction isSerializable(val) {\n  return isPlainObject(val) || typeof val === 'undefined' || typeof val === 'string' || typeof val === 'boolean' || typeof val === 'number' || Array.isArray(val);\n}\n\n/**\n * `baseTheme` usually comes from `createTheme()` or `extendTheme()`.\n *\n * This function is intended to be used with zero-runtime CSS-in-JS like Pigment CSS\n * For example, in a Next.js project:\n *\n * ```js\n * // next.config.js\n * const { extendTheme } = require('@mui/material/styles');\n *\n * const theme = extendTheme();\n * // `.toRuntimeSource` is Pigment CSS specific to create a theme that is available at runtime.\n * theme.toRuntimeSource = stringifyTheme;\n *\n * module.exports = withPigment({\n *  theme,\n * });\n * ```\n */\nexport function stringifyTheme(baseTheme = {}) {\n  const serializableTheme = {\n    ...baseTheme\n  };\n  function serializeTheme(object) {\n    const array = Object.entries(object);\n    // eslint-disable-next-line no-plusplus\n    for (let index = 0; index < array.length; index++) {\n      const [key, value] = array[index];\n      if (!isSerializable(value) || key.startsWith('unstable_')) {\n        delete object[key];\n      } else if (isPlainObject(value)) {\n        object[key] = {\n          ...value\n        };\n        serializeTheme(object[key]);\n      }\n    }\n  }\n  serializeTheme(serializableTheme);\n  return `import { unstable_createBreakpoints as createBreakpoints, createTransitions } from '@mui/material/styles';\n\nconst theme = ${JSON.stringify(serializableTheme, null, 2)};\n\ntheme.breakpoints = createBreakpoints(theme.breakpoints || {});\ntheme.transitions = createTransitions(theme.transitions || {});\n\nexport default theme;`;\n}","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nimport deepmerge from '@mui/utils/deepmerge';\nimport styleFunctionSx, { unstable_defaultSxConfig as defaultSxConfig } from '@mui/system/styleFunctionSx';\nimport systemCreateTheme from '@mui/system/createTheme';\nimport { alpha as systemAlpha, lighten as systemLighten, darken as systemDarken } from '@mui/system/colorManipulator';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport createMixins from \"./createMixins.js\";\nimport createPalette from \"./createPalette.js\";\nimport createTypography from \"./createTypography.js\";\nimport shadows from \"./shadows.js\";\nimport createTransitions from \"./createTransitions.js\";\nimport zIndex from \"./zIndex.js\";\nimport { stringifyTheme } from \"./stringifyTheme.js\";\nfunction coefficientToPercentage(coefficient) {\n  if (typeof coefficient === 'number') {\n    return `${(coefficient * 100).toFixed(0)}%`;\n  }\n  return `calc((${coefficient}) * 100%)`;\n}\n\n// This can be removed when moved to `color-mix()` entirely.\nconst parseAddition = str => {\n  if (!Number.isNaN(+str)) {\n    return +str;\n  }\n  const numbers = str.match(/\\d*\\.?\\d+/g);\n  if (!numbers) {\n    return 0;\n  }\n  let sum = 0;\n  for (let i = 0; i < numbers.length; i += 1) {\n    sum += +numbers[i];\n  }\n  return sum;\n};\nfunction attachColorManipulators(theme) {\n  Object.assign(theme, {\n    alpha(color, coefficient) {\n      const obj = this || theme;\n      if (obj.colorSpace) {\n        return `oklch(from ${color} l c h / ${typeof coefficient === 'string' ? `calc(${coefficient})` : coefficient})`;\n      }\n      if (obj.vars) {\n        // To preserve the behavior of the CSS theme variables\n        // In the future, this could be replaced by `color-mix` (when https://caniuse.com/?search=color-mix reaches 95%).\n        return `rgba(${color.replace(/var\\(--([^,\\s)]+)(?:,[^)]+)?\\)+/g, 'var(--$1Channel)')} / ${typeof coefficient === 'string' ? `calc(${coefficient})` : coefficient})`;\n      }\n      return systemAlpha(color, parseAddition(coefficient));\n    },\n    lighten(color, coefficient) {\n      const obj = this || theme;\n      if (obj.colorSpace) {\n        return `color-mix(in ${obj.colorSpace}, ${color}, #fff ${coefficientToPercentage(coefficient)})`;\n      }\n      return systemLighten(color, coefficient);\n    },\n    darken(color, coefficient) {\n      const obj = this || theme;\n      if (obj.colorSpace) {\n        return `color-mix(in ${obj.colorSpace}, ${color}, #000 ${coefficientToPercentage(coefficient)})`;\n      }\n      return systemDarken(color, coefficient);\n    }\n  });\n}\nfunction createThemeNoVars(options = {}, ...args) {\n  const {\n    breakpoints: breakpointsInput,\n    mixins: mixinsInput = {},\n    spacing: spacingInput,\n    palette: paletteInput = {},\n    transitions: transitionsInput = {},\n    typography: typographyInput = {},\n    shape: shapeInput,\n    colorSpace,\n    ...other\n  } = options;\n  if (options.vars &&\n  // The error should throw only for the root theme creation because user is not allowed to use a custom node `vars`.\n  // `generateThemeVars` is the closest identifier for checking that the `options` is a result of `createTheme` with CSS variables so that user can create new theme for nested ThemeProvider.\n  options.generateThemeVars === undefined) {\n    throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: `vars` is a private field used for CSS variables support.\\n' +\n    // #host-reference\n    'Please use another name or follow the [docs](https://mui.com/material-ui/customization/css-theme-variables/usage/) to enable the feature.' : _formatErrorMessage(20));\n  }\n  const palette = createPalette({\n    ...paletteInput,\n    colorSpace\n  });\n  const systemTheme = systemCreateTheme(options);\n  let muiTheme = deepmerge(systemTheme, {\n    mixins: createMixins(systemTheme.breakpoints, mixinsInput),\n    palette,\n    // Don't use [...shadows] until you've verified its transpiled code is not invoking the iterator protocol.\n    shadows: shadows.slice(),\n    typography: createTypography(palette, typographyInput),\n    transitions: createTransitions(transitionsInput),\n    zIndex: {\n      ...zIndex\n    }\n  });\n  muiTheme = deepmerge(muiTheme, other);\n  muiTheme = args.reduce((acc, argument) => deepmerge(acc, argument), muiTheme);\n  if (process.env.NODE_ENV !== 'production') {\n    // TODO v6: Refactor to use globalStateClassesMapping from @mui/utils once `readOnly` state class is used in Rating component.\n    const stateClasses = ['active', 'checked', 'completed', 'disabled', 'error', 'expanded', 'focused', 'focusVisible', 'required', 'selected'];\n    const traverse = (node, component) => {\n      let key;\n\n      // eslint-disable-next-line guard-for-in\n      for (key in node) {\n        const child = node[key];\n        if (stateClasses.includes(key) && Object.keys(child).length > 0) {\n          if (process.env.NODE_ENV !== 'production') {\n            const stateClass = generateUtilityClass('', key);\n            console.error([`MUI: The \\`${component}\\` component increases ` + `the CSS specificity of the \\`${key}\\` internal state.`, 'You can not override it like this: ', JSON.stringify(node, null, 2), '', `Instead, you need to use the '&.${stateClass}' syntax:`, JSON.stringify({\n              root: {\n                [`&.${stateClass}`]: child\n              }\n            }, null, 2), '', 'https://mui.com/r/state-classes-guide'].join('\\n'));\n          }\n          // Remove the style to prevent global conflicts.\n          node[key] = {};\n        }\n      }\n    };\n    Object.keys(muiTheme.components).forEach(component => {\n      const styleOverrides = muiTheme.components[component].styleOverrides;\n      if (styleOverrides && component.startsWith('Mui')) {\n        traverse(styleOverrides, component);\n      }\n    });\n  }\n  muiTheme.unstable_sxConfig = {\n    ...defaultSxConfig,\n    ...other?.unstable_sxConfig\n  };\n  muiTheme.unstable_sx = function sx(props) {\n    return styleFunctionSx({\n      sx: props,\n      theme: this\n    });\n  };\n  muiTheme.toRuntimeSource = stringifyTheme; // for Pigment CSS integration\n\n  attachColorManipulators(muiTheme);\n  return muiTheme;\n}\nexport default createThemeNoVars;","// Inspired by https://github.com/material-components/material-components-ios/blob/bca36107405594d5b7b16265a5b0ed698f85a5ee/components/Elevation/src/UIColor%2BMaterialElevation.m#L61\nexport default function getOverlayAlpha(elevation) {\n  let alphaValue;\n  if (elevation < 1) {\n    alphaValue = 5.11916 * elevation ** 2;\n  } else {\n    alphaValue = 4.5 * Math.log(elevation + 1) + 2;\n  }\n  return Math.round(alphaValue * 10) / 1000;\n}","import createPalette from \"./createPalette.js\";\nimport getOverlayAlpha from \"./getOverlayAlpha.js\";\nconst defaultDarkOverlays = [...Array(25)].map((_, index) => {\n  if (index === 0) {\n    return 'none';\n  }\n  const overlay = getOverlayAlpha(index);\n  return `linear-gradient(rgba(255 255 255 / ${overlay}), rgba(255 255 255 / ${overlay}))`;\n});\nexport function getOpacity(mode) {\n  return {\n    inputPlaceholder: mode === 'dark' ? 0.5 : 0.42,\n    inputUnderline: mode === 'dark' ? 0.7 : 0.42,\n    switchTrackDisabled: mode === 'dark' ? 0.2 : 0.12,\n    switchTrack: mode === 'dark' ? 0.3 : 0.38\n  };\n}\nexport function getOverlays(mode) {\n  return mode === 'dark' ? defaultDarkOverlays : [];\n}\nexport default function createColorScheme(options) {\n  const {\n    palette: paletteInput = {\n      mode: 'light'\n    },\n    // need to cast to avoid module augmentation test\n    opacity,\n    overlays,\n    colorSpace,\n    ...other\n  } = options;\n  // need to cast because `colorSpace` is considered internal at the moment.\n  const palette = createPalette({\n    ...paletteInput,\n    colorSpace\n  });\n  return {\n    palette,\n    opacity: {\n      ...getOpacity(palette.mode),\n      ...opacity\n    },\n    overlays: overlays || getOverlays(palette.mode),\n    ...other\n  };\n}","export default function shouldSkipGeneratingVar(keys) {\n  return !!keys[0].match(/(cssVarPrefix|colorSchemeSelector|modularCssLayers|rootSelector|typography|mixins|breakpoints|direction|transitions)/) || !!keys[0].match(/sxConfig$/) ||\n  // ends with sxConfig\n  keys[0] === 'palette' && !!keys[1]?.match(/(mode|contrastThreshold|tonalOffset)/);\n}","/**\n * @internal These variables should not appear in the :root stylesheet when the `defaultColorScheme=\"dark\"`\n */\nconst excludeVariablesFromRoot = cssVarPrefix => [...[...Array(25)].map((_, index) => `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}overlays-${index}`), `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}palette-AppBar-darkBg`, `--${cssVarPrefix ? `${cssVarPrefix}-` : ''}palette-AppBar-darkColor`];\nexport default excludeVariablesFromRoot;","import excludeVariablesFromRoot from \"./excludeVariablesFromRoot.js\";\nexport default theme => (colorScheme, css) => {\n  const root = theme.rootSelector || ':root';\n  const selector = theme.colorSchemeSelector;\n  let rule = selector;\n  if (selector === 'class') {\n    rule = '.%s';\n  }\n  if (selector === 'data') {\n    rule = '[data-%s]';\n  }\n  if (selector?.startsWith('data-') && !selector.includes('%s')) {\n    // 'data-mui-color-scheme' -> '[data-mui-color-scheme=\"%s\"]'\n    rule = `[${selector}=\"%s\"]`;\n  }\n  if (theme.defaultColorScheme === colorScheme) {\n    if (colorScheme === 'dark') {\n      const excludedVariables = {};\n      excludeVariablesFromRoot(theme.cssVarPrefix).forEach(cssVar => {\n        excludedVariables[cssVar] = css[cssVar];\n        delete css[cssVar];\n      });\n      if (rule === 'media') {\n        return {\n          [root]: css,\n          [`@media (prefers-color-scheme: dark)`]: {\n            [root]: excludedVariables\n          }\n        };\n      }\n      if (rule) {\n        return {\n          [rule.replace('%s', colorScheme)]: excludedVariables,\n          [`${root}, ${rule.replace('%s', colorScheme)}`]: css\n        };\n      }\n      return {\n        [root]: {\n          ...css,\n          ...excludedVariables\n        }\n      };\n    }\n    if (rule && rule !== 'media') {\n      return `${root}, ${rule.replace('%s', String(colorScheme))}`;\n    }\n  } else if (colorScheme) {\n    if (rule === 'media') {\n      return {\n        [`@media (prefers-color-scheme: ${String(colorScheme)})`]: {\n          [root]: css\n        }\n      };\n    }\n    if (rule) {\n      return rule.replace('%s', String(colorScheme));\n    }\n  }\n  return root;\n};","import _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nimport deepmerge from '@mui/utils/deepmerge';\nimport { unstable_createGetCssVar as systemCreateGetCssVar, createSpacing } from '@mui/system';\nimport { createUnarySpacing } from '@mui/system/spacing';\nimport { prepareCssVars, prepareTypographyVars, createGetColorSchemeSelector } from '@mui/system/cssVars';\nimport styleFunctionSx, { unstable_defaultSxConfig as defaultSxConfig } from '@mui/system/styleFunctionSx';\nimport { private_safeColorChannel as safeColorChannel, private_safeAlpha as safeAlpha, private_safeDarken as safeDarken, private_safeLighten as safeLighten, private_safeEmphasize as safeEmphasize, hslToRgb } from '@mui/system/colorManipulator';\nimport createThemeNoVars from \"./createThemeNoVars.js\";\nimport createColorScheme, { getOpacity, getOverlays } from \"./createColorScheme.js\";\nimport defaultShouldSkipGeneratingVar from \"./shouldSkipGeneratingVar.js\";\nimport defaultGetSelector from \"./createGetSelector.js\";\nimport { stringifyTheme } from \"./stringifyTheme.js\";\nimport { light, dark } from \"./createPalette.js\";\nfunction assignNode(obj, keys) {\n  keys.forEach(k => {\n    if (!obj[k]) {\n      obj[k] = {};\n    }\n  });\n}\nfunction setColor(obj, key, defaultValue) {\n  if (!obj[key] && defaultValue) {\n    obj[key] = defaultValue;\n  }\n}\nfunction toRgb(color) {\n  if (typeof color !== 'string' || !color.startsWith('hsl')) {\n    return color;\n  }\n  return hslToRgb(color);\n}\nfunction setColorChannel(obj, key) {\n  if (!(`${key}Channel` in obj)) {\n    // custom channel token is not provided, generate one.\n    // if channel token can't be generated, show a warning.\n    obj[`${key}Channel`] = safeColorChannel(toRgb(obj[key]), `MUI: Can't create \\`palette.${key}Channel\\` because \\`palette.${key}\\` is not one of these formats: #nnn, #nnnnnn, rgb(), rgba(), hsl(), hsla(), color().` + '\\n' + `To suppress this warning, you need to explicitly provide the \\`palette.${key}Channel\\` as a string (in rgb format, for example \"12 12 12\") or undefined if you want to remove the channel token.`);\n  }\n}\nfunction getSpacingVal(spacingInput) {\n  if (typeof spacingInput === 'number') {\n    return `${spacingInput}px`;\n  }\n  if (typeof spacingInput === 'string' || typeof spacingInput === 'function' || Array.isArray(spacingInput)) {\n    return spacingInput;\n  }\n  return '8px';\n}\nconst silent = fn => {\n  try {\n    return fn();\n  } catch (error) {\n    // ignore error\n  }\n  return undefined;\n};\nexport const createGetCssVar = (cssVarPrefix = 'mui') => systemCreateGetCssVar(cssVarPrefix);\nfunction attachColorScheme(colorSpace, colorSchemes, scheme, restTheme, colorScheme) {\n  if (!scheme) {\n    return undefined;\n  }\n  scheme = scheme === true ? {} : scheme;\n  const mode = colorScheme === 'dark' ? 'dark' : 'light';\n  if (!restTheme) {\n    colorSchemes[colorScheme] = createColorScheme({\n      ...scheme,\n      palette: {\n        mode,\n        ...scheme?.palette\n      },\n      colorSpace\n    });\n    return undefined;\n  }\n  const {\n    palette,\n    ...muiTheme\n  } = createThemeNoVars({\n    ...restTheme,\n    palette: {\n      mode,\n      ...scheme?.palette\n    },\n    colorSpace\n  });\n  colorSchemes[colorScheme] = {\n    ...scheme,\n    palette,\n    opacity: {\n      ...getOpacity(mode),\n      ...scheme?.opacity\n    },\n    overlays: scheme?.overlays || getOverlays(mode)\n  };\n  return muiTheme;\n}\n\n/**\n * A default `createThemeWithVars` comes with a single color scheme, either `light` or `dark` based on the `defaultColorScheme`.\n * This is better suited for apps that only need a single color scheme.\n *\n * To enable built-in `light` and `dark` color schemes, either:\n * 1. provide a `colorSchemeSelector` to define how the color schemes will change.\n * 2. provide `colorSchemes.dark` will set `colorSchemeSelector: 'media'` by default.\n */\nexport default function createThemeWithVars(options = {}, ...args) {\n  const {\n    colorSchemes: colorSchemesInput = {\n      light: true\n    },\n    defaultColorScheme: defaultColorSchemeInput,\n    disableCssColorScheme = false,\n    cssVarPrefix = 'mui',\n    nativeColor = false,\n    shouldSkipGeneratingVar = defaultShouldSkipGeneratingVar,\n    colorSchemeSelector: selector = colorSchemesInput.light && colorSchemesInput.dark ? 'media' : undefined,\n    rootSelector = ':root',\n    ...input\n  } = options;\n  const firstColorScheme = Object.keys(colorSchemesInput)[0];\n  const defaultColorScheme = defaultColorSchemeInput || (colorSchemesInput.light && firstColorScheme !== 'light' ? 'light' : firstColorScheme);\n  const getCssVar = createGetCssVar(cssVarPrefix);\n  const {\n    [defaultColorScheme]: defaultSchemeInput,\n    light: builtInLight,\n    dark: builtInDark,\n    ...customColorSchemes\n  } = colorSchemesInput;\n  const colorSchemes = {\n    ...customColorSchemes\n  };\n  let defaultScheme = defaultSchemeInput;\n\n  // For built-in light and dark color schemes, ensure that the value is valid if they are the default color scheme.\n  if (defaultColorScheme === 'dark' && !('dark' in colorSchemesInput) || defaultColorScheme === 'light' && !('light' in colorSchemesInput)) {\n    defaultScheme = true;\n  }\n  if (!defaultScheme) {\n    throw new Error(process.env.NODE_ENV !== \"production\" ? `MUI: The \\`colorSchemes.${defaultColorScheme}\\` option is either missing or invalid.` : _formatErrorMessage(21, defaultColorScheme));\n  }\n\n  // The reason to use `oklch` is that it is the most perceptually uniform color space and widely supported.\n  let colorSpace;\n  if (nativeColor) {\n    colorSpace = 'oklch';\n  }\n\n  // Create the palette for the default color scheme, either `light`, `dark`, or custom color scheme.\n  const muiTheme = attachColorScheme(colorSpace, colorSchemes, defaultScheme, input, defaultColorScheme);\n  if (builtInLight && !colorSchemes.light) {\n    attachColorScheme(colorSpace, colorSchemes, builtInLight, undefined, 'light');\n  }\n  if (builtInDark && !colorSchemes.dark) {\n    attachColorScheme(colorSpace, colorSchemes, builtInDark, undefined, 'dark');\n  }\n  let theme = {\n    defaultColorScheme,\n    ...muiTheme,\n    cssVarPrefix,\n    colorSchemeSelector: selector,\n    rootSelector,\n    getCssVar,\n    colorSchemes,\n    font: {\n      ...prepareTypographyVars(muiTheme.typography),\n      ...muiTheme.font\n    },\n    spacing: getSpacingVal(input.spacing)\n  };\n  Object.keys(theme.colorSchemes).forEach(key => {\n    const palette = theme.colorSchemes[key].palette;\n    const setCssVarColor = cssVar => {\n      const tokens = cssVar.split('-');\n      const color = tokens[1];\n      const colorToken = tokens[2];\n      return getCssVar(cssVar, palette[color][colorToken]);\n    };\n\n    // attach black & white channels to common node\n    if (palette.mode === 'light') {\n      setColor(palette.common, 'background', '#fff');\n      setColor(palette.common, 'onBackground', '#000');\n    }\n    if (palette.mode === 'dark') {\n      setColor(palette.common, 'background', '#000');\n      setColor(palette.common, 'onBackground', '#fff');\n    }\n    function colorMix(method, color, coefficient) {\n      if (colorSpace) {\n        let mixer;\n        if (method === safeAlpha) {\n          mixer = `transparent ${((1 - coefficient) * 100).toFixed(0)}%`;\n        }\n        if (method === safeDarken) {\n          mixer = `#000 ${(coefficient * 100).toFixed(0)}%`;\n        }\n        if (method === safeLighten) {\n          mixer = `#fff ${(coefficient * 100).toFixed(0)}%`;\n        }\n        return `color-mix(in ${colorSpace}, ${color}, ${mixer})`;\n      }\n      return method(color, coefficient);\n    }\n\n    // assign component variables\n    assignNode(palette, ['Alert', 'AppBar', 'Avatar', 'Button', 'Chip', 'FilledInput', 'LinearProgress', 'Skeleton', 'Slider', 'SnackbarContent', 'SpeedDialAction', 'StepConnector', 'StepContent', 'Switch', 'TableCell', 'Tooltip']);\n    if (palette.mode === 'light') {\n      setColor(palette.Alert, 'errorColor', colorMix(safeDarken, palette.error.light, 0.6));\n      setColor(palette.Alert, 'infoColor', colorMix(safeDarken, palette.info.light, 0.6));\n      setColor(palette.Alert, 'successColor', colorMix(safeDarken, palette.success.light, 0.6));\n      setColor(palette.Alert, 'warningColor', colorMix(safeDarken, palette.warning.light, 0.6));\n      setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-main'));\n      setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-main'));\n      setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-main'));\n      setColor(palette.Alert, 'warningFilledBg', setCssVarColor('palette-warning-main'));\n      setColor(palette.Alert, 'errorFilledColor', silent(() => palette.getContrastText(palette.error.main)));\n      setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.main)));\n      setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.main)));\n      setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.main)));\n      setColor(palette.Alert, 'errorStandardBg', colorMix(safeLighten, palette.error.light, 0.9));\n      setColor(palette.Alert, 'infoStandardBg', colorMix(safeLighten, palette.info.light, 0.9));\n      setColor(palette.Alert, 'successStandardBg', colorMix(safeLighten, palette.success.light, 0.9));\n      setColor(palette.Alert, 'warningStandardBg', colorMix(safeLighten, palette.warning.light, 0.9));\n      setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));\n      setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));\n      setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));\n      setColor(palette.Alert, 'warningIconColor', setCssVarColor('palette-warning-main'));\n      setColor(palette.AppBar, 'defaultBg', setCssVarColor('palette-grey-100'));\n      setColor(palette.Avatar, 'defaultBg', setCssVarColor('palette-grey-400'));\n      setColor(palette.Button, 'inheritContainedBg', setCssVarColor('palette-grey-300'));\n      setColor(palette.Button, 'inheritContainedHoverBg', setCssVarColor('palette-grey-A100'));\n      setColor(palette.Chip, 'defaultBorder', setCssVarColor('palette-grey-400'));\n      setColor(palette.Chip, 'defaultAvatarColor', setCssVarColor('palette-grey-700'));\n      setColor(palette.Chip, 'defaultIconColor', setCssVarColor('palette-grey-700'));\n      setColor(palette.FilledInput, 'bg', 'rgba(0, 0, 0, 0.06)');\n      setColor(palette.FilledInput, 'hoverBg', 'rgba(0, 0, 0, 0.09)');\n      setColor(palette.FilledInput, 'disabledBg', 'rgba(0, 0, 0, 0.12)');\n      setColor(palette.LinearProgress, 'primaryBg', colorMix(safeLighten, palette.primary.main, 0.62));\n      setColor(palette.LinearProgress, 'secondaryBg', colorMix(safeLighten, palette.secondary.main, 0.62));\n      setColor(palette.LinearProgress, 'errorBg', colorMix(safeLighten, palette.error.main, 0.62));\n      setColor(palette.LinearProgress, 'infoBg', colorMix(safeLighten, palette.info.main, 0.62));\n      setColor(palette.LinearProgress, 'successBg', colorMix(safeLighten, palette.success.main, 0.62));\n      setColor(palette.LinearProgress, 'warningBg', colorMix(safeLighten, palette.warning.main, 0.62));\n      setColor(palette.Skeleton, 'bg', colorSpace ? colorMix(safeAlpha, palette.text.primary, 0.11) : `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.11)`);\n      setColor(palette.Slider, 'primaryTrack', colorMix(safeLighten, palette.primary.main, 0.62));\n      setColor(palette.Slider, 'secondaryTrack', colorMix(safeLighten, palette.secondary.main, 0.62));\n      setColor(palette.Slider, 'errorTrack', colorMix(safeLighten, palette.error.main, 0.62));\n      setColor(palette.Slider, 'infoTrack', colorMix(safeLighten, palette.info.main, 0.62));\n      setColor(palette.Slider, 'successTrack', colorMix(safeLighten, palette.success.main, 0.62));\n      setColor(palette.Slider, 'warningTrack', colorMix(safeLighten, palette.warning.main, 0.62));\n      const snackbarContentBackground = colorSpace ? colorMix(safeDarken, palette.background.default, 0.6825) // use `0.6825` instead of `0.8` to match the contrast ratio of JS implementation\n      : safeEmphasize(palette.background.default, 0.8);\n      setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);\n      setColor(palette.SnackbarContent, 'color', silent(() => colorSpace ? dark.text.primary : palette.getContrastText(snackbarContentBackground)));\n      setColor(palette.SpeedDialAction, 'fabHoverBg', safeEmphasize(palette.background.paper, 0.15));\n      setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-400'));\n      setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-400'));\n      setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-common-white'));\n      setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-100'));\n      setColor(palette.Switch, 'primaryDisabledColor', colorMix(safeLighten, palette.primary.main, 0.62));\n      setColor(palette.Switch, 'secondaryDisabledColor', colorMix(safeLighten, palette.secondary.main, 0.62));\n      setColor(palette.Switch, 'errorDisabledColor', colorMix(safeLighten, palette.error.main, 0.62));\n      setColor(palette.Switch, 'infoDisabledColor', colorMix(safeLighten, palette.info.main, 0.62));\n      setColor(palette.Switch, 'successDisabledColor', colorMix(safeLighten, palette.success.main, 0.62));\n      setColor(palette.Switch, 'warningDisabledColor', colorMix(safeLighten, palette.warning.main, 0.62));\n      setColor(palette.TableCell, 'border', colorMix(safeLighten, colorMix(safeAlpha, palette.divider, 1), 0.88));\n      setColor(palette.Tooltip, 'bg', colorMix(safeAlpha, palette.grey[700], 0.92));\n    }\n    if (palette.mode === 'dark') {\n      setColor(palette.Alert, 'errorColor', colorMix(safeLighten, palette.error.light, 0.6));\n      setColor(palette.Alert, 'infoColor', colorMix(safeLighten, palette.info.light, 0.6));\n      setColor(palette.Alert, 'successColor', colorMix(safeLighten, palette.success.light, 0.6));\n      setColor(palette.Alert, 'warningColor', colorMix(safeLighten, palette.warning.light, 0.6));\n      setColor(palette.Alert, 'errorFilledBg', setCssVarColor('palette-error-dark'));\n      setColor(palette.Alert, 'infoFilledBg', setCssVarColor('palette-info-dark'));\n      setColor(palette.Alert, 'successFilledBg', setCssVarColor('palette-success-dark'));\n      setColor(palette.Alert, 'warningFilledBg', setCssVarColor('palette-warning-dark'));\n      setColor(palette.Alert, 'errorFilledColor', silent(() => palette.getContrastText(palette.error.dark)));\n      setColor(palette.Alert, 'infoFilledColor', silent(() => palette.getContrastText(palette.info.dark)));\n      setColor(palette.Alert, 'successFilledColor', silent(() => palette.getContrastText(palette.success.dark)));\n      setColor(palette.Alert, 'warningFilledColor', silent(() => palette.getContrastText(palette.warning.dark)));\n      setColor(palette.Alert, 'errorStandardBg', colorMix(safeDarken, palette.error.light, 0.9));\n      setColor(palette.Alert, 'infoStandardBg', colorMix(safeDarken, palette.info.light, 0.9));\n      setColor(palette.Alert, 'successStandardBg', colorMix(safeDarken, palette.success.light, 0.9));\n      setColor(palette.Alert, 'warningStandardBg', colorMix(safeDarken, palette.warning.light, 0.9));\n      setColor(palette.Alert, 'errorIconColor', setCssVarColor('palette-error-main'));\n      setColor(palette.Alert, 'infoIconColor', setCssVarColor('palette-info-main'));\n      setColor(palette.Alert, 'successIconColor', setCssVarColor('palette-success-main'));\n      setColor(palette.Alert, 'warningIconColor', setCssVarColor('palette-warning-main'));\n      setColor(palette.AppBar, 'defaultBg', setCssVarColor('palette-grey-900'));\n      setColor(palette.AppBar, 'darkBg', setCssVarColor('palette-background-paper')); // specific for dark mode\n      setColor(palette.AppBar, 'darkColor', setCssVarColor('palette-text-primary')); // specific for dark mode\n      setColor(palette.Avatar, 'defaultBg', setCssVarColor('palette-grey-600'));\n      setColor(palette.Button, 'inheritContainedBg', setCssVarColor('palette-grey-800'));\n      setColor(palette.Button, 'inheritContainedHoverBg', setCssVarColor('palette-grey-700'));\n      setColor(palette.Chip, 'defaultBorder', setCssVarColor('palette-grey-700'));\n      setColor(palette.Chip, 'defaultAvatarColor', setCssVarColor('palette-grey-300'));\n      setColor(palette.Chip, 'defaultIconColor', setCssVarColor('palette-grey-300'));\n      setColor(palette.FilledInput, 'bg', 'rgba(255, 255, 255, 0.09)');\n      setColor(palette.FilledInput, 'hoverBg', 'rgba(255, 255, 255, 0.13)');\n      setColor(palette.FilledInput, 'disabledBg', 'rgba(255, 255, 255, 0.12)');\n      setColor(palette.LinearProgress, 'primaryBg', colorMix(safeDarken, palette.primary.main, 0.5));\n      setColor(palette.LinearProgress, 'secondaryBg', colorMix(safeDarken, palette.secondary.main, 0.5));\n      setColor(palette.LinearProgress, 'errorBg', colorMix(safeDarken, palette.error.main, 0.5));\n      setColor(palette.LinearProgress, 'infoBg', colorMix(safeDarken, palette.info.main, 0.5));\n      setColor(palette.LinearProgress, 'successBg', colorMix(safeDarken, palette.success.main, 0.5));\n      setColor(palette.LinearProgress, 'warningBg', colorMix(safeDarken, palette.warning.main, 0.5));\n      setColor(palette.Skeleton, 'bg', colorSpace ? colorMix(safeAlpha, palette.text.primary, 0.13) : `rgba(${setCssVarColor('palette-text-primaryChannel')} / 0.13)`);\n      setColor(palette.Slider, 'primaryTrack', colorMix(safeDarken, palette.primary.main, 0.5));\n      setColor(palette.Slider, 'secondaryTrack', colorMix(safeDarken, palette.secondary.main, 0.5));\n      setColor(palette.Slider, 'errorTrack', colorMix(safeDarken, palette.error.main, 0.5));\n      setColor(palette.Slider, 'infoTrack', colorMix(safeDarken, palette.info.main, 0.5));\n      setColor(palette.Slider, 'successTrack', colorMix(safeDarken, palette.success.main, 0.5));\n      setColor(palette.Slider, 'warningTrack', colorMix(safeDarken, palette.warning.main, 0.5));\n      const snackbarContentBackground = colorSpace ? colorMix(safeLighten, palette.background.default, 0.985) // use `0.985` instead of `0.98` to match the contrast ratio of JS implementation\n      : safeEmphasize(palette.background.default, 0.98);\n      setColor(palette.SnackbarContent, 'bg', snackbarContentBackground);\n      setColor(palette.SnackbarContent, 'color', silent(() => colorSpace ? light.text.primary : palette.getContrastText(snackbarContentBackground)));\n      setColor(palette.SpeedDialAction, 'fabHoverBg', safeEmphasize(palette.background.paper, 0.15));\n      setColor(palette.StepConnector, 'border', setCssVarColor('palette-grey-600'));\n      setColor(palette.StepContent, 'border', setCssVarColor('palette-grey-600'));\n      setColor(palette.Switch, 'defaultColor', setCssVarColor('palette-grey-300'));\n      setColor(palette.Switch, 'defaultDisabledColor', setCssVarColor('palette-grey-600'));\n      setColor(palette.Switch, 'primaryDisabledColor', colorMix(safeDarken, palette.primary.main, 0.55));\n      setColor(palette.Switch, 'secondaryDisabledColor', colorMix(safeDarken, palette.secondary.main, 0.55));\n      setColor(palette.Switch, 'errorDisabledColor', colorMix(safeDarken, palette.error.main, 0.55));\n      setColor(palette.Switch, 'infoDisabledColor', colorMix(safeDarken, palette.info.main, 0.55));\n      setColor(palette.Switch, 'successDisabledColor', colorMix(safeDarken, palette.success.main, 0.55));\n      setColor(palette.Switch, 'warningDisabledColor', colorMix(safeDarken, palette.warning.main, 0.55));\n      setColor(palette.TableCell, 'border', colorMix(safeDarken, colorMix(safeAlpha, palette.divider, 1), 0.68));\n      setColor(palette.Tooltip, 'bg', colorMix(safeAlpha, palette.grey[700], 0.92));\n    }\n\n    // MUI X - DataGrid needs this token.\n    setColorChannel(palette.background, 'default');\n\n    // added for consistency with the `background.default` token\n    setColorChannel(palette.background, 'paper');\n    setColorChannel(palette.common, 'background');\n    setColorChannel(palette.common, 'onBackground');\n    setColorChannel(palette, 'divider');\n    Object.keys(palette).forEach(color => {\n      const colors = palette[color];\n\n      // The default palettes (primary, secondary, error, info, success, and warning) errors are handled by the above `createTheme(...)`.\n\n      if (color !== 'tonalOffset' && colors && typeof colors === 'object') {\n        // Silent the error for custom palettes.\n        if (colors.main) {\n          setColor(palette[color], 'mainChannel', safeColorChannel(toRgb(colors.main)));\n        }\n        if (colors.light) {\n          setColor(palette[color], 'lightChannel', safeColorChannel(toRgb(colors.light)));\n        }\n        if (colors.dark) {\n          setColor(palette[color], 'darkChannel', safeColorChannel(toRgb(colors.dark)));\n        }\n        if (colors.contrastText) {\n          setColor(palette[color], 'contrastTextChannel', safeColorChannel(toRgb(colors.contrastText)));\n        }\n        if (color === 'text') {\n          // Text colors: text.primary, text.secondary\n          setColorChannel(palette[color], 'primary');\n          setColorChannel(palette[color], 'secondary');\n        }\n        if (color === 'action') {\n          // Action colors: action.active, action.selected\n          if (colors.active) {\n            setColorChannel(palette[color], 'active');\n          }\n          if (colors.selected) {\n            setColorChannel(palette[color], 'selected');\n          }\n        }\n      }\n    });\n  });\n  theme = args.reduce((acc, argument) => deepmerge(acc, argument), theme);\n  const parserConfig = {\n    prefix: cssVarPrefix,\n    disableCssColorScheme,\n    shouldSkipGeneratingVar,\n    getSelector: defaultGetSelector(theme),\n    enableContrastVars: nativeColor\n  };\n  const {\n    vars,\n    generateThemeVars,\n    generateStyleSheets\n  } = prepareCssVars(theme, parserConfig);\n  theme.vars = vars;\n  Object.entries(theme.colorSchemes[theme.defaultColorScheme]).forEach(([key, value]) => {\n    theme[key] = value;\n  });\n  theme.generateThemeVars = generateThemeVars;\n  theme.generateStyleSheets = generateStyleSheets;\n  theme.generateSpacing = function generateSpacing() {\n    return createSpacing(input.spacing, createUnarySpacing(this));\n  };\n  theme.getColorSchemeSelector = createGetColorSchemeSelector(selector);\n  theme.spacing = theme.generateSpacing();\n  theme.shouldSkipGeneratingVar = shouldSkipGeneratingVar;\n  theme.unstable_sxConfig = {\n    ...defaultSxConfig,\n    ...input?.unstable_sxConfig\n  };\n  theme.unstable_sx = function sx(props) {\n    return styleFunctionSx({\n      sx: props,\n      theme: this\n    });\n  };\n  theme.toRuntimeSource = stringifyTheme; // for Pigment CSS integration\n\n  return theme;\n}","import createPalette from \"./createPalette.js\";\nimport createThemeWithVars from \"./createThemeWithVars.js\";\nimport createThemeNoVars from \"./createThemeNoVars.js\";\n// eslint-disable-next-line consistent-return\nfunction attachColorScheme(theme, scheme, colorScheme) {\n  if (!theme.colorSchemes) {\n    return undefined;\n  }\n  if (colorScheme) {\n    theme.colorSchemes[scheme] = {\n      ...(colorScheme !== true && colorScheme),\n      palette: createPalette({\n        ...(colorScheme === true ? {} : colorScheme.palette),\n        mode: scheme\n      }) // cast type to skip module augmentation test\n    };\n  }\n}\n\n/**\n * Generate a theme base on the options received.\n * @param options Takes an incomplete theme object and adds the missing parts.\n * @param args Deep merge the arguments with the about to be returned theme.\n * @returns A complete, ready-to-use theme object.\n */\nexport default function createTheme(options = {},\n// cast type to skip module augmentation test\n...args) {\n  const {\n    palette,\n    cssVariables = false,\n    colorSchemes: initialColorSchemes = !palette ? {\n      light: true\n    } : undefined,\n    defaultColorScheme: initialDefaultColorScheme = palette?.mode,\n    ...other\n  } = options;\n  const defaultColorSchemeInput = initialDefaultColorScheme || 'light';\n  const defaultScheme = initialColorSchemes?.[defaultColorSchemeInput];\n  const colorSchemesInput = {\n    ...initialColorSchemes,\n    ...(palette ? {\n      [defaultColorSchemeInput]: {\n        ...(typeof defaultScheme !== 'boolean' && defaultScheme),\n        palette\n      }\n    } : undefined)\n  };\n  if (cssVariables === false) {\n    if (!('colorSchemes' in options)) {\n      // Behaves exactly as v5\n      return createThemeNoVars(options, ...args);\n    }\n    let paletteOptions = palette;\n    if (!('palette' in options)) {\n      if (colorSchemesInput[defaultColorSchemeInput]) {\n        if (colorSchemesInput[defaultColorSchemeInput] !== true) {\n          paletteOptions = colorSchemesInput[defaultColorSchemeInput].palette;\n        } else if (defaultColorSchemeInput === 'dark') {\n          // @ts-ignore to prevent the module augmentation test from failing\n          paletteOptions = {\n            mode: 'dark'\n          };\n        }\n      }\n    }\n    const theme = createThemeNoVars({\n      ...options,\n      palette: paletteOptions\n    }, ...args);\n    theme.defaultColorScheme = defaultColorSchemeInput;\n    theme.colorSchemes = colorSchemesInput;\n    if (theme.palette.mode === 'light') {\n      theme.colorSchemes.light = {\n        ...(colorSchemesInput.light !== true && colorSchemesInput.light),\n        palette: theme.palette\n      };\n      attachColorScheme(theme, 'dark', colorSchemesInput.dark);\n    }\n    if (theme.palette.mode === 'dark') {\n      theme.colorSchemes.dark = {\n        ...(colorSchemesInput.dark !== true && colorSchemesInput.dark),\n        palette: theme.palette\n      };\n      attachColorScheme(theme, 'light', colorSchemesInput.light);\n    }\n    return theme;\n  }\n  if (!palette && !('light' in colorSchemesInput) && defaultColorSchemeInput === 'light') {\n    colorSchemesInput.light = true;\n  }\n  return createThemeWithVars({\n    ...other,\n    colorSchemes: colorSchemesInput,\n    defaultColorScheme: defaultColorSchemeInput,\n    ...(typeof cssVariables !== 'boolean' && cssVariables)\n  }, ...args);\n}","'use client';\n\nimport createTheme from \"./createTheme.js\";\nconst defaultTheme = createTheme();\nexport default defaultTheme;","'use client';\n\nimport * as React from 'react';\nimport { useTheme as useThemeSystem } from '@mui/system';\nimport defaultTheme from \"./defaultTheme.js\";\nimport THEME_ID from \"./identifier.js\";\nexport default function useTheme() {\n  const theme = useThemeSystem(defaultTheme);\n  if (process.env.NODE_ENV !== 'production') {\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useDebugValue(theme);\n  }\n  return theme[THEME_ID] || theme;\n}","// copied from @mui/system/createStyled\nfunction slotShouldForwardProp(prop) {\n  return prop !== 'ownerState' && prop !== 'theme' && prop !== 'sx' && prop !== 'as';\n}\nexport default slotShouldForwardProp;","import slotShouldForwardProp from \"./slotShouldForwardProp.js\";\nconst rootShouldForwardProp = prop => slotShouldForwardProp(prop) && prop !== 'classes';\nexport default rootShouldForwardProp;","'use client';\n\nimport createStyled from '@mui/system/createStyled';\nimport defaultTheme from \"./defaultTheme.js\";\nimport THEME_ID from \"./identifier.js\";\nimport rootShouldForwardProp from \"./rootShouldForwardProp.js\";\nexport { default as slotShouldForwardProp } from \"./slotShouldForwardProp.js\";\nexport { default as rootShouldForwardProp } from \"./rootShouldForwardProp.js\";\nconst styled = createStyled({\n  themeId: THEME_ID,\n  defaultTheme,\n  rootShouldForwardProp\n});\nexport default styled;","'use client';\n\nimport * as React from 'react';\nimport { ThemeProvider as SystemThemeProvider } from '@mui/system';\nimport THEME_ID from \"./identifier.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function ThemeProviderNoVars({\n  theme: themeInput,\n  ...props\n}) {\n  const scopedTheme = THEME_ID in themeInput ? themeInput[THEME_ID] : undefined;\n  return /*#__PURE__*/_jsx(SystemThemeProvider, {\n    ...props,\n    themeId: scopedTheme ? THEME_ID : undefined,\n    theme: scopedTheme || themeInput\n  });\n}","import PropTypes from 'prop-types';\nimport SystemInitColorSchemeScript from '@mui/system/InitColorSchemeScript';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const defaultConfig = {\n  attribute: 'data-mui-color-scheme',\n  colorSchemeStorageKey: 'mui-color-scheme',\n  defaultLightColorScheme: 'light',\n  defaultDarkColorScheme: 'dark',\n  modeStorageKey: 'mui-mode'\n};\n/**\n *\n * Demos:\n *\n * - [InitColorSchemeScript](https://mui.com/material-ui/react-init-color-scheme-script/)\n *\n * API:\n *\n * - [InitColorSchemeScript API](https://mui.com/material-ui/api/init-color-scheme-script/)\n */\nfunction InitColorSchemeScript(props) {\n  const {\n    defaultMode = 'system',\n    defaultLightColorScheme = defaultConfig.defaultLightColorScheme,\n    defaultDarkColorScheme = defaultConfig.defaultDarkColorScheme,\n    modeStorageKey = defaultConfig.modeStorageKey,\n    colorSchemeStorageKey = defaultConfig.colorSchemeStorageKey,\n    attribute: initialAttribute = defaultConfig.attribute,\n    colorSchemeNode = 'document.documentElement',\n    nonce\n  } = props;\n  return /*#__PURE__*/_jsx(SystemInitColorSchemeScript, {\n    defaultMode: defaultMode,\n    defaultLightColorScheme: defaultLightColorScheme,\n    defaultDarkColorScheme: defaultDarkColorScheme,\n    modeStorageKey: modeStorageKey,\n    colorSchemeStorageKey: colorSchemeStorageKey,\n    attribute: initialAttribute,\n    colorSchemeNode: colorSchemeNode,\n    nonce: nonce\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? InitColorSchemeScript.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * DOM attribute for applying a color scheme.\n   * @default 'data-mui-color-scheme'\n   * @example '.mode-%s' // for class based color scheme\n   * @example '[data-mode-%s]' // for data-attribute without '='\n   */\n  attribute: PropTypes.string,\n  /**\n   * The node (provided as string) used to attach the color-scheme attribute.\n   * @default 'document.documentElement'\n   */\n  colorSchemeNode: PropTypes.string,\n  /**\n   * localStorage key used to store `colorScheme`.\n   * @default 'mui-color-scheme'\n   */\n  colorSchemeStorageKey: PropTypes.string,\n  /**\n   * The default color scheme to be used in dark mode.\n   * @default 'dark'\n   */\n  defaultDarkColorScheme: PropTypes.string,\n  /**\n   * The default color scheme to be used in light mode.\n   * @default 'light'\n   */\n  defaultLightColorScheme: PropTypes.string,\n  /**\n   * The default mode when the storage is empty (user's first visit).\n   * @default 'system'\n   */\n  defaultMode: PropTypes.oneOf(['dark', 'light', 'system']),\n  /**\n   * localStorage key used to store `mode`.\n   * @default 'mui-mode'\n   */\n  modeStorageKey: PropTypes.string,\n  /**\n   * Nonce string to pass to the inline script for CSP headers.\n   */\n  nonce: PropTypes.string\n} : void 0;\nexport default InitColorSchemeScript;","'use client';\n\nimport styleFunctionSx from '@mui/system/styleFunctionSx';\nimport { unstable_createCssVarsProvider as createCssVarsProvider } from '@mui/system';\nimport createTheme from \"./createTheme.js\";\nimport createTypography from \"./createTypography.js\";\nimport THEME_ID from \"./identifier.js\";\nimport { defaultConfig } from \"../InitColorSchemeScript/InitColorSchemeScript.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst {\n  CssVarsProvider: InternalCssVarsProvider,\n  useColorScheme,\n  getInitColorSchemeScript: deprecatedGetInitColorSchemeScript\n} = createCssVarsProvider({\n  themeId: THEME_ID,\n  // @ts-ignore ignore module augmentation tests\n  theme: () => createTheme({\n    cssVariables: true\n  }),\n  colorSchemeStorageKey: defaultConfig.colorSchemeStorageKey,\n  modeStorageKey: defaultConfig.modeStorageKey,\n  defaultColorScheme: {\n    light: defaultConfig.defaultLightColorScheme,\n    dark: defaultConfig.defaultDarkColorScheme\n  },\n  resolveTheme: theme => {\n    const newTheme = {\n      ...theme,\n      typography: createTypography(theme.palette, theme.typography)\n    };\n    newTheme.unstable_sx = function sx(props) {\n      return styleFunctionSx({\n        sx: props,\n        theme: this\n      });\n    };\n    return newTheme;\n  }\n});\nlet warnedOnce = false;\n\n// TODO: remove in v7\n// eslint-disable-next-line @typescript-eslint/naming-convention\nfunction Experimental_CssVarsProvider(props) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (!warnedOnce) {\n      console.warn(['MUI: The Experimental_CssVarsProvider component has been ported into ThemeProvider.', '', \"You should use `import { ThemeProvider } from '@mui/material/styles'` instead.\", 'For more details, check out https://mui.com/material-ui/customization/css-theme-variables/usage/'].join('\\n'));\n      warnedOnce = true;\n    }\n  }\n  return /*#__PURE__*/_jsx(InternalCssVarsProvider, {\n    ...props\n  });\n}\nlet warnedInitScriptOnce = false;\n\n// TODO: remove in v7\nconst getInitColorSchemeScript = params => {\n  if (!warnedInitScriptOnce) {\n    console.warn(['MUI: The getInitColorSchemeScript function has been deprecated.', '', \"You should use `import InitColorSchemeScript from '@mui/material/InitColorSchemeScript'`\", 'and replace the function call with `<InitColorSchemeScript />` instead.'].join('\\n'));\n    warnedInitScriptOnce = true;\n  }\n  return deprecatedGetInitColorSchemeScript(params);\n};\n\n/**\n * TODO: remove this export in v7\n * @deprecated\n * The `CssVarsProvider` component has been deprecated and ported into `ThemeProvider`.\n *\n * You should use `ThemeProvider` and `createTheme()` instead:\n *\n * ```diff\n * - import { CssVarsProvider, extendTheme } from '@mui/material/styles';\n * + import { ThemeProvider, createTheme } from '@mui/material/styles';\n *\n * - const theme = extendTheme();\n * + const theme = createTheme({\n * +   cssVariables: true,\n * +   colorSchemes: { light: true, dark: true },\n * + });\n *\n * - <CssVarsProvider theme={theme}>\n * + <ThemeProvider theme={theme}>\n * ```\n *\n * To see the full documentation, check out https://mui.com/material-ui/customization/css-theme-variables/usage/.\n */\nexport const CssVarsProvider = InternalCssVarsProvider;\nexport { useColorScheme, getInitColorSchemeScript, Experimental_CssVarsProvider };","'use client';\n\nimport * as React from 'react';\nimport ThemeProviderNoVars from \"./ThemeProviderNoVars.js\";\nimport { CssVarsProvider } from \"./ThemeProviderWithVars.js\";\nimport THEME_ID from \"./identifier.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function ThemeProvider({\n  theme,\n  ...props\n}) {\n  const noVarsTheme = React.useMemo(() => {\n    if (typeof theme === 'function') {\n      return theme;\n    }\n    const muiTheme = THEME_ID in theme ? theme[THEME_ID] : theme;\n    if (!('colorSchemes' in muiTheme)) {\n      if (!('vars' in muiTheme)) {\n        // For non-CSS variables themes, set `vars` to null to prevent theme inheritance from the upper theme.\n        // The example use case is the docs demo that uses ThemeProvider to customize the theme while the upper theme is using CSS variables.\n        return {\n          ...theme,\n          vars: null\n        };\n      }\n      return theme;\n    }\n    return null;\n  }, [theme]);\n  if (noVarsTheme) {\n    return /*#__PURE__*/_jsx(ThemeProviderNoVars, {\n      theme: noVarsTheme,\n      ...props\n    });\n  }\n  return /*#__PURE__*/_jsx(CssVarsProvider, {\n    theme: theme,\n    ...props\n  });\n}","/**\n * Safe chained function.\n *\n * Will only create a new function if needed,\n * otherwise will pass back existing functions or null.\n */\nexport default function createChainedFunction(...funcs) {\n  return funcs.reduce((acc, func) => {\n    if (func == null) {\n      return acc;\n    }\n    return function chainedFunction(...args) {\n      acc.apply(this, args);\n      func.apply(this, args);\n    };\n  }, () => {});\n}","'use client';\n\nimport PropTypes from 'prop-types';\nimport { GlobalStyles as SystemGlobalStyles } from '@mui/system';\nimport defaultTheme from \"../styles/defaultTheme.js\";\nimport THEME_ID from \"../styles/identifier.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction GlobalStyles(props) {\n  return /*#__PURE__*/_jsx(SystemGlobalStyles, {\n    ...props,\n    defaultTheme: defaultTheme,\n    themeId: THEME_ID\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? GlobalStyles.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The styles you want to apply globally.\n   */\n  styles: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.array, PropTypes.func, PropTypes.number, PropTypes.object, PropTypes.string, PropTypes.bool])\n} : void 0;\nexport default GlobalStyles;","import { extendSxProp } from '@mui/system/styleFunctionSx';\nimport useTheme from \"../styles/useTheme.js\";\nimport GlobalStyles from \"../GlobalStyles/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport { css, keyframes } from '@mui/system';\nexport { default as styled } from \"../styles/styled.js\";\nexport function globalCss(styles) {\n  return function GlobalStylesWrapper(props) {\n    return (\n      /*#__PURE__*/\n      // Pigment CSS `globalCss` support callback with theme inside an object but `GlobalStyles` support theme as a callback value.\n      _jsx(GlobalStyles, {\n        styles: typeof styles === 'function' ? theme => styles({\n          theme,\n          ...props\n        }) : styles\n      })\n    );\n  };\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport function internal_createExtendSxProp() {\n  return extendSxProp;\n}\nexport { useTheme };","import { unstable_memoTheme } from '@mui/system';\nconst memoTheme = unstable_memoTheme;\nexport default memoTheme;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport SystemDefaultPropsProvider, { useDefaultProps as useSystemDefaultProps } from '@mui/system/DefaultPropsProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction DefaultPropsProvider(props) {\n  return /*#__PURE__*/_jsx(SystemDefaultPropsProvider, {\n    ...props\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? DefaultPropsProvider.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * @ignore\n   */\n  children: PropTypes.node,\n  /**\n   * @ignore\n   */\n  value: PropTypes.object.isRequired\n} : void 0;\nexport default DefaultPropsProvider;\nexport function useDefaultProps(params) {\n  return useSystemDefaultProps(params);\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSvgIconUtilityClass(slot) {\n  return generateUtilityClass('MuiSvgIcon', slot);\n}\nconst svgIconClasses = generateUtilityClasses('MuiSvgIcon', ['root', 'colorPrimary', 'colorSecondary', 'colorAction', 'colorError', 'colorDisabled', 'fontSizeInherit', 'fontSizeSmall', 'fontSizeMedium', 'fontSizeLarge']);\nexport default svgIconClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport capitalize from \"../utils/capitalize.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getSvgIconUtilityClass } from \"./svgIconClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    color,\n    fontSize,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', color !== 'inherit' && `color${capitalize(color)}`, `fontSize${capitalize(fontSize)}`]\n  };\n  return composeClasses(slots, getSvgIconUtilityClass, classes);\n};\nconst SvgIconRoot = styled('svg', {\n  name: 'MuiSvgIcon',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.color !== 'inherit' && styles[`color${capitalize(ownerState.color)}`], styles[`fontSize${capitalize(ownerState.fontSize)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  userSelect: 'none',\n  width: '1em',\n  height: '1em',\n  display: 'inline-block',\n  flexShrink: 0,\n  transition: theme.transitions?.create?.('fill', {\n    duration: (theme.vars ?? theme).transitions?.duration?.shorter\n  }),\n  variants: [{\n    props: props => !props.hasSvgAsChild,\n    style: {\n      // the <svg> will define the property that has `currentColor`\n      // for example heroicons uses fill=\"none\" and stroke=\"currentColor\"\n      fill: 'currentColor'\n    }\n  }, {\n    props: {\n      fontSize: 'inherit'\n    },\n    style: {\n      fontSize: 'inherit'\n    }\n  }, {\n    props: {\n      fontSize: 'small'\n    },\n    style: {\n      fontSize: theme.typography?.pxToRem?.(20) || '1.25rem'\n    }\n  }, {\n    props: {\n      fontSize: 'medium'\n    },\n    style: {\n      fontSize: theme.typography?.pxToRem?.(24) || '1.5rem'\n    }\n  }, {\n    props: {\n      fontSize: 'large'\n    },\n    style: {\n      fontSize: theme.typography?.pxToRem?.(35) || '2.1875rem'\n    }\n  },\n  // TODO v5 deprecate color prop, v6 remove for sx\n  ...Object.entries((theme.vars ?? theme).palette).filter(([, value]) => value && value.main).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      color: (theme.vars ?? theme).palette?.[color]?.main\n    }\n  })), {\n    props: {\n      color: 'action'\n    },\n    style: {\n      color: (theme.vars ?? theme).palette?.action?.active\n    }\n  }, {\n    props: {\n      color: 'disabled'\n    },\n    style: {\n      color: (theme.vars ?? theme).palette?.action?.disabled\n    }\n  }, {\n    props: {\n      color: 'inherit'\n    },\n    style: {\n      color: undefined\n    }\n  }]\n})));\nconst SvgIcon = /*#__PURE__*/React.forwardRef(function SvgIcon(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiSvgIcon'\n  });\n  const {\n    children,\n    className,\n    color = 'inherit',\n    component = 'svg',\n    fontSize = 'medium',\n    htmlColor,\n    inheritViewBox = false,\n    titleAccess,\n    viewBox = '0 0 24 24',\n    ...other\n  } = props;\n  const hasSvgAsChild = /*#__PURE__*/React.isValidElement(children) && children.type === 'svg';\n  const ownerState = {\n    ...props,\n    color,\n    component,\n    fontSize,\n    instanceFontSize: inProps.fontSize,\n    inheritViewBox,\n    viewBox,\n    hasSvgAsChild\n  };\n  const more = {};\n  if (!inheritViewBox) {\n    more.viewBox = viewBox;\n  }\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsxs(SvgIconRoot, {\n    as: component,\n    className: clsx(classes.root, className),\n    focusable: \"false\",\n    color: htmlColor,\n    \"aria-hidden\": titleAccess ? undefined : true,\n    role: titleAccess ? 'img' : undefined,\n    ref: ref,\n    ...more,\n    ...other,\n    ...(hasSvgAsChild && children.props),\n    ownerState: ownerState,\n    children: [hasSvgAsChild ? children.props.children : children, titleAccess ? /*#__PURE__*/_jsx(\"title\", {\n      children: titleAccess\n    }) : null]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? SvgIcon.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Node passed into the SVG element.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * You can use the `htmlColor` prop to apply a color attribute to the SVG element.\n   * @default 'inherit'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'action', 'disabled', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * The fontSize applied to the icon. Defaults to 24px, but can be configure to inherit font size.\n   * @default 'medium'\n   */\n  fontSize: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'large', 'medium', 'small']), PropTypes.string]),\n  /**\n   * Applies a color attribute to the SVG element.\n   */\n  htmlColor: PropTypes.string,\n  /**\n   * If `true`, the root node will inherit the custom `component`'s viewBox and the `viewBox`\n   * prop will be ignored.\n   * Useful when you want to reference a custom `component` and have `SvgIcon` pass that\n   * `component`'s viewBox to the root node.\n   * @default false\n   */\n  inheritViewBox: PropTypes.bool,\n  /**\n   * The shape-rendering attribute. The behavior of the different options is described on the\n   * [MDN Web Docs](https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/shape-rendering).\n   * If you are having issues with blurry icons you should investigate this prop.\n   */\n  shapeRendering: PropTypes.string,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Provides a human-readable title for the element that contains it.\n   * https://www.w3.org/TR/SVG-access/#Equivalent\n   */\n  titleAccess: PropTypes.string,\n  /**\n   * Allows you to redefine what the coordinates without units mean inside an SVG element.\n   * For example, if the SVG element is 500 (width) by 200 (height),\n   * and you pass viewBox=\"0 0 50 20\",\n   * this means that the coordinates inside the SVG will go from the top left corner (0,0)\n   * to bottom right (50,20) and each unit will be worth 10px.\n   * @default '0 0 24 24'\n   */\n  viewBox: PropTypes.string\n} : void 0;\nSvgIcon.muiName = 'SvgIcon';\nexport default SvgIcon;","'use client';\n\nimport * as React from 'react';\nimport SvgIcon from \"../SvgIcon/index.js\";\n\n/**\n * Private module reserved for @mui packages.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default function createSvgIcon(path, displayName) {\n  function Component(props, ref) {\n    return /*#__PURE__*/_jsx(SvgIcon, {\n      \"data-testid\": process.env.NODE_ENV !== 'production' ? `${displayName}Icon` : undefined,\n      ref: ref,\n      ...props,\n      children: path\n    });\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // Need to set `displayName` on the inner component for React.memo.\n    // React prior to 16.14 ignores `displayName` on the wrapper.\n    Component.displayName = `${displayName}Icon`;\n  }\n  Component.muiName = SvgIcon.muiName;\n  return /*#__PURE__*/React.memo(/*#__PURE__*/React.forwardRef(Component));\n}","// Corresponds to 10 frames at 60 Hz.\n// A few bytes payload overhead when lodash/debounce is ~3 kB and debounce ~300 B.\nexport default function debounce(func, wait = 166) {\n  let timeout;\n  function debounced(...args) {\n    const later = () => {\n      // @ts-ignore\n      func.apply(this, args);\n    };\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  }\n  debounced.clear = () => {\n    clearTimeout(timeout);\n  };\n  return debounced;\n}","export default function ownerDocument(node) {\n  return node && node.ownerDocument || document;\n}","import ownerDocument from \"../ownerDocument/index.js\";\nexport default function ownerWindow(node) {\n  const doc = ownerDocument(node);\n  return doc.defaultView || window;\n}","/**\n * TODO v5: consider making it private\n *\n * passes {value} to {ref}\n *\n * WARNING: Be sure to only call this inside a callback that is passed as a ref.\n * Otherwise, make sure to cleanup the previous {ref} if it changes. See\n * https://github.com/mui/material-ui/issues/13539\n *\n * Useful if you want to expose the ref of an inner component to the public API\n * while still using it inside the component.\n * @param ref A ref callback or ref object. If anything falsy, this is a no-op.\n */\nexport default function setRef(ref, value) {\n  if (typeof ref === 'function') {\n    ref(value);\n  } else if (ref) {\n    ref.current = value;\n  }\n}","export default function unsupportedProp(props, propName, componentName, location, propFullName) {\n  if (process.env.NODE_ENV === 'production') {\n    return null;\n  }\n  const propFullNameSafe = propFullName || propName;\n  if (typeof props[propName] !== 'undefined') {\n    return new Error(`The prop \\`${propFullNameSafe}\\` is not supported. Please remove it.`);\n  }\n  return null;\n}","'use client';\n\n// TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler -- process.env never changes, dependency arrays are intentionally ignored\n/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */\nimport * as React from 'react';\nexport default function useControlled(props) {\n  const {\n    controlled,\n    default: defaultProp,\n    name,\n    state = 'value'\n  } = props;\n  // isControlled is ignored in the hook dependency lists as it should never change.\n  const {\n    current: isControlled\n  } = React.useRef(controlled !== undefined);\n  const [valueState, setValue] = React.useState(defaultProp);\n  const value = isControlled ? controlled : valueState;\n  if (process.env.NODE_ENV !== 'production') {\n    React.useEffect(() => {\n      if (isControlled !== (controlled !== undefined)) {\n        console.error([`MUI: A component is changing the ${isControlled ? '' : 'un'}controlled ${state} state of ${name} to be ${isControlled ? 'un' : ''}controlled.`, 'Elements should not switch from uncontrolled to controlled (or vice versa).', `Decide between using a controlled or uncontrolled ${name} ` + 'element for the lifetime of the component.', \"The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.\", 'More info: https://fb.me/react-controlled-components'].join('\\n'));\n      }\n    }, [state, name, controlled]);\n    const {\n      current: defaultValue\n    } = React.useRef(defaultProp);\n    React.useEffect(() => {\n      if (!isControlled && JSON.stringify(defaultProp) !== JSON.stringify(defaultValue)) {\n        console.error([`MUI: A component is changing the default ${state} state of an uncontrolled ${name} after being initialized. ` + `To suppress this warning opt to use a controlled ${name}.`].join('\\n'));\n      }\n    }, [JSON.stringify(defaultProp)]);\n  }\n  const setValueIfUncontrolled = React.useCallback(newValue => {\n    if (!isControlled) {\n      setValue(newValue);\n    }\n  }, []);\n\n  // TODO: provide overloads for the useControlled function to account for the case where either\n  // controlled or default is not undefined.\n  // In that case the return type should be [T, React.Dispatch<React.SetStateAction<T>>]\n  // otherwise it should be [T | undefined, React.Dispatch<React.SetStateAction<T | undefined>>]\n  return [value, setValueIfUncontrolled];\n}","'use client';\n\nimport * as React from 'react';\nimport useEnhancedEffect from \"../useEnhancedEffect/index.js\";\n\n/**\n * Inspired by https://github.com/facebook/react/issues/14099#issuecomment-440013892\n * See RFC in https://github.com/reactjs/rfcs/pull/220\n */\n\nfunction useEventCallback(fn) {\n  const ref = React.useRef(fn);\n  useEnhancedEffect(() => {\n    ref.current = fn;\n  });\n  return React.useRef((...args) =>\n  // @ts-expect-error hide `this`\n  (0, ref.current)(...args)).current;\n}\nexport default useEventCallback;","'use client';\n\nimport * as React from 'react';\n\n/**\n * Merges refs into a single memoized callback ref or `null`.\n *\n * ```tsx\n * const rootRef = React.useRef<Instance>(null);\n * const refFork = useForkRef(rootRef, props.ref);\n *\n * return (\n *   <Root {...props} ref={refFork} />\n * );\n * ```\n *\n * @param {Array<React.Ref<Instance> | undefined>} refs The ref array.\n * @returns {React.RefCallback<Instance> | null} The new ref callback.\n */\nexport default function useForkRef(...refs) {\n  const cleanupRef = React.useRef(undefined);\n  const refEffect = React.useCallback(instance => {\n    const cleanups = refs.map(ref => {\n      if (ref == null) {\n        return null;\n      }\n      if (typeof ref === 'function') {\n        const refCallback = ref;\n        const refCleanup = refCallback(instance);\n        return typeof refCleanup === 'function' ? refCleanup : () => {\n          refCallback(null);\n        };\n      }\n      ref.current = instance;\n      return () => {\n        ref.current = null;\n      };\n    });\n    return () => {\n      cleanups.forEach(refCleanup => refCleanup?.());\n    };\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, refs);\n  return React.useMemo(() => {\n    if (refs.every(ref => ref == null)) {\n      return null;\n    }\n    return value => {\n      if (cleanupRef.current) {\n        cleanupRef.current();\n        cleanupRef.current = undefined;\n      }\n      if (value != null) {\n        cleanupRef.current = refEffect(value);\n      }\n    };\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler -- intentionally ignoring that the dependency array must be an array literal\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, refs);\n}","import clsx from 'clsx';\n\n// Brought from [Base UI](https://github.com/mui/base-ui/blob/master/packages/react/src/merge-props/mergeProps.ts#L119)\n// Use it directly from Base UI once it's a package dependency.\nfunction isEventHandler(key, value) {\n  // This approach is more efficient than using a regex.\n  const thirdCharCode = key.charCodeAt(2);\n  return key[0] === 'o' && key[1] === 'n' && thirdCharCode >= 65 /* A */ && thirdCharCode <= 90 /* Z */ && typeof value === 'function';\n}\nexport default function mergeSlotProps(externalSlotProps, defaultSlotProps) {\n  if (!externalSlotProps) {\n    return defaultSlotProps;\n  }\n  function extractHandlers(externalSlotPropsValue, defaultSlotPropsValue) {\n    const handlers = {};\n    Object.keys(defaultSlotPropsValue).forEach(key => {\n      if (isEventHandler(key, defaultSlotPropsValue[key]) && typeof externalSlotPropsValue[key] === 'function') {\n        // only compose the handlers if both default and external slot props match the event handler\n        handlers[key] = (...args) => {\n          externalSlotPropsValue[key](...args);\n          defaultSlotPropsValue[key](...args);\n        };\n      }\n    });\n    return handlers;\n  }\n  if (typeof externalSlotProps === 'function' || typeof defaultSlotProps === 'function') {\n    return ownerState => {\n      const defaultSlotPropsValue = typeof defaultSlotProps === 'function' ? defaultSlotProps(ownerState) : defaultSlotProps;\n      const externalSlotPropsValue = typeof externalSlotProps === 'function' ? externalSlotProps({\n        ...ownerState,\n        ...defaultSlotPropsValue\n      }) : externalSlotProps;\n      const className = clsx(ownerState?.className, defaultSlotPropsValue?.className, externalSlotPropsValue?.className);\n      const handlers = extractHandlers(externalSlotPropsValue, defaultSlotPropsValue);\n      return {\n        ...defaultSlotPropsValue,\n        ...externalSlotPropsValue,\n        ...handlers,\n        ...(!!className && {\n          className\n        }),\n        ...(defaultSlotPropsValue?.style && externalSlotPropsValue?.style && {\n          style: {\n            ...defaultSlotPropsValue.style,\n            ...externalSlotPropsValue.style\n          }\n        }),\n        ...(defaultSlotPropsValue?.sx && externalSlotPropsValue?.sx && {\n          sx: [...(Array.isArray(defaultSlotPropsValue.sx) ? defaultSlotPropsValue.sx : [defaultSlotPropsValue.sx]), ...(Array.isArray(externalSlotPropsValue.sx) ? externalSlotPropsValue.sx : [externalSlotPropsValue.sx])]\n        })\n      };\n    };\n  }\n  const typedDefaultSlotProps = defaultSlotProps;\n  const handlers = extractHandlers(externalSlotProps, typedDefaultSlotProps);\n  const className = clsx(typedDefaultSlotProps?.className, externalSlotProps?.className);\n  return {\n    ...defaultSlotProps,\n    ...externalSlotProps,\n    ...handlers,\n    ...(!!className && {\n      className\n    }),\n    ...(typedDefaultSlotProps?.style && externalSlotProps?.style && {\n      style: {\n        ...typedDefaultSlotProps.style,\n        ...externalSlotProps.style\n      }\n    }),\n    ...(typedDefaultSlotProps?.sx && externalSlotProps?.sx && {\n      sx: [...(Array.isArray(typedDefaultSlotProps.sx) ? typedDefaultSlotProps.sx : [typedDefaultSlotProps.sx]), ...(Array.isArray(externalSlotProps.sx) ? externalSlotProps.sx : [externalSlotProps.sx])]\n    })\n  };\n}","/**\n * @license React\n * react-is.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n  REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction typeOf(object) {\n  if (\"object\" === typeof object && null !== object) {\n    var $$typeof = object.$$typeof;\n    switch ($$typeof) {\n      case REACT_ELEMENT_TYPE:\n        switch (((object = object.type), object)) {\n          case REACT_FRAGMENT_TYPE:\n          case REACT_PROFILER_TYPE:\n          case REACT_STRICT_MODE_TYPE:\n          case REACT_SUSPENSE_TYPE:\n          case REACT_SUSPENSE_LIST_TYPE:\n          case REACT_VIEW_TRANSITION_TYPE:\n            return object;\n          default:\n            switch (((object = object && object.$$typeof), object)) {\n              case REACT_CONTEXT_TYPE:\n              case REACT_FORWARD_REF_TYPE:\n              case REACT_LAZY_TYPE:\n              case REACT_MEMO_TYPE:\n                return object;\n              case REACT_CONSUMER_TYPE:\n                return object;\n              default:\n                return $$typeof;\n            }\n        }\n      case REACT_PORTAL_TYPE:\n        return $$typeof;\n    }\n  }\n}\nexports.ContextConsumer = REACT_CONSUMER_TYPE;\nexports.ContextProvider = REACT_CONTEXT_TYPE;\nexports.Element = REACT_ELEMENT_TYPE;\nexports.ForwardRef = REACT_FORWARD_REF_TYPE;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Lazy = REACT_LAZY_TYPE;\nexports.Memo = REACT_MEMO_TYPE;\nexports.Portal = REACT_PORTAL_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\nexports.isContextConsumer = function (object) {\n  return typeOf(object) === REACT_CONSUMER_TYPE;\n};\nexports.isContextProvider = function (object) {\n  return typeOf(object) === REACT_CONTEXT_TYPE;\n};\nexports.isElement = function (object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n};\nexports.isForwardRef = function (object) {\n  return typeOf(object) === REACT_FORWARD_REF_TYPE;\n};\nexports.isFragment = function (object) {\n  return typeOf(object) === REACT_FRAGMENT_TYPE;\n};\nexports.isLazy = function (object) {\n  return typeOf(object) === REACT_LAZY_TYPE;\n};\nexports.isMemo = function (object) {\n  return typeOf(object) === REACT_MEMO_TYPE;\n};\nexports.isPortal = function (object) {\n  return typeOf(object) === REACT_PORTAL_TYPE;\n};\nexports.isProfiler = function (object) {\n  return typeOf(object) === REACT_PROFILER_TYPE;\n};\nexports.isStrictMode = function (object) {\n  return typeOf(object) === REACT_STRICT_MODE_TYPE;\n};\nexports.isSuspense = function (object) {\n  return typeOf(object) === REACT_SUSPENSE_TYPE;\n};\nexports.isSuspenseList = function (object) {\n  return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n};\nexports.isValidElementType = function (type) {\n  return \"string\" === typeof type ||\n    \"function\" === typeof type ||\n    type === REACT_FRAGMENT_TYPE ||\n    type === REACT_PROFILER_TYPE ||\n    type === REACT_STRICT_MODE_TYPE ||\n    type === REACT_SUSPENSE_TYPE ||\n    type === REACT_SUSPENSE_LIST_TYPE ||\n    (\"object\" === typeof type &&\n      null !== type &&\n      (type.$$typeof === REACT_LAZY_TYPE ||\n        type.$$typeof === REACT_MEMO_TYPE ||\n        type.$$typeof === REACT_CONTEXT_TYPE ||\n        type.$$typeof === REACT_CONSUMER_TYPE ||\n        type.$$typeof === REACT_FORWARD_REF_TYPE ||\n        type.$$typeof === REACT_CLIENT_REFERENCE ||\n        void 0 !== type.getModuleId))\n    ? !0\n    : !1;\n};\nexports.typeOf = typeOf;\n","/**\n * @license React\n * react-is.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n  (function () {\n    function typeOf(object) {\n      if (\"object\" === typeof object && null !== object) {\n        var $$typeof = object.$$typeof;\n        switch ($$typeof) {\n          case REACT_ELEMENT_TYPE:\n            switch (((object = object.type), object)) {\n              case REACT_FRAGMENT_TYPE:\n              case REACT_PROFILER_TYPE:\n              case REACT_STRICT_MODE_TYPE:\n              case REACT_SUSPENSE_TYPE:\n              case REACT_SUSPENSE_LIST_TYPE:\n              case REACT_VIEW_TRANSITION_TYPE:\n                return object;\n              default:\n                switch (((object = object && object.$$typeof), object)) {\n                  case REACT_CONTEXT_TYPE:\n                  case REACT_FORWARD_REF_TYPE:\n                  case REACT_LAZY_TYPE:\n                  case REACT_MEMO_TYPE:\n                    return object;\n                  case REACT_CONSUMER_TYPE:\n                    return object;\n                  default:\n                    return $$typeof;\n                }\n            }\n          case REACT_PORTAL_TYPE:\n            return $$typeof;\n        }\n      }\n    }\n    var REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n      REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n      REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n      REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n      REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n      REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n      REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n      REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n      REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n      REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n      REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n      REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n      REACT_VIEW_TRANSITION_TYPE = Symbol.for(\"react.view_transition\"),\n      REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\n    exports.ContextConsumer = REACT_CONSUMER_TYPE;\n    exports.ContextProvider = REACT_CONTEXT_TYPE;\n    exports.Element = REACT_ELEMENT_TYPE;\n    exports.ForwardRef = REACT_FORWARD_REF_TYPE;\n    exports.Fragment = REACT_FRAGMENT_TYPE;\n    exports.Lazy = REACT_LAZY_TYPE;\n    exports.Memo = REACT_MEMO_TYPE;\n    exports.Portal = REACT_PORTAL_TYPE;\n    exports.Profiler = REACT_PROFILER_TYPE;\n    exports.StrictMode = REACT_STRICT_MODE_TYPE;\n    exports.Suspense = REACT_SUSPENSE_TYPE;\n    exports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;\n    exports.isContextConsumer = function (object) {\n      return typeOf(object) === REACT_CONSUMER_TYPE;\n    };\n    exports.isContextProvider = function (object) {\n      return typeOf(object) === REACT_CONTEXT_TYPE;\n    };\n    exports.isElement = function (object) {\n      return (\n        \"object\" === typeof object &&\n        null !== object &&\n        object.$$typeof === REACT_ELEMENT_TYPE\n      );\n    };\n    exports.isForwardRef = function (object) {\n      return typeOf(object) === REACT_FORWARD_REF_TYPE;\n    };\n    exports.isFragment = function (object) {\n      return typeOf(object) === REACT_FRAGMENT_TYPE;\n    };\n    exports.isLazy = function (object) {\n      return typeOf(object) === REACT_LAZY_TYPE;\n    };\n    exports.isMemo = function (object) {\n      return typeOf(object) === REACT_MEMO_TYPE;\n    };\n    exports.isPortal = function (object) {\n      return typeOf(object) === REACT_PORTAL_TYPE;\n    };\n    exports.isProfiler = function (object) {\n      return typeOf(object) === REACT_PROFILER_TYPE;\n    };\n    exports.isStrictMode = function (object) {\n      return typeOf(object) === REACT_STRICT_MODE_TYPE;\n    };\n    exports.isSuspense = function (object) {\n      return typeOf(object) === REACT_SUSPENSE_TYPE;\n    };\n    exports.isSuspenseList = function (object) {\n      return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;\n    };\n    exports.isValidElementType = function (type) {\n      return \"string\" === typeof type ||\n        \"function\" === typeof type ||\n        type === REACT_FRAGMENT_TYPE ||\n        type === REACT_PROFILER_TYPE ||\n        type === REACT_STRICT_MODE_TYPE ||\n        type === REACT_SUSPENSE_TYPE ||\n        type === REACT_SUSPENSE_LIST_TYPE ||\n        (\"object\" === typeof type &&\n          null !== type &&\n          (type.$$typeof === REACT_LAZY_TYPE ||\n            type.$$typeof === REACT_MEMO_TYPE ||\n            type.$$typeof === REACT_CONTEXT_TYPE ||\n            type.$$typeof === REACT_CONSUMER_TYPE ||\n            type.$$typeof === REACT_FORWARD_REF_TYPE ||\n            type.$$typeof === REACT_CLIENT_REFERENCE ||\n            void 0 !== type.getModuleId))\n        ? !0\n        : !1;\n    };\n    exports.typeOf = typeOf;\n  })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","export default function chainPropTypes(propType1, propType2) {\n  if (process.env.NODE_ENV === 'production') {\n    return () => null;\n  }\n  return function validate(...args) {\n    return propType1(...args) || propType2(...args);\n  };\n}","function _objectWithoutPropertiesLoose(r, e) {\n  if (null == r) return {};\n  var t = {};\n  for (var n in r) if ({}.hasOwnProperty.call(r, n)) {\n    if (-1 !== e.indexOf(n)) continue;\n    t[n] = r[n];\n  }\n  return t;\n}\nexport { _objectWithoutPropertiesLoose as default };","function _setPrototypeOf(t, e) {\n  return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {\n    return t.__proto__ = e, t;\n  }, _setPrototypeOf(t, e);\n}\nexport { _setPrototypeOf as default };","import setPrototypeOf from \"./setPrototypeOf.js\";\nfunction _inheritsLoose(t, o) {\n  t.prototype = Object.create(o.prototype), t.prototype.constructor = t, setPrototypeOf(t, o);\n}\nexport { _inheritsLoose as default };","export default {\n  disabled: false\n};","import PropTypes from 'prop-types';\nexport var timeoutsShape = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n  enter: PropTypes.number,\n  exit: PropTypes.number,\n  appear: PropTypes.number\n}).isRequired]) : null;\nexport var classNamesShape = process.env.NODE_ENV !== 'production' ? PropTypes.oneOfType([PropTypes.string, PropTypes.shape({\n  enter: PropTypes.string,\n  exit: PropTypes.string,\n  active: PropTypes.string\n}), PropTypes.shape({\n  enter: PropTypes.string,\n  enterDone: PropTypes.string,\n  enterActive: PropTypes.string,\n  exit: PropTypes.string,\n  exitDone: PropTypes.string,\n  exitActive: PropTypes.string\n})]) : null;","import React from 'react';\nexport default React.createContext(null);","export var forceReflow = function forceReflow(node) {\n  return node.scrollTop;\n};","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport config from './config';\nimport { timeoutsShape } from './utils/PropTypes';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { forceReflow } from './utils/reflow';\nexport var UNMOUNTED = 'unmounted';\nexport var EXITED = 'exited';\nexport var ENTERING = 'entering';\nexport var ENTERED = 'entered';\nexport var EXITING = 'exiting';\n/**\n * The Transition component lets you describe a transition from one component\n * state to another _over time_ with a simple declarative API. Most commonly\n * it's used to animate the mounting and unmounting of a component, but can also\n * be used to describe in-place transition states as well.\n *\n * ---\n *\n * **Note**: `Transition` is a platform-agnostic base component. If you're using\n * transitions in CSS, you'll probably want to use\n * [`CSSTransition`](https://reactcommunity.org/react-transition-group/css-transition)\n * instead. It inherits all the features of `Transition`, but contains\n * additional features necessary to play nice with CSS transitions (hence the\n * name of the component).\n *\n * ---\n *\n * By default the `Transition` component does not alter the behavior of the\n * component it renders, it only tracks \"enter\" and \"exit\" states for the\n * components. It's up to you to give meaning and effect to those states. For\n * example we can add styles to a component when it enters or exits:\n *\n * ```jsx\n * import { Transition } from 'react-transition-group';\n *\n * const duration = 300;\n *\n * const defaultStyle = {\n *   transition: `opacity ${duration}ms ease-in-out`,\n *   opacity: 0,\n * }\n *\n * const transitionStyles = {\n *   entering: { opacity: 1 },\n *   entered:  { opacity: 1 },\n *   exiting:  { opacity: 0 },\n *   exited:  { opacity: 0 },\n * };\n *\n * const Fade = ({ in: inProp }) => (\n *   <Transition in={inProp} timeout={duration}>\n *     {state => (\n *       <div style={{\n *         ...defaultStyle,\n *         ...transitionStyles[state]\n *       }}>\n *         I'm a fade Transition!\n *       </div>\n *     )}\n *   </Transition>\n * );\n * ```\n *\n * There are 4 main states a Transition can be in:\n *  - `'entering'`\n *  - `'entered'`\n *  - `'exiting'`\n *  - `'exited'`\n *\n * Transition state is toggled via the `in` prop. When `true` the component\n * begins the \"Enter\" stage. During this stage, the component will shift from\n * its current transition state, to `'entering'` for the duration of the\n * transition and then to the `'entered'` stage once it's complete. Let's take\n * the following example (we'll use the\n * [useState](https://reactjs.org/docs/hooks-reference.html#usestate) hook):\n *\n * ```jsx\n * function App() {\n *   const [inProp, setInProp] = useState(false);\n *   return (\n *     <div>\n *       <Transition in={inProp} timeout={500}>\n *         {state => (\n *           // ...\n *         )}\n *       </Transition>\n *       <button onClick={() => setInProp(true)}>\n *         Click to Enter\n *       </button>\n *     </div>\n *   );\n * }\n * ```\n *\n * When the button is clicked the component will shift to the `'entering'` state\n * and stay there for 500ms (the value of `timeout`) before it finally switches\n * to `'entered'`.\n *\n * When `in` is `false` the same thing happens except the state moves from\n * `'exiting'` to `'exited'`.\n */\n\nvar Transition = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(Transition, _React$Component);\n\n  function Transition(props, context) {\n    var _this;\n\n    _this = _React$Component.call(this, props, context) || this;\n    var parentGroup = context; // In the context of a TransitionGroup all enters are really appears\n\n    var appear = parentGroup && !parentGroup.isMounting ? props.enter : props.appear;\n    var initialStatus;\n    _this.appearStatus = null;\n\n    if (props.in) {\n      if (appear) {\n        initialStatus = EXITED;\n        _this.appearStatus = ENTERING;\n      } else {\n        initialStatus = ENTERED;\n      }\n    } else {\n      if (props.unmountOnExit || props.mountOnEnter) {\n        initialStatus = UNMOUNTED;\n      } else {\n        initialStatus = EXITED;\n      }\n    }\n\n    _this.state = {\n      status: initialStatus\n    };\n    _this.nextCallback = null;\n    return _this;\n  }\n\n  Transition.getDerivedStateFromProps = function getDerivedStateFromProps(_ref, prevState) {\n    var nextIn = _ref.in;\n\n    if (nextIn && prevState.status === UNMOUNTED) {\n      return {\n        status: EXITED\n      };\n    }\n\n    return null;\n  } // getSnapshotBeforeUpdate(prevProps) {\n  //   let nextStatus = null\n  //   if (prevProps !== this.props) {\n  //     const { status } = this.state\n  //     if (this.props.in) {\n  //       if (status !== ENTERING && status !== ENTERED) {\n  //         nextStatus = ENTERING\n  //       }\n  //     } else {\n  //       if (status === ENTERING || status === ENTERED) {\n  //         nextStatus = EXITING\n  //       }\n  //     }\n  //   }\n  //   return { nextStatus }\n  // }\n  ;\n\n  var _proto = Transition.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.updateStatus(true, this.appearStatus);\n  };\n\n  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {\n    var nextStatus = null;\n\n    if (prevProps !== this.props) {\n      var status = this.state.status;\n\n      if (this.props.in) {\n        if (status !== ENTERING && status !== ENTERED) {\n          nextStatus = ENTERING;\n        }\n      } else {\n        if (status === ENTERING || status === ENTERED) {\n          nextStatus = EXITING;\n        }\n      }\n    }\n\n    this.updateStatus(false, nextStatus);\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.cancelNextCallback();\n  };\n\n  _proto.getTimeouts = function getTimeouts() {\n    var timeout = this.props.timeout;\n    var exit, enter, appear;\n    exit = enter = appear = timeout;\n\n    if (timeout != null && typeof timeout !== 'number') {\n      exit = timeout.exit;\n      enter = timeout.enter; // TODO: remove fallback for next major\n\n      appear = timeout.appear !== undefined ? timeout.appear : enter;\n    }\n\n    return {\n      exit: exit,\n      enter: enter,\n      appear: appear\n    };\n  };\n\n  _proto.updateStatus = function updateStatus(mounting, nextStatus) {\n    if (mounting === void 0) {\n      mounting = false;\n    }\n\n    if (nextStatus !== null) {\n      // nextStatus will always be ENTERING or EXITING.\n      this.cancelNextCallback();\n\n      if (nextStatus === ENTERING) {\n        if (this.props.unmountOnExit || this.props.mountOnEnter) {\n          var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this); // https://github.com/reactjs/react-transition-group/pull/749\n          // With unmountOnExit or mountOnEnter, the enter animation should happen at the transition between `exited` and `entering`.\n          // To make the animation happen,  we have to separate each rendering and avoid being processed as batched.\n\n          if (node) forceReflow(node);\n        }\n\n        this.performEnter(mounting);\n      } else {\n        this.performExit();\n      }\n    } else if (this.props.unmountOnExit && this.state.status === EXITED) {\n      this.setState({\n        status: UNMOUNTED\n      });\n    }\n  };\n\n  _proto.performEnter = function performEnter(mounting) {\n    var _this2 = this;\n\n    var enter = this.props.enter;\n    var appearing = this.context ? this.context.isMounting : mounting;\n\n    var _ref2 = this.props.nodeRef ? [appearing] : [ReactDOM.findDOMNode(this), appearing],\n        maybeNode = _ref2[0],\n        maybeAppearing = _ref2[1];\n\n    var timeouts = this.getTimeouts();\n    var enterTimeout = appearing ? timeouts.appear : timeouts.enter; // no enter animation skip right to ENTERED\n    // if we are mounting and running this it means appear _must_ be set\n\n    if (!mounting && !enter || config.disabled) {\n      this.safeSetState({\n        status: ENTERED\n      }, function () {\n        _this2.props.onEntered(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onEnter(maybeNode, maybeAppearing);\n    this.safeSetState({\n      status: ENTERING\n    }, function () {\n      _this2.props.onEntering(maybeNode, maybeAppearing);\n\n      _this2.onTransitionEnd(enterTimeout, function () {\n        _this2.safeSetState({\n          status: ENTERED\n        }, function () {\n          _this2.props.onEntered(maybeNode, maybeAppearing);\n        });\n      });\n    });\n  };\n\n  _proto.performExit = function performExit() {\n    var _this3 = this;\n\n    var exit = this.props.exit;\n    var timeouts = this.getTimeouts();\n    var maybeNode = this.props.nodeRef ? undefined : ReactDOM.findDOMNode(this); // no exit animation skip right to EXITED\n\n    if (!exit || config.disabled) {\n      this.safeSetState({\n        status: EXITED\n      }, function () {\n        _this3.props.onExited(maybeNode);\n      });\n      return;\n    }\n\n    this.props.onExit(maybeNode);\n    this.safeSetState({\n      status: EXITING\n    }, function () {\n      _this3.props.onExiting(maybeNode);\n\n      _this3.onTransitionEnd(timeouts.exit, function () {\n        _this3.safeSetState({\n          status: EXITED\n        }, function () {\n          _this3.props.onExited(maybeNode);\n        });\n      });\n    });\n  };\n\n  _proto.cancelNextCallback = function cancelNextCallback() {\n    if (this.nextCallback !== null) {\n      this.nextCallback.cancel();\n      this.nextCallback = null;\n    }\n  };\n\n  _proto.safeSetState = function safeSetState(nextState, callback) {\n    // This shouldn't be necessary, but there are weird race conditions with\n    // setState callbacks and unmounting in testing, so always make sure that\n    // we can cancel any pending setState callbacks after we unmount.\n    callback = this.setNextCallback(callback);\n    this.setState(nextState, callback);\n  };\n\n  _proto.setNextCallback = function setNextCallback(callback) {\n    var _this4 = this;\n\n    var active = true;\n\n    this.nextCallback = function (event) {\n      if (active) {\n        active = false;\n        _this4.nextCallback = null;\n        callback(event);\n      }\n    };\n\n    this.nextCallback.cancel = function () {\n      active = false;\n    };\n\n    return this.nextCallback;\n  };\n\n  _proto.onTransitionEnd = function onTransitionEnd(timeout, handler) {\n    this.setNextCallback(handler);\n    var node = this.props.nodeRef ? this.props.nodeRef.current : ReactDOM.findDOMNode(this);\n    var doesNotHaveTimeoutOrListener = timeout == null && !this.props.addEndListener;\n\n    if (!node || doesNotHaveTimeoutOrListener) {\n      setTimeout(this.nextCallback, 0);\n      return;\n    }\n\n    if (this.props.addEndListener) {\n      var _ref3 = this.props.nodeRef ? [this.nextCallback] : [node, this.nextCallback],\n          maybeNode = _ref3[0],\n          maybeNextCallback = _ref3[1];\n\n      this.props.addEndListener(maybeNode, maybeNextCallback);\n    }\n\n    if (timeout != null) {\n      setTimeout(this.nextCallback, timeout);\n    }\n  };\n\n  _proto.render = function render() {\n    var status = this.state.status;\n\n    if (status === UNMOUNTED) {\n      return null;\n    }\n\n    var _this$props = this.props,\n        children = _this$props.children,\n        _in = _this$props.in,\n        _mountOnEnter = _this$props.mountOnEnter,\n        _unmountOnExit = _this$props.unmountOnExit,\n        _appear = _this$props.appear,\n        _enter = _this$props.enter,\n        _exit = _this$props.exit,\n        _timeout = _this$props.timeout,\n        _addEndListener = _this$props.addEndListener,\n        _onEnter = _this$props.onEnter,\n        _onEntering = _this$props.onEntering,\n        _onEntered = _this$props.onEntered,\n        _onExit = _this$props.onExit,\n        _onExiting = _this$props.onExiting,\n        _onExited = _this$props.onExited,\n        _nodeRef = _this$props.nodeRef,\n        childProps = _objectWithoutPropertiesLoose(_this$props, [\"children\", \"in\", \"mountOnEnter\", \"unmountOnExit\", \"appear\", \"enter\", \"exit\", \"timeout\", \"addEndListener\", \"onEnter\", \"onEntering\", \"onEntered\", \"onExit\", \"onExiting\", \"onExited\", \"nodeRef\"]);\n\n    return (\n      /*#__PURE__*/\n      // allows for nested Transitions\n      React.createElement(TransitionGroupContext.Provider, {\n        value: null\n      }, typeof children === 'function' ? children(status, childProps) : React.cloneElement(React.Children.only(children), childProps))\n    );\n  };\n\n  return Transition;\n}(React.Component);\n\nTransition.contextType = TransitionGroupContext;\nTransition.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * A React reference to DOM element that need to transition:\n   * https://stackoverflow.com/a/51127130/4671932\n   *\n   *   - When `nodeRef` prop is used, `node` is not passed to callback functions\n   *      (e.g. `onEnter`) because user already has direct access to the node.\n   *   - When changing `key` prop of `Transition` in a `TransitionGroup` a new\n   *     `nodeRef` need to be provided to `Transition` with changed `key` prop\n   *     (see\n   *     [test/CSSTransition-test.js](https://github.com/reactjs/react-transition-group/blob/13435f897b3ab71f6e19d724f145596f5910581c/test/CSSTransition-test.js#L362-L437)).\n   */\n  nodeRef: PropTypes.shape({\n    current: typeof Element === 'undefined' ? PropTypes.any : function (propValue, key, componentName, location, propFullName, secret) {\n      var value = propValue[key];\n      return PropTypes.instanceOf(value && 'ownerDocument' in value ? value.ownerDocument.defaultView.Element : Element)(propValue, key, componentName, location, propFullName, secret);\n    }\n  }),\n\n  /**\n   * A `function` child can be used instead of a React element. This function is\n   * called with the current transition status (`'entering'`, `'entered'`,\n   * `'exiting'`, `'exited'`), which can be used to apply context\n   * specific props to a component.\n   *\n   * ```jsx\n   * <Transition in={this.state.in} timeout={150}>\n   *   {state => (\n   *     <MyComponent className={`fade fade-${state}`} />\n   *   )}\n   * </Transition>\n   * ```\n   */\n  children: PropTypes.oneOfType([PropTypes.func.isRequired, PropTypes.element.isRequired]).isRequired,\n\n  /**\n   * Show the component; triggers the enter or exit states\n   */\n  in: PropTypes.bool,\n\n  /**\n   * By default the child component is mounted immediately along with\n   * the parent `Transition` component. If you want to \"lazy mount\" the component on the\n   * first `in={true}` you can set `mountOnEnter`. After the first enter transition the component will stay\n   * mounted, even on \"exited\", unless you also specify `unmountOnExit`.\n   */\n  mountOnEnter: PropTypes.bool,\n\n  /**\n   * By default the child component stays mounted after it reaches the `'exited'` state.\n   * Set `unmountOnExit` if you'd prefer to unmount the component after it finishes exiting.\n   */\n  unmountOnExit: PropTypes.bool,\n\n  /**\n   * By default the child component does not perform the enter transition when\n   * it first mounts, regardless of the value of `in`. If you want this\n   * behavior, set both `appear` and `in` to `true`.\n   *\n   * > **Note**: there are no special appear states like `appearing`/`appeared`, this prop\n   * > only adds an additional enter transition. However, in the\n   * > `<CSSTransition>` component that first enter transition does result in\n   * > additional `.appear-*` classes, that way you can choose to style it\n   * > differently.\n   */\n  appear: PropTypes.bool,\n\n  /**\n   * Enable or disable enter transitions.\n   */\n  enter: PropTypes.bool,\n\n  /**\n   * Enable or disable exit transitions.\n   */\n  exit: PropTypes.bool,\n\n  /**\n   * The duration of the transition, in milliseconds.\n   * Required unless `addEndListener` is provided.\n   *\n   * You may specify a single timeout for all transitions:\n   *\n   * ```jsx\n   * timeout={500}\n   * ```\n   *\n   * or individually:\n   *\n   * ```jsx\n   * timeout={{\n   *  appear: 500,\n   *  enter: 300,\n   *  exit: 500,\n   * }}\n   * ```\n   *\n   * - `appear` defaults to the value of `enter`\n   * - `enter` defaults to `0`\n   * - `exit` defaults to `0`\n   *\n   * @type {number | { enter?: number, exit?: number, appear?: number }}\n   */\n  timeout: function timeout(props) {\n    var pt = timeoutsShape;\n    if (!props.addEndListener) pt = pt.isRequired;\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    return pt.apply(void 0, [props].concat(args));\n  },\n\n  /**\n   * Add a custom transition end trigger. Called with the transitioning\n   * DOM node and a `done` callback. Allows for more fine grained transition end\n   * logic. Timeouts are still used as a fallback if provided.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * ```jsx\n   * addEndListener={(node, done) => {\n   *   // use the css transitionend event to mark the finish of a transition\n   *   node.addEventListener('transitionend', done, false);\n   * }}\n   * ```\n   */\n  addEndListener: PropTypes.func,\n\n  /**\n   * Callback fired before the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEnter: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entering\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool)\n   */\n  onEntering: PropTypes.func,\n\n  /**\n   * Callback fired after the \"entered\" status is applied. An extra parameter\n   * `isAppearing` is supplied to indicate if the enter stage is occurring on the initial mount\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement, isAppearing: bool) -> void\n   */\n  onEntered: PropTypes.func,\n\n  /**\n   * Callback fired before the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExit: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exiting\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed.\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExiting: PropTypes.func,\n\n  /**\n   * Callback fired after the \"exited\" status is applied.\n   *\n   * **Note**: when `nodeRef` prop is passed, `node` is not passed\n   *\n   * @type Function(node: HtmlElement) -> void\n   */\n  onExited: PropTypes.func\n} : {}; // Name the function so it is clearer in the documentation\n\nfunction noop() {}\n\nTransition.defaultProps = {\n  in: false,\n  mountOnEnter: false,\n  unmountOnExit: false,\n  appear: false,\n  enter: true,\n  exit: true,\n  onEnter: noop,\n  onEntering: noop,\n  onEntered: noop,\n  onExit: noop,\n  onExiting: noop,\n  onExited: noop\n};\nTransition.UNMOUNTED = UNMOUNTED;\nTransition.EXITED = EXITED;\nTransition.ENTERING = ENTERING;\nTransition.ENTERED = ENTERED;\nTransition.EXITING = EXITING;\nexport default Transition;","function _assertThisInitialized(e) {\n  if (void 0 === e) throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  return e;\n}\nexport { _assertThisInitialized as default };","import { Children, cloneElement, isValidElement } from 'react';\n/**\n * Given `this.props.children`, return an object mapping key to child.\n *\n * @param {*} children `this.props.children`\n * @return {object} Mapping of key to child\n */\n\nexport function getChildMapping(children, mapFn) {\n  var mapper = function mapper(child) {\n    return mapFn && isValidElement(child) ? mapFn(child) : child;\n  };\n\n  var result = Object.create(null);\n  if (children) Children.map(children, function (c) {\n    return c;\n  }).forEach(function (child) {\n    // run the map function here instead so that the key is the computed one\n    result[child.key] = mapper(child);\n  });\n  return result;\n}\n/**\n * When you're adding or removing children some may be added or removed in the\n * same render pass. We want to show *both* since we want to simultaneously\n * animate elements in and out. This function takes a previous set of keys\n * and a new set of keys and merges them with its best guess of the correct\n * ordering. In the future we may expose some of the utilities in\n * ReactMultiChild to make this easy, but for now React itself does not\n * directly have this concept of the union of prevChildren and nextChildren\n * so we implement it here.\n *\n * @param {object} prev prev children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @param {object} next next children as returned from\n * `ReactTransitionChildMapping.getChildMapping()`.\n * @return {object} a key set that contains all keys in `prev` and all keys\n * in `next` in a reasonable order.\n */\n\nexport function mergeChildMappings(prev, next) {\n  prev = prev || {};\n  next = next || {};\n\n  function getValueForKey(key) {\n    return key in next ? next[key] : prev[key];\n  } // For each key of `next`, the list of keys to insert before that key in\n  // the combined list\n\n\n  var nextKeysPending = Object.create(null);\n  var pendingKeys = [];\n\n  for (var prevKey in prev) {\n    if (prevKey in next) {\n      if (pendingKeys.length) {\n        nextKeysPending[prevKey] = pendingKeys;\n        pendingKeys = [];\n      }\n    } else {\n      pendingKeys.push(prevKey);\n    }\n  }\n\n  var i;\n  var childMapping = {};\n\n  for (var nextKey in next) {\n    if (nextKeysPending[nextKey]) {\n      for (i = 0; i < nextKeysPending[nextKey].length; i++) {\n        var pendingNextKey = nextKeysPending[nextKey][i];\n        childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n      }\n    }\n\n    childMapping[nextKey] = getValueForKey(nextKey);\n  } // Finally, add the keys which didn't appear before any key in `next`\n\n\n  for (i = 0; i < pendingKeys.length; i++) {\n    childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n  }\n\n  return childMapping;\n}\n\nfunction getProp(child, prop, props) {\n  return props[prop] != null ? props[prop] : child.props[prop];\n}\n\nexport function getInitialChildMapping(props, onExited) {\n  return getChildMapping(props.children, function (child) {\n    return cloneElement(child, {\n      onExited: onExited.bind(null, child),\n      in: true,\n      appear: getProp(child, 'appear', props),\n      enter: getProp(child, 'enter', props),\n      exit: getProp(child, 'exit', props)\n    });\n  });\n}\nexport function getNextChildMapping(nextProps, prevChildMapping, onExited) {\n  var nextChildMapping = getChildMapping(nextProps.children);\n  var children = mergeChildMappings(prevChildMapping, nextChildMapping);\n  Object.keys(children).forEach(function (key) {\n    var child = children[key];\n    if (!isValidElement(child)) return;\n    var hasPrev = (key in prevChildMapping);\n    var hasNext = (key in nextChildMapping);\n    var prevChild = prevChildMapping[key];\n    var isLeaving = isValidElement(prevChild) && !prevChild.props.in; // item is new (entering)\n\n    if (hasNext && (!hasPrev || isLeaving)) {\n      // console.log('entering', key)\n      children[key] = cloneElement(child, {\n        onExited: onExited.bind(null, child),\n        in: true,\n        exit: getProp(child, 'exit', nextProps),\n        enter: getProp(child, 'enter', nextProps)\n      });\n    } else if (!hasNext && hasPrev && !isLeaving) {\n      // item is old (exiting)\n      // console.log('leaving', key)\n      children[key] = cloneElement(child, {\n        in: false\n      });\n    } else if (hasNext && hasPrev && isValidElement(prevChild)) {\n      // item hasn't changed transition states\n      // copy over the last transition props;\n      // console.log('unchanged', key)\n      children[key] = cloneElement(child, {\n        onExited: onExited.bind(null, child),\n        in: prevChild.props.in,\n        exit: getProp(child, 'exit', nextProps),\n        enter: getProp(child, 'enter', nextProps)\n      });\n    }\n  });\n  return children;\n}","import _objectWithoutPropertiesLoose from \"@babel/runtime/helpers/esm/objectWithoutPropertiesLoose\";\nimport _extends from \"@babel/runtime/helpers/esm/extends\";\nimport _assertThisInitialized from \"@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _inheritsLoose from \"@babel/runtime/helpers/esm/inheritsLoose\";\nimport PropTypes from 'prop-types';\nimport React from 'react';\nimport TransitionGroupContext from './TransitionGroupContext';\nimport { getChildMapping, getInitialChildMapping, getNextChildMapping } from './utils/ChildMapping';\n\nvar values = Object.values || function (obj) {\n  return Object.keys(obj).map(function (k) {\n    return obj[k];\n  });\n};\n\nvar defaultProps = {\n  component: 'div',\n  childFactory: function childFactory(child) {\n    return child;\n  }\n};\n/**\n * The `<TransitionGroup>` component manages a set of transition components\n * (`<Transition>` and `<CSSTransition>`) in a list. Like with the transition\n * components, `<TransitionGroup>` is a state machine for managing the mounting\n * and unmounting of components over time.\n *\n * Consider the example below. As items are removed or added to the TodoList the\n * `in` prop is toggled automatically by the `<TransitionGroup>`.\n *\n * Note that `<TransitionGroup>`  does not define any animation behavior!\n * Exactly _how_ a list item animates is up to the individual transition\n * component. This means you can mix and match animations across different list\n * items.\n */\n\nvar TransitionGroup = /*#__PURE__*/function (_React$Component) {\n  _inheritsLoose(TransitionGroup, _React$Component);\n\n  function TransitionGroup(props, context) {\n    var _this;\n\n    _this = _React$Component.call(this, props, context) || this;\n\n    var handleExited = _this.handleExited.bind(_assertThisInitialized(_this)); // Initial children should all be entering, dependent on appear\n\n\n    _this.state = {\n      contextValue: {\n        isMounting: true\n      },\n      handleExited: handleExited,\n      firstRender: true\n    };\n    return _this;\n  }\n\n  var _proto = TransitionGroup.prototype;\n\n  _proto.componentDidMount = function componentDidMount() {\n    this.mounted = true;\n    this.setState({\n      contextValue: {\n        isMounting: false\n      }\n    });\n  };\n\n  _proto.componentWillUnmount = function componentWillUnmount() {\n    this.mounted = false;\n  };\n\n  TransitionGroup.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, _ref) {\n    var prevChildMapping = _ref.children,\n        handleExited = _ref.handleExited,\n        firstRender = _ref.firstRender;\n    return {\n      children: firstRender ? getInitialChildMapping(nextProps, handleExited) : getNextChildMapping(nextProps, prevChildMapping, handleExited),\n      firstRender: false\n    };\n  } // node is `undefined` when user provided `nodeRef` prop\n  ;\n\n  _proto.handleExited = function handleExited(child, node) {\n    var currentChildMapping = getChildMapping(this.props.children);\n    if (child.key in currentChildMapping) return;\n\n    if (child.props.onExited) {\n      child.props.onExited(node);\n    }\n\n    if (this.mounted) {\n      this.setState(function (state) {\n        var children = _extends({}, state.children);\n\n        delete children[child.key];\n        return {\n          children: children\n        };\n      });\n    }\n  };\n\n  _proto.render = function render() {\n    var _this$props = this.props,\n        Component = _this$props.component,\n        childFactory = _this$props.childFactory,\n        props = _objectWithoutPropertiesLoose(_this$props, [\"component\", \"childFactory\"]);\n\n    var contextValue = this.state.contextValue;\n    var children = values(this.state.children).map(childFactory);\n    delete props.appear;\n    delete props.enter;\n    delete props.exit;\n\n    if (Component === null) {\n      return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n        value: contextValue\n      }, children);\n    }\n\n    return /*#__PURE__*/React.createElement(TransitionGroupContext.Provider, {\n      value: contextValue\n    }, /*#__PURE__*/React.createElement(Component, props, children));\n  };\n\n  return TransitionGroup;\n}(React.Component);\n\nTransitionGroup.propTypes = process.env.NODE_ENV !== \"production\" ? {\n  /**\n   * `<TransitionGroup>` renders a `<div>` by default. You can change this\n   * behavior by providing a `component` prop.\n   * If you use React v16+ and would like to avoid a wrapping `<div>` element\n   * you can pass in `component={null}`. This is useful if the wrapping div\n   * borks your css styles.\n   */\n  component: PropTypes.any,\n\n  /**\n   * A set of `<Transition>` components, that are toggled `in` and out as they\n   * leave. the `<TransitionGroup>` will inject specific transition props, so\n   * remember to spread them through if you are wrapping the `<Transition>` as\n   * with our `<Fade>` example.\n   *\n   * While this component is meant for multiple `Transition` or `CSSTransition`\n   * children, sometimes you may want to have a single transition child with\n   * content that you want to be transitioned out and in when you change it\n   * (e.g. routes, images etc.) In that case you can change the `key` prop of\n   * the transition child as you change its content, this will cause\n   * `TransitionGroup` to transition the child out and back in.\n   */\n  children: PropTypes.node,\n\n  /**\n   * A convenience prop that enables or disables appear animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  appear: PropTypes.bool,\n\n  /**\n   * A convenience prop that enables or disables enter animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  enter: PropTypes.bool,\n\n  /**\n   * A convenience prop that enables or disables exit animations\n   * for all children. Note that specifying this will override any defaults set\n   * on individual children Transitions.\n   */\n  exit: PropTypes.bool,\n\n  /**\n   * You may need to apply reactive updates to a child as it is exiting.\n   * This is generally done by using `cloneElement` however in the case of an exiting\n   * child the element has already been removed and not accessible to the consumer.\n   *\n   * If you do need to update a child as it leaves you can provide a `childFactory`\n   * to wrap every child, even the ones that are leaving.\n   *\n   * @type Function(child: ReactElement) -> ReactElement\n   */\n  childFactory: PropTypes.func\n} : {};\nTransitionGroup.defaultProps = defaultProps;\nexport default TransitionGroup;","'use client';\n\nimport * as React from 'react';\nconst UNINITIALIZED = {};\n\n/**\n * A React.useRef() that is initialized lazily with a function. Note that it accepts an optional\n * initialization argument, so the initialization function doesn't need to be an inline closure.\n *\n * @usage\n *   const ref = useLazyRef(sortColumns, columns)\n */\nexport default function useLazyRef(init, initArg) {\n  const ref = React.useRef(UNINITIALIZED);\n  if (ref.current === UNINITIALIZED) {\n    ref.current = init(initArg);\n  }\n  return ref;\n}","'use client';\n\nimport * as React from 'react';\nconst EMPTY = [];\n\n/**\n * A React.useEffect equivalent that runs once, when the component is mounted.\n */\nexport default function useOnMount(fn) {\n  // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler -- no need to put `fn` in the dependency array\n  /* eslint-disable react-hooks/exhaustive-deps */\n  React.useEffect(fn, EMPTY);\n  /* eslint-enable react-hooks/exhaustive-deps */\n}","'use client';\n\nimport useLazyRef from \"../useLazyRef/useLazyRef.js\";\nimport useOnMount from \"../useOnMount/useOnMount.js\";\nexport class Timeout {\n  static create() {\n    return new Timeout();\n  }\n  currentId = null;\n\n  /**\n   * Executes `fn` after `delay`, clearing any previously scheduled call.\n   */\n  start(delay, fn) {\n    this.clear();\n    this.currentId = setTimeout(() => {\n      this.currentId = null;\n      fn();\n    }, delay);\n  }\n  clear = () => {\n    if (this.currentId !== null) {\n      clearTimeout(this.currentId);\n      this.currentId = null;\n    }\n  };\n  disposeEffect = () => {\n    return this.clear;\n  };\n}\nexport default function useTimeout() {\n  const timeout = useLazyRef(Timeout.create).current;\n  useOnMount(timeout.disposeEffect);\n  return timeout;\n}","import PropTypes from 'prop-types';\nimport chainPropTypes from \"../chainPropTypes/index.js\";\nfunction isClassComponent(elementType) {\n  // elementType.prototype?.isReactComponent\n  const {\n    prototype = {}\n  } = elementType;\n  return Boolean(prototype.isReactComponent);\n}\nfunction elementTypeAcceptingRef(props, propName, componentName, location, propFullName) {\n  const propValue = props[propName];\n  const safePropName = propFullName || propName;\n  if (propValue == null ||\n  // When server-side rendering React doesn't warn either.\n  // This is not an accurate check for SSR.\n  // This is only in place for emotion compat.\n  // TODO: Revisit once https://github.com/facebook/react/issues/20047 is resolved.\n  typeof window === 'undefined') {\n    return null;\n  }\n  let warningHint;\n\n  /**\n   * Blacklisting instead of whitelisting\n   *\n   * Blacklisting will miss some components, such as React.Fragment. Those will at least\n   * trigger a warning in React.\n   * We can't whitelist because there is no safe way to detect React.forwardRef\n   * or class components. \"Safe\" means there's no public API.\n   *\n   */\n  if (typeof propValue === 'function' && !isClassComponent(propValue)) {\n    warningHint = 'Did you accidentally provide a plain function component instead?';\n  }\n  if (warningHint !== undefined) {\n    return new Error(`Invalid ${location} \\`${safePropName}\\` supplied to \\`${componentName}\\`. ` + `Expected an element type that can hold a ref. ${warningHint} ` + 'For more information see https://mui.com/r/caveat-with-refs-guide');\n  }\n  return null;\n}\nexport default chainPropTypes(PropTypes.elementType, elementTypeAcceptingRef);","export const reflow = node => node.scrollTop;\nexport function getTransitionProps(props, options) {\n  const {\n    timeout,\n    easing,\n    style = {}\n  } = props;\n  return {\n    duration: style.transitionDuration ?? (typeof timeout === 'number' ? timeout : timeout[options.mode] || 0),\n    easing: style.transitionTimingFunction ?? (typeof easing === 'object' ? easing[options.mode] : easing),\n    delay: style.transitionDelay\n  };\n}","/**\n * Determines if a given element is a DOM element name (i.e. not a React component).\n */\nfunction isHostComponent(element) {\n  return typeof element === 'string';\n}\nexport default isHostComponent;","import isHostComponent from \"../isHostComponent/index.js\";\n\n/**\n * Type of the ownerState based on the type of an element it applies to.\n * This resolves to the provided OwnerState for React components and `undefined` for host components.\n * Falls back to `OwnerState | undefined` when the exact type can't be determined in development time.\n */\n\n/**\n * Appends the ownerState object to the props, merging with the existing one if necessary.\n *\n * @param elementType Type of the element that owns the `existingProps`. If the element is a DOM node or undefined, `ownerState` is not applied.\n * @param otherProps Props of the element.\n * @param ownerState\n */\nfunction appendOwnerState(elementType, otherProps, ownerState) {\n  if (elementType === undefined || isHostComponent(elementType)) {\n    return otherProps;\n  }\n  return {\n    ...otherProps,\n    ownerState: {\n      ...otherProps.ownerState,\n      ...ownerState\n    }\n  };\n}\nexport default appendOwnerState;","/**\n * If `componentProps` is a function, calls it with the provided `ownerState`.\n * Otherwise, just returns `componentProps`.\n */\nfunction resolveComponentProps(componentProps, ownerState, slotState) {\n  if (typeof componentProps === 'function') {\n    return componentProps(ownerState, slotState);\n  }\n  return componentProps;\n}\nexport default resolveComponentProps;","/**\n * Extracts event handlers from a given object.\n * A prop is considered an event handler if it is a function and its name starts with `on`.\n *\n * @param object An object to extract event handlers from.\n * @param excludeKeys An array of keys to exclude from the returned object.\n */\nfunction extractEventHandlers(object, excludeKeys = []) {\n  if (object === undefined) {\n    return {};\n  }\n  const result = {};\n  Object.keys(object).filter(prop => prop.match(/^on[A-Z]/) && typeof object[prop] === 'function' && !excludeKeys.includes(prop)).forEach(prop => {\n    result[prop] = object[prop];\n  });\n  return result;\n}\nexport default extractEventHandlers;","/**\n * Removes event handlers from the given object.\n * A field is considered an event handler if it is a function with a name beginning with `on`.\n *\n * @param object Object to remove event handlers from.\n * @returns Object with event handlers removed.\n */\nfunction omitEventHandlers(object) {\n  if (object === undefined) {\n    return {};\n  }\n  const result = {};\n  Object.keys(object).filter(prop => !(prop.match(/^on[A-Z]/) && typeof object[prop] === 'function')).forEach(prop => {\n    result[prop] = object[prop];\n  });\n  return result;\n}\nexport default omitEventHandlers;","import clsx from 'clsx';\nimport extractEventHandlers from \"../extractEventHandlers/index.js\";\nimport omitEventHandlers from \"../omitEventHandlers/index.js\";\n/**\n * Merges the slot component internal props (usually coming from a hook)\n * with the externally provided ones.\n *\n * The merge order is (the latter overrides the former):\n * 1. The internal props (specified as a getter function to work with get*Props hook result)\n * 2. Additional props (specified internally on a Base UI component)\n * 3. External props specified on the owner component. These should only be used on a root slot.\n * 4. External props specified in the `slotProps.*` prop.\n * 5. The `className` prop - combined from all the above.\n * @param parameters\n * @returns\n */\nfunction mergeSlotProps(parameters) {\n  const {\n    getSlotProps,\n    additionalProps,\n    externalSlotProps,\n    externalForwardedProps,\n    className\n  } = parameters;\n  if (!getSlotProps) {\n    // The simpler case - getSlotProps is not defined, so no internal event handlers are defined,\n    // so we can simply merge all the props without having to worry about extracting event handlers.\n    const joinedClasses = clsx(additionalProps?.className, className, externalForwardedProps?.className, externalSlotProps?.className);\n    const mergedStyle = {\n      ...additionalProps?.style,\n      ...externalForwardedProps?.style,\n      ...externalSlotProps?.style\n    };\n    const props = {\n      ...additionalProps,\n      ...externalForwardedProps,\n      ...externalSlotProps\n    };\n    if (joinedClasses.length > 0) {\n      props.className = joinedClasses;\n    }\n    if (Object.keys(mergedStyle).length > 0) {\n      props.style = mergedStyle;\n    }\n    return {\n      props,\n      internalRef: undefined\n    };\n  }\n\n  // In this case, getSlotProps is responsible for calling the external event handlers.\n  // We don't need to include them in the merged props because of this.\n\n  const eventHandlers = extractEventHandlers({\n    ...externalForwardedProps,\n    ...externalSlotProps\n  });\n  const componentsPropsWithoutEventHandlers = omitEventHandlers(externalSlotProps);\n  const otherPropsWithoutEventHandlers = omitEventHandlers(externalForwardedProps);\n  const internalSlotProps = getSlotProps(eventHandlers);\n\n  // The order of classes is important here.\n  // Emotion (that we use in libraries consuming Base UI) depends on this order\n  // to properly override style. It requires the most important classes to be last\n  // (see https://github.com/mui/material-ui/pull/33205) for the related discussion.\n  const joinedClasses = clsx(internalSlotProps?.className, additionalProps?.className, className, externalForwardedProps?.className, externalSlotProps?.className);\n  const mergedStyle = {\n    ...internalSlotProps?.style,\n    ...additionalProps?.style,\n    ...externalForwardedProps?.style,\n    ...externalSlotProps?.style\n  };\n  const props = {\n    ...internalSlotProps,\n    ...additionalProps,\n    ...otherPropsWithoutEventHandlers,\n    ...componentsPropsWithoutEventHandlers\n  };\n  if (joinedClasses.length > 0) {\n    props.className = joinedClasses;\n  }\n  if (Object.keys(mergedStyle).length > 0) {\n    props.style = mergedStyle;\n  }\n  return {\n    props,\n    internalRef: internalSlotProps.ref\n  };\n}\nexport default mergeSlotProps;","'use client';\n\nimport useForkRef from '@mui/utils/useForkRef';\nimport appendOwnerState from '@mui/utils/appendOwnerState';\nimport resolveComponentProps from '@mui/utils/resolveComponentProps';\nimport mergeSlotProps from '@mui/utils/mergeSlotProps';\n/**\n * An internal function to create a Material UI slot.\n *\n * This is an advanced version of Base UI `useSlotProps` because Material UI allows leaf component to be customized via `component` prop\n * while Base UI does not need to support leaf component customization.\n *\n * @param {string} name: name of the slot\n * @param {object} parameters\n * @returns {[Slot, slotProps]} The slot's React component and the slot's props\n *\n * Note: the returned slot's props\n * - will never contain `component` prop.\n * - might contain `as` prop.\n */\nexport default function useSlot(\n/**\n * The slot's name. All Material UI components should have `root` slot.\n *\n * If the name is `root`, the logic behaves differently from other slots,\n * e.g. the `externalForwardedProps` are spread to `root` slot but not other slots.\n */\nname, parameters) {\n  const {\n    className,\n    elementType: initialElementType,\n    ownerState,\n    externalForwardedProps,\n    internalForwardedProps,\n    shouldForwardComponentProp = false,\n    ...useSlotPropsParams\n  } = parameters;\n  const {\n    component: rootComponent,\n    slots = {\n      [name]: undefined\n    },\n    slotProps = {\n      [name]: undefined\n    },\n    ...other\n  } = externalForwardedProps;\n  const elementType = slots[name] || initialElementType;\n\n  // `slotProps[name]` can be a callback that receives the component's ownerState.\n  // `resolvedComponentsProps` is always a plain object.\n  const resolvedComponentsProps = resolveComponentProps(slotProps[name], ownerState);\n  const {\n    props: {\n      component: slotComponent,\n      ...mergedProps\n    },\n    internalRef\n  } = mergeSlotProps({\n    className,\n    ...useSlotPropsParams,\n    externalForwardedProps: name === 'root' ? other : undefined,\n    externalSlotProps: resolvedComponentsProps\n  });\n  const ref = useForkRef(internalRef, resolvedComponentsProps?.ref, parameters.ref);\n  const LeafComponent = name === 'root' ? slotComponent || rootComponent : slotComponent;\n  const props = appendOwnerState(elementType, {\n    ...(name === 'root' && !rootComponent && !slots[name] && internalForwardedProps),\n    ...(name !== 'root' && !slots[name] && internalForwardedProps),\n    ...mergedProps,\n    ...(LeafComponent && !shouldForwardComponentProp && {\n      as: LeafComponent\n    }),\n    ...(LeafComponent && shouldForwardComponentProp && {\n      component: LeafComponent\n    }),\n    ref\n  }, ownerState);\n  return [elementType, props];\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getCollapseUtilityClass(slot) {\n  return generateUtilityClass('MuiCollapse', slot);\n}\nconst collapseClasses = generateUtilityClasses('MuiCollapse', ['root', 'horizontal', 'vertical', 'entered', 'hidden', 'wrapper', 'wrapperInner']);\nexport default collapseClasses;","'use client';\n\nimport * as React from 'react';\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport useTimeout from '@mui/utils/useTimeout';\nimport elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled, useTheme } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { duration } from \"../styles/createTransitions.js\";\nimport { getTransitionProps } from \"../transitions/utils.js\";\nimport { useForkRef } from \"../utils/index.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { getCollapseUtilityClass } from \"./collapseClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    orientation,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', `${orientation}`],\n    entered: ['entered'],\n    hidden: ['hidden'],\n    wrapper: ['wrapper', `${orientation}`],\n    wrapperInner: ['wrapperInner', `${orientation}`]\n  };\n  return composeClasses(slots, getCollapseUtilityClass, classes);\n};\nconst CollapseRoot = styled('div', {\n  name: 'MuiCollapse',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[ownerState.orientation], ownerState.state === 'entered' && styles.entered, ownerState.state === 'exited' && !ownerState.in && ownerState.collapsedSize === '0px' && styles.hidden];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  height: 0,\n  overflow: 'hidden',\n  transition: theme.transitions.create('height'),\n  variants: [{\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      height: 'auto',\n      width: 0,\n      transition: theme.transitions.create('width')\n    }\n  }, {\n    props: {\n      state: 'entered'\n    },\n    style: {\n      height: 'auto',\n      overflow: 'visible'\n    }\n  }, {\n    props: {\n      state: 'entered',\n      orientation: 'horizontal'\n    },\n    style: {\n      width: 'auto'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.state === 'exited' && !ownerState.in && ownerState.collapsedSize === '0px',\n    style: {\n      visibility: 'hidden'\n    }\n  }]\n})));\nconst CollapseWrapper = styled('div', {\n  name: 'MuiCollapse',\n  slot: 'Wrapper'\n})({\n  // Hack to get children with a negative margin to not falsify the height computation.\n  display: 'flex',\n  width: '100%',\n  variants: [{\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      width: 'auto',\n      height: '100%'\n    }\n  }]\n});\nconst CollapseWrapperInner = styled('div', {\n  name: 'MuiCollapse',\n  slot: 'WrapperInner'\n})({\n  width: '100%',\n  variants: [{\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      width: 'auto',\n      height: '100%'\n    }\n  }]\n});\n\n/**\n * The Collapse transition is used by the\n * [Vertical Stepper](/material-ui/react-stepper/#vertical-stepper) StepContent component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\nconst Collapse = /*#__PURE__*/React.forwardRef(function Collapse(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiCollapse'\n  });\n  const {\n    addEndListener,\n    children,\n    className,\n    collapsedSize: collapsedSizeProp = '0px',\n    component,\n    easing,\n    in: inProp,\n    onEnter,\n    onEntered,\n    onEntering,\n    onExit,\n    onExited,\n    onExiting,\n    orientation = 'vertical',\n    slots = {},\n    slotProps = {},\n    style,\n    timeout = duration.standard,\n    // eslint-disable-next-line react/prop-types\n    TransitionComponent = Transition,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    orientation,\n    collapsedSize: collapsedSizeProp\n  };\n  const classes = useUtilityClasses(ownerState);\n  const theme = useTheme();\n  const timer = useTimeout();\n  const wrapperRef = React.useRef(null);\n  const autoTransitionDuration = React.useRef();\n  const collapsedSize = typeof collapsedSizeProp === 'number' ? `${collapsedSizeProp}px` : collapsedSizeProp;\n  const isHorizontal = orientation === 'horizontal';\n  const size = isHorizontal ? 'width' : 'height';\n  const nodeRef = React.useRef(null);\n  const handleRef = useForkRef(ref, nodeRef);\n  const normalizedTransitionCallback = callback => maybeIsAppearing => {\n    if (callback) {\n      const node = nodeRef.current;\n\n      // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n      if (maybeIsAppearing === undefined) {\n        callback(node);\n      } else {\n        callback(node, maybeIsAppearing);\n      }\n    }\n  };\n  const getWrapperSize = () => wrapperRef.current ? wrapperRef.current[isHorizontal ? 'clientWidth' : 'clientHeight'] : 0;\n  const handleEnter = normalizedTransitionCallback((node, isAppearing) => {\n    if (wrapperRef.current && isHorizontal) {\n      // Set absolute position to get the size of collapsed content\n      wrapperRef.current.style.position = 'absolute';\n    }\n    node.style[size] = collapsedSize;\n    if (onEnter) {\n      onEnter(node, isAppearing);\n    }\n  });\n  const handleEntering = normalizedTransitionCallback((node, isAppearing) => {\n    const wrapperSize = getWrapperSize();\n    if (wrapperRef.current && isHorizontal) {\n      // After the size is read reset the position back to default\n      wrapperRef.current.style.position = '';\n    }\n    const {\n      duration: transitionDuration,\n      easing: transitionTimingFunction\n    } = getTransitionProps({\n      style,\n      timeout,\n      easing\n    }, {\n      mode: 'enter'\n    });\n    if (timeout === 'auto') {\n      const duration2 = theme.transitions.getAutoHeightDuration(wrapperSize);\n      node.style.transitionDuration = `${duration2}ms`;\n      autoTransitionDuration.current = duration2;\n    } else {\n      node.style.transitionDuration = typeof transitionDuration === 'string' ? transitionDuration : `${transitionDuration}ms`;\n    }\n    node.style[size] = `${wrapperSize}px`;\n    node.style.transitionTimingFunction = transitionTimingFunction;\n    if (onEntering) {\n      onEntering(node, isAppearing);\n    }\n  });\n  const handleEntered = normalizedTransitionCallback((node, isAppearing) => {\n    node.style[size] = 'auto';\n    if (onEntered) {\n      onEntered(node, isAppearing);\n    }\n  });\n  const handleExit = normalizedTransitionCallback(node => {\n    node.style[size] = `${getWrapperSize()}px`;\n    if (onExit) {\n      onExit(node);\n    }\n  });\n  const handleExited = normalizedTransitionCallback(onExited);\n  const handleExiting = normalizedTransitionCallback(node => {\n    const wrapperSize = getWrapperSize();\n    const {\n      duration: transitionDuration,\n      easing: transitionTimingFunction\n    } = getTransitionProps({\n      style,\n      timeout,\n      easing\n    }, {\n      mode: 'exit'\n    });\n    if (timeout === 'auto') {\n      // TODO: rename getAutoHeightDuration to something more generic (width support)\n      // Actually it just calculates animation duration based on size\n      const duration2 = theme.transitions.getAutoHeightDuration(wrapperSize);\n      node.style.transitionDuration = `${duration2}ms`;\n      autoTransitionDuration.current = duration2;\n    } else {\n      node.style.transitionDuration = typeof transitionDuration === 'string' ? transitionDuration : `${transitionDuration}ms`;\n    }\n    node.style[size] = collapsedSize;\n    node.style.transitionTimingFunction = transitionTimingFunction;\n    if (onExiting) {\n      onExiting(node);\n    }\n  });\n  const handleAddEndListener = next => {\n    if (timeout === 'auto') {\n      timer.start(autoTransitionDuration.current || 0, next);\n    }\n    if (addEndListener) {\n      // Old call signature before `react-transition-group` implemented `nodeRef`\n      addEndListener(nodeRef.current, next);\n    }\n  };\n  const externalForwardedProps = {\n    slots,\n    slotProps,\n    component\n  };\n  const [RootSlot, rootSlotProps] = useSlot('root', {\n    ref: handleRef,\n    className: clsx(classes.root, className),\n    elementType: CollapseRoot,\n    externalForwardedProps,\n    ownerState,\n    additionalProps: {\n      style: {\n        [isHorizontal ? 'minWidth' : 'minHeight']: collapsedSize,\n        ...style\n      }\n    }\n  });\n  const [WrapperSlot, wrapperSlotProps] = useSlot('wrapper', {\n    ref: wrapperRef,\n    className: classes.wrapper,\n    elementType: CollapseWrapper,\n    externalForwardedProps,\n    ownerState\n  });\n  const [WrapperInnerSlot, wrapperInnerSlotProps] = useSlot('wrapperInner', {\n    className: classes.wrapperInner,\n    elementType: CollapseWrapperInner,\n    externalForwardedProps,\n    ownerState\n  });\n  return /*#__PURE__*/_jsx(TransitionComponent, {\n    in: inProp,\n    onEnter: handleEnter,\n    onEntered: handleEntered,\n    onEntering: handleEntering,\n    onExit: handleExit,\n    onExited: handleExited,\n    onExiting: handleExiting,\n    addEndListener: handleAddEndListener,\n    nodeRef: nodeRef,\n    timeout: timeout === 'auto' ? null : timeout,\n    ...other,\n    children: (state, {\n      ownerState: incomingOwnerState,\n      ...restChildProps\n    }) => {\n      const stateOwnerState = {\n        ...ownerState,\n        state\n      };\n      return /*#__PURE__*/_jsx(RootSlot, {\n        ...rootSlotProps,\n        className: clsx(rootSlotProps.className, {\n          'entered': classes.entered,\n          'exited': !inProp && collapsedSize === '0px' && classes.hidden\n        }[state]),\n        ownerState: stateOwnerState,\n        ...restChildProps,\n        children: /*#__PURE__*/_jsx(WrapperSlot, {\n          ...wrapperSlotProps,\n          ownerState: stateOwnerState,\n          children: /*#__PURE__*/_jsx(WrapperInnerSlot, {\n            ...wrapperInnerSlotProps,\n            ownerState: stateOwnerState,\n            children: children\n          })\n        })\n      });\n    }\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Collapse.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Add a custom transition end trigger. Called with the transitioning DOM\n   * node and a done callback. Allows for more fine grained transition end\n   * logic. Note: Timeouts are still used as a fallback if provided.\n   */\n  addEndListener: PropTypes.func,\n  /**\n   * The content node to be collapsed.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The width (horizontal) or height (vertical) of the container when collapsed.\n   * @default '0px'\n   */\n  collapsedSize: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: elementTypeAcceptingRef,\n  /**\n   * The transition timing function.\n   * You may specify a single easing or a object containing enter and exit values.\n   */\n  easing: PropTypes.oneOfType([PropTypes.shape({\n    enter: PropTypes.string,\n    exit: PropTypes.string\n  }), PropTypes.string]),\n  /**\n   * If `true`, the component will transition in.\n   */\n  in: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  onEnter: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onEntered: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onEntering: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onExit: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onExited: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onExiting: PropTypes.func,\n  /**\n   * The transition orientation.\n   * @default 'vertical'\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    wrapper: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    wrapperInner: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    root: PropTypes.elementType,\n    wrapper: PropTypes.elementType,\n    wrapperInner: PropTypes.elementType\n  }),\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   *\n   * Set to 'auto' to automatically calculate transition time based on height.\n   * @default duration.standard\n   */\n  timeout: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })])\n} : void 0;\nif (Collapse) {\n  Collapse.muiSupportAuto = true;\n}\nexport default Collapse;","export function getTypeByValue(value) {\n  const valueType = typeof value;\n  switch (valueType) {\n    case 'number':\n      if (Number.isNaN(value)) {\n        return 'NaN';\n      }\n      if (!Number.isFinite(value)) {\n        return 'Infinity';\n      }\n      if (value !== Math.floor(value)) {\n        return 'float';\n      }\n      return 'number';\n    case 'object':\n      if (value === null) {\n        return 'null';\n      }\n      return value.constructor.name;\n    default:\n      return valueType;\n  }\n}\nfunction requiredInteger(props, propName, componentName, location) {\n  const propValue = props[propName];\n  if (propValue == null || !Number.isInteger(propValue)) {\n    const propType = getTypeByValue(propValue);\n    return new RangeError(`Invalid ${location} \\`${propName}\\` of type \\`${propType}\\` supplied to \\`${componentName}\\`, expected \\`integer\\`.`);\n  }\n  return null;\n}\nfunction validator(props, propName, componentName, location) {\n  const propValue = props[propName];\n  if (propValue === undefined) {\n    return null;\n  }\n  return requiredInteger(props, propName, componentName, location);\n}\nfunction validatorNoop() {\n  return null;\n}\nvalidator.isRequired = requiredInteger;\nvalidatorNoop.isRequired = validatorNoop;\nconst integerPropType = process.env.NODE_ENV === 'production' ? validatorNoop : validator;\nexport default integerPropType;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getPaperUtilityClass(slot) {\n  return generateUtilityClass('MuiPaper', slot);\n}\nconst paperClasses = generateUtilityClasses('MuiPaper', ['root', 'rounded', 'outlined', 'elevation', 'elevation0', 'elevation1', 'elevation2', 'elevation3', 'elevation4', 'elevation5', 'elevation6', 'elevation7', 'elevation8', 'elevation9', 'elevation10', 'elevation11', 'elevation12', 'elevation13', 'elevation14', 'elevation15', 'elevation16', 'elevation17', 'elevation18', 'elevation19', 'elevation20', 'elevation21', 'elevation22', 'elevation23', 'elevation24']);\nexport default paperClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport integerPropType from '@mui/utils/integerPropType';\nimport chainPropTypes from '@mui/utils/chainPropTypes';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { alpha } from '@mui/system/colorManipulator';\nimport { styled, useTheme } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport getOverlayAlpha from \"../styles/getOverlayAlpha.js\";\nimport { getPaperUtilityClass } from \"./paperClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    square,\n    elevation,\n    variant,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', variant, !square && 'rounded', variant === 'elevation' && `elevation${elevation}`]\n  };\n  return composeClasses(slots, getPaperUtilityClass, classes);\n};\nconst PaperRoot = styled('div', {\n  name: 'MuiPaper',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[ownerState.variant], !ownerState.square && styles.rounded, ownerState.variant === 'elevation' && styles[`elevation${ownerState.elevation}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  backgroundColor: (theme.vars || theme).palette.background.paper,\n  color: (theme.vars || theme).palette.text.primary,\n  transition: theme.transitions.create('box-shadow'),\n  variants: [{\n    props: ({\n      ownerState\n    }) => !ownerState.square,\n    style: {\n      borderRadius: theme.shape.borderRadius\n    }\n  }, {\n    props: {\n      variant: 'outlined'\n    },\n    style: {\n      border: `1px solid ${(theme.vars || theme).palette.divider}`\n    }\n  }, {\n    props: {\n      variant: 'elevation'\n    },\n    style: {\n      boxShadow: 'var(--Paper-shadow)',\n      backgroundImage: 'var(--Paper-overlay)'\n    }\n  }]\n})));\nconst Paper = /*#__PURE__*/React.forwardRef(function Paper(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiPaper'\n  });\n  const theme = useTheme();\n  const {\n    className,\n    component = 'div',\n    elevation = 1,\n    square = false,\n    variant = 'elevation',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    component,\n    elevation,\n    square,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  if (process.env.NODE_ENV !== 'production') {\n    if (theme.shadows[elevation] === undefined) {\n      console.error([`MUI: The elevation provided <Paper elevation={${elevation}}> is not available in the theme.`, `Please make sure that \\`theme.shadows[${elevation}]\\` is defined.`].join('\\n'));\n    }\n  }\n  return /*#__PURE__*/_jsx(PaperRoot, {\n    as: component,\n    ownerState: ownerState,\n    className: clsx(classes.root, className),\n    ref: ref,\n    ...other,\n    style: {\n      ...(variant === 'elevation' && {\n        '--Paper-shadow': (theme.vars || theme).shadows[elevation],\n        ...(theme.vars && {\n          '--Paper-overlay': theme.vars.overlays?.[elevation]\n        }),\n        ...(!theme.vars && theme.palette.mode === 'dark' && {\n          '--Paper-overlay': `linear-gradient(${alpha('#fff', getOverlayAlpha(elevation))}, ${alpha('#fff', getOverlayAlpha(elevation))})`\n        })\n      }),\n      ...other.style\n    }\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Paper.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * Shadow depth, corresponds to `dp` in the spec.\n   * It accepts values between 0 and 24 inclusive.\n   * @default 1\n   */\n  elevation: chainPropTypes(integerPropType, props => {\n    const {\n      elevation,\n      variant\n    } = props;\n    if (elevation > 0 && variant === 'outlined') {\n      return new Error(`MUI: Combining \\`elevation={${elevation}}\\` with \\`variant=\"${variant}\"\\` has no effect. Either use \\`elevation={0}\\` or use a different \\`variant\\`.`);\n    }\n    return null;\n  }),\n  /**\n   * If `true`, rounded corners are disabled.\n   * @default false\n   */\n  square: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The variant to use.\n   * @default 'elevation'\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['elevation', 'outlined']), PropTypes.string])\n} : void 0;\nexport default Paper;","'use client';\n\nimport * as React from 'react';\n\n/**\n * @ignore - internal component.\n * @type {React.Context<{} | {expanded: boolean, disabled: boolean, toggle: () => void}>}\n */\nconst AccordionContext = /*#__PURE__*/React.createContext({});\nif (process.env.NODE_ENV !== 'production') {\n  AccordionContext.displayName = 'AccordionContext';\n}\nexport default AccordionContext;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getAccordionUtilityClass(slot) {\n  return generateUtilityClass('MuiAccordion', slot);\n}\nconst accordionClasses = generateUtilityClasses('MuiAccordion', ['root', 'heading', 'rounded', 'expanded', 'disabled', 'gutters', 'region']);\nexport default accordionClasses;","'use client';\n\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport chainPropTypes from '@mui/utils/chainPropTypes';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport Collapse from \"../Collapse/index.js\";\nimport Paper from \"../Paper/index.js\";\nimport AccordionContext from \"./AccordionContext.js\";\nimport useControlled from \"../utils/useControlled.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport accordionClasses, { getAccordionUtilityClass } from \"./accordionClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    square,\n    expanded,\n    disabled,\n    disableGutters\n  } = ownerState;\n  const slots = {\n    root: ['root', !square && 'rounded', expanded && 'expanded', disabled && 'disabled', !disableGutters && 'gutters'],\n    heading: ['heading'],\n    region: ['region']\n  };\n  return composeClasses(slots, getAccordionUtilityClass, classes);\n};\nconst AccordionRoot = styled(Paper, {\n  name: 'MuiAccordion',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [{\n      [`& .${accordionClasses.region}`]: styles.region\n    }, styles.root, !ownerState.square && styles.rounded, !ownerState.disableGutters && styles.gutters];\n  }\n})(memoTheme(({\n  theme\n}) => {\n  const transition = {\n    duration: theme.transitions.duration.shortest\n  };\n  return {\n    position: 'relative',\n    transition: theme.transitions.create(['margin'], transition),\n    overflowAnchor: 'none',\n    // Keep the same scrolling position\n    '&::before': {\n      position: 'absolute',\n      left: 0,\n      top: -1,\n      right: 0,\n      height: 1,\n      content: '\"\"',\n      opacity: 1,\n      backgroundColor: (theme.vars || theme).palette.divider,\n      transition: theme.transitions.create(['opacity', 'background-color'], transition)\n    },\n    '&:first-of-type': {\n      '&::before': {\n        display: 'none'\n      }\n    },\n    [`&.${accordionClasses.expanded}`]: {\n      '&::before': {\n        opacity: 0\n      },\n      '&:first-of-type': {\n        marginTop: 0\n      },\n      '&:last-of-type': {\n        marginBottom: 0\n      },\n      '& + &': {\n        '&::before': {\n          display: 'none'\n        }\n      }\n    },\n    [`&.${accordionClasses.disabled}`]: {\n      backgroundColor: (theme.vars || theme).palette.action.disabledBackground\n    }\n  };\n}), memoTheme(({\n  theme\n}) => ({\n  variants: [{\n    props: props => !props.square,\n    style: {\n      borderRadius: 0,\n      '&:first-of-type': {\n        borderTopLeftRadius: (theme.vars || theme).shape.borderRadius,\n        borderTopRightRadius: (theme.vars || theme).shape.borderRadius\n      },\n      '&:last-of-type': {\n        borderBottomLeftRadius: (theme.vars || theme).shape.borderRadius,\n        borderBottomRightRadius: (theme.vars || theme).shape.borderRadius,\n        // Fix a rendering issue on Edge\n        '@supports (-ms-ime-align: auto)': {\n          borderBottomLeftRadius: 0,\n          borderBottomRightRadius: 0\n        }\n      }\n    }\n  }, {\n    props: props => !props.disableGutters,\n    style: {\n      [`&.${accordionClasses.expanded}`]: {\n        margin: '16px 0'\n      }\n    }\n  }]\n})));\nconst AccordionHeading = styled('h3', {\n  name: 'MuiAccordion',\n  slot: 'Heading'\n})({\n  all: 'unset'\n});\nconst AccordionRegion = styled('div', {\n  name: 'MuiAccordion',\n  slot: 'Region'\n})({});\nconst Accordion = /*#__PURE__*/React.forwardRef(function Accordion(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiAccordion'\n  });\n  const {\n    children: childrenProp,\n    className,\n    defaultExpanded = false,\n    disabled = false,\n    disableGutters = false,\n    expanded: expandedProp,\n    onChange,\n    square = false,\n    slots = {},\n    slotProps = {},\n    TransitionComponent: TransitionComponentProp,\n    TransitionProps: TransitionPropsProp,\n    ...other\n  } = props;\n  const [expanded, setExpandedState] = useControlled({\n    controlled: expandedProp,\n    default: defaultExpanded,\n    name: 'Accordion',\n    state: 'expanded'\n  });\n  const handleChange = React.useCallback(event => {\n    setExpandedState(!expanded);\n    if (onChange) {\n      onChange(event, !expanded);\n    }\n  }, [expanded, onChange, setExpandedState]);\n  const [summary, ...children] = React.Children.toArray(childrenProp);\n  const contextValue = React.useMemo(() => ({\n    expanded,\n    disabled,\n    disableGutters,\n    toggle: handleChange\n  }), [expanded, disabled, disableGutters, handleChange]);\n  const ownerState = {\n    ...props,\n    square,\n    disabled,\n    disableGutters,\n    expanded\n  };\n  const classes = useUtilityClasses(ownerState);\n  const backwardCompatibleSlots = {\n    transition: TransitionComponentProp,\n    ...slots\n  };\n  const backwardCompatibleSlotProps = {\n    transition: TransitionPropsProp,\n    ...slotProps\n  };\n  const externalForwardedProps = {\n    slots: backwardCompatibleSlots,\n    slotProps: backwardCompatibleSlotProps\n  };\n  const [RootSlot, rootProps] = useSlot('root', {\n    elementType: AccordionRoot,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      ...other\n    },\n    className: clsx(classes.root, className),\n    shouldForwardComponentProp: true,\n    ownerState,\n    ref,\n    additionalProps: {\n      square\n    }\n  });\n  const [AccordionHeadingSlot, accordionProps] = useSlot('heading', {\n    elementType: AccordionHeading,\n    externalForwardedProps,\n    className: classes.heading,\n    ownerState\n  });\n  const [TransitionSlot, transitionProps] = useSlot('transition', {\n    elementType: Collapse,\n    externalForwardedProps,\n    ownerState\n  });\n  const [AccordionRegionSlot, accordionRegionProps] = useSlot('region', {\n    elementType: AccordionRegion,\n    externalForwardedProps,\n    ownerState,\n    className: classes.region,\n    additionalProps: {\n      'aria-labelledby': summary.props.id,\n      id: summary.props['aria-controls'],\n      role: 'region'\n    }\n  });\n  return /*#__PURE__*/_jsxs(RootSlot, {\n    ...rootProps,\n    children: [/*#__PURE__*/_jsx(AccordionHeadingSlot, {\n      ...accordionProps,\n      children: /*#__PURE__*/_jsx(AccordionContext.Provider, {\n        value: contextValue,\n        children: summary\n      })\n    }), /*#__PURE__*/_jsx(TransitionSlot, {\n      in: expanded,\n      timeout: \"auto\",\n      ...transitionProps,\n      children: /*#__PURE__*/_jsx(AccordionRegionSlot, {\n        ...accordionRegionProps,\n        children: children\n      })\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Accordion.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: chainPropTypes(PropTypes.node.isRequired, props => {\n    const summary = React.Children.toArray(props.children)[0];\n    if (isFragment(summary)) {\n      return new Error(\"MUI: The Accordion doesn't accept a Fragment as a child. \" + 'Consider providing an array instead.');\n    }\n    if (! /*#__PURE__*/React.isValidElement(summary)) {\n      return new Error('MUI: Expected the first child of Accordion to be a valid element.');\n    }\n    return null;\n  }),\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, expands the accordion by default.\n   * @default false\n   */\n  defaultExpanded: PropTypes.bool,\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, it removes the margin between two expanded accordion items and the increase of height.\n   * @default false\n   */\n  disableGutters: PropTypes.bool,\n  /**\n   * If `true`, expands the accordion, otherwise collapse it.\n   * Setting this prop enables control over the accordion.\n   */\n  expanded: PropTypes.bool,\n  /**\n   * Callback fired when the expand/collapse state is changed.\n   *\n   * @param {React.SyntheticEvent} event The event source of the callback. **Warning**: This is a generic event not a change event.\n   * @param {boolean} expanded The `expanded` state of the accordion.\n   */\n  onChange: PropTypes.func,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    heading: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    region: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    transition: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    heading: PropTypes.elementType,\n    region: PropTypes.elementType,\n    root: PropTypes.elementType,\n    transition: PropTypes.elementType\n  }),\n  /**\n   * If `true`, rounded corners are disabled.\n   * @default false\n   */\n  square: PropTypes.bool,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The component used for the transition.\n   * [Follow this guide](https://mui.com/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   * @deprecated Use `slots.transition` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  TransitionComponent: PropTypes.elementType,\n  /**\n   * Props applied to the transition element.\n   * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.\n   * @deprecated Use `slotProps.transition` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default Accordion;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getAccordionDetailsUtilityClass(slot) {\n  return generateUtilityClass('MuiAccordionDetails', slot);\n}\nconst accordionDetailsClasses = generateUtilityClasses('MuiAccordionDetails', ['root']);\nexport default accordionDetailsClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getAccordionDetailsUtilityClass } from \"./accordionDetailsClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root']\n  };\n  return composeClasses(slots, getAccordionDetailsUtilityClass, classes);\n};\nconst AccordionDetailsRoot = styled('div', {\n  name: 'MuiAccordionDetails',\n  slot: 'Root'\n})(memoTheme(({\n  theme\n}) => ({\n  padding: theme.spacing(1, 2, 2)\n})));\nconst AccordionDetails = /*#__PURE__*/React.forwardRef(function AccordionDetails(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiAccordionDetails'\n  });\n  const {\n    className,\n    ...other\n  } = props;\n  const ownerState = props;\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(AccordionDetailsRoot, {\n    className: clsx(classes.root, className),\n    ref: ref,\n    ownerState: ownerState,\n    ...other\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? AccordionDetails.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default AccordionDetails;","import PropTypes from 'prop-types';\nconst refType = PropTypes.oneOfType([PropTypes.func, PropTypes.object]);\nexport default refType;","/**\n * Returns a boolean indicating if the event's target has :focus-visible\n */\nexport default function isFocusVisible(element) {\n  try {\n    return element.matches(':focus-visible');\n  } catch (error) {\n    // Do not warn on jsdom tests, otherwise all tests that rely on focus have to be skipped\n    // Tests that rely on `:focus-visible` will still have to be skipped in jsdom\n    if (process.env.NODE_ENV !== 'production' && !window.navigator.userAgent.includes('jsdom')) {\n      console.warn(['MUI: The `:focus-visible` pseudo class is not supported in this browser.', 'Some components rely on this feature to work properly.'].join('\\n'));\n    }\n  }\n  return false;\n}","'use client';\n\nimport * as React from 'react';\nimport useLazyRef from '@mui/utils/useLazyRef';\n/**\n * Lazy initialization container for the Ripple instance. This improves\n * performance by delaying mounting the ripple until it's needed.\n */\nexport class LazyRipple {\n  /** React ref to the ripple instance */\n\n  /** If the ripple component should be mounted */\n\n  /** Promise that resolves when the ripple component is mounted */\n\n  /** If the ripple component has been mounted */\n\n  /** React state hook setter */\n\n  static create() {\n    return new LazyRipple();\n  }\n  static use() {\n    /* eslint-disable */\n    const ripple = useLazyRef(LazyRipple.create).current;\n    const [shouldMount, setShouldMount] = React.useState(false);\n    ripple.shouldMount = shouldMount;\n    ripple.setShouldMount = setShouldMount;\n    React.useEffect(ripple.mountEffect, [shouldMount]);\n    /* eslint-enable */\n\n    return ripple;\n  }\n  constructor() {\n    this.ref = {\n      current: null\n    };\n    this.mounted = null;\n    this.didMount = false;\n    this.shouldMount = false;\n    this.setShouldMount = null;\n  }\n  mount() {\n    if (!this.mounted) {\n      this.mounted = createControlledPromise();\n      this.shouldMount = true;\n      this.setShouldMount(this.shouldMount);\n    }\n    return this.mounted;\n  }\n  mountEffect = () => {\n    if (this.shouldMount && !this.didMount) {\n      if (this.ref.current !== null) {\n        this.didMount = true;\n        this.mounted.resolve();\n      }\n    }\n  };\n\n  /* Ripple API */\n\n  start(...args) {\n    this.mount().then(() => this.ref.current?.start(...args));\n  }\n  stop(...args) {\n    this.mount().then(() => this.ref.current?.stop(...args));\n  }\n  pulsate(...args) {\n    this.mount().then(() => this.ref.current?.pulsate(...args));\n  }\n}\nexport default function useLazyRipple() {\n  return LazyRipple.use();\n}\nfunction createControlledPromise() {\n  let resolve;\n  let reject;\n  const p = new Promise((resolveFn, rejectFn) => {\n    resolve = resolveFn;\n    reject = rejectFn;\n  });\n  p.resolve = resolve;\n  p.reject = reject;\n  return p;\n}","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction Ripple(props) {\n  const {\n    className,\n    classes,\n    pulsate = false,\n    rippleX,\n    rippleY,\n    rippleSize,\n    in: inProp,\n    onExited,\n    timeout\n  } = props;\n  const [leaving, setLeaving] = React.useState(false);\n  const rippleClassName = clsx(className, classes.ripple, classes.rippleVisible, pulsate && classes.ripplePulsate);\n  const rippleStyles = {\n    width: rippleSize,\n    height: rippleSize,\n    top: -(rippleSize / 2) + rippleY,\n    left: -(rippleSize / 2) + rippleX\n  };\n  const childClassName = clsx(classes.child, leaving && classes.childLeaving, pulsate && classes.childPulsate);\n  if (!inProp && !leaving) {\n    setLeaving(true);\n  }\n  React.useEffect(() => {\n    if (!inProp && onExited != null) {\n      // react-transition-group#onExited\n      const timeoutId = setTimeout(onExited, timeout);\n      return () => {\n        clearTimeout(timeoutId);\n      };\n    }\n    return undefined;\n  }, [onExited, inProp, timeout]);\n  return /*#__PURE__*/_jsx(\"span\", {\n    className: rippleClassName,\n    style: rippleStyles,\n    children: /*#__PURE__*/_jsx(\"span\", {\n      className: childClassName\n    })\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? Ripple.propTypes /* remove-proptypes */ = {\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object.isRequired,\n  className: PropTypes.string,\n  /**\n   * @ignore - injected from TransitionGroup\n   */\n  in: PropTypes.bool,\n  /**\n   * @ignore - injected from TransitionGroup\n   */\n  onExited: PropTypes.func,\n  /**\n   * If `true`, the ripple pulsates, typically indicating the keyboard focus state of an element.\n   */\n  pulsate: PropTypes.bool,\n  /**\n   * Diameter of the ripple.\n   */\n  rippleSize: PropTypes.number,\n  /**\n   * Horizontal position of the ripple center.\n   */\n  rippleX: PropTypes.number,\n  /**\n   * Vertical position of the ripple center.\n   */\n  rippleY: PropTypes.number,\n  /**\n   * exit delay\n   */\n  timeout: PropTypes.number.isRequired\n} : void 0;\nexport default Ripple;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getTouchRippleUtilityClass(slot) {\n  return generateUtilityClass('MuiTouchRipple', slot);\n}\nconst touchRippleClasses = generateUtilityClasses('MuiTouchRipple', ['root', 'ripple', 'rippleVisible', 'ripplePulsate', 'child', 'childLeaving', 'childPulsate']);\nexport default touchRippleClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { TransitionGroup } from 'react-transition-group';\nimport clsx from 'clsx';\nimport useTimeout from '@mui/utils/useTimeout';\nimport { keyframes, styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport Ripple from \"./Ripple.js\";\nimport touchRippleClasses from \"./touchRippleClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst DURATION = 550;\nexport const DELAY_RIPPLE = 80;\nconst enterKeyframe = keyframes`\n  0% {\n    transform: scale(0);\n    opacity: 0.1;\n  }\n\n  100% {\n    transform: scale(1);\n    opacity: 0.3;\n  }\n`;\nconst exitKeyframe = keyframes`\n  0% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n`;\nconst pulsateKeyframe = keyframes`\n  0% {\n    transform: scale(1);\n  }\n\n  50% {\n    transform: scale(0.92);\n  }\n\n  100% {\n    transform: scale(1);\n  }\n`;\nexport const TouchRippleRoot = styled('span', {\n  name: 'MuiTouchRipple',\n  slot: 'Root'\n})({\n  overflow: 'hidden',\n  pointerEvents: 'none',\n  position: 'absolute',\n  zIndex: 0,\n  top: 0,\n  right: 0,\n  bottom: 0,\n  left: 0,\n  borderRadius: 'inherit'\n});\n\n// This `styled()` function invokes keyframes. `styled-components` only supports keyframes\n// in string templates. Do not convert these styles in JS object as it will break.\nexport const TouchRippleRipple = styled(Ripple, {\n  name: 'MuiTouchRipple',\n  slot: 'Ripple'\n})`\n  opacity: 0;\n  position: absolute;\n\n  &.${touchRippleClasses.rippleVisible} {\n    opacity: 0.3;\n    transform: scale(1);\n    animation-name: ${enterKeyframe};\n    animation-duration: ${DURATION}ms;\n    animation-timing-function: ${({\n  theme\n}) => theme.transitions.easing.easeInOut};\n  }\n\n  &.${touchRippleClasses.ripplePulsate} {\n    animation-duration: ${({\n  theme\n}) => theme.transitions.duration.shorter}ms;\n  }\n\n  & .${touchRippleClasses.child} {\n    opacity: 1;\n    display: block;\n    width: 100%;\n    height: 100%;\n    border-radius: 50%;\n    background-color: currentColor;\n  }\n\n  & .${touchRippleClasses.childLeaving} {\n    opacity: 0;\n    animation-name: ${exitKeyframe};\n    animation-duration: ${DURATION}ms;\n    animation-timing-function: ${({\n  theme\n}) => theme.transitions.easing.easeInOut};\n  }\n\n  & .${touchRippleClasses.childPulsate} {\n    position: absolute;\n    /* @noflip */\n    left: 0px;\n    top: 0;\n    animation-name: ${pulsateKeyframe};\n    animation-duration: 2500ms;\n    animation-timing-function: ${({\n  theme\n}) => theme.transitions.easing.easeInOut};\n    animation-iteration-count: infinite;\n    animation-delay: 200ms;\n  }\n`;\n\n/**\n * @ignore - internal component.\n *\n * TODO v5: Make private\n */\nconst TouchRipple = /*#__PURE__*/React.forwardRef(function TouchRipple(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiTouchRipple'\n  });\n  const {\n    center: centerProp = false,\n    classes = {},\n    className,\n    ...other\n  } = props;\n  const [ripples, setRipples] = React.useState([]);\n  const nextKey = React.useRef(0);\n  const rippleCallback = React.useRef(null);\n  React.useEffect(() => {\n    if (rippleCallback.current) {\n      rippleCallback.current();\n      rippleCallback.current = null;\n    }\n  }, [ripples]);\n\n  // Used to filter out mouse emulated events on mobile.\n  const ignoringMouseDown = React.useRef(false);\n  // We use a timer in order to only show the ripples for touch \"click\" like events.\n  // We don't want to display the ripple for touch scroll events.\n  const startTimer = useTimeout();\n\n  // This is the hook called once the previous timeout is ready.\n  const startTimerCommit = React.useRef(null);\n  const container = React.useRef(null);\n  const startCommit = React.useCallback(params => {\n    const {\n      pulsate,\n      rippleX,\n      rippleY,\n      rippleSize,\n      cb\n    } = params;\n    setRipples(oldRipples => [...oldRipples, /*#__PURE__*/_jsx(TouchRippleRipple, {\n      classes: {\n        ripple: clsx(classes.ripple, touchRippleClasses.ripple),\n        rippleVisible: clsx(classes.rippleVisible, touchRippleClasses.rippleVisible),\n        ripplePulsate: clsx(classes.ripplePulsate, touchRippleClasses.ripplePulsate),\n        child: clsx(classes.child, touchRippleClasses.child),\n        childLeaving: clsx(classes.childLeaving, touchRippleClasses.childLeaving),\n        childPulsate: clsx(classes.childPulsate, touchRippleClasses.childPulsate)\n      },\n      timeout: DURATION,\n      pulsate: pulsate,\n      rippleX: rippleX,\n      rippleY: rippleY,\n      rippleSize: rippleSize\n    }, nextKey.current)]);\n    nextKey.current += 1;\n    rippleCallback.current = cb;\n  }, [classes]);\n  const start = React.useCallback((event = {}, options = {}, cb = () => {}) => {\n    const {\n      pulsate = false,\n      center = centerProp || options.pulsate,\n      fakeElement = false // For test purposes\n    } = options;\n    if (event?.type === 'mousedown' && ignoringMouseDown.current) {\n      ignoringMouseDown.current = false;\n      return;\n    }\n    if (event?.type === 'touchstart') {\n      ignoringMouseDown.current = true;\n    }\n    const element = fakeElement ? null : container.current;\n    const rect = element ? element.getBoundingClientRect() : {\n      width: 0,\n      height: 0,\n      left: 0,\n      top: 0\n    };\n\n    // Get the size of the ripple\n    let rippleX;\n    let rippleY;\n    let rippleSize;\n    if (center || event === undefined || event.clientX === 0 && event.clientY === 0 || !event.clientX && !event.touches) {\n      rippleX = Math.round(rect.width / 2);\n      rippleY = Math.round(rect.height / 2);\n    } else {\n      const {\n        clientX,\n        clientY\n      } = event.touches && event.touches.length > 0 ? event.touches[0] : event;\n      rippleX = Math.round(clientX - rect.left);\n      rippleY = Math.round(clientY - rect.top);\n    }\n    if (center) {\n      rippleSize = Math.sqrt((2 * rect.width ** 2 + rect.height ** 2) / 3);\n\n      // For some reason the animation is broken on Mobile Chrome if the size is even.\n      if (rippleSize % 2 === 0) {\n        rippleSize += 1;\n      }\n    } else {\n      const sizeX = Math.max(Math.abs((element ? element.clientWidth : 0) - rippleX), rippleX) * 2 + 2;\n      const sizeY = Math.max(Math.abs((element ? element.clientHeight : 0) - rippleY), rippleY) * 2 + 2;\n      rippleSize = Math.sqrt(sizeX ** 2 + sizeY ** 2);\n    }\n\n    // Touche devices\n    if (event?.touches) {\n      // check that this isn't another touchstart due to multitouch\n      // otherwise we will only clear a single timer when unmounting while two\n      // are running\n      if (startTimerCommit.current === null) {\n        // Prepare the ripple effect.\n        startTimerCommit.current = () => {\n          startCommit({\n            pulsate,\n            rippleX,\n            rippleY,\n            rippleSize,\n            cb\n          });\n        };\n        // Delay the execution of the ripple effect.\n        // We have to make a tradeoff with this delay value.\n        startTimer.start(DELAY_RIPPLE, () => {\n          if (startTimerCommit.current) {\n            startTimerCommit.current();\n            startTimerCommit.current = null;\n          }\n        });\n      }\n    } else {\n      startCommit({\n        pulsate,\n        rippleX,\n        rippleY,\n        rippleSize,\n        cb\n      });\n    }\n  }, [centerProp, startCommit, startTimer]);\n  const pulsate = React.useCallback(() => {\n    start({}, {\n      pulsate: true\n    });\n  }, [start]);\n  const stop = React.useCallback((event, cb) => {\n    startTimer.clear();\n\n    // The touch interaction occurs too quickly.\n    // We still want to show ripple effect.\n    if (event?.type === 'touchend' && startTimerCommit.current) {\n      startTimerCommit.current();\n      startTimerCommit.current = null;\n      startTimer.start(0, () => {\n        stop(event, cb);\n      });\n      return;\n    }\n    startTimerCommit.current = null;\n    setRipples(oldRipples => {\n      if (oldRipples.length > 0) {\n        return oldRipples.slice(1);\n      }\n      return oldRipples;\n    });\n    rippleCallback.current = cb;\n  }, [startTimer]);\n  React.useImperativeHandle(ref, () => ({\n    pulsate,\n    start,\n    stop\n  }), [pulsate, start, stop]);\n  return /*#__PURE__*/_jsx(TouchRippleRoot, {\n    className: clsx(touchRippleClasses.root, classes.root, className),\n    ref: container,\n    ...other,\n    children: /*#__PURE__*/_jsx(TransitionGroup, {\n      component: null,\n      exit: true,\n      children: ripples\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? TouchRipple.propTypes /* remove-proptypes */ = {\n  /**\n   * If `true`, the ripple starts at the center of the component\n   * rather than at the point of interaction.\n   */\n  center: PropTypes.bool,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string\n} : void 0;\nexport default TouchRipple;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getButtonBaseUtilityClass(slot) {\n  return generateUtilityClass('MuiButtonBase', slot);\n}\nconst buttonBaseClasses = generateUtilityClasses('MuiButtonBase', ['root', 'disabled', 'focusVisible']);\nexport default buttonBaseClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport refType from '@mui/utils/refType';\nimport elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';\nimport composeClasses from '@mui/utils/composeClasses';\nimport isFocusVisible from '@mui/utils/isFocusVisible';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport useEventCallback from \"../utils/useEventCallback.js\";\nimport useLazyRipple from \"../useLazyRipple/index.js\";\nimport TouchRipple from \"./TouchRipple.js\";\nimport buttonBaseClasses, { getButtonBaseUtilityClass } from \"./buttonBaseClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    disabled,\n    focusVisible,\n    focusVisibleClassName,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', disabled && 'disabled', focusVisible && 'focusVisible']\n  };\n  const composedClasses = composeClasses(slots, getButtonBaseUtilityClass, classes);\n  if (focusVisible && focusVisibleClassName) {\n    composedClasses.root += ` ${focusVisibleClassName}`;\n  }\n  return composedClasses;\n};\nexport const ButtonBaseRoot = styled('button', {\n  name: 'MuiButtonBase',\n  slot: 'Root'\n})({\n  display: 'inline-flex',\n  alignItems: 'center',\n  justifyContent: 'center',\n  position: 'relative',\n  boxSizing: 'border-box',\n  WebkitTapHighlightColor: 'transparent',\n  backgroundColor: 'transparent',\n  // Reset default value\n  // We disable the focus ring for mouse, touch and keyboard users.\n  outline: 0,\n  border: 0,\n  margin: 0,\n  // Remove the margin in Safari\n  borderRadius: 0,\n  padding: 0,\n  // Remove the padding in Firefox\n  cursor: 'pointer',\n  userSelect: 'none',\n  verticalAlign: 'middle',\n  MozAppearance: 'none',\n  // Reset\n  WebkitAppearance: 'none',\n  // Reset\n  textDecoration: 'none',\n  // So we take precedent over the style of a native <a /> element.\n  color: 'inherit',\n  '&::-moz-focus-inner': {\n    borderStyle: 'none' // Remove Firefox dotted outline.\n  },\n  [`&.${buttonBaseClasses.disabled}`]: {\n    pointerEvents: 'none',\n    // Disable link interactions\n    cursor: 'default'\n  },\n  '@media print': {\n    colorAdjust: 'exact'\n  }\n});\n\n/**\n * `ButtonBase` contains as few styles as possible.\n * It aims to be a simple building block for creating a button.\n * It contains a load of style reset and some focus/ripple logic.\n */\nconst ButtonBase = /*#__PURE__*/React.forwardRef(function ButtonBase(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiButtonBase'\n  });\n  const {\n    action,\n    centerRipple = false,\n    children,\n    className,\n    component = 'button',\n    disabled = false,\n    disableRipple = false,\n    disableTouchRipple = false,\n    focusRipple = false,\n    focusVisibleClassName,\n    LinkComponent = 'a',\n    onBlur,\n    onClick,\n    onContextMenu,\n    onDragLeave,\n    onFocus,\n    onFocusVisible,\n    onKeyDown,\n    onKeyUp,\n    onMouseDown,\n    onMouseLeave,\n    onMouseUp,\n    onTouchEnd,\n    onTouchMove,\n    onTouchStart,\n    tabIndex = 0,\n    TouchRippleProps,\n    touchRippleRef,\n    type,\n    ...other\n  } = props;\n  const buttonRef = React.useRef(null);\n  const ripple = useLazyRipple();\n  const handleRippleRef = useForkRef(ripple.ref, touchRippleRef);\n  const [focusVisible, setFocusVisible] = React.useState(false);\n  if (disabled && focusVisible) {\n    setFocusVisible(false);\n  }\n  React.useImperativeHandle(action, () => ({\n    focusVisible: () => {\n      setFocusVisible(true);\n      buttonRef.current.focus();\n    }\n  }), []);\n  const enableTouchRipple = ripple.shouldMount && !disableRipple && !disabled;\n  React.useEffect(() => {\n    if (focusVisible && focusRipple && !disableRipple) {\n      ripple.pulsate();\n    }\n  }, [disableRipple, focusRipple, focusVisible, ripple]);\n  const handleMouseDown = useRippleHandler(ripple, 'start', onMouseDown, disableTouchRipple);\n  const handleContextMenu = useRippleHandler(ripple, 'stop', onContextMenu, disableTouchRipple);\n  const handleDragLeave = useRippleHandler(ripple, 'stop', onDragLeave, disableTouchRipple);\n  const handleMouseUp = useRippleHandler(ripple, 'stop', onMouseUp, disableTouchRipple);\n  const handleMouseLeave = useRippleHandler(ripple, 'stop', event => {\n    if (focusVisible) {\n      event.preventDefault();\n    }\n    if (onMouseLeave) {\n      onMouseLeave(event);\n    }\n  }, disableTouchRipple);\n  const handleTouchStart = useRippleHandler(ripple, 'start', onTouchStart, disableTouchRipple);\n  const handleTouchEnd = useRippleHandler(ripple, 'stop', onTouchEnd, disableTouchRipple);\n  const handleTouchMove = useRippleHandler(ripple, 'stop', onTouchMove, disableTouchRipple);\n  const handleBlur = useRippleHandler(ripple, 'stop', event => {\n    if (!isFocusVisible(event.target)) {\n      setFocusVisible(false);\n    }\n    if (onBlur) {\n      onBlur(event);\n    }\n  }, false);\n  const handleFocus = useEventCallback(event => {\n    // Fix for https://github.com/facebook/react/issues/7769\n    if (!buttonRef.current) {\n      buttonRef.current = event.currentTarget;\n    }\n    if (isFocusVisible(event.target)) {\n      setFocusVisible(true);\n      if (onFocusVisible) {\n        onFocusVisible(event);\n      }\n    }\n    if (onFocus) {\n      onFocus(event);\n    }\n  });\n  const isNonNativeButton = () => {\n    const button = buttonRef.current;\n    return component && component !== 'button' && !(button.tagName === 'A' && button.href);\n  };\n  const handleKeyDown = useEventCallback(event => {\n    // Check if key is already down to avoid repeats being counted as multiple activations\n    if (focusRipple && !event.repeat && focusVisible && event.key === ' ') {\n      ripple.stop(event, () => {\n        ripple.start(event);\n      });\n    }\n    if (event.target === event.currentTarget && isNonNativeButton() && event.key === ' ') {\n      event.preventDefault();\n    }\n    if (onKeyDown) {\n      onKeyDown(event);\n    }\n\n    // Keyboard accessibility for non interactive elements\n    if (event.target === event.currentTarget && isNonNativeButton() && event.key === 'Enter' && !disabled) {\n      event.preventDefault();\n      if (onClick) {\n        onClick(event);\n      }\n    }\n  });\n  const handleKeyUp = useEventCallback(event => {\n    // calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed\n    // https://codesandbox.io/p/sandbox/button-keyup-preventdefault-dn7f0\n    if (focusRipple && event.key === ' ' && focusVisible && !event.defaultPrevented) {\n      ripple.stop(event, () => {\n        ripple.pulsate(event);\n      });\n    }\n    if (onKeyUp) {\n      onKeyUp(event);\n    }\n\n    // Keyboard accessibility for non interactive elements\n    if (onClick && event.target === event.currentTarget && isNonNativeButton() && event.key === ' ' && !event.defaultPrevented) {\n      onClick(event);\n    }\n  });\n  let ComponentProp = component;\n  if (ComponentProp === 'button' && (other.href || other.to)) {\n    ComponentProp = LinkComponent;\n  }\n  const buttonProps = {};\n  if (ComponentProp === 'button') {\n    buttonProps.type = type === undefined ? 'button' : type;\n    buttonProps.disabled = disabled;\n  } else {\n    if (!other.href && !other.to) {\n      buttonProps.role = 'button';\n    }\n    if (disabled) {\n      buttonProps['aria-disabled'] = disabled;\n    }\n  }\n  const handleRef = useForkRef(ref, buttonRef);\n  const ownerState = {\n    ...props,\n    centerRipple,\n    component,\n    disabled,\n    disableRipple,\n    disableTouchRipple,\n    focusRipple,\n    tabIndex,\n    focusVisible\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsxs(ButtonBaseRoot, {\n    as: ComponentProp,\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    onBlur: handleBlur,\n    onClick: onClick,\n    onContextMenu: handleContextMenu,\n    onFocus: handleFocus,\n    onKeyDown: handleKeyDown,\n    onKeyUp: handleKeyUp,\n    onMouseDown: handleMouseDown,\n    onMouseLeave: handleMouseLeave,\n    onMouseUp: handleMouseUp,\n    onDragLeave: handleDragLeave,\n    onTouchEnd: handleTouchEnd,\n    onTouchMove: handleTouchMove,\n    onTouchStart: handleTouchStart,\n    ref: handleRef,\n    tabIndex: disabled ? -1 : tabIndex,\n    type: type,\n    ...buttonProps,\n    ...other,\n    children: [children, enableTouchRipple ? /*#__PURE__*/_jsx(TouchRipple, {\n      ref: handleRippleRef,\n      center: centerRipple,\n      ...TouchRippleProps\n    }) : null]\n  });\n});\nfunction useRippleHandler(ripple, rippleAction, eventCallback, skipRippleAction = false) {\n  return useEventCallback(event => {\n    if (eventCallback) {\n      eventCallback(event);\n    }\n    if (!skipRippleAction) {\n      ripple[rippleAction](event);\n    }\n    return true;\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? ButtonBase.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * A ref for imperative actions.\n   * It currently only supports `focusVisible()` action.\n   */\n  action: refType,\n  /**\n   * If `true`, the ripples are centered.\n   * They won't start at the cursor interaction position.\n   * @default false\n   */\n  centerRipple: PropTypes.bool,\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: elementTypeAcceptingRef,\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the ripple effect is disabled.\n   *\n   * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n   * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.\n   * @default false\n   */\n  disableRipple: PropTypes.bool,\n  /**\n   * If `true`, the touch ripple effect is disabled.\n   * @default false\n   */\n  disableTouchRipple: PropTypes.bool,\n  /**\n   * If `true`, the base button will have a keyboard focus ripple.\n   * @default false\n   */\n  focusRipple: PropTypes.bool,\n  /**\n   * This prop can help identify which element has keyboard focus.\n   * The class name will be applied when the element gains the focus through keyboard interaction.\n   * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).\n   * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/HEAD/explainer.md).\n   * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components\n   * if needed.\n   */\n  focusVisibleClassName: PropTypes.string,\n  /**\n   * @ignore\n   */\n  href: PropTypes /* @typescript-to-proptypes-ignore */.any,\n  /**\n   * The component used to render a link when the `href` prop is provided.\n   * @default 'a'\n   */\n  LinkComponent: PropTypes.elementType,\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onContextMenu: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onDragLeave: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n  /**\n   * Callback fired when the component is focused with a keyboard.\n   * We trigger a `onFocus` callback too.\n   */\n  onFocusVisible: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onKeyUp: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onMouseDown: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onMouseLeave: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onMouseUp: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onTouchEnd: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onTouchMove: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onTouchStart: PropTypes.func,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * @default 0\n   */\n  tabIndex: PropTypes.number,\n  /**\n   * Props applied to the `TouchRipple` element.\n   */\n  TouchRippleProps: PropTypes.object,\n  /**\n   * A ref that points to the `TouchRipple` element.\n   */\n  touchRippleRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n    current: PropTypes.shape({\n      pulsate: PropTypes.func.isRequired,\n      start: PropTypes.func.isRequired,\n      stop: PropTypes.func.isRequired\n    })\n  })]),\n  /**\n   * @ignore\n   */\n  type: PropTypes.oneOfType([PropTypes.oneOf(['button', 'reset', 'submit']), PropTypes.string])\n} : void 0;\nexport default ButtonBase;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getAccordionSummaryUtilityClass(slot) {\n  return generateUtilityClass('MuiAccordionSummary', slot);\n}\nconst accordionSummaryClasses = generateUtilityClasses('MuiAccordionSummary', ['root', 'expanded', 'focusVisible', 'disabled', 'gutters', 'contentGutters', 'content', 'expandIconWrapper']);\nexport default accordionSummaryClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport ButtonBase from \"../ButtonBase/index.js\";\nimport AccordionContext from \"../Accordion/AccordionContext.js\";\nimport accordionSummaryClasses, { getAccordionSummaryUtilityClass } from \"./accordionSummaryClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    expanded,\n    disabled,\n    disableGutters\n  } = ownerState;\n  const slots = {\n    root: ['root', expanded && 'expanded', disabled && 'disabled', !disableGutters && 'gutters'],\n    focusVisible: ['focusVisible'],\n    content: ['content', expanded && 'expanded', !disableGutters && 'contentGutters'],\n    expandIconWrapper: ['expandIconWrapper', expanded && 'expanded']\n  };\n  return composeClasses(slots, getAccordionSummaryUtilityClass, classes);\n};\nconst AccordionSummaryRoot = styled(ButtonBase, {\n  name: 'MuiAccordionSummary',\n  slot: 'Root'\n})(memoTheme(({\n  theme\n}) => {\n  const transition = {\n    duration: theme.transitions.duration.shortest\n  };\n  return {\n    display: 'flex',\n    width: '100%',\n    minHeight: 48,\n    padding: theme.spacing(0, 2),\n    transition: theme.transitions.create(['min-height', 'background-color'], transition),\n    [`&.${accordionSummaryClasses.focusVisible}`]: {\n      backgroundColor: (theme.vars || theme).palette.action.focus\n    },\n    [`&.${accordionSummaryClasses.disabled}`]: {\n      opacity: (theme.vars || theme).palette.action.disabledOpacity\n    },\n    [`&:hover:not(.${accordionSummaryClasses.disabled})`]: {\n      cursor: 'pointer'\n    },\n    variants: [{\n      props: props => !props.disableGutters,\n      style: {\n        [`&.${accordionSummaryClasses.expanded}`]: {\n          minHeight: 64\n        }\n      }\n    }]\n  };\n}));\nconst AccordionSummaryContent = styled('span', {\n  name: 'MuiAccordionSummary',\n  slot: 'Content'\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'flex',\n  textAlign: 'start',\n  flexGrow: 1,\n  margin: '12px 0',\n  variants: [{\n    props: props => !props.disableGutters,\n    style: {\n      transition: theme.transitions.create(['margin'], {\n        duration: theme.transitions.duration.shortest\n      }),\n      [`&.${accordionSummaryClasses.expanded}`]: {\n        margin: '20px 0'\n      }\n    }\n  }]\n})));\nconst AccordionSummaryExpandIconWrapper = styled('span', {\n  name: 'MuiAccordionSummary',\n  slot: 'ExpandIconWrapper'\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'flex',\n  color: (theme.vars || theme).palette.action.active,\n  transform: 'rotate(0deg)',\n  transition: theme.transitions.create('transform', {\n    duration: theme.transitions.duration.shortest\n  }),\n  [`&.${accordionSummaryClasses.expanded}`]: {\n    transform: 'rotate(180deg)'\n  }\n})));\nconst AccordionSummary = /*#__PURE__*/React.forwardRef(function AccordionSummary(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiAccordionSummary'\n  });\n  const {\n    children,\n    className,\n    expandIcon,\n    focusVisibleClassName,\n    onClick,\n    slots,\n    slotProps,\n    ...other\n  } = props;\n  const {\n    disabled = false,\n    disableGutters,\n    expanded,\n    toggle\n  } = React.useContext(AccordionContext);\n  const handleChange = event => {\n    if (toggle) {\n      toggle(event);\n    }\n    if (onClick) {\n      onClick(event);\n    }\n  };\n  const ownerState = {\n    ...props,\n    expanded,\n    disabled,\n    disableGutters\n  };\n  const classes = useUtilityClasses(ownerState);\n  const externalForwardedProps = {\n    slots,\n    slotProps\n  };\n  const [RootSlot, rootSlotProps] = useSlot('root', {\n    ref,\n    shouldForwardComponentProp: true,\n    className: clsx(classes.root, className),\n    elementType: AccordionSummaryRoot,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      ...other\n    },\n    ownerState,\n    additionalProps: {\n      focusRipple: false,\n      disableRipple: true,\n      disabled,\n      'aria-expanded': expanded,\n      focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName)\n    },\n    getSlotProps: handlers => ({\n      ...handlers,\n      onClick: event => {\n        handlers.onClick?.(event);\n        handleChange(event);\n      }\n    })\n  });\n  const [ContentSlot, contentSlotProps] = useSlot('content', {\n    className: classes.content,\n    elementType: AccordionSummaryContent,\n    externalForwardedProps,\n    ownerState\n  });\n  const [ExpandIconWrapperSlot, expandIconWrapperSlotProps] = useSlot('expandIconWrapper', {\n    className: classes.expandIconWrapper,\n    elementType: AccordionSummaryExpandIconWrapper,\n    externalForwardedProps,\n    ownerState\n  });\n  return /*#__PURE__*/_jsxs(RootSlot, {\n    ...rootSlotProps,\n    children: [/*#__PURE__*/_jsx(ContentSlot, {\n      ...contentSlotProps,\n      children: children\n    }), expandIcon && /*#__PURE__*/_jsx(ExpandIconWrapperSlot, {\n      ...expandIconWrapperSlotProps,\n      children: expandIcon\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? AccordionSummary.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The icon to display as the expand indicator.\n   */\n  expandIcon: PropTypes.node,\n  /**\n   * This prop can help identify which element has keyboard focus.\n   * The class name will be applied when the element gains the focus through keyboard interaction.\n   * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).\n   * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/HEAD/explainer.md).\n   * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components\n   * if needed.\n   */\n  focusVisibleClassName: PropTypes.string,\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    content: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    expandIconWrapper: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    content: PropTypes.elementType,\n    expandIconWrapper: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default AccordionSummary;","/**\n * Type guard to check if the object has a \"main\" property of type string.\n *\n * @param obj - the object to check\n * @returns boolean\n */\nfunction hasCorrectMainProperty(obj) {\n  return typeof obj.main === 'string';\n}\n/**\n * Checks if the object conforms to the SimplePaletteColorOptions type.\n * The minimum requirement is that the object has a \"main\" property of type string, this is always checked.\n * Optionally, you can pass additional properties to check.\n *\n * @param obj - The object to check\n * @param additionalPropertiesToCheck - Array containing \"light\", \"dark\", and/or \"contrastText\"\n * @returns boolean\n */\nfunction checkSimplePaletteColorValues(obj, additionalPropertiesToCheck = []) {\n  if (!hasCorrectMainProperty(obj)) {\n    return false;\n  }\n  for (const value of additionalPropertiesToCheck) {\n    if (!obj.hasOwnProperty(value) || typeof obj[value] !== 'string') {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Creates a filter function used to filter simple palette color options.\n * The minimum requirement is that the object has a \"main\" property of type string, this is always checked.\n * Optionally, you can pass additional properties to check.\n *\n * @param additionalPropertiesToCheck - Array containing \"light\", \"dark\", and/or \"contrastText\"\n * @returns ([, value]: [any, PaletteColorOptions]) => boolean\n */\nexport default function createSimplePaletteValueFilter(additionalPropertiesToCheck = []) {\n  return ([, value]) => value && checkSimplePaletteColorValues(value, additionalPropertiesToCheck);\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getCircularProgressUtilityClass(slot) {\n  return generateUtilityClass('MuiCircularProgress', slot);\n}\nconst circularProgressClasses = generateUtilityClasses('MuiCircularProgress', ['root', 'determinate', 'indeterminate', 'colorPrimary', 'colorSecondary', 'svg', 'track', 'circle', 'circleDeterminate', 'circleIndeterminate', 'circleDisableShrink']);\nexport default circularProgressClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport chainPropTypes from '@mui/utils/chainPropTypes';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { keyframes, css, styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { getCircularProgressUtilityClass } from \"./circularProgressClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst SIZE = 44;\nconst circularRotateKeyframe = keyframes`\n  0% {\n    transform: rotate(0deg);\n  }\n\n  100% {\n    transform: rotate(360deg);\n  }\n`;\nconst circularDashKeyframe = keyframes`\n  0% {\n    stroke-dasharray: 1px, 200px;\n    stroke-dashoffset: 0;\n  }\n\n  50% {\n    stroke-dasharray: 100px, 200px;\n    stroke-dashoffset: -15px;\n  }\n\n  100% {\n    stroke-dasharray: 1px, 200px;\n    stroke-dashoffset: -126px;\n  }\n`;\n\n// This implementation is for supporting both Styled-components v4+ and Pigment CSS.\n// A global animation has to be created here for Styled-components v4+ (https://github.com/styled-components/styled-components/blob/main/packages/styled-components/src/utils/errors.md#12).\n// which can be done by checking typeof indeterminate1Keyframe !== 'string' (at runtime, Pigment CSS transform keyframes`` to a string).\nconst rotateAnimation = typeof circularRotateKeyframe !== 'string' ? css`\n        animation: ${circularRotateKeyframe} 1.4s linear infinite;\n      ` : null;\nconst dashAnimation = typeof circularDashKeyframe !== 'string' ? css`\n        animation: ${circularDashKeyframe} 1.4s ease-in-out infinite;\n      ` : null;\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    variant,\n    color,\n    disableShrink\n  } = ownerState;\n  const slots = {\n    root: ['root', variant, `color${capitalize(color)}`],\n    svg: ['svg'],\n    track: ['track'],\n    circle: ['circle', `circle${capitalize(variant)}`, disableShrink && 'circleDisableShrink']\n  };\n  return composeClasses(slots, getCircularProgressUtilityClass, classes);\n};\nconst CircularProgressRoot = styled('span', {\n  name: 'MuiCircularProgress',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[ownerState.variant], styles[`color${capitalize(ownerState.color)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'inline-block',\n  variants: [{\n    props: {\n      variant: 'determinate'\n    },\n    style: {\n      transition: theme.transitions.create('transform')\n    }\n  }, {\n    props: {\n      variant: 'indeterminate'\n    },\n    style: rotateAnimation || {\n      animation: `${circularRotateKeyframe} 1.4s linear infinite`\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      color: (theme.vars || theme).palette[color].main\n    }\n  }))]\n})));\nconst CircularProgressSVG = styled('svg', {\n  name: 'MuiCircularProgress',\n  slot: 'Svg'\n})({\n  display: 'block' // Keeps the progress centered\n});\nconst CircularProgressCircle = styled('circle', {\n  name: 'MuiCircularProgress',\n  slot: 'Circle',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.circle, styles[`circle${capitalize(ownerState.variant)}`], ownerState.disableShrink && styles.circleDisableShrink];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  stroke: 'currentColor',\n  variants: [{\n    props: {\n      variant: 'determinate'\n    },\n    style: {\n      transition: theme.transitions.create('stroke-dashoffset')\n    }\n  }, {\n    props: {\n      variant: 'indeterminate'\n    },\n    style: {\n      // Some default value that looks fine waiting for the animation to kicks in.\n      strokeDasharray: '80px, 200px',\n      strokeDashoffset: 0 // Add the unit to fix a Edge 16 and below bug.\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.variant === 'indeterminate' && !ownerState.disableShrink,\n    style: dashAnimation || {\n      // At runtime for Pigment CSS, `bufferAnimation` will be null and the generated keyframe will be used.\n      animation: `${circularDashKeyframe} 1.4s ease-in-out infinite`\n    }\n  }]\n})));\nconst CircularProgressTrack = styled('circle', {\n  name: 'MuiCircularProgress',\n  slot: 'Track'\n})(memoTheme(({\n  theme\n}) => ({\n  stroke: 'currentColor',\n  opacity: (theme.vars || theme).palette.action.activatedOpacity\n})));\n\n/**\n * ## ARIA\n *\n * If the progress bar is describing the loading progress of a particular region of a page,\n * you should use `aria-describedby` to point to the progress bar, and set the `aria-busy`\n * attribute to `true` on that region until it has finished loading.\n */\nconst CircularProgress = /*#__PURE__*/React.forwardRef(function CircularProgress(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiCircularProgress'\n  });\n  const {\n    className,\n    color = 'primary',\n    disableShrink = false,\n    enableTrackSlot = false,\n    size = 40,\n    style,\n    thickness = 3.6,\n    value = 0,\n    variant = 'indeterminate',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    color,\n    disableShrink,\n    size,\n    thickness,\n    value,\n    variant,\n    enableTrackSlot\n  };\n  const classes = useUtilityClasses(ownerState);\n  const circleStyle = {};\n  const rootStyle = {};\n  const rootProps = {};\n  if (variant === 'determinate') {\n    const circumference = 2 * Math.PI * ((SIZE - thickness) / 2);\n    circleStyle.strokeDasharray = circumference.toFixed(3);\n    rootProps['aria-valuenow'] = Math.round(value);\n    circleStyle.strokeDashoffset = `${((100 - value) / 100 * circumference).toFixed(3)}px`;\n    rootStyle.transform = 'rotate(-90deg)';\n  }\n  return /*#__PURE__*/_jsx(CircularProgressRoot, {\n    className: clsx(classes.root, className),\n    style: {\n      width: size,\n      height: size,\n      ...rootStyle,\n      ...style\n    },\n    ownerState: ownerState,\n    ref: ref,\n    role: \"progressbar\",\n    ...rootProps,\n    ...other,\n    children: /*#__PURE__*/_jsxs(CircularProgressSVG, {\n      className: classes.svg,\n      ownerState: ownerState,\n      viewBox: `${SIZE / 2} ${SIZE / 2} ${SIZE} ${SIZE}`,\n      children: [enableTrackSlot ? /*#__PURE__*/_jsx(CircularProgressTrack, {\n        className: classes.track,\n        ownerState: ownerState,\n        cx: SIZE,\n        cy: SIZE,\n        r: (SIZE - thickness) / 2,\n        fill: \"none\",\n        strokeWidth: thickness,\n        \"aria-hidden\": \"true\"\n      }) : null, /*#__PURE__*/_jsx(CircularProgressCircle, {\n        className: classes.circle,\n        style: circleStyle,\n        ownerState: ownerState,\n        cx: SIZE,\n        cy: SIZE,\n        r: (SIZE - thickness) / 2,\n        fill: \"none\",\n        strokeWidth: thickness\n      })]\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? CircularProgress.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * If `true`, the shrink animation is disabled.\n   * This only works if variant is `indeterminate`.\n   * @default false\n   */\n  disableShrink: chainPropTypes(PropTypes.bool, props => {\n    if (props.disableShrink && props.variant && props.variant !== 'indeterminate') {\n      return new Error('MUI: You have provided the `disableShrink` prop ' + 'with a variant other than `indeterminate`. This will have no effect.');\n    }\n    return null;\n  }),\n  /**\n   * If `true`, a track circle slot is mounted to show a subtle background for the progress.\n   * The `size` and `thickness` apply to the track slot to be consistent with the progress circle.\n   * @default false\n   */\n  enableTrackSlot: PropTypes.bool,\n  /**\n   * The size of the component.\n   * If using a number, the pixel unit is assumed.\n   * If using a string, you need to provide the CSS unit, for example '3rem'.\n   * @default 40\n   */\n  size: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The thickness of the circle.\n   * @default 3.6\n   */\n  thickness: PropTypes.number,\n  /**\n   * The value of the progress indicator for the determinate variant.\n   * Value between 0 and 100.\n   * @default 0\n   */\n  value: PropTypes.number,\n  /**\n   * The variant to use.\n   * Use indeterminate when there is no progress value.\n   * @default 'indeterminate'\n   */\n  variant: PropTypes.oneOf(['determinate', 'indeterminate'])\n} : void 0;\nexport default CircularProgress;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getIconButtonUtilityClass(slot) {\n  return generateUtilityClass('MuiIconButton', slot);\n}\nconst iconButtonClasses = generateUtilityClasses('MuiIconButton', ['root', 'disabled', 'colorInherit', 'colorPrimary', 'colorSecondary', 'colorError', 'colorInfo', 'colorSuccess', 'colorWarning', 'edgeStart', 'edgeEnd', 'sizeSmall', 'sizeMedium', 'sizeLarge', 'loading', 'loadingIndicator', 'loadingWrapper']);\nexport default iconButtonClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport chainPropTypes from '@mui/utils/chainPropTypes';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { unstable_useId as useId } from \"../utils/index.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport ButtonBase from \"../ButtonBase/index.js\";\nimport CircularProgress from \"../CircularProgress/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport iconButtonClasses, { getIconButtonUtilityClass } from \"./iconButtonClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disabled,\n    color,\n    edge,\n    size,\n    loading\n  } = ownerState;\n  const slots = {\n    root: ['root', loading && 'loading', disabled && 'disabled', color !== 'default' && `color${capitalize(color)}`, edge && `edge${capitalize(edge)}`, `size${capitalize(size)}`],\n    loadingIndicator: ['loadingIndicator'],\n    loadingWrapper: ['loadingWrapper']\n  };\n  return composeClasses(slots, getIconButtonUtilityClass, classes);\n};\nconst IconButtonRoot = styled(ButtonBase, {\n  name: 'MuiIconButton',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.loading && styles.loading, ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`], ownerState.edge && styles[`edge${capitalize(ownerState.edge)}`], styles[`size${capitalize(ownerState.size)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  textAlign: 'center',\n  flex: '0 0 auto',\n  fontSize: theme.typography.pxToRem(24),\n  padding: 8,\n  borderRadius: '50%',\n  color: (theme.vars || theme).palette.action.active,\n  transition: theme.transitions.create('background-color', {\n    duration: theme.transitions.duration.shortest\n  }),\n  variants: [{\n    props: props => !props.disableRipple,\n    style: {\n      '--IconButton-hoverBg': theme.alpha((theme.vars || theme).palette.action.active, (theme.vars || theme).palette.action.hoverOpacity),\n      '&:hover': {\n        backgroundColor: 'var(--IconButton-hoverBg)',\n        // Reset on touch devices, it doesn't add specificity\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    }\n  }, {\n    props: {\n      edge: 'start'\n    },\n    style: {\n      marginLeft: -12\n    }\n  }, {\n    props: {\n      edge: 'start',\n      size: 'small'\n    },\n    style: {\n      marginLeft: -3\n    }\n  }, {\n    props: {\n      edge: 'end'\n    },\n    style: {\n      marginRight: -12\n    }\n  }, {\n    props: {\n      edge: 'end',\n      size: 'small'\n    },\n    style: {\n      marginRight: -3\n    }\n  }]\n})), memoTheme(({\n  theme\n}) => ({\n  variants: [{\n    props: {\n      color: 'inherit'\n    },\n    style: {\n      color: 'inherit'\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()) // check all the used fields in the style below\n  .map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      color: (theme.vars || theme).palette[color].main\n    }\n  })), ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()) // check all the used fields in the style below\n  .map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      '--IconButton-hoverBg': theme.alpha((theme.vars || theme).palette[color].main, (theme.vars || theme).palette.action.hoverOpacity)\n    }\n  })), {\n    props: {\n      size: 'small'\n    },\n    style: {\n      padding: 5,\n      fontSize: theme.typography.pxToRem(18)\n    }\n  }, {\n    props: {\n      size: 'large'\n    },\n    style: {\n      padding: 12,\n      fontSize: theme.typography.pxToRem(28)\n    }\n  }],\n  [`&.${iconButtonClasses.disabled}`]: {\n    backgroundColor: 'transparent',\n    color: (theme.vars || theme).palette.action.disabled\n  },\n  [`&.${iconButtonClasses.loading}`]: {\n    color: 'transparent'\n  }\n})));\nconst IconButtonLoadingIndicator = styled('span', {\n  name: 'MuiIconButton',\n  slot: 'LoadingIndicator'\n})(({\n  theme\n}) => ({\n  display: 'none',\n  position: 'absolute',\n  visibility: 'visible',\n  top: '50%',\n  left: '50%',\n  transform: 'translate(-50%, -50%)',\n  color: (theme.vars || theme).palette.action.disabled,\n  variants: [{\n    props: {\n      loading: true\n    },\n    style: {\n      display: 'flex'\n    }\n  }]\n}));\n\n/**\n * Refer to the [Icons](/material-ui/icons/) section of the documentation\n * regarding the available icon options.\n */\nconst IconButton = /*#__PURE__*/React.forwardRef(function IconButton(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiIconButton'\n  });\n  const {\n    edge = false,\n    children,\n    className,\n    color = 'default',\n    disabled = false,\n    disableFocusRipple = false,\n    size = 'medium',\n    id: idProp,\n    loading = null,\n    loadingIndicator: loadingIndicatorProp,\n    ...other\n  } = props;\n  const loadingId = useId(idProp);\n  const loadingIndicator = loadingIndicatorProp ?? /*#__PURE__*/_jsx(CircularProgress, {\n    \"aria-labelledby\": loadingId,\n    color: \"inherit\",\n    size: 16\n  });\n  const ownerState = {\n    ...props,\n    edge,\n    color,\n    disabled,\n    disableFocusRipple,\n    loading,\n    loadingIndicator,\n    size\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsxs(IconButtonRoot, {\n    id: loading ? loadingId : idProp,\n    className: clsx(classes.root, className),\n    centerRipple: true,\n    focusRipple: !disableFocusRipple,\n    disabled: disabled || loading,\n    ref: ref,\n    ...other,\n    ownerState: ownerState,\n    children: [typeof loading === 'boolean' &&\n    /*#__PURE__*/\n    // use plain HTML span to minimize the runtime overhead\n    _jsx(\"span\", {\n      className: classes.loadingWrapper,\n      style: {\n        display: 'contents'\n      },\n      children: /*#__PURE__*/_jsx(IconButtonLoadingIndicator, {\n        className: classes.loadingIndicator,\n        ownerState: ownerState,\n        children: loading && loadingIndicator\n      })\n    }), children]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? IconButton.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The icon to display.\n   */\n  children: chainPropTypes(PropTypes.node, props => {\n    const found = React.Children.toArray(props.children).some(child => /*#__PURE__*/React.isValidElement(child) && child.props.onClick);\n    if (found) {\n      return new Error(['MUI: You are providing an onClick event listener to a child of a button element.', 'Prefer applying it to the IconButton directly.', 'This guarantees that the whole <button> will be responsive to click events.'].join('\\n'));\n    }\n    return null;\n  }),\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'default'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the  keyboard focus ripple is disabled.\n   * @default false\n   */\n  disableFocusRipple: PropTypes.bool,\n  /**\n   * If `true`, the ripple effect is disabled.\n   *\n   * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n   * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.\n   * @default false\n   */\n  disableRipple: PropTypes.bool,\n  /**\n   * If given, uses a negative margin to counteract the padding on one\n   * side (this is often helpful for aligning the left or right\n   * side of the icon with content above or below, without ruining the border\n   * size and shape).\n   * @default false\n   */\n  edge: PropTypes.oneOf(['end', 'start', false]),\n  /**\n   * @ignore\n   */\n  id: PropTypes.string,\n  /**\n   * If `true`, the loading indicator is visible and the button is disabled.\n   * If `true | false`, the loading wrapper is always rendered before the children to prevent [Google Translation Crash](https://github.com/mui/material-ui/issues/27853).\n   * @default null\n   */\n  loading: PropTypes.bool,\n  /**\n   * Element placed before the children if the button is in loading state.\n   * The node should contain an element with `role=\"progressbar\"` with an accessible name.\n   * By default, it renders a `CircularProgress` that is labeled by the button itself.\n   * @default <CircularProgress color=\"inherit\" size={16} />\n   */\n  loadingIndicator: PropTypes.node,\n  /**\n   * The size of the component.\n   * `small` is equivalent to the dense button styling.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default IconButton;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getTypographyUtilityClass(slot) {\n  return generateUtilityClass('MuiTypography', slot);\n}\nconst typographyClasses = generateUtilityClasses('MuiTypography', ['root', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'subtitle1', 'subtitle2', 'body1', 'body2', 'inherit', 'button', 'caption', 'overline', 'alignLeft', 'alignRight', 'alignCenter', 'alignJustify', 'noWrap', 'gutterBottom', 'paragraph']);\nexport default typographyClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled, internal_createExtendSxProp } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { getTypographyUtilityClass } from \"./typographyClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst v6Colors = {\n  primary: true,\n  secondary: true,\n  error: true,\n  info: true,\n  success: true,\n  warning: true,\n  textPrimary: true,\n  textSecondary: true,\n  textDisabled: true\n};\nconst extendSxProp = internal_createExtendSxProp();\nconst useUtilityClasses = ownerState => {\n  const {\n    align,\n    gutterBottom,\n    noWrap,\n    paragraph,\n    variant,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', variant, ownerState.align !== 'inherit' && `align${capitalize(align)}`, gutterBottom && 'gutterBottom', noWrap && 'noWrap', paragraph && 'paragraph']\n  };\n  return composeClasses(slots, getTypographyUtilityClass, classes);\n};\nexport const TypographyRoot = styled('span', {\n  name: 'MuiTypography',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.variant && styles[ownerState.variant], ownerState.align !== 'inherit' && styles[`align${capitalize(ownerState.align)}`], ownerState.noWrap && styles.noWrap, ownerState.gutterBottom && styles.gutterBottom, ownerState.paragraph && styles.paragraph];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  margin: 0,\n  variants: [{\n    props: {\n      variant: 'inherit'\n    },\n    style: {\n      // Some elements, like <button> on Chrome have default font that doesn't inherit, reset this.\n      font: 'inherit',\n      lineHeight: 'inherit',\n      letterSpacing: 'inherit'\n    }\n  }, ...Object.entries(theme.typography).filter(([variant, value]) => variant !== 'inherit' && value && typeof value === 'object').map(([variant, value]) => ({\n    props: {\n      variant\n    },\n    style: value\n  })), ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      color: (theme.vars || theme).palette[color].main\n    }\n  })), ...Object.entries(theme.palette?.text || {}).filter(([, value]) => typeof value === 'string').map(([color]) => ({\n    props: {\n      color: `text${capitalize(color)}`\n    },\n    style: {\n      color: (theme.vars || theme).palette.text[color]\n    }\n  })), {\n    props: ({\n      ownerState\n    }) => ownerState.align !== 'inherit',\n    style: {\n      textAlign: 'var(--Typography-textAlign)'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.noWrap,\n    style: {\n      overflow: 'hidden',\n      textOverflow: 'ellipsis',\n      whiteSpace: 'nowrap'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.gutterBottom,\n    style: {\n      marginBottom: '0.35em'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.paragraph,\n    style: {\n      marginBottom: 16\n    }\n  }]\n})));\nconst defaultVariantMapping = {\n  h1: 'h1',\n  h2: 'h2',\n  h3: 'h3',\n  h4: 'h4',\n  h5: 'h5',\n  h6: 'h6',\n  subtitle1: 'h6',\n  subtitle2: 'h6',\n  body1: 'p',\n  body2: 'p',\n  inherit: 'p'\n};\nconst Typography = /*#__PURE__*/React.forwardRef(function Typography(inProps, ref) {\n  const {\n    color,\n    ...themeProps\n  } = useDefaultProps({\n    props: inProps,\n    name: 'MuiTypography'\n  });\n  const isSxColor = !v6Colors[color];\n  // TODO: Remove `extendSxProp` in v7\n  const props = extendSxProp({\n    ...themeProps,\n    ...(isSxColor && {\n      color\n    })\n  });\n  const {\n    align = 'inherit',\n    className,\n    component,\n    gutterBottom = false,\n    noWrap = false,\n    paragraph = false,\n    variant = 'body1',\n    variantMapping = defaultVariantMapping,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    align,\n    color,\n    className,\n    component,\n    gutterBottom,\n    noWrap,\n    paragraph,\n    variant,\n    variantMapping\n  };\n  const Component = component || (paragraph ? 'p' : variantMapping[variant] || defaultVariantMapping[variant]) || 'span';\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(TypographyRoot, {\n    as: Component,\n    ref: ref,\n    className: clsx(classes.root, className),\n    ...other,\n    ownerState: ownerState,\n    style: {\n      ...(align !== 'inherit' && {\n        '--Typography-textAlign': align\n      }),\n      ...other.style\n    }\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Typography.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Set the text-align on the component.\n   * @default 'inherit'\n   */\n  align: PropTypes.oneOf(['center', 'inherit', 'justify', 'left', 'right']),\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'success', 'error', 'info', 'warning', 'textPrimary', 'textSecondary', 'textDisabled']), PropTypes.string]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, the text will have a bottom margin.\n   * @default false\n   */\n  gutterBottom: PropTypes.bool,\n  /**\n   * If `true`, the text will not wrap, but instead will truncate with a text overflow ellipsis.\n   *\n   * Note that text overflow can only happen with block or inline-block level elements\n   * (the element needs to have a width in order to overflow).\n   * @default false\n   */\n  noWrap: PropTypes.bool,\n  /**\n   * If `true`, the element will be a paragraph element.\n   * @default false\n   * @deprecated Use the `component` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  paragraph: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Applies the theme typography styles.\n   * @default 'body1'\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['body1', 'body2', 'button', 'caption', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'inherit', 'overline', 'subtitle1', 'subtitle2']), PropTypes.string]),\n  /**\n   * The component maps the variant prop to a range of different HTML element types.\n   * For instance, subtitle1 to `<h6>`.\n   * If you wish to change that mapping, you can provide your own.\n   * Alternatively, you can use the `component` prop.\n   * @default {\n   *   h1: 'h1',\n   *   h2: 'h2',\n   *   h3: 'h3',\n   *   h4: 'h4',\n   *   h5: 'h5',\n   *   h6: 'h6',\n   *   subtitle1: 'h6',\n   *   subtitle2: 'h6',\n   *   body1: 'p',\n   *   body2: 'p',\n   *   inherit: 'p',\n   * }\n   */\n  variantMapping: PropTypes /* @typescript-to-proptypes-ignore */.object\n} : void 0;\nexport default Typography;","'use client';\n\nimport * as React from 'react';\nfunction usePreviousProps(value) {\n  const ref = React.useRef({});\n  React.useEffect(() => {\n    ref.current = value;\n  });\n  return ref.current;\n}\nexport default usePreviousProps;","export default function HTMLElementType(props, propName, componentName, location, propFullName) {\n  if (process.env.NODE_ENV === 'production') {\n    return null;\n  }\n  const propValue = props[propName];\n  const safePropName = propFullName || propName;\n  if (propValue == null) {\n    return null;\n  }\n  if (propValue && propValue.nodeType !== 1) {\n    return new Error(`Invalid ${location} \\`${safePropName}\\` supplied to \\`${componentName}\\`. ` + `Expected an HTMLElement.`);\n  }\n  return null;\n}","'use client';\n\nimport useForkRef from \"../useForkRef/index.js\";\nimport appendOwnerState from \"../appendOwnerState/index.js\";\nimport mergeSlotProps from \"../mergeSlotProps/index.js\";\nimport resolveComponentProps from \"../resolveComponentProps/index.js\";\n/**\n * @ignore - do not document.\n * Builds the props to be passed into the slot of an unstyled component.\n * It merges the internal props of the component with the ones supplied by the user, allowing to customize the behavior.\n * If the slot component is not a host component, it also merges in the `ownerState`.\n *\n * @param parameters.getSlotProps - A function that returns the props to be passed to the slot component.\n */\nfunction useSlotProps(parameters) {\n  const {\n    elementType,\n    externalSlotProps,\n    ownerState,\n    skipResolvingSlotProps = false,\n    ...other\n  } = parameters;\n  const resolvedComponentsProps = skipResolvingSlotProps ? {} : resolveComponentProps(externalSlotProps, ownerState);\n  const {\n    props: mergedProps,\n    internalRef\n  } = mergeSlotProps({\n    ...other,\n    externalSlotProps: resolvedComponentsProps\n  });\n  const ref = useForkRef(internalRef, resolvedComponentsProps?.ref, parameters.additionalProps?.ref);\n  const props = appendOwnerState(elementType, {\n    ...mergedProps,\n    ref\n  }, ownerState);\n  return props;\n}\nexport default useSlotProps;","import * as React from 'react';\n\n/**\n * Returns the ref of a React element handling differences between React 19 and older versions.\n * It will throw runtime error if the element is not a valid React element.\n *\n * @param element React.ReactElement\n * @returns React.Ref<any> | null\n */\nexport default function getReactElementRef(element) {\n  // 'ref' is passed as prop in React 19, whereas 'ref' is directly attached to children in older versions\n  if (parseInt(React.version, 10) >= 19) {\n    return element?.props?.ref || null;\n  }\n  // @ts-expect-error element.ref is not included in the ReactElement type\n  // https://github.com/DefinitelyTyped/DefinitelyTyped/discussions/70189\n  return element?.ref || null;\n}","'use client';\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nimport useForkRef from '@mui/utils/useForkRef';\nimport setRef from '@mui/utils/setRef';\nimport getReactElementRef from '@mui/utils/getReactElementRef';\nimport exactProp from '@mui/utils/exactProp';\nimport HTMLElementType from '@mui/utils/HTMLElementType';\nfunction getContainer(container) {\n  return typeof container === 'function' ? container() : container;\n}\n\n/**\n * Portals provide a first-class way to render children into a DOM node\n * that exists outside the DOM hierarchy of the parent component.\n *\n * Demos:\n *\n * - [Portal](https://mui.com/material-ui/react-portal/)\n *\n * API:\n *\n * - [Portal API](https://mui.com/material-ui/api/portal/)\n */\nconst Portal = /*#__PURE__*/React.forwardRef(function Portal(props, forwardedRef) {\n  const {\n    children,\n    container,\n    disablePortal = false\n  } = props;\n  const [mountNode, setMountNode] = React.useState(null);\n  const handleRef = useForkRef(/*#__PURE__*/React.isValidElement(children) ? getReactElementRef(children) : null, forwardedRef);\n  useEnhancedEffect(() => {\n    if (!disablePortal) {\n      setMountNode(getContainer(container) || document.body);\n    }\n  }, [container, disablePortal]);\n  useEnhancedEffect(() => {\n    if (mountNode && !disablePortal) {\n      setRef(forwardedRef, mountNode);\n      return () => {\n        setRef(forwardedRef, null);\n      };\n    }\n    return undefined;\n  }, [forwardedRef, mountNode, disablePortal]);\n  if (disablePortal) {\n    if (/*#__PURE__*/React.isValidElement(children)) {\n      const newProps = {\n        ref: handleRef\n      };\n      return /*#__PURE__*/React.cloneElement(children, newProps);\n    }\n    return children;\n  }\n  return mountNode ? /*#__PURE__*/ReactDOM.createPortal(children, mountNode) : mountNode;\n});\nprocess.env.NODE_ENV !== \"production\" ? Portal.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The children to render into the `container`.\n   */\n  children: PropTypes.node,\n  /**\n   * An HTML element or function that returns one.\n   * The `container` will have the portal children appended to it.\n   *\n   * You can also provide a callback, which is called in a React layout effect.\n   * This lets you set the container from a ref, and also makes server-side rendering possible.\n   *\n   * By default, it uses the body of the top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),\n  /**\n   * The `children` will be under the DOM hierarchy of the parent component.\n   * @default false\n   */\n  disablePortal: PropTypes.bool\n} : void 0;\nif (process.env.NODE_ENV !== 'production') {\n  // eslint-disable-next-line\n  Portal['propTypes' + ''] = exactProp(Portal.propTypes);\n}\nexport default Portal;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from '@mui/utils/debounce';\nimport useForkRef from '@mui/utils/useForkRef';\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nimport useEventCallback from '@mui/utils/useEventCallback';\nimport ownerWindow from '@mui/utils/ownerWindow';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction getStyleValue(value) {\n  return parseInt(value, 10) || 0;\n}\nconst styles = {\n  shadow: {\n    // Visibility needed to hide the extra text area on iPads\n    visibility: 'hidden',\n    // Remove from the content flow\n    position: 'absolute',\n    // Ignore the scrollbar width\n    overflow: 'hidden',\n    height: 0,\n    top: 0,\n    left: 0,\n    // Create a new layer, increase the isolation of the computed values\n    transform: 'translateZ(0)'\n  }\n};\nfunction isObjectEmpty(object) {\n  // eslint-disable-next-line\n  for (const _ in object) {\n    return false;\n  }\n  return true;\n}\nfunction isEmpty(obj) {\n  return isObjectEmpty(obj) || obj.outerHeightStyle === 0 && !obj.overflowing;\n}\n\n/**\n *\n * Demos:\n *\n * - [Textarea Autosize](https://mui.com/material-ui/react-textarea-autosize/)\n *\n * API:\n *\n * - [TextareaAutosize API](https://mui.com/material-ui/api/textarea-autosize/)\n */\nconst TextareaAutosize = /*#__PURE__*/React.forwardRef(function TextareaAutosize(props, forwardedRef) {\n  const {\n    onChange,\n    maxRows,\n    minRows = 1,\n    style,\n    value,\n    ...other\n  } = props;\n  const {\n    current: isControlled\n  } = React.useRef(value != null);\n  const textareaRef = React.useRef(null);\n  const handleRef = useForkRef(forwardedRef, textareaRef);\n  const heightRef = React.useRef(null);\n  const hiddenTextareaRef = React.useRef(null);\n  const calculateTextareaStyles = React.useCallback(() => {\n    const textarea = textareaRef.current;\n    const hiddenTextarea = hiddenTextareaRef.current;\n    if (!textarea || !hiddenTextarea) {\n      return undefined;\n    }\n    const containerWindow = ownerWindow(textarea);\n    const computedStyle = containerWindow.getComputedStyle(textarea);\n\n    // If input's width is shrunk and it's not visible, don't sync height.\n    if (computedStyle.width === '0px') {\n      return {\n        outerHeightStyle: 0,\n        overflowing: false\n      };\n    }\n    hiddenTextarea.style.width = computedStyle.width;\n    hiddenTextarea.value = textarea.value || props.placeholder || 'x';\n    if (hiddenTextarea.value.slice(-1) === '\\n') {\n      // Certain fonts which overflow the line height will cause the textarea\n      // to report a different scrollHeight depending on whether the last line\n      // is empty. Make it non-empty to avoid this issue.\n      hiddenTextarea.value += ' ';\n    }\n    const boxSizing = computedStyle.boxSizing;\n    const padding = getStyleValue(computedStyle.paddingBottom) + getStyleValue(computedStyle.paddingTop);\n    const border = getStyleValue(computedStyle.borderBottomWidth) + getStyleValue(computedStyle.borderTopWidth);\n\n    // The height of the inner content\n    const innerHeight = hiddenTextarea.scrollHeight;\n\n    // Measure height of a textarea with a single row\n    hiddenTextarea.value = 'x';\n    const singleRowHeight = hiddenTextarea.scrollHeight;\n\n    // The height of the outer content\n    let outerHeight = innerHeight;\n    if (minRows) {\n      outerHeight = Math.max(Number(minRows) * singleRowHeight, outerHeight);\n    }\n    if (maxRows) {\n      outerHeight = Math.min(Number(maxRows) * singleRowHeight, outerHeight);\n    }\n    outerHeight = Math.max(outerHeight, singleRowHeight);\n\n    // Take the box sizing into account for applying this value as a style.\n    const outerHeightStyle = outerHeight + (boxSizing === 'border-box' ? padding + border : 0);\n    const overflowing = Math.abs(outerHeight - innerHeight) <= 1;\n    return {\n      outerHeightStyle,\n      overflowing\n    };\n  }, [maxRows, minRows, props.placeholder]);\n  const didHeightChange = useEventCallback(() => {\n    const textarea = textareaRef.current;\n    const textareaStyles = calculateTextareaStyles();\n    if (!textarea || !textareaStyles || isEmpty(textareaStyles)) {\n      return false;\n    }\n    const outerHeightStyle = textareaStyles.outerHeightStyle;\n    return heightRef.current != null && heightRef.current !== outerHeightStyle;\n  });\n  const syncHeight = React.useCallback(() => {\n    const textarea = textareaRef.current;\n    const textareaStyles = calculateTextareaStyles();\n    if (!textarea || !textareaStyles || isEmpty(textareaStyles)) {\n      return;\n    }\n    const outerHeightStyle = textareaStyles.outerHeightStyle;\n    if (heightRef.current !== outerHeightStyle) {\n      heightRef.current = outerHeightStyle;\n      textarea.style.height = `${outerHeightStyle}px`;\n    }\n    textarea.style.overflow = textareaStyles.overflowing ? 'hidden' : '';\n  }, [calculateTextareaStyles]);\n  const frameRef = React.useRef(-1);\n  useEnhancedEffect(() => {\n    const debouncedHandleResize = debounce(syncHeight);\n    const textarea = textareaRef?.current;\n    if (!textarea) {\n      return undefined;\n    }\n    const containerWindow = ownerWindow(textarea);\n    containerWindow.addEventListener('resize', debouncedHandleResize);\n    let resizeObserver;\n    if (typeof ResizeObserver !== 'undefined') {\n      resizeObserver = new ResizeObserver(() => {\n        if (didHeightChange()) {\n          // avoid \"ResizeObserver loop completed with undelivered notifications\" error\n          // by temporarily unobserving the textarea element while manipulating the height\n          // and reobserving one frame later\n          resizeObserver.unobserve(textarea);\n          cancelAnimationFrame(frameRef.current);\n          syncHeight();\n          frameRef.current = requestAnimationFrame(() => {\n            resizeObserver.observe(textarea);\n          });\n        }\n      });\n      resizeObserver.observe(textarea);\n    }\n    return () => {\n      debouncedHandleResize.clear();\n      cancelAnimationFrame(frameRef.current);\n      containerWindow.removeEventListener('resize', debouncedHandleResize);\n      if (resizeObserver) {\n        resizeObserver.disconnect();\n      }\n    };\n  }, [calculateTextareaStyles, syncHeight, didHeightChange]);\n  useEnhancedEffect(() => {\n    syncHeight();\n  });\n  const handleChange = event => {\n    if (!isControlled) {\n      syncHeight();\n    }\n    const textarea = event.target;\n    const countOfCharacters = textarea.value.length;\n    const isLastCharacterNewLine = textarea.value.endsWith('\\n');\n    const isEndOfTheLine = textarea.selectionStart === countOfCharacters;\n\n    // Set the cursor position to the very end of the text.\n    if (isLastCharacterNewLine && isEndOfTheLine) {\n      textarea.setSelectionRange(countOfCharacters, countOfCharacters);\n    }\n    if (onChange) {\n      onChange(event);\n    }\n  };\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [/*#__PURE__*/_jsx(\"textarea\", {\n      value: value,\n      onChange: handleChange,\n      ref: handleRef\n      // Apply the rows prop to get a \"correct\" first SSR paint\n      ,\n      rows: minRows,\n      style: style,\n      ...other\n    }), /*#__PURE__*/_jsx(\"textarea\", {\n      \"aria-hidden\": true,\n      className: props.className,\n      readOnly: true,\n      ref: hiddenTextareaRef,\n      tabIndex: -1,\n      style: {\n        ...styles.shadow,\n        ...style,\n        paddingTop: 0,\n        paddingBottom: 0\n      }\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? TextareaAutosize.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * Maximum number of rows to display.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * Minimum number of rows to display.\n   * @default 1\n   */\n  minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * @ignore\n   */\n  onChange: PropTypes.func,\n  /**\n   * @ignore\n   */\n  placeholder: PropTypes.string,\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * @ignore\n   */\n  value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.string), PropTypes.number, PropTypes.string])\n} : void 0;\nexport default TextareaAutosize;","export default function formControlState({\n  props,\n  states,\n  muiFormControl\n}) {\n  return states.reduce((acc, state) => {\n    acc[state] = props[state];\n    if (muiFormControl) {\n      if (typeof props[state] === 'undefined') {\n        acc[state] = muiFormControl[state];\n      }\n    }\n    return acc;\n  }, {});\n}","'use client';\n\nimport * as React from 'react';\n/**\n * @ignore - internal component.\n */\nconst FormControlContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== 'production') {\n  FormControlContext.displayName = 'FormControlContext';\n}\nexport default FormControlContext;","'use client';\n\nimport * as React from 'react';\nimport FormControlContext from \"./FormControlContext.js\";\nexport default function useFormControl() {\n  return React.useContext(FormControlContext);\n}","// Supports determination of isControlled().\n// Controlled input accepts its current value as a prop.\n//\n// @see https://facebook.github.io/react/docs/forms.html#controlled-components\n// @param value\n// @returns {boolean} true if string (including '') or number (including zero)\nexport function hasValue(value) {\n  return value != null && !(Array.isArray(value) && value.length === 0);\n}\n\n// Determine if field is empty or filled.\n// Response determines if label is presented above field or as placeholder.\n//\n// @param obj\n// @param SSR\n// @returns {boolean} False when not present or empty string.\n//                    True when any number or string with length.\nexport function isFilled(obj, SSR = false) {\n  return obj && (hasValue(obj.value) && obj.value !== '' || SSR && hasValue(obj.defaultValue) && obj.defaultValue !== '');\n}\n\n// Determine if an Input is adorned on start.\n// It's corresponding to the left with LTR.\n//\n// @param obj\n// @returns {boolean} False when no adornments.\n//                    True when adorned at the start.\nexport function isAdornedStart(obj) {\n  return obj.startAdornment;\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getInputBaseUtilityClass(slot) {\n  return generateUtilityClass('MuiInputBase', slot);\n}\nconst inputBaseClasses = generateUtilityClasses('MuiInputBase', ['root', 'formControl', 'focused', 'disabled', 'adornedStart', 'adornedEnd', 'error', 'sizeSmall', 'multiline', 'colorSecondary', 'fullWidth', 'hiddenLabel', 'readOnly', 'input', 'inputSizeSmall', 'inputMultiline', 'inputTypeSearch', 'inputAdornedStart', 'inputAdornedEnd', 'inputHiddenLabel']);\nexport default inputBaseClasses;","'use client';\n\nimport _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nvar _InputGlobalStyles;\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';\nimport refType from '@mui/utils/refType';\nimport composeClasses from '@mui/utils/composeClasses';\nimport isHostComponent from '@mui/utils/isHostComponent';\nimport TextareaAutosize from \"../TextareaAutosize/index.js\";\nimport formControlState from \"../FormControl/formControlState.js\";\nimport FormControlContext from \"../FormControl/FormControlContext.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport { styled, globalCss } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport useEnhancedEffect from \"../utils/useEnhancedEffect.js\";\nimport { isFilled } from \"./utils.js\";\nimport inputBaseClasses, { getInputBaseUtilityClass } from \"./inputBaseClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nexport const rootOverridesResolver = (props, styles) => {\n  const {\n    ownerState\n  } = props;\n  return [styles.root, ownerState.formControl && styles.formControl, ownerState.startAdornment && styles.adornedStart, ownerState.endAdornment && styles.adornedEnd, ownerState.error && styles.error, ownerState.size === 'small' && styles.sizeSmall, ownerState.multiline && styles.multiline, ownerState.color && styles[`color${capitalize(ownerState.color)}`], ownerState.fullWidth && styles.fullWidth, ownerState.hiddenLabel && styles.hiddenLabel];\n};\nexport const inputOverridesResolver = (props, styles) => {\n  const {\n    ownerState\n  } = props;\n  return [styles.input, ownerState.size === 'small' && styles.inputSizeSmall, ownerState.multiline && styles.inputMultiline, ownerState.type === 'search' && styles.inputTypeSearch, ownerState.startAdornment && styles.inputAdornedStart, ownerState.endAdornment && styles.inputAdornedEnd, ownerState.hiddenLabel && styles.inputHiddenLabel];\n};\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    color,\n    disabled,\n    error,\n    endAdornment,\n    focused,\n    formControl,\n    fullWidth,\n    hiddenLabel,\n    multiline,\n    readOnly,\n    size,\n    startAdornment,\n    type\n  } = ownerState;\n  const slots = {\n    root: ['root', `color${capitalize(color)}`, disabled && 'disabled', error && 'error', fullWidth && 'fullWidth', focused && 'focused', formControl && 'formControl', size && size !== 'medium' && `size${capitalize(size)}`, multiline && 'multiline', startAdornment && 'adornedStart', endAdornment && 'adornedEnd', hiddenLabel && 'hiddenLabel', readOnly && 'readOnly'],\n    input: ['input', disabled && 'disabled', type === 'search' && 'inputTypeSearch', multiline && 'inputMultiline', size === 'small' && 'inputSizeSmall', hiddenLabel && 'inputHiddenLabel', startAdornment && 'inputAdornedStart', endAdornment && 'inputAdornedEnd', readOnly && 'readOnly']\n  };\n  return composeClasses(slots, getInputBaseUtilityClass, classes);\n};\nexport const InputBaseRoot = styled('div', {\n  name: 'MuiInputBase',\n  slot: 'Root',\n  overridesResolver: rootOverridesResolver\n})(memoTheme(({\n  theme\n}) => ({\n  ...theme.typography.body1,\n  color: (theme.vars || theme).palette.text.primary,\n  lineHeight: '1.4375em',\n  // 23px\n  boxSizing: 'border-box',\n  // Prevent padding issue with fullWidth.\n  position: 'relative',\n  cursor: 'text',\n  display: 'inline-flex',\n  alignItems: 'center',\n  [`&.${inputBaseClasses.disabled}`]: {\n    color: (theme.vars || theme).palette.text.disabled,\n    cursor: 'default'\n  },\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.multiline,\n    style: {\n      padding: '4px 0 5px'\n    }\n  }, {\n    props: ({\n      ownerState,\n      size\n    }) => ownerState.multiline && size === 'small',\n    style: {\n      paddingTop: 1\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.fullWidth,\n    style: {\n      width: '100%'\n    }\n  }]\n})));\nexport const InputBaseInput = styled('input', {\n  name: 'MuiInputBase',\n  slot: 'Input',\n  overridesResolver: inputOverridesResolver\n})(memoTheme(({\n  theme\n}) => {\n  const light = theme.palette.mode === 'light';\n  const placeholder = {\n    color: 'currentColor',\n    ...(theme.vars ? {\n      opacity: theme.vars.opacity.inputPlaceholder\n    } : {\n      opacity: light ? 0.42 : 0.5\n    }),\n    transition: theme.transitions.create('opacity', {\n      duration: theme.transitions.duration.shorter\n    })\n  };\n  const placeholderHidden = {\n    opacity: '0 !important'\n  };\n  const placeholderVisible = theme.vars ? {\n    opacity: theme.vars.opacity.inputPlaceholder\n  } : {\n    opacity: light ? 0.42 : 0.5\n  };\n  return {\n    font: 'inherit',\n    letterSpacing: 'inherit',\n    color: 'currentColor',\n    padding: '4px 0 5px',\n    border: 0,\n    boxSizing: 'content-box',\n    background: 'none',\n    height: '1.4375em',\n    // Reset 23pxthe native input line-height\n    margin: 0,\n    // Reset for Safari\n    WebkitTapHighlightColor: 'transparent',\n    display: 'block',\n    // Make the flex item shrink with Firefox\n    minWidth: 0,\n    width: '100%',\n    '&::-webkit-input-placeholder': placeholder,\n    '&::-moz-placeholder': placeholder,\n    // Firefox 19+\n    '&::-ms-input-placeholder': placeholder,\n    // Edge\n    '&:focus': {\n      outline: 0\n    },\n    // Reset Firefox invalid required input style\n    '&:invalid': {\n      boxShadow: 'none'\n    },\n    '&::-webkit-search-decoration': {\n      // Remove the padding when type=search.\n      WebkitAppearance: 'none'\n    },\n    // Show and hide the placeholder logic\n    [`label[data-shrink=false] + .${inputBaseClasses.formControl} &`]: {\n      '&::-webkit-input-placeholder': placeholderHidden,\n      '&::-moz-placeholder': placeholderHidden,\n      // Firefox 19+\n      '&::-ms-input-placeholder': placeholderHidden,\n      // Edge\n      '&:focus::-webkit-input-placeholder': placeholderVisible,\n      '&:focus::-moz-placeholder': placeholderVisible,\n      // Firefox 19+\n      '&:focus::-ms-input-placeholder': placeholderVisible // Edge\n    },\n    [`&.${inputBaseClasses.disabled}`]: {\n      opacity: 1,\n      // Reset iOS opacity\n      WebkitTextFillColor: (theme.vars || theme).palette.text.disabled // Fix opacity Safari bug\n    },\n    variants: [{\n      props: ({\n        ownerState\n      }) => !ownerState.disableInjectingGlobalStyles,\n      style: {\n        animationName: 'mui-auto-fill-cancel',\n        animationDuration: '10ms',\n        '&:-webkit-autofill': {\n          animationDuration: '5000s',\n          animationName: 'mui-auto-fill'\n        }\n      }\n    }, {\n      props: {\n        size: 'small'\n      },\n      style: {\n        paddingTop: 1\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.multiline,\n      style: {\n        height: 'auto',\n        resize: 'none',\n        padding: 0,\n        paddingTop: 0\n      }\n    }, {\n      props: {\n        type: 'search'\n      },\n      style: {\n        MozAppearance: 'textfield' // Improve type search style.\n      }\n    }]\n  };\n}));\nconst InputGlobalStyles = globalCss({\n  '@keyframes mui-auto-fill': {\n    from: {\n      display: 'block'\n    }\n  },\n  '@keyframes mui-auto-fill-cancel': {\n    from: {\n      display: 'block'\n    }\n  }\n});\n\n/**\n * `InputBase` contains as few styles as possible.\n * It aims to be a simple building block for creating an input.\n * It contains a load of style reset and some state logic.\n */\nconst InputBase = /*#__PURE__*/React.forwardRef(function InputBase(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiInputBase'\n  });\n  const {\n    'aria-describedby': ariaDescribedby,\n    autoComplete,\n    autoFocus,\n    className,\n    color,\n    components = {},\n    componentsProps = {},\n    defaultValue,\n    disabled,\n    disableInjectingGlobalStyles,\n    endAdornment,\n    error,\n    fullWidth = false,\n    id,\n    inputComponent = 'input',\n    inputProps: inputPropsProp = {},\n    inputRef: inputRefProp,\n    margin,\n    maxRows,\n    minRows,\n    multiline = false,\n    name,\n    onBlur,\n    onChange,\n    onClick,\n    onFocus,\n    onKeyDown,\n    onKeyUp,\n    placeholder,\n    readOnly,\n    renderSuffix,\n    rows,\n    size,\n    slotProps = {},\n    slots = {},\n    startAdornment,\n    type = 'text',\n    value: valueProp,\n    ...other\n  } = props;\n  const value = inputPropsProp.value != null ? inputPropsProp.value : valueProp;\n  const {\n    current: isControlled\n  } = React.useRef(value != null);\n  const inputRef = React.useRef();\n  const handleInputRefWarning = React.useCallback(instance => {\n    if (process.env.NODE_ENV !== 'production') {\n      if (instance && instance.nodeName !== 'INPUT' && !instance.focus) {\n        console.error(['MUI: You have provided a `inputComponent` to the input component', 'that does not correctly handle the `ref` prop.', 'Make sure the `ref` prop is called with a HTMLInputElement.'].join('\\n'));\n      }\n    }\n  }, []);\n  const handleInputRef = useForkRef(inputRef, inputRefProp, inputPropsProp.ref, handleInputRefWarning);\n  const [focused, setFocused] = React.useState(false);\n  const muiFormControl = useFormControl();\n  if (process.env.NODE_ENV !== 'production') {\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useEffect(() => {\n      if (muiFormControl) {\n        return muiFormControl.registerEffect();\n      }\n      return undefined;\n    }, [muiFormControl]);\n  }\n  const fcs = formControlState({\n    props,\n    muiFormControl,\n    states: ['color', 'disabled', 'error', 'hiddenLabel', 'size', 'required', 'filled']\n  });\n  fcs.focused = muiFormControl ? muiFormControl.focused : focused;\n\n  // The blur won't fire when the disabled state is set on a focused input.\n  // We need to book keep the focused state manually.\n  React.useEffect(() => {\n    if (!muiFormControl && disabled && focused) {\n      setFocused(false);\n      if (onBlur) {\n        onBlur();\n      }\n    }\n  }, [muiFormControl, disabled, focused, onBlur]);\n  const onFilled = muiFormControl && muiFormControl.onFilled;\n  const onEmpty = muiFormControl && muiFormControl.onEmpty;\n  const checkDirty = React.useCallback(obj => {\n    if (isFilled(obj)) {\n      if (onFilled) {\n        onFilled();\n      }\n    } else if (onEmpty) {\n      onEmpty();\n    }\n  }, [onFilled, onEmpty]);\n  useEnhancedEffect(() => {\n    if (isControlled) {\n      checkDirty({\n        value\n      });\n    }\n  }, [value, checkDirty, isControlled]);\n  const handleFocus = event => {\n    if (onFocus) {\n      onFocus(event);\n    }\n    if (inputPropsProp.onFocus) {\n      inputPropsProp.onFocus(event);\n    }\n    if (muiFormControl && muiFormControl.onFocus) {\n      muiFormControl.onFocus(event);\n    } else {\n      setFocused(true);\n    }\n  };\n  const handleBlur = event => {\n    if (onBlur) {\n      onBlur(event);\n    }\n    if (inputPropsProp.onBlur) {\n      inputPropsProp.onBlur(event);\n    }\n    if (muiFormControl && muiFormControl.onBlur) {\n      muiFormControl.onBlur(event);\n    } else {\n      setFocused(false);\n    }\n  };\n  const handleChange = (event, ...args) => {\n    if (!isControlled) {\n      const element = event.target || inputRef.current;\n      if (element == null) {\n        throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: Expected valid input target. ' + 'Did you use a custom `inputComponent` and forget to forward refs? ' + 'See https://mui.com/r/input-component-ref-interface for more info.' : _formatErrorMessage(1));\n      }\n      checkDirty({\n        value: element.value\n      });\n    }\n    if (inputPropsProp.onChange) {\n      inputPropsProp.onChange(event, ...args);\n    }\n\n    // Perform in the willUpdate\n    if (onChange) {\n      onChange(event, ...args);\n    }\n  };\n\n  // Check the input state on mount, in case it was filled by the user\n  // or auto filled by the browser before the hydration (for SSR).\n  React.useEffect(() => {\n    checkDirty(inputRef.current);\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n  const handleClick = event => {\n    if (inputRef.current && event.currentTarget === event.target) {\n      inputRef.current.focus();\n    }\n    if (onClick) {\n      onClick(event);\n    }\n  };\n  let InputComponent = inputComponent;\n  let inputProps = inputPropsProp;\n  if (multiline && InputComponent === 'input') {\n    if (rows) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (minRows || maxRows) {\n          console.warn('MUI: You can not use the `minRows` or `maxRows` props when the input `rows` prop is set.');\n        }\n      }\n      inputProps = {\n        type: undefined,\n        minRows: rows,\n        maxRows: rows,\n        ...inputProps\n      };\n    } else {\n      inputProps = {\n        type: undefined,\n        maxRows,\n        minRows,\n        ...inputProps\n      };\n    }\n    InputComponent = TextareaAutosize;\n  }\n  const handleAutoFill = event => {\n    // Provide a fake value as Chrome might not let you access it for security reasons.\n    checkDirty(event.animationName === 'mui-auto-fill-cancel' ? inputRef.current : {\n      value: 'x'\n    });\n  };\n  React.useEffect(() => {\n    if (muiFormControl) {\n      muiFormControl.setAdornedStart(Boolean(startAdornment));\n    }\n  }, [muiFormControl, startAdornment]);\n  const ownerState = {\n    ...props,\n    color: fcs.color || 'primary',\n    disabled: fcs.disabled,\n    endAdornment,\n    error: fcs.error,\n    focused: fcs.focused,\n    formControl: muiFormControl,\n    fullWidth,\n    hiddenLabel: fcs.hiddenLabel,\n    multiline,\n    size: fcs.size,\n    startAdornment,\n    type\n  };\n  const classes = useUtilityClasses(ownerState);\n  const Root = slots.root || components.Root || InputBaseRoot;\n  const rootProps = slotProps.root || componentsProps.root || {};\n  const Input = slots.input || components.Input || InputBaseInput;\n  inputProps = {\n    ...inputProps,\n    ...(slotProps.input ?? componentsProps.input)\n  };\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [!disableInjectingGlobalStyles && typeof InputGlobalStyles === 'function' && (// For Emotion/Styled-components, InputGlobalStyles will be a function\n    // For Pigment CSS, this has no effect because the InputGlobalStyles will be null.\n    _InputGlobalStyles || (_InputGlobalStyles = /*#__PURE__*/_jsx(InputGlobalStyles, {}))), /*#__PURE__*/_jsxs(Root, {\n      ...rootProps,\n      ref: ref,\n      onClick: handleClick,\n      ...other,\n      ...(!isHostComponent(Root) && {\n        ownerState: {\n          ...ownerState,\n          ...rootProps.ownerState\n        }\n      }),\n      className: clsx(classes.root, rootProps.className, className, readOnly && 'MuiInputBase-readOnly'),\n      children: [startAdornment, /*#__PURE__*/_jsx(FormControlContext.Provider, {\n        value: null,\n        children: /*#__PURE__*/_jsx(Input, {\n          \"aria-invalid\": fcs.error,\n          \"aria-describedby\": ariaDescribedby,\n          autoComplete: autoComplete,\n          autoFocus: autoFocus,\n          defaultValue: defaultValue,\n          disabled: fcs.disabled,\n          id: id,\n          onAnimationStart: handleAutoFill,\n          name: name,\n          placeholder: placeholder,\n          readOnly: readOnly,\n          required: fcs.required,\n          rows: rows,\n          value: value,\n          onKeyDown: onKeyDown,\n          onKeyUp: onKeyUp,\n          type: type,\n          ...inputProps,\n          ...(!isHostComponent(Input) && {\n            as: InputComponent,\n            ownerState: {\n              ...ownerState,\n              ...inputProps.ownerState\n            }\n          }),\n          ref: handleInputRef,\n          className: clsx(classes.input, inputProps.className, readOnly && 'MuiInputBase-readOnly'),\n          onBlur: handleBlur,\n          onChange: handleChange,\n          onFocus: handleFocus\n        })\n      }), endAdornment, renderSuffix ? renderSuffix({\n        ...fcs,\n        startAdornment\n      }) : null]\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? InputBase.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * @ignore\n   */\n  'aria-describedby': PropTypes.string,\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n  /**\n   * If `true`, the `input` element is focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * The prop defaults to the value (`'primary'`) inherited from the parent FormControl component.\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Input: PropTypes.elementType,\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    input: PropTypes.object,\n    root: PropTypes.object\n  }),\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n  /**\n   * If `true`, the component is disabled.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, GlobalStyles for the auto-fill keyframes will not be injected/removed on mount/unmount. Make sure to inject them at the top of your application.\n   * This option is intended to help with boosting the initial rendering performance if you are loading a big amount of Input components at once.\n   * @default false\n   */\n  disableInjectingGlobalStyles: PropTypes.bool,\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n  /**\n   * If `true`, the `input` will indicate an error.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the `input` will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   * @default 'input'\n   */\n  inputComponent: elementTypeAcceptingRef,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * @default {}\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   * The prop defaults to the value (`'none'`) inherited from the parent FormControl component.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * Minimum number of rows to display when multiline option is set to true.\n   */\n  minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * If `true`, a [TextareaAutosize](https://mui.com/material-ui/react-textarea-autosize/) element is rendered.\n   * @default false\n   */\n  multiline: PropTypes.bool,\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * Callback fired when the `input` is blurred.\n   *\n   * Notice that the first argument (event) might be undefined.\n   */\n  onBlur: PropTypes.func,\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n  /**\n   * Callback fired when the `input` doesn't satisfy its constraints.\n   */\n  onInvalid: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onKeyUp: PropTypes.func,\n  /**\n   * The short hint displayed in the `input` before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  renderSuffix: PropTypes.func,\n  /**\n   * If `true`, the `input` element is required.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  required: PropTypes.bool,\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * The size of the component.\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.\n   *\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.object,\n    root: PropTypes.object\n  }),\n  /**\n   * The components used for each slot inside.\n   *\n   * This prop is an alias for the `components` prop, which will be deprecated in the future.\n   *\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#input_types).\n   * @default 'text'\n   */\n  type: PropTypes.string,\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default InputBase;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport { inputBaseClasses } from \"../InputBase/index.js\";\nexport function getInputUtilityClass(slot) {\n  return generateUtilityClass('MuiInput', slot);\n}\nconst inputClasses = {\n  ...inputBaseClasses,\n  ...generateUtilityClasses('MuiInput', ['root', 'underline', 'input'])\n};\nexport default inputClasses;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport { inputBaseClasses } from \"../InputBase/index.js\";\nexport function getOutlinedInputUtilityClass(slot) {\n  return generateUtilityClass('MuiOutlinedInput', slot);\n}\nconst outlinedInputClasses = {\n  ...inputBaseClasses,\n  ...generateUtilityClasses('MuiOutlinedInput', ['root', 'notchedOutline', 'input'])\n};\nexport default outlinedInputClasses;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nimport { inputBaseClasses } from \"../InputBase/index.js\";\nexport function getFilledInputUtilityClass(slot) {\n  return generateUtilityClass('MuiFilledInput', slot);\n}\nconst filledInputClasses = {\n  ...inputBaseClasses,\n  ...generateUtilityClasses('MuiFilledInput', ['root', 'underline', 'input', 'adornedStart', 'adornedEnd', 'sizeSmall', 'multiline', 'hiddenLabel'])\n};\nexport default filledInputClasses;","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M7 10l5 5 5-5z\"\n}), 'ArrowDropDown');","import PropTypes from 'prop-types';\nimport chainPropTypes from \"../chainPropTypes/index.js\";\nfunction isClassComponent(elementType) {\n  // elementType.prototype?.isReactComponent\n  const {\n    prototype = {}\n  } = elementType;\n  return Boolean(prototype.isReactComponent);\n}\nfunction acceptingRef(props, propName, componentName, location, propFullName) {\n  const element = props[propName];\n  const safePropName = propFullName || propName;\n  if (element == null ||\n  // When server-side rendering React doesn't warn either.\n  // This is not an accurate check for SSR.\n  // This is only in place for Emotion compat.\n  // TODO: Revisit once https://github.com/facebook/react/issues/20047 is resolved.\n  typeof window === 'undefined') {\n    return null;\n  }\n  let warningHint;\n  const elementType = element.type;\n  /**\n   * Blacklisting instead of whitelisting\n   *\n   * Blacklisting will miss some components, such as React.Fragment. Those will at least\n   * trigger a warning in React.\n   * We can't whitelist because there is no safe way to detect React.forwardRef\n   * or class components. \"Safe\" means there's no public API.\n   *\n   */\n  if (typeof elementType === 'function' && !isClassComponent(elementType)) {\n    warningHint = 'Did you accidentally use a plain function component for an element instead?';\n  }\n  if (warningHint !== undefined) {\n    return new Error(`Invalid ${location} \\`${safePropName}\\` supplied to \\`${componentName}\\`. ` + `Expected an element that can hold a ref. ${warningHint} ` + 'For more information see https://mui.com/r/caveat-with-refs-guide');\n  }\n  return null;\n}\nconst elementAcceptingRef = chainPropTypes(PropTypes.element, acceptingRef);\nelementAcceptingRef.isRequired = chainPropTypes(PropTypes.element.isRequired, acceptingRef);\nexport default elementAcceptingRef;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport elementAcceptingRef from '@mui/utils/elementAcceptingRef';\nimport getReactElementRef from '@mui/utils/getReactElementRef';\nimport { useTheme } from \"../zero-styled/index.js\";\nimport { reflow, getTransitionProps } from \"../transitions/utils.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst styles = {\n  entering: {\n    opacity: 1\n  },\n  entered: {\n    opacity: 1\n  }\n};\n\n/**\n * The Fade transition is used by the [Modal](/material-ui/react-modal/) component.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\nconst Fade = /*#__PURE__*/React.forwardRef(function Fade(props, ref) {\n  const theme = useTheme();\n  const defaultTimeout = {\n    enter: theme.transitions.duration.enteringScreen,\n    exit: theme.transitions.duration.leavingScreen\n  };\n  const {\n    addEndListener,\n    appear = true,\n    children,\n    easing,\n    in: inProp,\n    onEnter,\n    onEntered,\n    onEntering,\n    onExit,\n    onExited,\n    onExiting,\n    style,\n    timeout = defaultTimeout,\n    // eslint-disable-next-line react/prop-types\n    TransitionComponent = Transition,\n    ...other\n  } = props;\n  const enableStrictModeCompat = true;\n  const nodeRef = React.useRef(null);\n  const handleRef = useForkRef(nodeRef, getReactElementRef(children), ref);\n  const normalizedTransitionCallback = callback => maybeIsAppearing => {\n    if (callback) {\n      const node = nodeRef.current;\n\n      // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n      if (maybeIsAppearing === undefined) {\n        callback(node);\n      } else {\n        callback(node, maybeIsAppearing);\n      }\n    }\n  };\n  const handleEntering = normalizedTransitionCallback(onEntering);\n  const handleEnter = normalizedTransitionCallback((node, isAppearing) => {\n    reflow(node); // So the animation always start from the start.\n\n    const transitionProps = getTransitionProps({\n      style,\n      timeout,\n      easing\n    }, {\n      mode: 'enter'\n    });\n    node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);\n    node.style.transition = theme.transitions.create('opacity', transitionProps);\n    if (onEnter) {\n      onEnter(node, isAppearing);\n    }\n  });\n  const handleEntered = normalizedTransitionCallback(onEntered);\n  const handleExiting = normalizedTransitionCallback(onExiting);\n  const handleExit = normalizedTransitionCallback(node => {\n    const transitionProps = getTransitionProps({\n      style,\n      timeout,\n      easing\n    }, {\n      mode: 'exit'\n    });\n    node.style.webkitTransition = theme.transitions.create('opacity', transitionProps);\n    node.style.transition = theme.transitions.create('opacity', transitionProps);\n    if (onExit) {\n      onExit(node);\n    }\n  });\n  const handleExited = normalizedTransitionCallback(onExited);\n  const handleAddEndListener = next => {\n    if (addEndListener) {\n      // Old call signature before `react-transition-group` implemented `nodeRef`\n      addEndListener(nodeRef.current, next);\n    }\n  };\n  return /*#__PURE__*/_jsx(TransitionComponent, {\n    appear: appear,\n    in: inProp,\n    nodeRef: enableStrictModeCompat ? nodeRef : undefined,\n    onEnter: handleEnter,\n    onEntered: handleEntered,\n    onEntering: handleEntering,\n    onExit: handleExit,\n    onExited: handleExited,\n    onExiting: handleExiting,\n    addEndListener: handleAddEndListener,\n    timeout: timeout,\n    ...other,\n    children: (state, {\n      ownerState,\n      ...restChildProps\n    }) => {\n      return /*#__PURE__*/React.cloneElement(children, {\n        style: {\n          opacity: 0,\n          visibility: state === 'exited' && !inProp ? 'hidden' : undefined,\n          ...styles[state],\n          ...style,\n          ...children.props.style\n        },\n        ref: handleRef,\n        ...restChildProps\n      });\n    }\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Fade.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Add a custom transition end trigger. Called with the transitioning DOM\n   * node and a done callback. Allows for more fine grained transition end\n   * logic. Note: Timeouts are still used as a fallback if provided.\n   */\n  addEndListener: PropTypes.func,\n  /**\n   * Perform the enter transition when it first mounts if `in` is also `true`.\n   * Set this to `false` to disable this behavior.\n   * @default true\n   */\n  appear: PropTypes.bool,\n  /**\n   * A single child content element.\n   */\n  children: elementAcceptingRef.isRequired,\n  /**\n   * The transition timing function.\n   * You may specify a single easing or a object containing enter and exit values.\n   */\n  easing: PropTypes.oneOfType([PropTypes.shape({\n    enter: PropTypes.string,\n    exit: PropTypes.string\n  }), PropTypes.string]),\n  /**\n   * If `true`, the component will transition in.\n   */\n  in: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  onEnter: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onEntered: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onEntering: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onExit: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onExited: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onExiting: PropTypes.func,\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   * @default {\n   *   enter: theme.transitions.duration.enteringScreen,\n   *   exit: theme.transitions.duration.leavingScreen,\n   * }\n   */\n  timeout: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })])\n} : void 0;\nexport default Fade;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getBackdropUtilityClass(slot) {\n  return generateUtilityClass('MuiBackdrop', slot);\n}\nconst backdropClasses = generateUtilityClasses('MuiBackdrop', ['root', 'invisible']);\nexport default backdropClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport Fade from \"../Fade/index.js\";\nimport { getBackdropUtilityClass } from \"./backdropClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    invisible\n  } = ownerState;\n  const slots = {\n    root: ['root', invisible && 'invisible']\n  };\n  return composeClasses(slots, getBackdropUtilityClass, classes);\n};\nconst BackdropRoot = styled('div', {\n  name: 'MuiBackdrop',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.invisible && styles.invisible];\n  }\n})({\n  position: 'fixed',\n  display: 'flex',\n  alignItems: 'center',\n  justifyContent: 'center',\n  right: 0,\n  bottom: 0,\n  top: 0,\n  left: 0,\n  backgroundColor: 'rgba(0, 0, 0, 0.5)',\n  WebkitTapHighlightColor: 'transparent',\n  variants: [{\n    props: {\n      invisible: true\n    },\n    style: {\n      backgroundColor: 'transparent'\n    }\n  }]\n});\nconst Backdrop = /*#__PURE__*/React.forwardRef(function Backdrop(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiBackdrop'\n  });\n  const {\n    children,\n    className,\n    component = 'div',\n    invisible = false,\n    open,\n    components = {},\n    componentsProps = {},\n    slotProps = {},\n    slots = {},\n    TransitionComponent: TransitionComponentProp,\n    transitionDuration,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    component,\n    invisible\n  };\n  const classes = useUtilityClasses(ownerState);\n  const backwardCompatibleSlots = {\n    transition: TransitionComponentProp,\n    root: components.Root,\n    ...slots\n  };\n  const backwardCompatibleSlotProps = {\n    ...componentsProps,\n    ...slotProps\n  };\n  const externalForwardedProps = {\n    component,\n    slots: backwardCompatibleSlots,\n    slotProps: backwardCompatibleSlotProps\n  };\n  const [RootSlot, rootProps] = useSlot('root', {\n    elementType: BackdropRoot,\n    externalForwardedProps,\n    className: clsx(classes.root, className),\n    ownerState\n  });\n  const [TransitionSlot, transitionProps] = useSlot('transition', {\n    elementType: Fade,\n    externalForwardedProps,\n    ownerState\n  });\n  return /*#__PURE__*/_jsx(TransitionSlot, {\n    in: open,\n    timeout: transitionDuration,\n    ...other,\n    ...transitionProps,\n    children: /*#__PURE__*/_jsx(RootSlot, {\n      \"aria-hidden\": true,\n      ...rootProps,\n      classes: classes,\n      ref: ref,\n      children: children\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Backdrop.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated Use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated Use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    root: PropTypes.object\n  }),\n  /**\n   * If `true`, the backdrop is invisible.\n   * It can be used when rendering a popover or a custom select component.\n   * @default false\n   */\n  invisible: PropTypes.bool,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    transition: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    root: PropTypes.elementType,\n    transition: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The component used for the transition.\n   * [Follow this guide](https://mui.com/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   * @default Fade\n   * @deprecated Use `slots.transition` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  TransitionComponent: PropTypes.elementType,\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })])\n} : void 0;\nexport default Backdrop;","'use client';\n\nimport usePreviousProps from '@mui/utils/usePreviousProps';\nfunction useBadge(parameters) {\n  const {\n    badgeContent: badgeContentProp,\n    invisible: invisibleProp = false,\n    max: maxProp = 99,\n    showZero = false\n  } = parameters;\n  const prevProps = usePreviousProps({\n    badgeContent: badgeContentProp,\n    max: maxProp\n  });\n  let invisible = invisibleProp;\n  if (invisibleProp === false && badgeContentProp === 0 && !showZero) {\n    invisible = true;\n  }\n  const {\n    badgeContent,\n    max = maxProp\n  } = invisible ? prevProps : parameters;\n  const displayValue = badgeContent && Number(badgeContent) > max ? `${max}+` : badgeContent;\n  return {\n    badgeContent,\n    invisible,\n    max,\n    displayValue\n  };\n}\nexport default useBadge;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getBadgeUtilityClass(slot) {\n  return generateUtilityClass('MuiBadge', slot);\n}\nconst badgeClasses = generateUtilityClasses('MuiBadge', ['root', 'badge', 'dot', 'standard', 'anchorOriginTopRight', 'anchorOriginBottomRight', 'anchorOriginTopLeft', 'anchorOriginBottomLeft', 'invisible', 'colorError', 'colorInfo', 'colorPrimary', 'colorSecondary', 'colorSuccess', 'colorWarning', 'overlapRectangular', 'overlapCircular',\n// TODO: v6 remove the overlap value from these class keys\n'anchorOriginTopLeftCircular', 'anchorOriginTopLeftRectangular', 'anchorOriginTopRightCircular', 'anchorOriginTopRightRectangular', 'anchorOriginBottomLeftCircular', 'anchorOriginBottomLeftRectangular', 'anchorOriginBottomRightCircular', 'anchorOriginBottomRightRectangular']);\nexport default badgeClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport usePreviousProps from '@mui/utils/usePreviousProps';\nimport composeClasses from '@mui/utils/composeClasses';\nimport useBadge from \"./useBadge.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport badgeClasses, { getBadgeUtilityClass } from \"./badgeClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst RADIUS_STANDARD = 10;\nconst RADIUS_DOT = 4;\nconst useUtilityClasses = ownerState => {\n  const {\n    color,\n    anchorOrigin,\n    invisible,\n    overlap,\n    variant,\n    classes = {}\n  } = ownerState;\n  const slots = {\n    root: ['root'],\n    badge: ['badge', variant, invisible && 'invisible', `anchorOrigin${capitalize(anchorOrigin.vertical)}${capitalize(anchorOrigin.horizontal)}`, `anchorOrigin${capitalize(anchorOrigin.vertical)}${capitalize(anchorOrigin.horizontal)}${capitalize(overlap)}`, `overlap${capitalize(overlap)}`, color !== 'default' && `color${capitalize(color)}`]\n  };\n  return composeClasses(slots, getBadgeUtilityClass, classes);\n};\nconst BadgeRoot = styled('span', {\n  name: 'MuiBadge',\n  slot: 'Root'\n})({\n  position: 'relative',\n  display: 'inline-flex',\n  // For correct alignment with the text.\n  verticalAlign: 'middle',\n  flexShrink: 0\n});\nconst BadgeBadge = styled('span', {\n  name: 'MuiBadge',\n  slot: 'Badge',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.badge, styles[ownerState.variant], styles[`anchorOrigin${capitalize(ownerState.anchorOrigin.vertical)}${capitalize(ownerState.anchorOrigin.horizontal)}${capitalize(ownerState.overlap)}`], ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`], ownerState.invisible && styles.invisible];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'flex',\n  flexDirection: 'row',\n  flexWrap: 'wrap',\n  justifyContent: 'center',\n  alignContent: 'center',\n  alignItems: 'center',\n  position: 'absolute',\n  boxSizing: 'border-box',\n  fontFamily: theme.typography.fontFamily,\n  fontWeight: theme.typography.fontWeightMedium,\n  fontSize: theme.typography.pxToRem(12),\n  minWidth: RADIUS_STANDARD * 2,\n  lineHeight: 1,\n  padding: '0 6px',\n  height: RADIUS_STANDARD * 2,\n  borderRadius: RADIUS_STANDARD,\n  zIndex: 1,\n  // Render the badge on top of potential ripples.\n  transition: theme.transitions.create('transform', {\n    easing: theme.transitions.easing.easeInOut,\n    duration: theme.transitions.duration.enteringScreen\n  }),\n  variants: [...Object.entries(theme.palette).filter(createSimplePaletteValueFilter(['contrastText'])).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      backgroundColor: (theme.vars || theme).palette[color].main,\n      color: (theme.vars || theme).palette[color].contrastText\n    }\n  })), {\n    props: {\n      variant: 'dot'\n    },\n    style: {\n      borderRadius: RADIUS_DOT,\n      height: RADIUS_DOT * 2,\n      minWidth: RADIUS_DOT * 2,\n      padding: 0\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'rectangular',\n    style: {\n      top: 0,\n      right: 0,\n      transform: 'scale(1) translate(50%, -50%)',\n      transformOrigin: '100% 0%',\n      [`&.${badgeClasses.invisible}`]: {\n        transform: 'scale(0) translate(50%, -50%)'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'rectangular',\n    style: {\n      bottom: 0,\n      right: 0,\n      transform: 'scale(1) translate(50%, 50%)',\n      transformOrigin: '100% 100%',\n      [`&.${badgeClasses.invisible}`]: {\n        transform: 'scale(0) translate(50%, 50%)'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'rectangular',\n    style: {\n      top: 0,\n      left: 0,\n      transform: 'scale(1) translate(-50%, -50%)',\n      transformOrigin: '0% 0%',\n      [`&.${badgeClasses.invisible}`]: {\n        transform: 'scale(0) translate(-50%, -50%)'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'rectangular',\n    style: {\n      bottom: 0,\n      left: 0,\n      transform: 'scale(1) translate(-50%, 50%)',\n      transformOrigin: '0% 100%',\n      [`&.${badgeClasses.invisible}`]: {\n        transform: 'scale(0) translate(-50%, 50%)'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'circular',\n    style: {\n      top: '14%',\n      right: '14%',\n      transform: 'scale(1) translate(50%, -50%)',\n      transformOrigin: '100% 0%',\n      [`&.${badgeClasses.invisible}`]: {\n        transform: 'scale(0) translate(50%, -50%)'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'right' && ownerState.overlap === 'circular',\n    style: {\n      bottom: '14%',\n      right: '14%',\n      transform: 'scale(1) translate(50%, 50%)',\n      transformOrigin: '100% 100%',\n      [`&.${badgeClasses.invisible}`]: {\n        transform: 'scale(0) translate(50%, 50%)'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.anchorOrigin.vertical === 'top' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'circular',\n    style: {\n      top: '14%',\n      left: '14%',\n      transform: 'scale(1) translate(-50%, -50%)',\n      transformOrigin: '0% 0%',\n      [`&.${badgeClasses.invisible}`]: {\n        transform: 'scale(0) translate(-50%, -50%)'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.anchorOrigin.vertical === 'bottom' && ownerState.anchorOrigin.horizontal === 'left' && ownerState.overlap === 'circular',\n    style: {\n      bottom: '14%',\n      left: '14%',\n      transform: 'scale(1) translate(-50%, 50%)',\n      transformOrigin: '0% 100%',\n      [`&.${badgeClasses.invisible}`]: {\n        transform: 'scale(0) translate(-50%, 50%)'\n      }\n    }\n  }, {\n    props: {\n      invisible: true\n    },\n    style: {\n      transition: theme.transitions.create('transform', {\n        easing: theme.transitions.easing.easeInOut,\n        duration: theme.transitions.duration.leavingScreen\n      })\n    }\n  }]\n})));\nfunction getAnchorOrigin(anchorOrigin) {\n  return {\n    vertical: anchorOrigin?.vertical ?? 'top',\n    horizontal: anchorOrigin?.horizontal ?? 'right'\n  };\n}\nconst Badge = /*#__PURE__*/React.forwardRef(function Badge(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiBadge'\n  });\n  const {\n    anchorOrigin: anchorOriginProp,\n    className,\n    classes: classesProp,\n    component,\n    components = {},\n    componentsProps = {},\n    children,\n    overlap: overlapProp = 'rectangular',\n    color: colorProp = 'default',\n    invisible: invisibleProp = false,\n    max: maxProp = 99,\n    badgeContent: badgeContentProp,\n    slots,\n    slotProps,\n    showZero = false,\n    variant: variantProp = 'standard',\n    ...other\n  } = props;\n  const {\n    badgeContent,\n    invisible: invisibleFromHook,\n    max,\n    displayValue: displayValueFromHook\n  } = useBadge({\n    max: maxProp,\n    invisible: invisibleProp,\n    badgeContent: badgeContentProp,\n    showZero\n  });\n  const prevProps = usePreviousProps({\n    anchorOrigin: getAnchorOrigin(anchorOriginProp),\n    color: colorProp,\n    overlap: overlapProp,\n    variant: variantProp,\n    badgeContent: badgeContentProp\n  });\n  const invisible = invisibleFromHook || badgeContent == null && variantProp !== 'dot';\n  const {\n    color = colorProp,\n    overlap = overlapProp,\n    anchorOrigin: anchorOriginPropProp,\n    variant = variantProp\n  } = invisible ? prevProps : props;\n  const anchorOrigin = getAnchorOrigin(anchorOriginPropProp);\n  const displayValue = variant !== 'dot' ? displayValueFromHook : undefined;\n  const ownerState = {\n    ...props,\n    badgeContent,\n    invisible,\n    max,\n    displayValue,\n    showZero,\n    anchorOrigin,\n    color,\n    overlap,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n\n  // support both `slots` and `components` for backward compatibility\n  const externalForwardedProps = {\n    slots: {\n      root: slots?.root ?? components.Root,\n      badge: slots?.badge ?? components.Badge\n    },\n    slotProps: {\n      root: slotProps?.root ?? componentsProps.root,\n      badge: slotProps?.badge ?? componentsProps.badge\n    }\n  };\n  const [RootSlot, rootProps] = useSlot('root', {\n    elementType: BadgeRoot,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      ...other\n    },\n    ownerState,\n    className: clsx(classes.root, className),\n    ref,\n    additionalProps: {\n      as: component\n    }\n  });\n  const [BadgeSlot, badgeProps] = useSlot('badge', {\n    elementType: BadgeBadge,\n    externalForwardedProps,\n    ownerState,\n    className: classes.badge\n  });\n  return /*#__PURE__*/_jsxs(RootSlot, {\n    ...rootProps,\n    children: [children, /*#__PURE__*/_jsx(BadgeSlot, {\n      ...badgeProps,\n      children: displayValue\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Badge.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The anchor of the badge.\n   * @default {\n   *   vertical: 'top',\n   *   horizontal: 'right',\n   * }\n   */\n  anchorOrigin: PropTypes.shape({\n    horizontal: PropTypes.oneOf(['left', 'right']),\n    vertical: PropTypes.oneOf(['bottom', 'top'])\n  }),\n  /**\n   * The content rendered within the badge.\n   */\n  badgeContent: PropTypes.node,\n  /**\n   * The badge will be added relative to this node.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'default'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Badge: PropTypes.elementType,\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    badge: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * If `true`, the badge is invisible.\n   * @default false\n   */\n  invisible: PropTypes.bool,\n  /**\n   * Max count to show.\n   * @default 99\n   */\n  max: PropTypes.number,\n  /**\n   * Wrapped shape the badge should overlap.\n   * @default 'rectangular'\n   */\n  overlap: PropTypes.oneOf(['circular', 'rectangular']),\n  /**\n   * Controls whether the badge is hidden when `badgeContent` is zero.\n   * @default false\n   */\n  showZero: PropTypes.bool,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    badge: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    badge: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The variant to use.\n   * @default 'standard'\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['dot', 'standard']), PropTypes.string])\n} : void 0;\nexport default Badge;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nconst boxClasses = generateUtilityClasses('MuiBox', ['root']);\nexport default boxClasses;","'use client';\n\nimport { createBox } from '@mui/system';\nimport PropTypes from 'prop-types';\nimport { unstable_ClassNameGenerator as ClassNameGenerator } from \"../className/index.js\";\nimport { createTheme } from \"../styles/index.js\";\nimport THEME_ID from \"../styles/identifier.js\";\nimport boxClasses from \"./boxClasses.js\";\nconst defaultTheme = createTheme();\nconst Box = createBox({\n  themeId: THEME_ID,\n  defaultTheme,\n  defaultClassName: boxClasses.root,\n  generateClassName: ClassNameGenerator.generate\n});\nprocess.env.NODE_ENV !== \"production\" ? Box.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * @ignore\n   */\n  children: PropTypes.node,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default Box;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getButtonUtilityClass(slot) {\n  return generateUtilityClass('MuiButton', slot);\n}\nconst buttonClasses = generateUtilityClasses('MuiButton', ['root', 'text', 'textInherit', 'textPrimary', 'textSecondary', 'textSuccess', 'textError', 'textInfo', 'textWarning', 'outlined', 'outlinedInherit', 'outlinedPrimary', 'outlinedSecondary', 'outlinedSuccess', 'outlinedError', 'outlinedInfo', 'outlinedWarning', 'contained', 'containedInherit', 'containedPrimary', 'containedSecondary', 'containedSuccess', 'containedError', 'containedInfo', 'containedWarning', 'disableElevation', 'focusVisible', 'disabled', 'colorInherit', 'colorPrimary', 'colorSecondary', 'colorSuccess', 'colorError', 'colorInfo', 'colorWarning', 'textSizeSmall', 'textSizeMedium', 'textSizeLarge', 'outlinedSizeSmall', 'outlinedSizeMedium', 'outlinedSizeLarge', 'containedSizeSmall', 'containedSizeMedium', 'containedSizeLarge', 'sizeMedium', 'sizeSmall', 'sizeLarge', 'fullWidth', 'startIcon', 'endIcon', 'icon', 'iconSizeSmall', 'iconSizeMedium', 'iconSizeLarge', 'loading', 'loadingWrapper', 'loadingIconPlaceholder', 'loadingIndicator', 'loadingPositionCenter', 'loadingPositionStart', 'loadingPositionEnd']);\nexport default buttonClasses;","'use client';\n\nimport * as React from 'react';\n/**\n * @ignore - internal component.\n */\nconst ButtonGroupContext = /*#__PURE__*/React.createContext({});\nif (process.env.NODE_ENV !== 'production') {\n  ButtonGroupContext.displayName = 'ButtonGroupContext';\n}\nexport default ButtonGroupContext;","'use client';\n\nimport * as React from 'react';\n/**\n * @ignore - internal component.\n */\nconst ButtonGroupButtonContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== 'production') {\n  ButtonGroupButtonContext.displayName = 'ButtonGroupButtonContext';\n}\nexport default ButtonGroupButtonContext;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport resolveProps from '@mui/utils/resolveProps';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { unstable_useId as useId } from \"../utils/index.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport ButtonBase from \"../ButtonBase/index.js\";\nimport CircularProgress from \"../CircularProgress/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport buttonClasses, { getButtonUtilityClass } from \"./buttonClasses.js\";\nimport ButtonGroupContext from \"../ButtonGroup/ButtonGroupContext.js\";\nimport ButtonGroupButtonContext from \"../ButtonGroup/ButtonGroupButtonContext.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    color,\n    disableElevation,\n    fullWidth,\n    size,\n    variant,\n    loading,\n    loadingPosition,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', loading && 'loading', variant, `${variant}${capitalize(color)}`, `size${capitalize(size)}`, `${variant}Size${capitalize(size)}`, `color${capitalize(color)}`, disableElevation && 'disableElevation', fullWidth && 'fullWidth', loading && `loadingPosition${capitalize(loadingPosition)}`],\n    startIcon: ['icon', 'startIcon', `iconSize${capitalize(size)}`],\n    endIcon: ['icon', 'endIcon', `iconSize${capitalize(size)}`],\n    loadingIndicator: ['loadingIndicator'],\n    loadingWrapper: ['loadingWrapper']\n  };\n  const composedClasses = composeClasses(slots, getButtonUtilityClass, classes);\n  return {\n    ...classes,\n    // forward the focused, disabled, etc. classes to the ButtonBase\n    ...composedClasses\n  };\n};\nconst commonIconStyles = [{\n  props: {\n    size: 'small'\n  },\n  style: {\n    '& > *:nth-of-type(1)': {\n      fontSize: 18\n    }\n  }\n}, {\n  props: {\n    size: 'medium'\n  },\n  style: {\n    '& > *:nth-of-type(1)': {\n      fontSize: 20\n    }\n  }\n}, {\n  props: {\n    size: 'large'\n  },\n  style: {\n    '& > *:nth-of-type(1)': {\n      fontSize: 22\n    }\n  }\n}];\nconst ButtonRoot = styled(ButtonBase, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiButton',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[ownerState.variant], styles[`${ownerState.variant}${capitalize(ownerState.color)}`], styles[`size${capitalize(ownerState.size)}`], styles[`${ownerState.variant}Size${capitalize(ownerState.size)}`], ownerState.color === 'inherit' && styles.colorInherit, ownerState.disableElevation && styles.disableElevation, ownerState.fullWidth && styles.fullWidth, ownerState.loading && styles.loading];\n  }\n})(memoTheme(({\n  theme\n}) => {\n  const inheritContainedBackgroundColor = theme.palette.mode === 'light' ? theme.palette.grey[300] : theme.palette.grey[800];\n  const inheritContainedHoverBackgroundColor = theme.palette.mode === 'light' ? theme.palette.grey.A100 : theme.palette.grey[700];\n  return {\n    ...theme.typography.button,\n    minWidth: 64,\n    padding: '6px 16px',\n    border: 0,\n    borderRadius: (theme.vars || theme).shape.borderRadius,\n    transition: theme.transitions.create(['background-color', 'box-shadow', 'border-color', 'color'], {\n      duration: theme.transitions.duration.short\n    }),\n    '&:hover': {\n      textDecoration: 'none'\n    },\n    [`&.${buttonClasses.disabled}`]: {\n      color: (theme.vars || theme).palette.action.disabled\n    },\n    variants: [{\n      props: {\n        variant: 'contained'\n      },\n      style: {\n        color: `var(--variant-containedColor)`,\n        backgroundColor: `var(--variant-containedBg)`,\n        boxShadow: (theme.vars || theme).shadows[2],\n        '&:hover': {\n          boxShadow: (theme.vars || theme).shadows[4],\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            boxShadow: (theme.vars || theme).shadows[2]\n          }\n        },\n        '&:active': {\n          boxShadow: (theme.vars || theme).shadows[8]\n        },\n        [`&.${buttonClasses.focusVisible}`]: {\n          boxShadow: (theme.vars || theme).shadows[6]\n        },\n        [`&.${buttonClasses.disabled}`]: {\n          color: (theme.vars || theme).palette.action.disabled,\n          boxShadow: (theme.vars || theme).shadows[0],\n          backgroundColor: (theme.vars || theme).palette.action.disabledBackground\n        }\n      }\n    }, {\n      props: {\n        variant: 'outlined'\n      },\n      style: {\n        padding: '5px 15px',\n        border: '1px solid currentColor',\n        borderColor: `var(--variant-outlinedBorder, currentColor)`,\n        backgroundColor: `var(--variant-outlinedBg)`,\n        color: `var(--variant-outlinedColor)`,\n        [`&.${buttonClasses.disabled}`]: {\n          border: `1px solid ${(theme.vars || theme).palette.action.disabledBackground}`\n        }\n      }\n    }, {\n      props: {\n        variant: 'text'\n      },\n      style: {\n        padding: '6px 8px',\n        color: `var(--variant-textColor)`,\n        backgroundColor: `var(--variant-textBg)`\n      }\n    }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n      props: {\n        color\n      },\n      style: {\n        '--variant-textColor': (theme.vars || theme).palette[color].main,\n        '--variant-outlinedColor': (theme.vars || theme).palette[color].main,\n        '--variant-outlinedBorder': theme.alpha((theme.vars || theme).palette[color].main, 0.5),\n        '--variant-containedColor': (theme.vars || theme).palette[color].contrastText,\n        '--variant-containedBg': (theme.vars || theme).palette[color].main,\n        '@media (hover: hover)': {\n          '&:hover': {\n            '--variant-containedBg': (theme.vars || theme).palette[color].dark,\n            '--variant-textBg': theme.alpha((theme.vars || theme).palette[color].main, (theme.vars || theme).palette.action.hoverOpacity),\n            '--variant-outlinedBorder': (theme.vars || theme).palette[color].main,\n            '--variant-outlinedBg': theme.alpha((theme.vars || theme).palette[color].main, (theme.vars || theme).palette.action.hoverOpacity)\n          }\n        }\n      }\n    })), {\n      props: {\n        color: 'inherit'\n      },\n      style: {\n        color: 'inherit',\n        borderColor: 'currentColor',\n        '--variant-containedBg': theme.vars ? theme.vars.palette.Button.inheritContainedBg : inheritContainedBackgroundColor,\n        '@media (hover: hover)': {\n          '&:hover': {\n            '--variant-containedBg': theme.vars ? theme.vars.palette.Button.inheritContainedHoverBg : inheritContainedHoverBackgroundColor,\n            '--variant-textBg': theme.alpha((theme.vars || theme).palette.text.primary, (theme.vars || theme).palette.action.hoverOpacity),\n            '--variant-outlinedBg': theme.alpha((theme.vars || theme).palette.text.primary, (theme.vars || theme).palette.action.hoverOpacity)\n          }\n        }\n      }\n    }, {\n      props: {\n        size: 'small',\n        variant: 'text'\n      },\n      style: {\n        padding: '4px 5px',\n        fontSize: theme.typography.pxToRem(13)\n      }\n    }, {\n      props: {\n        size: 'large',\n        variant: 'text'\n      },\n      style: {\n        padding: '8px 11px',\n        fontSize: theme.typography.pxToRem(15)\n      }\n    }, {\n      props: {\n        size: 'small',\n        variant: 'outlined'\n      },\n      style: {\n        padding: '3px 9px',\n        fontSize: theme.typography.pxToRem(13)\n      }\n    }, {\n      props: {\n        size: 'large',\n        variant: 'outlined'\n      },\n      style: {\n        padding: '7px 21px',\n        fontSize: theme.typography.pxToRem(15)\n      }\n    }, {\n      props: {\n        size: 'small',\n        variant: 'contained'\n      },\n      style: {\n        padding: '4px 10px',\n        fontSize: theme.typography.pxToRem(13)\n      }\n    }, {\n      props: {\n        size: 'large',\n        variant: 'contained'\n      },\n      style: {\n        padding: '8px 22px',\n        fontSize: theme.typography.pxToRem(15)\n      }\n    }, {\n      props: {\n        disableElevation: true\n      },\n      style: {\n        boxShadow: 'none',\n        '&:hover': {\n          boxShadow: 'none'\n        },\n        [`&.${buttonClasses.focusVisible}`]: {\n          boxShadow: 'none'\n        },\n        '&:active': {\n          boxShadow: 'none'\n        },\n        [`&.${buttonClasses.disabled}`]: {\n          boxShadow: 'none'\n        }\n      }\n    }, {\n      props: {\n        fullWidth: true\n      },\n      style: {\n        width: '100%'\n      }\n    }, {\n      props: {\n        loadingPosition: 'center'\n      },\n      style: {\n        transition: theme.transitions.create(['background-color', 'box-shadow', 'border-color'], {\n          duration: theme.transitions.duration.short\n        }),\n        [`&.${buttonClasses.loading}`]: {\n          color: 'transparent'\n        }\n      }\n    }]\n  };\n}));\nconst ButtonStartIcon = styled('span', {\n  name: 'MuiButton',\n  slot: 'StartIcon',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.startIcon, ownerState.loading && styles.startIconLoadingStart, styles[`iconSize${capitalize(ownerState.size)}`]];\n  }\n})(({\n  theme\n}) => ({\n  display: 'inherit',\n  marginRight: 8,\n  marginLeft: -4,\n  variants: [{\n    props: {\n      size: 'small'\n    },\n    style: {\n      marginLeft: -2\n    }\n  }, {\n    props: {\n      loadingPosition: 'start',\n      loading: true\n    },\n    style: {\n      transition: theme.transitions.create(['opacity'], {\n        duration: theme.transitions.duration.short\n      }),\n      opacity: 0\n    }\n  }, {\n    props: {\n      loadingPosition: 'start',\n      loading: true,\n      fullWidth: true\n    },\n    style: {\n      marginRight: -8\n    }\n  }, ...commonIconStyles]\n}));\nconst ButtonEndIcon = styled('span', {\n  name: 'MuiButton',\n  slot: 'EndIcon',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.endIcon, ownerState.loading && styles.endIconLoadingEnd, styles[`iconSize${capitalize(ownerState.size)}`]];\n  }\n})(({\n  theme\n}) => ({\n  display: 'inherit',\n  marginRight: -4,\n  marginLeft: 8,\n  variants: [{\n    props: {\n      size: 'small'\n    },\n    style: {\n      marginRight: -2\n    }\n  }, {\n    props: {\n      loadingPosition: 'end',\n      loading: true\n    },\n    style: {\n      transition: theme.transitions.create(['opacity'], {\n        duration: theme.transitions.duration.short\n      }),\n      opacity: 0\n    }\n  }, {\n    props: {\n      loadingPosition: 'end',\n      loading: true,\n      fullWidth: true\n    },\n    style: {\n      marginLeft: -8\n    }\n  }, ...commonIconStyles]\n}));\nconst ButtonLoadingIndicator = styled('span', {\n  name: 'MuiButton',\n  slot: 'LoadingIndicator'\n})(({\n  theme\n}) => ({\n  display: 'none',\n  position: 'absolute',\n  visibility: 'visible',\n  variants: [{\n    props: {\n      loading: true\n    },\n    style: {\n      display: 'flex'\n    }\n  }, {\n    props: {\n      loadingPosition: 'start'\n    },\n    style: {\n      left: 14\n    }\n  }, {\n    props: {\n      loadingPosition: 'start',\n      size: 'small'\n    },\n    style: {\n      left: 10\n    }\n  }, {\n    props: {\n      variant: 'text',\n      loadingPosition: 'start'\n    },\n    style: {\n      left: 6\n    }\n  }, {\n    props: {\n      loadingPosition: 'center'\n    },\n    style: {\n      left: '50%',\n      transform: 'translate(-50%)',\n      color: (theme.vars || theme).palette.action.disabled\n    }\n  }, {\n    props: {\n      loadingPosition: 'end'\n    },\n    style: {\n      right: 14\n    }\n  }, {\n    props: {\n      loadingPosition: 'end',\n      size: 'small'\n    },\n    style: {\n      right: 10\n    }\n  }, {\n    props: {\n      variant: 'text',\n      loadingPosition: 'end'\n    },\n    style: {\n      right: 6\n    }\n  }, {\n    props: {\n      loadingPosition: 'start',\n      fullWidth: true\n    },\n    style: {\n      position: 'relative',\n      left: -10\n    }\n  }, {\n    props: {\n      loadingPosition: 'end',\n      fullWidth: true\n    },\n    style: {\n      position: 'relative',\n      right: -10\n    }\n  }]\n}));\nconst ButtonLoadingIconPlaceholder = styled('span', {\n  name: 'MuiButton',\n  slot: 'LoadingIconPlaceholder'\n})({\n  display: 'inline-block',\n  width: '1em',\n  height: '1em'\n});\nconst Button = /*#__PURE__*/React.forwardRef(function Button(inProps, ref) {\n  // props priority: `inProps` > `contextProps` > `themeDefaultProps`\n  const contextProps = React.useContext(ButtonGroupContext);\n  const buttonGroupButtonContextPositionClassName = React.useContext(ButtonGroupButtonContext);\n  const resolvedProps = resolveProps(contextProps, inProps);\n  const props = useDefaultProps({\n    props: resolvedProps,\n    name: 'MuiButton'\n  });\n  const {\n    children,\n    color = 'primary',\n    component = 'button',\n    className,\n    disabled = false,\n    disableElevation = false,\n    disableFocusRipple = false,\n    endIcon: endIconProp,\n    focusVisibleClassName,\n    fullWidth = false,\n    id: idProp,\n    loading = null,\n    loadingIndicator: loadingIndicatorProp,\n    loadingPosition = 'center',\n    size = 'medium',\n    startIcon: startIconProp,\n    type,\n    variant = 'text',\n    ...other\n  } = props;\n  const loadingId = useId(idProp);\n  const loadingIndicator = loadingIndicatorProp ?? /*#__PURE__*/_jsx(CircularProgress, {\n    \"aria-labelledby\": loadingId,\n    color: \"inherit\",\n    size: 16\n  });\n  const ownerState = {\n    ...props,\n    color,\n    component,\n    disabled,\n    disableElevation,\n    disableFocusRipple,\n    fullWidth,\n    loading,\n    loadingIndicator,\n    loadingPosition,\n    size,\n    type,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  const startIcon = (startIconProp || loading && loadingPosition === 'start') && /*#__PURE__*/_jsx(ButtonStartIcon, {\n    className: classes.startIcon,\n    ownerState: ownerState,\n    children: startIconProp || /*#__PURE__*/_jsx(ButtonLoadingIconPlaceholder, {\n      className: classes.loadingIconPlaceholder,\n      ownerState: ownerState\n    })\n  });\n  const endIcon = (endIconProp || loading && loadingPosition === 'end') && /*#__PURE__*/_jsx(ButtonEndIcon, {\n    className: classes.endIcon,\n    ownerState: ownerState,\n    children: endIconProp || /*#__PURE__*/_jsx(ButtonLoadingIconPlaceholder, {\n      className: classes.loadingIconPlaceholder,\n      ownerState: ownerState\n    })\n  });\n  const positionClassName = buttonGroupButtonContextPositionClassName || '';\n  const loader = typeof loading === 'boolean' ?\n  /*#__PURE__*/\n  // use plain HTML span to minimize the runtime overhead\n  _jsx(\"span\", {\n    className: classes.loadingWrapper,\n    style: {\n      display: 'contents'\n    },\n    children: loading && /*#__PURE__*/_jsx(ButtonLoadingIndicator, {\n      className: classes.loadingIndicator,\n      ownerState: ownerState,\n      children: loadingIndicator\n    })\n  }) : null;\n  return /*#__PURE__*/_jsxs(ButtonRoot, {\n    ownerState: ownerState,\n    className: clsx(contextProps.className, classes.root, className, positionClassName),\n    component: component,\n    disabled: disabled || loading,\n    focusRipple: !disableFocusRipple,\n    focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),\n    ref: ref,\n    type: type,\n    id: loading ? loadingId : idProp,\n    ...other,\n    classes: classes,\n    children: [startIcon, loadingPosition !== 'end' && loader, children, loadingPosition === 'end' && loader, endIcon]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Button.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'primary', 'secondary', 'success', 'error', 'info', 'warning']), PropTypes.string]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, no elevation is used.\n   * @default false\n   */\n  disableElevation: PropTypes.bool,\n  /**\n   * If `true`, the  keyboard focus ripple is disabled.\n   * @default false\n   */\n  disableFocusRipple: PropTypes.bool,\n  /**\n   * If `true`, the ripple effect is disabled.\n   *\n   * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n   * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.\n   * @default false\n   */\n  disableRipple: PropTypes.bool,\n  /**\n   * Element placed after the children.\n   */\n  endIcon: PropTypes.node,\n  /**\n   * @ignore\n   */\n  focusVisibleClassName: PropTypes.string,\n  /**\n   * If `true`, the button will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * The URL to link to when the button is clicked.\n   * If defined, an `a` element will be used as the root node.\n   */\n  href: PropTypes.string,\n  /**\n   * @ignore\n   */\n  id: PropTypes.string,\n  /**\n   * If `true`, the loading indicator is visible and the button is disabled.\n   * If `true | false`, the loading wrapper is always rendered before the children to prevent [Google Translation Crash](https://github.com/mui/material-ui/issues/27853).\n   * @default null\n   */\n  loading: PropTypes.bool,\n  /**\n   * Element placed before the children if the button is in loading state.\n   * The node should contain an element with `role=\"progressbar\"` with an accessible name.\n   * By default, it renders a `CircularProgress` that is labeled by the button itself.\n   * @default <CircularProgress color=\"inherit\" size={16} />\n   */\n  loadingIndicator: PropTypes.node,\n  /**\n   * The loading indicator can be positioned on the start, end, or the center of the button.\n   * @default 'center'\n   */\n  loadingPosition: PropTypes.oneOf(['center', 'end', 'start']),\n  /**\n   * The size of the component.\n   * `small` is equivalent to the dense button styling.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),\n  /**\n   * Element placed before the children.\n   */\n  startIcon: PropTypes.node,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * @ignore\n   */\n  type: PropTypes.oneOfType([PropTypes.oneOf(['button', 'reset', 'submit']), PropTypes.string]),\n  /**\n   * The variant to use.\n   * @default 'text'\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['contained', 'outlined', 'text']), PropTypes.string])\n} : void 0;\nexport default Button;","import * as React from 'react';\n\n/**\n * Gets only the valid children of a component,\n * and ignores any nullish or falsy child.\n *\n * @param children the children\n */\nexport default function getValidReactChildren(children) {\n  return React.Children.toArray(children).filter(child => /*#__PURE__*/React.isValidElement(child));\n}","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getButtonGroupUtilityClass(slot) {\n  return generateUtilityClass('MuiButtonGroup', slot);\n}\nconst buttonGroupClasses = generateUtilityClasses('MuiButtonGroup', ['root', 'contained', 'outlined', 'text', 'disableElevation', 'disabled', 'firstButton', 'fullWidth', 'horizontal', 'vertical', 'colorPrimary', 'colorSecondary', 'grouped', 'groupedHorizontal', 'groupedVertical', 'groupedText', 'groupedTextHorizontal', 'groupedTextVertical', 'groupedTextPrimary', 'groupedTextSecondary', 'groupedOutlined', 'groupedOutlinedHorizontal', 'groupedOutlinedVertical', 'groupedOutlinedPrimary', 'groupedOutlinedSecondary', 'groupedContained', 'groupedContainedHorizontal', 'groupedContainedVertical', 'groupedContainedPrimary', 'groupedContainedSecondary', 'lastButton', 'middleButton']);\nexport default buttonGroupClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport getValidReactChildren from '@mui/utils/getValidReactChildren';\nimport capitalize from \"../utils/capitalize.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport buttonGroupClasses, { getButtonGroupUtilityClass } from \"./buttonGroupClasses.js\";\nimport ButtonGroupContext from \"./ButtonGroupContext.js\";\nimport ButtonGroupButtonContext from \"./ButtonGroupButtonContext.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst overridesResolver = (props, styles) => {\n  const {\n    ownerState\n  } = props;\n  return [{\n    [`& .${buttonGroupClasses.grouped}`]: styles.grouped\n  }, {\n    [`& .${buttonGroupClasses.grouped}`]: styles[`grouped${capitalize(ownerState.orientation)}`]\n  }, {\n    [`& .${buttonGroupClasses.grouped}`]: styles[`grouped${capitalize(ownerState.variant)}`]\n  }, {\n    [`& .${buttonGroupClasses.grouped}`]: styles[`grouped${capitalize(ownerState.variant)}${capitalize(ownerState.orientation)}`]\n  }, {\n    [`& .${buttonGroupClasses.grouped}`]: styles[`grouped${capitalize(ownerState.variant)}${capitalize(ownerState.color)}`]\n  }, {\n    [`& .${buttonGroupClasses.firstButton}`]: styles.firstButton\n  }, {\n    [`& .${buttonGroupClasses.lastButton}`]: styles.lastButton\n  }, {\n    [`& .${buttonGroupClasses.middleButton}`]: styles.middleButton\n  }, styles.root, styles[ownerState.variant], ownerState.disableElevation === true && styles.disableElevation, ownerState.fullWidth && styles.fullWidth, ownerState.orientation === 'vertical' && styles.vertical];\n};\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    color,\n    disabled,\n    disableElevation,\n    fullWidth,\n    orientation,\n    variant\n  } = ownerState;\n  const slots = {\n    root: ['root', variant, orientation, fullWidth && 'fullWidth', disableElevation && 'disableElevation', `color${capitalize(color)}`],\n    grouped: ['grouped', `grouped${capitalize(orientation)}`, `grouped${capitalize(variant)}`, `grouped${capitalize(variant)}${capitalize(orientation)}`, `grouped${capitalize(variant)}${capitalize(color)}`, disabled && 'disabled'],\n    firstButton: ['firstButton'],\n    lastButton: ['lastButton'],\n    middleButton: ['middleButton']\n  };\n  return composeClasses(slots, getButtonGroupUtilityClass, classes);\n};\nconst ButtonGroupRoot = styled('div', {\n  name: 'MuiButtonGroup',\n  slot: 'Root',\n  overridesResolver\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'inline-flex',\n  borderRadius: (theme.vars || theme).shape.borderRadius,\n  variants: [{\n    props: {\n      variant: 'contained'\n    },\n    style: {\n      boxShadow: (theme.vars || theme).shadows[2]\n    }\n  }, {\n    props: {\n      disableElevation: true\n    },\n    style: {\n      boxShadow: 'none'\n    }\n  }, {\n    props: {\n      fullWidth: true\n    },\n    style: {\n      width: '100%'\n    }\n  }, {\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      flexDirection: 'column',\n      [`& .${buttonGroupClasses.lastButton},& .${buttonGroupClasses.middleButton}`]: {\n        borderTopRightRadius: 0,\n        borderTopLeftRadius: 0\n      },\n      [`& .${buttonGroupClasses.firstButton},& .${buttonGroupClasses.middleButton}`]: {\n        borderBottomRightRadius: 0,\n        borderBottomLeftRadius: 0\n      }\n    }\n  }, {\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      [`& .${buttonGroupClasses.firstButton},& .${buttonGroupClasses.middleButton}`]: {\n        borderTopRightRadius: 0,\n        borderBottomRightRadius: 0\n      },\n      [`& .${buttonGroupClasses.lastButton},& .${buttonGroupClasses.middleButton}`]: {\n        borderTopLeftRadius: 0,\n        borderBottomLeftRadius: 0\n      }\n    }\n  }, {\n    props: {\n      variant: 'text',\n      orientation: 'horizontal'\n    },\n    style: {\n      [`& .${buttonGroupClasses.firstButton},& .${buttonGroupClasses.middleButton}`]: {\n        borderRight: theme.vars ? `1px solid ${theme.alpha(theme.vars.palette.common.onBackground, 0.23)}` : `1px solid ${theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)'}`,\n        [`&.${buttonGroupClasses.disabled}`]: {\n          borderRight: `1px solid ${(theme.vars || theme).palette.action.disabled}`\n        }\n      }\n    }\n  }, {\n    props: {\n      variant: 'text',\n      orientation: 'vertical'\n    },\n    style: {\n      [`& .${buttonGroupClasses.firstButton},& .${buttonGroupClasses.middleButton}`]: {\n        borderBottom: theme.vars ? `1px solid ${theme.alpha(theme.vars.palette.common.onBackground, 0.23)}` : `1px solid ${theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)'}`,\n        [`&.${buttonGroupClasses.disabled}`]: {\n          borderBottom: `1px solid ${(theme.vars || theme).palette.action.disabled}`\n        }\n      }\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).flatMap(([color]) => [{\n    props: {\n      variant: 'text',\n      color\n    },\n    style: {\n      [`& .${buttonGroupClasses.firstButton},& .${buttonGroupClasses.middleButton}`]: {\n        borderColor: theme.alpha((theme.vars || theme).palette[color].main, 0.5)\n      }\n    }\n  }]), {\n    props: {\n      variant: 'outlined',\n      orientation: 'horizontal'\n    },\n    style: {\n      [`& .${buttonGroupClasses.firstButton},& .${buttonGroupClasses.middleButton}`]: {\n        borderRightColor: 'transparent',\n        '&:hover': {\n          borderRightColor: 'currentColor'\n        }\n      },\n      [`& .${buttonGroupClasses.lastButton},& .${buttonGroupClasses.middleButton}`]: {\n        marginLeft: -1\n      }\n    }\n  }, {\n    props: {\n      variant: 'outlined',\n      orientation: 'vertical'\n    },\n    style: {\n      [`& .${buttonGroupClasses.firstButton},& .${buttonGroupClasses.middleButton}`]: {\n        borderBottomColor: 'transparent',\n        '&:hover': {\n          borderBottomColor: 'currentColor'\n        }\n      },\n      [`& .${buttonGroupClasses.lastButton},& .${buttonGroupClasses.middleButton}`]: {\n        marginTop: -1\n      }\n    }\n  }, {\n    props: {\n      variant: 'contained',\n      orientation: 'horizontal'\n    },\n    style: {\n      [`& .${buttonGroupClasses.firstButton},& .${buttonGroupClasses.middleButton}`]: {\n        borderRight: `1px solid ${(theme.vars || theme).palette.grey[400]}`,\n        [`&.${buttonGroupClasses.disabled}`]: {\n          borderRight: `1px solid ${(theme.vars || theme).palette.action.disabled}`\n        }\n      }\n    }\n  }, {\n    props: {\n      variant: 'contained',\n      orientation: 'vertical'\n    },\n    style: {\n      [`& .${buttonGroupClasses.firstButton},& .${buttonGroupClasses.middleButton}`]: {\n        borderBottom: `1px solid ${(theme.vars || theme).palette.grey[400]}`,\n        [`&.${buttonGroupClasses.disabled}`]: {\n          borderBottom: `1px solid ${(theme.vars || theme).palette.action.disabled}`\n        }\n      }\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter(['dark'])).map(([color]) => ({\n    props: {\n      variant: 'contained',\n      color\n    },\n    style: {\n      [`& .${buttonGroupClasses.firstButton},& .${buttonGroupClasses.middleButton}`]: {\n        borderColor: (theme.vars || theme).palette[color].dark\n      }\n    }\n  }))],\n  [`& .${buttonGroupClasses.grouped}`]: {\n    minWidth: 40,\n    boxShadow: 'none',\n    props: {\n      variant: 'contained'\n    },\n    style: {\n      '&:hover': {\n        boxShadow: 'none'\n      }\n    }\n  }\n})));\nconst ButtonGroup = /*#__PURE__*/React.forwardRef(function ButtonGroup(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiButtonGroup'\n  });\n  const {\n    children,\n    className,\n    color = 'primary',\n    component = 'div',\n    disabled = false,\n    disableElevation = false,\n    disableFocusRipple = false,\n    disableRipple = false,\n    fullWidth = false,\n    orientation = 'horizontal',\n    size = 'medium',\n    variant = 'outlined',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    color,\n    component,\n    disabled,\n    disableElevation,\n    disableFocusRipple,\n    disableRipple,\n    fullWidth,\n    orientation,\n    size,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  const context = React.useMemo(() => ({\n    className: classes.grouped,\n    color,\n    disabled,\n    disableElevation,\n    disableFocusRipple,\n    disableRipple,\n    fullWidth,\n    size,\n    variant\n  }), [color, disabled, disableElevation, disableFocusRipple, disableRipple, fullWidth, size, variant, classes.grouped]);\n  const validChildren = getValidReactChildren(children);\n  const childrenCount = validChildren.length;\n  const getButtonPositionClassName = index => {\n    const isFirstButton = index === 0;\n    const isLastButton = index === childrenCount - 1;\n    if (isFirstButton && isLastButton) {\n      return '';\n    }\n    if (isFirstButton) {\n      return classes.firstButton;\n    }\n    if (isLastButton) {\n      return classes.lastButton;\n    }\n    return classes.middleButton;\n  };\n  return /*#__PURE__*/_jsx(ButtonGroupRoot, {\n    as: component,\n    role: \"group\",\n    className: clsx(classes.root, className),\n    ref: ref,\n    ownerState: ownerState,\n    ...other,\n    children: /*#__PURE__*/_jsx(ButtonGroupContext.Provider, {\n      value: context,\n      children: validChildren.map((child, index) => {\n        return /*#__PURE__*/_jsx(ButtonGroupButtonContext.Provider, {\n          value: getButtonPositionClassName(index),\n          children: child\n        }, index);\n      })\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? ButtonGroup.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, no elevation is used.\n   * @default false\n   */\n  disableElevation: PropTypes.bool,\n  /**\n   * If `true`, the button keyboard focus ripple is disabled.\n   * @default false\n   */\n  disableFocusRipple: PropTypes.bool,\n  /**\n   * If `true`, the button ripple effect is disabled.\n   * @default false\n   */\n  disableRipple: PropTypes.bool,\n  /**\n   * If `true`, the buttons will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * The component orientation (layout flow direction).\n   * @default 'horizontal'\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n  /**\n   * The size of the component.\n   * `small` is equivalent to the dense button styling.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The variant to use.\n   * @default 'outlined'\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['contained', 'outlined', 'text']), PropTypes.string])\n} : void 0;\nexport default ButtonGroup;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSwitchBaseUtilityClass(slot) {\n  return generateUtilityClass('PrivateSwitchBase', slot);\n}\nconst switchBaseClasses = generateUtilityClasses('PrivateSwitchBase', ['root', 'checked', 'disabled', 'input', 'edgeStart', 'edgeEnd']);\nexport default switchBaseClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport refType from '@mui/utils/refType';\nimport composeClasses from '@mui/utils/composeClasses';\nimport capitalize from \"../utils/capitalize.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport useControlled from \"../utils/useControlled.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport ButtonBase from \"../ButtonBase/index.js\";\nimport { getSwitchBaseUtilityClass } from \"./switchBaseClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    checked,\n    disabled,\n    edge\n  } = ownerState;\n  const slots = {\n    root: ['root', checked && 'checked', disabled && 'disabled', edge && `edge${capitalize(edge)}`],\n    input: ['input']\n  };\n  return composeClasses(slots, getSwitchBaseUtilityClass, classes);\n};\nconst SwitchBaseRoot = styled(ButtonBase, {\n  name: 'MuiSwitchBase'\n})({\n  padding: 9,\n  borderRadius: '50%',\n  variants: [{\n    props: {\n      edge: 'start',\n      size: 'small'\n    },\n    style: {\n      marginLeft: -3\n    }\n  }, {\n    props: ({\n      edge,\n      ownerState\n    }) => edge === 'start' && ownerState.size !== 'small',\n    style: {\n      marginLeft: -12\n    }\n  }, {\n    props: {\n      edge: 'end',\n      size: 'small'\n    },\n    style: {\n      marginRight: -3\n    }\n  }, {\n    props: ({\n      edge,\n      ownerState\n    }) => edge === 'end' && ownerState.size !== 'small',\n    style: {\n      marginRight: -12\n    }\n  }]\n});\nconst SwitchBaseInput = styled('input', {\n  name: 'MuiSwitchBase',\n  shouldForwardProp: rootShouldForwardProp\n})({\n  cursor: 'inherit',\n  position: 'absolute',\n  opacity: 0,\n  width: '100%',\n  height: '100%',\n  top: 0,\n  left: 0,\n  margin: 0,\n  padding: 0,\n  zIndex: 1\n});\n\n/**\n * @ignore - internal component.\n */\nconst SwitchBase = /*#__PURE__*/React.forwardRef(function SwitchBase(props, ref) {\n  const {\n    autoFocus,\n    checked: checkedProp,\n    checkedIcon,\n    defaultChecked,\n    disabled: disabledProp,\n    disableFocusRipple = false,\n    edge = false,\n    icon,\n    id,\n    inputProps,\n    inputRef,\n    name,\n    onBlur,\n    onChange,\n    onFocus,\n    readOnly,\n    required = false,\n    tabIndex,\n    type,\n    value,\n    slots = {},\n    slotProps = {},\n    ...other\n  } = props;\n  const [checked, setCheckedState] = useControlled({\n    controlled: checkedProp,\n    default: Boolean(defaultChecked),\n    name: 'SwitchBase',\n    state: 'checked'\n  });\n  const muiFormControl = useFormControl();\n  const handleFocus = event => {\n    if (onFocus) {\n      onFocus(event);\n    }\n    if (muiFormControl && muiFormControl.onFocus) {\n      muiFormControl.onFocus(event);\n    }\n  };\n  const handleBlur = event => {\n    if (onBlur) {\n      onBlur(event);\n    }\n    if (muiFormControl && muiFormControl.onBlur) {\n      muiFormControl.onBlur(event);\n    }\n  };\n  const handleInputChange = event => {\n    // Workaround for https://github.com/facebook/react/issues/9023\n    if (event.nativeEvent.defaultPrevented) {\n      return;\n    }\n    const newChecked = event.target.checked;\n    setCheckedState(newChecked);\n    if (onChange) {\n      // TODO v6: remove the second argument.\n      onChange(event, newChecked);\n    }\n  };\n  let disabled = disabledProp;\n  if (muiFormControl) {\n    if (typeof disabled === 'undefined') {\n      disabled = muiFormControl.disabled;\n    }\n  }\n  const hasLabelFor = type === 'checkbox' || type === 'radio';\n  const ownerState = {\n    ...props,\n    checked,\n    disabled,\n    disableFocusRipple,\n    edge\n  };\n  const classes = useUtilityClasses(ownerState);\n  const externalForwardedProps = {\n    slots,\n    slotProps: {\n      input: inputProps,\n      ...slotProps\n    }\n  };\n  const [RootSlot, rootSlotProps] = useSlot('root', {\n    ref,\n    elementType: SwitchBaseRoot,\n    className: classes.root,\n    shouldForwardComponentProp: true,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      component: 'span',\n      ...other\n    },\n    getSlotProps: handlers => ({\n      ...handlers,\n      onFocus: event => {\n        handlers.onFocus?.(event);\n        handleFocus(event);\n      },\n      onBlur: event => {\n        handlers.onBlur?.(event);\n        handleBlur(event);\n      }\n    }),\n    ownerState,\n    additionalProps: {\n      centerRipple: true,\n      focusRipple: !disableFocusRipple,\n      disabled,\n      role: undefined,\n      tabIndex: null\n    }\n  });\n  const [InputSlot, inputSlotProps] = useSlot('input', {\n    ref: inputRef,\n    elementType: SwitchBaseInput,\n    className: classes.input,\n    externalForwardedProps,\n    getSlotProps: handlers => ({\n      ...handlers,\n      onChange: event => {\n        handlers.onChange?.(event);\n        handleInputChange(event);\n      }\n    }),\n    ownerState,\n    additionalProps: {\n      autoFocus,\n      checked: checkedProp,\n      defaultChecked,\n      disabled,\n      id: hasLabelFor ? id : undefined,\n      name,\n      readOnly,\n      required,\n      tabIndex,\n      type,\n      ...(type === 'checkbox' && value === undefined ? {} : {\n        value\n      })\n    }\n  });\n  return /*#__PURE__*/_jsxs(RootSlot, {\n    ...rootSlotProps,\n    children: [/*#__PURE__*/_jsx(InputSlot, {\n      ...inputSlotProps\n    }), checked ? checkedIcon : icon]\n  });\n});\n\n// NB: If changed, please update Checkbox, Switch and Radio\n// so that the API documentation is updated.\nprocess.env.NODE_ENV !== \"production\" ? SwitchBase.propTypes = {\n  /**\n   * If `true`, the `input` element is focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: PropTypes.bool,\n  /**\n   * The icon to display when the component is checked.\n   */\n  checkedIcon: PropTypes.node.isRequired,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * @ignore\n   */\n  defaultChecked: PropTypes.bool,\n  /**\n   * If `true`, the component is disabled.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the  keyboard focus ripple is disabled.\n   * @default false\n   */\n  disableFocusRipple: PropTypes.bool,\n  /**\n   * If given, uses a negative margin to counteract the padding on one\n   * side (this is often helpful for aligning the left or right\n   * side of the icon with content above or below, without ruining the border\n   * size and shape).\n   * @default false\n   */\n  edge: PropTypes.oneOf(['end', 'start', false]),\n  /**\n   * The icon to display when the component is unchecked.\n   */\n  icon: PropTypes.node.isRequired,\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n  /*\n   * @ignore\n   */\n  name: PropTypes.string,\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n  /**\n   * If `true`, the `input` element is required.\n   */\n  required: PropTypes.bool,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.object,\n  /**\n   * @ignore\n   */\n  tabIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * The input component prop `type`.\n   */\n  type: PropTypes.string.isRequired,\n  /**\n   * The value of the component.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default SwitchBase;","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 5v14H5V5h14m0-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2z\"\n}), 'CheckBoxOutlineBlank');","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.11 0 2-.9 2-2V5c0-1.1-.89-2-2-2zm-9 14l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"\n}), 'CheckBox');","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10H7v-2h10v2z\"\n}), 'IndeterminateCheckBox');","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getCheckboxUtilityClass(slot) {\n  return generateUtilityClass('MuiCheckbox', slot);\n}\nconst checkboxClasses = generateUtilityClasses('MuiCheckbox', ['root', 'checked', 'disabled', 'indeterminate', 'colorPrimary', 'colorSecondary', 'sizeSmall', 'sizeMedium']);\nexport default checkboxClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport SwitchBase from \"../internal/SwitchBase.js\";\nimport CheckBoxOutlineBlankIcon from \"../internal/svg-icons/CheckBoxOutlineBlank.js\";\nimport CheckBoxIcon from \"../internal/svg-icons/CheckBox.js\";\nimport IndeterminateCheckBoxIcon from \"../internal/svg-icons/IndeterminateCheckBox.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport checkboxClasses, { getCheckboxUtilityClass } from \"./checkboxClasses.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { mergeSlotProps } from \"../utils/index.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    indeterminate,\n    color,\n    size\n  } = ownerState;\n  const slots = {\n    root: ['root', indeterminate && 'indeterminate', `color${capitalize(color)}`, `size${capitalize(size)}`]\n  };\n  const composedClasses = composeClasses(slots, getCheckboxUtilityClass, classes);\n  return {\n    ...classes,\n    // forward the disabled and checked classes to the SwitchBase\n    ...composedClasses\n  };\n};\nconst CheckboxRoot = styled(SwitchBase, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiCheckbox',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.indeterminate && styles.indeterminate, styles[`size${capitalize(ownerState.size)}`], ownerState.color !== 'default' && styles[`color${capitalize(ownerState.color)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  color: (theme.vars || theme).palette.text.secondary,\n  variants: [{\n    props: {\n      color: 'default',\n      disableRipple: false\n    },\n    style: {\n      '&:hover': {\n        backgroundColor: theme.alpha((theme.vars || theme).palette.action.active, (theme.vars || theme).palette.action.hoverOpacity)\n      }\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color,\n      disableRipple: false\n    },\n    style: {\n      '&:hover': {\n        backgroundColor: theme.alpha((theme.vars || theme).palette[color].main, (theme.vars || theme).palette.action.hoverOpacity)\n      }\n    }\n  })), ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      [`&.${checkboxClasses.checked}, &.${checkboxClasses.indeterminate}`]: {\n        color: (theme.vars || theme).palette[color].main\n      },\n      [`&.${checkboxClasses.disabled}`]: {\n        color: (theme.vars || theme).palette.action.disabled\n      }\n    }\n  })), {\n    // Should be last to override other colors\n    props: {\n      disableRipple: false\n    },\n    style: {\n      // Reset on touch devices, it doesn't add specificity\n      '&:hover': {\n        '@media (hover: none)': {\n          backgroundColor: 'transparent'\n        }\n      }\n    }\n  }]\n})));\nconst defaultCheckedIcon = /*#__PURE__*/_jsx(CheckBoxIcon, {});\nconst defaultIcon = /*#__PURE__*/_jsx(CheckBoxOutlineBlankIcon, {});\nconst defaultIndeterminateIcon = /*#__PURE__*/_jsx(IndeterminateCheckBoxIcon, {});\nconst Checkbox = /*#__PURE__*/React.forwardRef(function Checkbox(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiCheckbox'\n  });\n  const {\n    checkedIcon = defaultCheckedIcon,\n    color = 'primary',\n    icon: iconProp = defaultIcon,\n    indeterminate = false,\n    indeterminateIcon: indeterminateIconProp = defaultIndeterminateIcon,\n    inputProps,\n    size = 'medium',\n    disableRipple = false,\n    className,\n    slots = {},\n    slotProps = {},\n    ...other\n  } = props;\n  const icon = indeterminate ? indeterminateIconProp : iconProp;\n  const indeterminateIcon = indeterminate ? indeterminateIconProp : checkedIcon;\n  const ownerState = {\n    ...props,\n    disableRipple,\n    color,\n    indeterminate,\n    size\n  };\n  const classes = useUtilityClasses(ownerState);\n  const externalInputProps = slotProps.input ?? inputProps;\n  const [RootSlot, rootSlotProps] = useSlot('root', {\n    ref,\n    elementType: CheckboxRoot,\n    className: clsx(classes.root, className),\n    shouldForwardComponentProp: true,\n    externalForwardedProps: {\n      slots,\n      slotProps,\n      ...other\n    },\n    ownerState,\n    additionalProps: {\n      type: 'checkbox',\n      icon: /*#__PURE__*/React.cloneElement(icon, {\n        fontSize: icon.props.fontSize ?? size\n      }),\n      checkedIcon: /*#__PURE__*/React.cloneElement(indeterminateIcon, {\n        fontSize: indeterminateIcon.props.fontSize ?? size\n      }),\n      disableRipple,\n      slots,\n      slotProps: {\n        input: mergeSlotProps(typeof externalInputProps === 'function' ? externalInputProps(ownerState) : externalInputProps, {\n          'data-indeterminate': indeterminate\n        })\n      }\n    }\n  });\n  return /*#__PURE__*/_jsx(RootSlot, {\n    ...rootSlotProps,\n    classes: classes\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Checkbox.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * If `true`, the component is checked.\n   */\n  checked: PropTypes.bool,\n  /**\n   * The icon to display when the component is checked.\n   * @default <CheckBoxIcon />\n   */\n  checkedIcon: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['default', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The default checked state. Use when the component is not controlled.\n   */\n  defaultChecked: PropTypes.bool,\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the ripple effect is disabled.\n   * @default false\n   */\n  disableRipple: PropTypes.bool,\n  /**\n   * The icon to display when the component is unchecked.\n   * @default <CheckBoxOutlineBlankIcon />\n   */\n  icon: PropTypes.node,\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n  /**\n   * If `true`, the component appears indeterminate.\n   * This does not set the native input element to indeterminate due\n   * to inconsistent behavior across browsers.\n   * However, we set a `data-indeterminate` attribute on the `input`.\n   * @default false\n   */\n  indeterminate: PropTypes.bool,\n  /**\n   * The icon to display when the component is indeterminate.\n   * @default <IndeterminateCheckBoxIcon />\n   */\n  indeterminateIcon: PropTypes.node,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * @deprecated Use `slotProps.input` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {React.ChangeEvent<HTMLInputElement>} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: PropTypes.func,\n  /**\n   * If `true`, the `input` element is required.\n   * @default false\n   */\n  required: PropTypes.bool,\n  /**\n   * The size of the component.\n   * `small` is equivalent to the dense checkbox styling.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The value of the component. The DOM API casts this to a string.\n   * The browser uses \"on\" as the default value.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default Checkbox;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport ownerDocument from '@mui/utils/ownerDocument';\nimport useForkRef from '@mui/utils/useForkRef';\nimport useEventCallback from '@mui/utils/useEventCallback';\nimport elementAcceptingRef from '@mui/utils/elementAcceptingRef';\nimport exactProp from '@mui/utils/exactProp';\nimport getReactElementRef from '@mui/utils/getReactElementRef';\n\n// TODO: return `EventHandlerName extends `on${infer EventName}` ? Lowercase<EventName> : never` once generatePropTypes runs with TS 4.1\nfunction mapEventPropToEvent(eventProp) {\n  return eventProp.substring(2).toLowerCase();\n}\nfunction clickedRootScrollbar(event, doc) {\n  return doc.documentElement.clientWidth < event.clientX || doc.documentElement.clientHeight < event.clientY;\n}\n/**\n * Listen for click events that occur somewhere in the document, outside of the element itself.\n * For instance, if you need to hide a menu when people click anywhere else on your page.\n *\n * Demos:\n *\n * - [Click-Away Listener](https://mui.com/material-ui/react-click-away-listener/)\n * - [Menu](https://mui.com/material-ui/react-menu/)\n *\n * API:\n *\n * - [ClickAwayListener API](https://mui.com/material-ui/api/click-away-listener/)\n */\nfunction ClickAwayListener(props) {\n  const {\n    children,\n    disableReactTree = false,\n    mouseEvent = 'onClick',\n    onClickAway,\n    touchEvent = 'onTouchEnd'\n  } = props;\n  const movedRef = React.useRef(false);\n  const nodeRef = React.useRef(null);\n  const activatedRef = React.useRef(false);\n  const syntheticEventRef = React.useRef(false);\n  React.useEffect(() => {\n    // Ensure that this component is not \"activated\" synchronously.\n    // https://github.com/facebook/react/issues/20074\n    setTimeout(() => {\n      activatedRef.current = true;\n    }, 0);\n    return () => {\n      activatedRef.current = false;\n    };\n  }, []);\n  const handleRef = useForkRef(getReactElementRef(children), nodeRef);\n\n  // The handler doesn't take event.defaultPrevented into account:\n  //\n  // event.preventDefault() is meant to stop default behaviors like\n  // clicking a checkbox to check it, hitting a button to submit a form,\n  // and hitting left arrow to move the cursor in a text input etc.\n  // Only special HTML elements have these default behaviors.\n  const handleClickAway = useEventCallback(event => {\n    // Given developers can stop the propagation of the synthetic event,\n    // we can only be confident with a positive value.\n    const insideReactTree = syntheticEventRef.current;\n    syntheticEventRef.current = false;\n    const doc = ownerDocument(nodeRef.current);\n\n    // 1. IE11 support, which trigger the handleClickAway even after the unbind\n    // 2. The child might render null.\n    // 3. Behave like a blur listener.\n    if (!activatedRef.current || !nodeRef.current || 'clientX' in event && clickedRootScrollbar(event, doc)) {\n      return;\n    }\n\n    // Do not act if user performed touchmove\n    if (movedRef.current) {\n      movedRef.current = false;\n      return;\n    }\n    let insideDOM;\n\n    // If not enough, can use https://github.com/DieterHolvoet/event-propagation-path/blob/master/propagationPath.js\n    if (event.composedPath) {\n      insideDOM = event.composedPath().includes(nodeRef.current);\n    } else {\n      insideDOM = !doc.documentElement.contains(\n      // @ts-expect-error returns `false` as intended when not dispatched from a Node\n      event.target) || nodeRef.current.contains(\n      // @ts-expect-error returns `false` as intended when not dispatched from a Node\n      event.target);\n    }\n    if (!insideDOM && (disableReactTree || !insideReactTree)) {\n      onClickAway(event);\n    }\n  });\n\n  // Keep track of mouse/touch events that bubbled up through the portal.\n  const createHandleSynthetic = handlerName => event => {\n    syntheticEventRef.current = true;\n    const childrenPropsHandler = children.props[handlerName];\n    if (childrenPropsHandler) {\n      childrenPropsHandler(event);\n    }\n  };\n  const childrenProps = {\n    ref: handleRef\n  };\n  if (touchEvent !== false) {\n    childrenProps[touchEvent] = createHandleSynthetic(touchEvent);\n  }\n  React.useEffect(() => {\n    if (touchEvent !== false) {\n      const mappedTouchEvent = mapEventPropToEvent(touchEvent);\n      const doc = ownerDocument(nodeRef.current);\n      const handleTouchMove = () => {\n        movedRef.current = true;\n      };\n      doc.addEventListener(mappedTouchEvent, handleClickAway);\n      doc.addEventListener('touchmove', handleTouchMove);\n      return () => {\n        doc.removeEventListener(mappedTouchEvent, handleClickAway);\n        doc.removeEventListener('touchmove', handleTouchMove);\n      };\n    }\n    return undefined;\n  }, [handleClickAway, touchEvent]);\n  if (mouseEvent !== false) {\n    childrenProps[mouseEvent] = createHandleSynthetic(mouseEvent);\n  }\n  React.useEffect(() => {\n    if (mouseEvent !== false) {\n      const mappedMouseEvent = mapEventPropToEvent(mouseEvent);\n      const doc = ownerDocument(nodeRef.current);\n      doc.addEventListener(mappedMouseEvent, handleClickAway);\n      return () => {\n        doc.removeEventListener(mappedMouseEvent, handleClickAway);\n      };\n    }\n    return undefined;\n  }, [handleClickAway, mouseEvent]);\n  return /*#__PURE__*/React.cloneElement(children, childrenProps);\n}\nprocess.env.NODE_ENV !== \"production\" ? ClickAwayListener.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The wrapped element.\n   */\n  children: elementAcceptingRef.isRequired,\n  /**\n   * If `true`, the React tree is ignored and only the DOM tree is considered.\n   * This prop changes how portaled elements are handled.\n   * @default false\n   */\n  disableReactTree: PropTypes.bool,\n  /**\n   * The mouse event to listen to. You can disable the listener by providing `false`.\n   * @default 'onClick'\n   */\n  mouseEvent: PropTypes.oneOf(['onClick', 'onMouseDown', 'onMouseUp', 'onPointerDown', 'onPointerUp', false]),\n  /**\n   * Callback fired when a \"click away\" event is detected.\n   */\n  onClickAway: PropTypes.func.isRequired,\n  /**\n   * The touch event to listen to. You can disable the listener by providing `false`.\n   * @default 'onTouchEnd'\n   */\n  touchEvent: PropTypes.oneOf(['onTouchEnd', 'onTouchStart', false])\n} : void 0;\nif (process.env.NODE_ENV !== 'production') {\n  // eslint-disable-next-line\n  ClickAwayListener['propTypes' + ''] = exactProp(ClickAwayListener.propTypes);\n}\nexport { ClickAwayListener };","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { globalCss } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\n\n// to determine if the global styles are static or dynamic\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst isDynamicSupport = typeof globalCss({}) === 'function';\nexport const html = (theme, enableColorScheme) => ({\n  WebkitFontSmoothing: 'antialiased',\n  // Antialiasing.\n  MozOsxFontSmoothing: 'grayscale',\n  // Antialiasing.\n  // Change from `box-sizing: content-box` so that `width`\n  // is not affected by `padding` or `border`.\n  boxSizing: 'border-box',\n  // Fix font resize problem in iOS\n  WebkitTextSizeAdjust: '100%',\n  // When used under CssVarsProvider, colorScheme should not be applied dynamically because it will generate the stylesheet twice for server-rendered applications.\n  ...(enableColorScheme && !theme.vars && {\n    colorScheme: theme.palette.mode\n  })\n});\nexport const body = theme => ({\n  color: (theme.vars || theme).palette.text.primary,\n  ...theme.typography.body1,\n  backgroundColor: (theme.vars || theme).palette.background.default,\n  '@media print': {\n    // Save printer ink.\n    backgroundColor: (theme.vars || theme).palette.common.white\n  }\n});\nexport const styles = (theme, enableColorScheme = false) => {\n  const colorSchemeStyles = {};\n  if (enableColorScheme && theme.colorSchemes && typeof theme.getColorSchemeSelector === 'function') {\n    Object.entries(theme.colorSchemes).forEach(([key, scheme]) => {\n      const selector = theme.getColorSchemeSelector(key);\n      if (selector.startsWith('@')) {\n        // for @media (prefers-color-scheme), we need to target :root\n        colorSchemeStyles[selector] = {\n          ':root': {\n            colorScheme: scheme.palette?.mode\n          }\n        };\n      } else {\n        // else, it's likely that the selector already target an element with a class or data attribute\n        colorSchemeStyles[selector.replace(/\\s*&/, '')] = {\n          colorScheme: scheme.palette?.mode\n        };\n      }\n    });\n  }\n  let defaultStyles = {\n    html: html(theme, enableColorScheme),\n    '*, *::before, *::after': {\n      boxSizing: 'inherit'\n    },\n    'strong, b': {\n      fontWeight: theme.typography.fontWeightBold\n    },\n    body: {\n      margin: 0,\n      // Remove the margin in all browsers.\n      ...body(theme),\n      // Add support for document.body.requestFullScreen().\n      // Other elements, if background transparent, are not supported.\n      '&::backdrop': {\n        backgroundColor: (theme.vars || theme).palette.background.default\n      }\n    },\n    ...colorSchemeStyles\n  };\n  const themeOverrides = theme.components?.MuiCssBaseline?.styleOverrides;\n  if (themeOverrides) {\n    defaultStyles = [defaultStyles, themeOverrides];\n  }\n  return defaultStyles;\n};\n\n// `ecs` stands for enableColorScheme. This is internal logic to make it work with Pigment CSS, so shorter is better.\nconst SELECTOR = 'mui-ecs';\nconst staticStyles = theme => {\n  const result = styles(theme, false);\n  const baseStyles = Array.isArray(result) ? result[0] : result;\n  if (!theme.vars && baseStyles) {\n    baseStyles.html[`:root:has(${SELECTOR})`] = {\n      colorScheme: theme.palette.mode\n    };\n  }\n  if (theme.colorSchemes) {\n    Object.entries(theme.colorSchemes).forEach(([key, scheme]) => {\n      const selector = theme.getColorSchemeSelector(key);\n      if (selector.startsWith('@')) {\n        // for @media (prefers-color-scheme), we need to target :root\n        baseStyles[selector] = {\n          [`:root:not(:has(.${SELECTOR}))`]: {\n            colorScheme: scheme.palette?.mode\n          }\n        };\n      } else {\n        // else, it's likely that the selector already target an element with a class or data attribute\n        baseStyles[selector.replace(/\\s*&/, '')] = {\n          [`&:not(:has(.${SELECTOR}))`]: {\n            colorScheme: scheme.palette?.mode\n          }\n        };\n      }\n    });\n  }\n  return result;\n};\nconst GlobalStyles = globalCss(isDynamicSupport ? ({\n  theme,\n  enableColorScheme\n}) => styles(theme, enableColorScheme) : ({\n  theme\n}) => staticStyles(theme));\n\n/**\n * Kickstart an elegant, consistent, and simple baseline to build upon.\n */\nfunction CssBaseline(inProps) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiCssBaseline'\n  });\n  const {\n    children,\n    enableColorScheme = false\n  } = props;\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [isDynamicSupport && /*#__PURE__*/_jsx(GlobalStyles, {\n      enableColorScheme: enableColorScheme\n    }), !isDynamicSupport && !enableColorScheme && /*#__PURE__*/_jsx(\"span\", {\n      className: SELECTOR,\n      style: {\n        display: 'none'\n      }\n    }), children]\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? CssBaseline.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * You can wrap a node.\n   */\n  children: PropTypes.node,\n  /**\n   * Enable `color-scheme` CSS property to use `theme.palette.mode`.\n   * For more details, check out https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme\n   * For browser support, check out https://caniuse.com/?search=color-scheme\n   * @default false\n   */\n  enableColorScheme: PropTypes.bool\n} : void 0;\nexport default CssBaseline;","// A change of the browser zoom change the scrollbar size.\n// Credit https://github.com/twbs/bootstrap/blob/488fd8afc535ca3a6ad4dc581f5e89217b6a36ac/js/src/util/scrollbar.js#L14-L18\nexport default function getScrollbarSize(win = window) {\n  // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes\n  const documentWidth = win.document.documentElement.clientWidth;\n  return win.innerWidth - documentWidth;\n}","import ownerWindow from '@mui/utils/ownerWindow';\nimport ownerDocument from '@mui/utils/ownerDocument';\nimport getScrollbarSize from '@mui/utils/getScrollbarSize';\n// Is a vertical scrollbar displayed?\nfunction isOverflowing(container) {\n  const doc = ownerDocument(container);\n  if (doc.body === container) {\n    return ownerWindow(container).innerWidth > doc.documentElement.clientWidth;\n  }\n  return container.scrollHeight > container.clientHeight;\n}\nexport function ariaHidden(element, hide) {\n  if (hide) {\n    element.setAttribute('aria-hidden', 'true');\n  } else {\n    element.removeAttribute('aria-hidden');\n  }\n}\nfunction getPaddingRight(element) {\n  return parseInt(ownerWindow(element).getComputedStyle(element).paddingRight, 10) || 0;\n}\nfunction isAriaHiddenForbiddenOnElement(element) {\n  // The forbidden HTML tags are the ones from ARIA specification that\n  // can be children of body and can't have aria-hidden attribute.\n  // cf. https://www.w3.org/TR/html-aria/#docconformance\n  const forbiddenTagNames = ['TEMPLATE', 'SCRIPT', 'STYLE', 'LINK', 'MAP', 'META', 'NOSCRIPT', 'PICTURE', 'COL', 'COLGROUP', 'PARAM', 'SLOT', 'SOURCE', 'TRACK'];\n  const isForbiddenTagName = forbiddenTagNames.includes(element.tagName);\n  const isInputHidden = element.tagName === 'INPUT' && element.getAttribute('type') === 'hidden';\n  return isForbiddenTagName || isInputHidden;\n}\nfunction ariaHiddenSiblings(container, mountElement, currentElement, elementsToExclude, hide) {\n  const blacklist = [mountElement, currentElement, ...elementsToExclude];\n  [].forEach.call(container.children, element => {\n    const isNotExcludedElement = !blacklist.includes(element);\n    const isNotForbiddenElement = !isAriaHiddenForbiddenOnElement(element);\n    if (isNotExcludedElement && isNotForbiddenElement) {\n      ariaHidden(element, hide);\n    }\n  });\n}\nfunction findIndexOf(items, callback) {\n  let idx = -1;\n  items.some((item, index) => {\n    if (callback(item)) {\n      idx = index;\n      return true;\n    }\n    return false;\n  });\n  return idx;\n}\nfunction handleContainer(containerInfo, props) {\n  const restoreStyle = [];\n  const container = containerInfo.container;\n  if (!props.disableScrollLock) {\n    if (isOverflowing(container)) {\n      // Compute the size before applying overflow hidden to avoid any scroll jumps.\n      const scrollbarSize = getScrollbarSize(ownerWindow(container));\n      restoreStyle.push({\n        value: container.style.paddingRight,\n        property: 'padding-right',\n        el: container\n      });\n      // Use computed style, here to get the real padding to add our scrollbar width.\n      container.style.paddingRight = `${getPaddingRight(container) + scrollbarSize}px`;\n\n      // .mui-fixed is a global helper.\n      const fixedElements = ownerDocument(container).querySelectorAll('.mui-fixed');\n      [].forEach.call(fixedElements, element => {\n        restoreStyle.push({\n          value: element.style.paddingRight,\n          property: 'padding-right',\n          el: element\n        });\n        element.style.paddingRight = `${getPaddingRight(element) + scrollbarSize}px`;\n      });\n    }\n    let scrollContainer;\n    if (container.parentNode instanceof DocumentFragment) {\n      scrollContainer = ownerDocument(container).body;\n    } else {\n      // Support html overflow-y: auto for scroll stability between pages\n      // https://css-tricks.com/snippets/css/force-vertical-scrollbar/\n      const parent = container.parentElement;\n      const containerWindow = ownerWindow(container);\n      scrollContainer = parent?.nodeName === 'HTML' && containerWindow.getComputedStyle(parent).overflowY === 'scroll' ? parent : container;\n    }\n\n    // Block the scroll even if no scrollbar is visible to account for mobile keyboard\n    // screensize shrink.\n    restoreStyle.push({\n      value: scrollContainer.style.overflow,\n      property: 'overflow',\n      el: scrollContainer\n    }, {\n      value: scrollContainer.style.overflowX,\n      property: 'overflow-x',\n      el: scrollContainer\n    }, {\n      value: scrollContainer.style.overflowY,\n      property: 'overflow-y',\n      el: scrollContainer\n    });\n    scrollContainer.style.overflow = 'hidden';\n  }\n  const restore = () => {\n    restoreStyle.forEach(({\n      value,\n      el,\n      property\n    }) => {\n      if (value) {\n        el.style.setProperty(property, value);\n      } else {\n        el.style.removeProperty(property);\n      }\n    });\n  };\n  return restore;\n}\nfunction getHiddenSiblings(container) {\n  const hiddenSiblings = [];\n  [].forEach.call(container.children, element => {\n    if (element.getAttribute('aria-hidden') === 'true') {\n      hiddenSiblings.push(element);\n    }\n  });\n  return hiddenSiblings;\n}\n/**\n * @ignore - do not document.\n *\n * Proper state management for containers and the modals in those containers.\n * Simplified, but inspired by react-overlay's ModalManager class.\n * Used by the Modal to ensure proper styling of containers.\n */\nexport class ModalManager {\n  constructor() {\n    this.modals = [];\n    this.containers = [];\n  }\n  add(modal, container) {\n    let modalIndex = this.modals.indexOf(modal);\n    if (modalIndex !== -1) {\n      return modalIndex;\n    }\n    modalIndex = this.modals.length;\n    this.modals.push(modal);\n\n    // If the modal we are adding is already in the DOM.\n    if (modal.modalRef) {\n      ariaHidden(modal.modalRef, false);\n    }\n    const hiddenSiblings = getHiddenSiblings(container);\n    ariaHiddenSiblings(container, modal.mount, modal.modalRef, hiddenSiblings, true);\n    const containerIndex = findIndexOf(this.containers, item => item.container === container);\n    if (containerIndex !== -1) {\n      this.containers[containerIndex].modals.push(modal);\n      return modalIndex;\n    }\n    this.containers.push({\n      modals: [modal],\n      container,\n      restore: null,\n      hiddenSiblings\n    });\n    return modalIndex;\n  }\n  mount(modal, props) {\n    const containerIndex = findIndexOf(this.containers, item => item.modals.includes(modal));\n    const containerInfo = this.containers[containerIndex];\n    if (!containerInfo.restore) {\n      containerInfo.restore = handleContainer(containerInfo, props);\n    }\n  }\n  remove(modal, ariaHiddenState = true) {\n    const modalIndex = this.modals.indexOf(modal);\n    if (modalIndex === -1) {\n      return modalIndex;\n    }\n    const containerIndex = findIndexOf(this.containers, item => item.modals.includes(modal));\n    const containerInfo = this.containers[containerIndex];\n    containerInfo.modals.splice(containerInfo.modals.indexOf(modal), 1);\n    this.modals.splice(modalIndex, 1);\n\n    // If that was the last modal in a container, clean up the container.\n    if (containerInfo.modals.length === 0) {\n      // The modal might be closed before it had the chance to be mounted in the DOM.\n      if (containerInfo.restore) {\n        containerInfo.restore();\n      }\n      if (modal.modalRef) {\n        // In case the modal wasn't in the DOM yet.\n        ariaHidden(modal.modalRef, ariaHiddenState);\n      }\n      ariaHiddenSiblings(containerInfo.container, modal.mount, modal.modalRef, containerInfo.hiddenSiblings, false);\n      this.containers.splice(containerIndex, 1);\n    } else {\n      // Otherwise make sure the next top modal is visible to a screen reader.\n      const nextTop = containerInfo.modals[containerInfo.modals.length - 1];\n      // as soon as a modal is adding its modalRef is undefined. it can't set\n      // aria-hidden because the dom element doesn't exist either\n      // when modal was unmounted before modalRef gets null\n      if (nextTop.modalRef) {\n        ariaHidden(nextTop.modalRef, false);\n      }\n    }\n    return modalIndex;\n  }\n  isTopModal(modal) {\n    return this.modals.length > 0 && this.modals[this.modals.length - 1] === modal;\n  }\n}","'use client';\n\n/* eslint-disable consistent-return, jsx-a11y/no-noninteractive-tabindex */\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport useForkRef from '@mui/utils/useForkRef';\nimport ownerDocument from '@mui/utils/ownerDocument';\nimport getReactElementRef from '@mui/utils/getReactElementRef';\nimport exactProp from '@mui/utils/exactProp';\nimport elementAcceptingRef from '@mui/utils/elementAcceptingRef';\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\n// Inspired by https://github.com/focus-trap/tabbable\nconst candidatesSelector = ['input', 'select', 'textarea', 'a[href]', 'button', '[tabindex]', 'audio[controls]', 'video[controls]', '[contenteditable]:not([contenteditable=\"false\"])'].join(',');\nfunction getTabIndex(node) {\n  const tabindexAttr = parseInt(node.getAttribute('tabindex') || '', 10);\n  if (!Number.isNaN(tabindexAttr)) {\n    return tabindexAttr;\n  }\n\n  // Browsers do not return `tabIndex` correctly for contentEditable nodes;\n  // https://issues.chromium.org/issues/41283952\n  // so if they don't have a tabindex attribute specifically set, assume it's 0.\n  // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default\n  //  `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n  //  yet they are still part of the regular tab order; in FF, they get a default\n  //  `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n  //  order, consider their tab index to be 0.\n  if (node.contentEditable === 'true' || (node.nodeName === 'AUDIO' || node.nodeName === 'VIDEO' || node.nodeName === 'DETAILS') && node.getAttribute('tabindex') === null) {\n    return 0;\n  }\n  return node.tabIndex;\n}\nfunction isNonTabbableRadio(node) {\n  if (node.tagName !== 'INPUT' || node.type !== 'radio') {\n    return false;\n  }\n  if (!node.name) {\n    return false;\n  }\n  const getRadio = selector => node.ownerDocument.querySelector(`input[type=\"radio\"]${selector}`);\n  let roving = getRadio(`[name=\"${node.name}\"]:checked`);\n  if (!roving) {\n    roving = getRadio(`[name=\"${node.name}\"]`);\n  }\n  return roving !== node;\n}\nfunction isNodeMatchingSelectorFocusable(node) {\n  if (node.disabled || node.tagName === 'INPUT' && node.type === 'hidden' || isNonTabbableRadio(node)) {\n    return false;\n  }\n  return true;\n}\nfunction defaultGetTabbable(root) {\n  const regularTabNodes = [];\n  const orderedTabNodes = [];\n  Array.from(root.querySelectorAll(candidatesSelector)).forEach((node, i) => {\n    const nodeTabIndex = getTabIndex(node);\n    if (nodeTabIndex === -1 || !isNodeMatchingSelectorFocusable(node)) {\n      return;\n    }\n    if (nodeTabIndex === 0) {\n      regularTabNodes.push(node);\n    } else {\n      orderedTabNodes.push({\n        documentOrder: i,\n        tabIndex: nodeTabIndex,\n        node: node\n      });\n    }\n  });\n  return orderedTabNodes.sort((a, b) => a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex).map(a => a.node).concat(regularTabNodes);\n}\nfunction defaultIsEnabled() {\n  return true;\n}\n\n/**\n * @ignore - internal component.\n */\nfunction FocusTrap(props) {\n  const {\n    children,\n    disableAutoFocus = false,\n    disableEnforceFocus = false,\n    disableRestoreFocus = false,\n    getTabbable = defaultGetTabbable,\n    isEnabled = defaultIsEnabled,\n    open\n  } = props;\n  const ignoreNextEnforceFocus = React.useRef(false);\n  const sentinelStart = React.useRef(null);\n  const sentinelEnd = React.useRef(null);\n  const nodeToRestore = React.useRef(null);\n  const reactFocusEventTarget = React.useRef(null);\n  // This variable is useful when disableAutoFocus is true.\n  // It waits for the active element to move into the component to activate.\n  const activated = React.useRef(false);\n  const rootRef = React.useRef(null);\n  const handleRef = useForkRef(getReactElementRef(children), rootRef);\n  const lastKeydown = React.useRef(null);\n  React.useEffect(() => {\n    // We might render an empty child.\n    if (!open || !rootRef.current) {\n      return;\n    }\n    activated.current = !disableAutoFocus;\n  }, [disableAutoFocus, open]);\n  React.useEffect(() => {\n    // We might render an empty child.\n    if (!open || !rootRef.current) {\n      return;\n    }\n    const doc = ownerDocument(rootRef.current);\n    if (!rootRef.current.contains(doc.activeElement)) {\n      if (!rootRef.current.hasAttribute('tabIndex')) {\n        if (process.env.NODE_ENV !== 'production') {\n          console.error(['MUI: The modal content node does not accept focus.', 'For the benefit of assistive technologies, ' + 'the tabIndex of the node is being set to \"-1\".'].join('\\n'));\n        }\n        rootRef.current.setAttribute('tabIndex', '-1');\n      }\n      if (activated.current) {\n        rootRef.current.focus();\n      }\n    }\n    return () => {\n      // restoreLastFocus()\n      if (!disableRestoreFocus) {\n        // In IE11 it is possible for document.activeElement to be null resulting\n        // in nodeToRestore.current being null.\n        // Not all elements in IE11 have a focus method.\n        // Once IE11 support is dropped the focus() call can be unconditional.\n        if (nodeToRestore.current && nodeToRestore.current.focus) {\n          ignoreNextEnforceFocus.current = true;\n          nodeToRestore.current.focus();\n        }\n        nodeToRestore.current = null;\n      }\n    };\n    // Missing `disableRestoreFocus` which is fine.\n    // We don't support changing that prop on an open FocusTrap\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [open]);\n  React.useEffect(() => {\n    // We might render an empty child.\n    if (!open || !rootRef.current) {\n      return;\n    }\n    const doc = ownerDocument(rootRef.current);\n    const loopFocus = nativeEvent => {\n      lastKeydown.current = nativeEvent;\n      if (disableEnforceFocus || !isEnabled() || nativeEvent.key !== 'Tab') {\n        return;\n      }\n\n      // Make sure the next tab starts from the right place.\n      // doc.activeElement refers to the origin.\n      if (doc.activeElement === rootRef.current && nativeEvent.shiftKey) {\n        // We need to ignore the next contain as\n        // it will try to move the focus back to the rootRef element.\n        ignoreNextEnforceFocus.current = true;\n        if (sentinelEnd.current) {\n          sentinelEnd.current.focus();\n        }\n      }\n    };\n    const contain = () => {\n      const rootElement = rootRef.current;\n\n      // Cleanup functions are executed lazily in React 17.\n      // Contain can be called between the component being unmounted and its cleanup function being run.\n      if (rootElement === null) {\n        return;\n      }\n      if (!doc.hasFocus() || !isEnabled() || ignoreNextEnforceFocus.current) {\n        ignoreNextEnforceFocus.current = false;\n        return;\n      }\n\n      // The focus is already inside\n      if (rootElement.contains(doc.activeElement)) {\n        return;\n      }\n\n      // The disableEnforceFocus is set and the focus is outside of the focus trap (and sentinel nodes)\n      if (disableEnforceFocus && doc.activeElement !== sentinelStart.current && doc.activeElement !== sentinelEnd.current) {\n        return;\n      }\n\n      // if the focus event is not coming from inside the children's react tree, reset the refs\n      if (doc.activeElement !== reactFocusEventTarget.current) {\n        reactFocusEventTarget.current = null;\n      } else if (reactFocusEventTarget.current !== null) {\n        return;\n      }\n      if (!activated.current) {\n        return;\n      }\n      let tabbable = [];\n      if (doc.activeElement === sentinelStart.current || doc.activeElement === sentinelEnd.current) {\n        tabbable = getTabbable(rootRef.current);\n      }\n\n      // one of the sentinel nodes was focused, so move the focus\n      // to the first/last tabbable element inside the focus trap\n      if (tabbable.length > 0) {\n        const isShiftTab = Boolean(lastKeydown.current?.shiftKey && lastKeydown.current?.key === 'Tab');\n        const focusNext = tabbable[0];\n        const focusPrevious = tabbable[tabbable.length - 1];\n        if (typeof focusNext !== 'string' && typeof focusPrevious !== 'string') {\n          if (isShiftTab) {\n            focusPrevious.focus();\n          } else {\n            focusNext.focus();\n          }\n        }\n        // no tabbable elements in the trap focus or the focus was outside of the focus trap\n      } else {\n        rootElement.focus();\n      }\n    };\n    doc.addEventListener('focusin', contain);\n    doc.addEventListener('keydown', loopFocus, true);\n\n    // With Edge, Safari and Firefox, no focus related events are fired when the focused area stops being a focused area.\n    // for example https://bugzilla.mozilla.org/show_bug.cgi?id=559561.\n    // Instead, we can look if the active element was restored on the BODY element.\n    //\n    // The whatwg spec defines how the browser should behave but does not explicitly mention any events:\n    // https://html.spec.whatwg.org/multipage/interaction.html#focus-fixup-rule.\n    const interval = setInterval(() => {\n      if (doc.activeElement && doc.activeElement.tagName === 'BODY') {\n        contain();\n      }\n    }, 50);\n    return () => {\n      clearInterval(interval);\n      doc.removeEventListener('focusin', contain);\n      doc.removeEventListener('keydown', loopFocus, true);\n    };\n  }, [disableAutoFocus, disableEnforceFocus, disableRestoreFocus, isEnabled, open, getTabbable]);\n  const onFocus = event => {\n    if (nodeToRestore.current === null) {\n      nodeToRestore.current = event.relatedTarget;\n    }\n    activated.current = true;\n    reactFocusEventTarget.current = event.target;\n    const childrenPropsHandler = children.props.onFocus;\n    if (childrenPropsHandler) {\n      childrenPropsHandler(event);\n    }\n  };\n  const handleFocusSentinel = event => {\n    if (nodeToRestore.current === null) {\n      nodeToRestore.current = event.relatedTarget;\n    }\n    activated.current = true;\n  };\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [/*#__PURE__*/_jsx(\"div\", {\n      tabIndex: open ? 0 : -1,\n      onFocus: handleFocusSentinel,\n      ref: sentinelStart,\n      \"data-testid\": \"sentinelStart\"\n    }), /*#__PURE__*/React.cloneElement(children, {\n      ref: handleRef,\n      onFocus\n    }), /*#__PURE__*/_jsx(\"div\", {\n      tabIndex: open ? 0 : -1,\n      onFocus: handleFocusSentinel,\n      ref: sentinelEnd,\n      \"data-testid\": \"sentinelEnd\"\n    })]\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? FocusTrap.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │ To update them, edit the TypeScript types and run `pnpm proptypes`. │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * A single child content element.\n   */\n  children: elementAcceptingRef,\n  /**\n   * If `true`, the focus trap will not automatically shift focus to itself when it opens, and\n   * replace it to the last focused element when it closes.\n   * This also works correctly with any focus trap children that have the `disableAutoFocus` prop.\n   *\n   * Generally this should never be set to `true` as it makes the focus trap less\n   * accessible to assistive technologies, like screen readers.\n   * @default false\n   */\n  disableAutoFocus: PropTypes.bool,\n  /**\n   * If `true`, the focus trap will not prevent focus from leaving the focus trap while open.\n   *\n   * Generally this should never be set to `true` as it makes the focus trap less\n   * accessible to assistive technologies, like screen readers.\n   * @default false\n   */\n  disableEnforceFocus: PropTypes.bool,\n  /**\n   * If `true`, the focus trap will not restore focus to previously focused element once\n   * focus trap is hidden or unmounted.\n   * @default false\n   */\n  disableRestoreFocus: PropTypes.bool,\n  /**\n   * Returns an array of ordered tabbable nodes (i.e. in tab order) within the root.\n   * For instance, you can provide the \"tabbable\" npm dependency.\n   * @param {HTMLElement} root\n   */\n  getTabbable: PropTypes.func,\n  /**\n   * This prop extends the `open` prop.\n   * It allows to toggle the open state without having to wait for a rerender when changing the `open` prop.\n   * This prop should be memoized.\n   * It can be used to support multiple focus trap mounted at the same time.\n   * @default function defaultIsEnabled(): boolean {\n   *   return true;\n   * }\n   */\n  isEnabled: PropTypes.func,\n  /**\n   * If `true`, focus is locked.\n   */\n  open: PropTypes.bool.isRequired\n} : void 0;\nif (process.env.NODE_ENV !== 'production') {\n  // eslint-disable-next-line\n  FocusTrap['propTypes' + ''] = exactProp(FocusTrap.propTypes);\n}\nexport default FocusTrap;","'use client';\n\nimport * as React from 'react';\nimport ownerDocument from '@mui/utils/ownerDocument';\nimport useForkRef from '@mui/utils/useForkRef';\nimport useEventCallback from '@mui/utils/useEventCallback';\nimport createChainedFunction from '@mui/utils/createChainedFunction';\nimport extractEventHandlers from '@mui/utils/extractEventHandlers';\nimport { ModalManager, ariaHidden } from \"./ModalManager.js\";\nfunction getContainer(container) {\n  return typeof container === 'function' ? container() : container;\n}\nfunction getHasTransition(children) {\n  return children ? children.props.hasOwnProperty('in') : false;\n}\nconst noop = () => {};\n\n// A modal manager used to track and manage the state of open Modals.\n// Modals don't open on the server so this won't conflict with concurrent requests.\nconst manager = new ModalManager();\nfunction useModal(parameters) {\n  const {\n    container,\n    disableEscapeKeyDown = false,\n    disableScrollLock = false,\n    closeAfterTransition = false,\n    onTransitionEnter,\n    onTransitionExited,\n    children,\n    onClose,\n    open,\n    rootRef\n  } = parameters;\n\n  // @ts-ignore internal logic\n  const modal = React.useRef({});\n  const mountNodeRef = React.useRef(null);\n  const modalRef = React.useRef(null);\n  const handleRef = useForkRef(modalRef, rootRef);\n  const [exited, setExited] = React.useState(!open);\n  const hasTransition = getHasTransition(children);\n  let ariaHiddenProp = true;\n  if (parameters['aria-hidden'] === 'false' || parameters['aria-hidden'] === false) {\n    ariaHiddenProp = false;\n  }\n  const getDoc = () => ownerDocument(mountNodeRef.current);\n  const getModal = () => {\n    modal.current.modalRef = modalRef.current;\n    modal.current.mount = mountNodeRef.current;\n    return modal.current;\n  };\n  const handleMounted = () => {\n    manager.mount(getModal(), {\n      disableScrollLock\n    });\n\n    // Fix a bug on Chrome where the scroll isn't initially 0.\n    if (modalRef.current) {\n      modalRef.current.scrollTop = 0;\n    }\n  };\n  const handleOpen = useEventCallback(() => {\n    const resolvedContainer = getContainer(container) || getDoc().body;\n    manager.add(getModal(), resolvedContainer);\n\n    // The element was already mounted.\n    if (modalRef.current) {\n      handleMounted();\n    }\n  });\n  const isTopModal = () => manager.isTopModal(getModal());\n  const handlePortalRef = useEventCallback(node => {\n    mountNodeRef.current = node;\n    if (!node) {\n      return;\n    }\n    if (open && isTopModal()) {\n      handleMounted();\n    } else if (modalRef.current) {\n      ariaHidden(modalRef.current, ariaHiddenProp);\n    }\n  });\n  const handleClose = React.useCallback(() => {\n    manager.remove(getModal(), ariaHiddenProp);\n  }, [ariaHiddenProp]);\n  React.useEffect(() => {\n    return () => {\n      handleClose();\n    };\n  }, [handleClose]);\n  React.useEffect(() => {\n    if (open) {\n      handleOpen();\n    } else if (!hasTransition || !closeAfterTransition) {\n      handleClose();\n    }\n  }, [open, handleClose, hasTransition, closeAfterTransition, handleOpen]);\n  const createHandleKeyDown = otherHandlers => event => {\n    otherHandlers.onKeyDown?.(event);\n\n    // The handler doesn't take event.defaultPrevented into account:\n    //\n    // event.preventDefault() is meant to stop default behaviors like\n    // clicking a checkbox to check it, hitting a button to submit a form,\n    // and hitting left arrow to move the cursor in a text input etc.\n    // Only special HTML elements have these default behaviors.\n    if (event.key !== 'Escape' || event.which === 229 ||\n    // Wait until IME is settled.\n    !isTopModal()) {\n      return;\n    }\n    if (!disableEscapeKeyDown) {\n      // Swallow the event, in case someone is listening for the escape key on the body.\n      event.stopPropagation();\n      if (onClose) {\n        onClose(event, 'escapeKeyDown');\n      }\n    }\n  };\n  const createHandleBackdropClick = otherHandlers => event => {\n    otherHandlers.onClick?.(event);\n    if (event.target !== event.currentTarget) {\n      return;\n    }\n    if (onClose) {\n      onClose(event, 'backdropClick');\n    }\n  };\n  const getRootProps = (otherHandlers = {}) => {\n    const propsEventHandlers = extractEventHandlers(parameters);\n\n    // The custom event handlers shouldn't be spread on the root element\n    delete propsEventHandlers.onTransitionEnter;\n    delete propsEventHandlers.onTransitionExited;\n    const externalEventHandlers = {\n      ...propsEventHandlers,\n      ...otherHandlers\n    };\n    return {\n      /*\n       * Marking an element with the role presentation indicates to assistive technology\n       * that this element should be ignored; it exists to support the web application and\n       * is not meant for humans to interact with directly.\n       * https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-static-element-interactions.md\n       */\n      role: 'presentation',\n      ...externalEventHandlers,\n      onKeyDown: createHandleKeyDown(externalEventHandlers),\n      ref: handleRef\n    };\n  };\n  const getBackdropProps = (otherHandlers = {}) => {\n    const externalEventHandlers = otherHandlers;\n    return {\n      'aria-hidden': true,\n      ...externalEventHandlers,\n      onClick: createHandleBackdropClick(externalEventHandlers),\n      open\n    };\n  };\n  const getTransitionProps = () => {\n    const handleEnter = () => {\n      setExited(false);\n      if (onTransitionEnter) {\n        onTransitionEnter();\n      }\n    };\n    const handleExited = () => {\n      setExited(true);\n      if (onTransitionExited) {\n        onTransitionExited();\n      }\n      if (closeAfterTransition) {\n        handleClose();\n      }\n    };\n    return {\n      onEnter: createChainedFunction(handleEnter, children?.props.onEnter ?? noop),\n      onExited: createChainedFunction(handleExited, children?.props.onExited ?? noop)\n    };\n  };\n  return {\n    getRootProps,\n    getBackdropProps,\n    getTransitionProps,\n    rootRef: handleRef,\n    portalRef: handlePortalRef,\n    isTopModal,\n    exited,\n    hasTransition\n  };\n}\nexport default useModal;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getModalUtilityClass(slot) {\n  return generateUtilityClass('MuiModal', slot);\n}\nconst modalClasses = generateUtilityClasses('MuiModal', ['root', 'hidden', 'backdrop']);\nexport default modalClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport HTMLElementType from '@mui/utils/HTMLElementType';\nimport elementAcceptingRef from '@mui/utils/elementAcceptingRef';\nimport composeClasses from '@mui/utils/composeClasses';\nimport FocusTrap from \"../Unstable_TrapFocus/index.js\";\nimport Portal from \"../Portal/index.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport Backdrop from \"../Backdrop/index.js\";\nimport useModal from \"./useModal.js\";\nimport { getModalUtilityClass } from \"./modalClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    open,\n    exited,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', !open && exited && 'hidden'],\n    backdrop: ['backdrop']\n  };\n  return composeClasses(slots, getModalUtilityClass, classes);\n};\nconst ModalRoot = styled('div', {\n  name: 'MuiModal',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, !ownerState.open && ownerState.exited && styles.hidden];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  position: 'fixed',\n  zIndex: (theme.vars || theme).zIndex.modal,\n  right: 0,\n  bottom: 0,\n  top: 0,\n  left: 0,\n  variants: [{\n    props: ({\n      ownerState\n    }) => !ownerState.open && ownerState.exited,\n    style: {\n      visibility: 'hidden'\n    }\n  }]\n})));\nconst ModalBackdrop = styled(Backdrop, {\n  name: 'MuiModal',\n  slot: 'Backdrop'\n})({\n  zIndex: -1\n});\n\n/**\n * Modal is a lower-level construct that is leveraged by the following components:\n *\n * - [Dialog](/material-ui/api/dialog/)\n * - [Drawer](/material-ui/api/drawer/)\n * - [Menu](/material-ui/api/menu/)\n * - [Popover](/material-ui/api/popover/)\n *\n * If you are creating a modal dialog, you probably want to use the [Dialog](/material-ui/api/dialog/) component\n * rather than directly using Modal.\n *\n * This component shares many concepts with [react-overlays](https://react-bootstrap.github.io/react-overlays/#modals).\n */\nconst Modal = /*#__PURE__*/React.forwardRef(function Modal(inProps, ref) {\n  const props = useDefaultProps({\n    name: 'MuiModal',\n    props: inProps\n  });\n  const {\n    BackdropComponent = ModalBackdrop,\n    BackdropProps,\n    classes: classesProp,\n    className,\n    closeAfterTransition = false,\n    children,\n    container,\n    component,\n    components = {},\n    componentsProps = {},\n    disableAutoFocus = false,\n    disableEnforceFocus = false,\n    disableEscapeKeyDown = false,\n    disablePortal = false,\n    disableRestoreFocus = false,\n    disableScrollLock = false,\n    hideBackdrop = false,\n    keepMounted = false,\n    onClose,\n    onTransitionEnter,\n    onTransitionExited,\n    open,\n    slotProps = {},\n    slots = {},\n    // eslint-disable-next-line react/prop-types\n    theme,\n    ...other\n  } = props;\n  const propsWithDefaults = {\n    ...props,\n    closeAfterTransition,\n    disableAutoFocus,\n    disableEnforceFocus,\n    disableEscapeKeyDown,\n    disablePortal,\n    disableRestoreFocus,\n    disableScrollLock,\n    hideBackdrop,\n    keepMounted\n  };\n  const {\n    getRootProps,\n    getBackdropProps,\n    getTransitionProps,\n    portalRef,\n    isTopModal,\n    exited,\n    hasTransition\n  } = useModal({\n    ...propsWithDefaults,\n    rootRef: ref\n  });\n  const ownerState = {\n    ...propsWithDefaults,\n    exited\n  };\n  const classes = useUtilityClasses(ownerState);\n  const childProps = {};\n  if (children.props.tabIndex === undefined) {\n    childProps.tabIndex = '-1';\n  }\n\n  // It's a Transition like component\n  if (hasTransition) {\n    const {\n      onEnter,\n      onExited\n    } = getTransitionProps();\n    childProps.onEnter = onEnter;\n    childProps.onExited = onExited;\n  }\n  const externalForwardedProps = {\n    slots: {\n      root: components.Root,\n      backdrop: components.Backdrop,\n      ...slots\n    },\n    slotProps: {\n      ...componentsProps,\n      ...slotProps\n    }\n  };\n  const [RootSlot, rootProps] = useSlot('root', {\n    ref,\n    elementType: ModalRoot,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      ...other,\n      component\n    },\n    getSlotProps: getRootProps,\n    ownerState,\n    className: clsx(className, classes?.root, !ownerState.open && ownerState.exited && classes?.hidden)\n  });\n  const [BackdropSlot, backdropProps] = useSlot('backdrop', {\n    ref: BackdropProps?.ref,\n    elementType: BackdropComponent,\n    externalForwardedProps,\n    shouldForwardComponentProp: true,\n    additionalProps: BackdropProps,\n    getSlotProps: otherHandlers => {\n      return getBackdropProps({\n        ...otherHandlers,\n        onClick: event => {\n          if (otherHandlers?.onClick) {\n            otherHandlers.onClick(event);\n          }\n        }\n      });\n    },\n    className: clsx(BackdropProps?.className, classes?.backdrop),\n    ownerState\n  });\n  if (!keepMounted && !open && (!hasTransition || exited)) {\n    return null;\n  }\n  return /*#__PURE__*/_jsx(Portal, {\n    ref: portalRef,\n    container: container,\n    disablePortal: disablePortal,\n    children: /*#__PURE__*/_jsxs(RootSlot, {\n      ...rootProps,\n      children: [!hideBackdrop && BackdropComponent ? /*#__PURE__*/_jsx(BackdropSlot, {\n        ...backdropProps\n      }) : null, /*#__PURE__*/_jsx(FocusTrap, {\n        disableEnforceFocus: disableEnforceFocus,\n        disableAutoFocus: disableAutoFocus,\n        disableRestoreFocus: disableRestoreFocus,\n        isEnabled: isTopModal,\n        open: open,\n        children: /*#__PURE__*/React.cloneElement(children, childProps)\n      })]\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Modal.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * A backdrop component. This prop enables custom backdrop rendering.\n   * @deprecated Use `slots.backdrop` instead. While this prop currently works, it will be removed in the next major version.\n   * Use the `slots.backdrop` prop to make your application ready for the next version of Material UI.\n   * @default styled(Backdrop, {\n   *   name: 'MuiModal',\n   *   slot: 'Backdrop',\n   * })({\n   *   zIndex: -1,\n   * })\n   */\n  BackdropComponent: PropTypes.elementType,\n  /**\n   * Props applied to the [`Backdrop`](https://mui.com/material-ui/api/backdrop/) element.\n   * @deprecated Use `slotProps.backdrop` instead.\n   */\n  BackdropProps: PropTypes.object,\n  /**\n   * A single child content element.\n   */\n  children: elementAcceptingRef.isRequired,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * When set to true the Modal waits until a nested Transition is completed before closing.\n   * @default false\n   */\n  closeAfterTransition: PropTypes.bool,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated Use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Backdrop: PropTypes.elementType,\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated Use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * An HTML element or function that returns one.\n   * The `container` will have the portal children appended to it.\n   *\n   * You can also provide a callback, which is called in a React layout effect.\n   * This lets you set the container from a ref, and also makes server-side rendering possible.\n   *\n   * By default, it uses the body of the top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),\n  /**\n   * If `true`, the modal will not automatically shift focus to itself when it opens, and\n   * replace it to the last focused element when it closes.\n   * This also works correctly with any modal children that have the `disableAutoFocus` prop.\n   *\n   * Generally this should never be set to `true` as it makes the modal less\n   * accessible to assistive technologies, like screen readers.\n   * @default false\n   */\n  disableAutoFocus: PropTypes.bool,\n  /**\n   * If `true`, the modal will not prevent focus from leaving the modal while open.\n   *\n   * Generally this should never be set to `true` as it makes the modal less\n   * accessible to assistive technologies, like screen readers.\n   * @default false\n   */\n  disableEnforceFocus: PropTypes.bool,\n  /**\n   * If `true`, hitting escape will not fire the `onClose` callback.\n   * @default false\n   */\n  disableEscapeKeyDown: PropTypes.bool,\n  /**\n   * The `children` will be under the DOM hierarchy of the parent component.\n   * @default false\n   */\n  disablePortal: PropTypes.bool,\n  /**\n   * If `true`, the modal will not restore focus to previously focused element once\n   * modal is hidden or unmounted.\n   * @default false\n   */\n  disableRestoreFocus: PropTypes.bool,\n  /**\n   * Disable the scroll lock behavior.\n   * @default false\n   */\n  disableScrollLock: PropTypes.bool,\n  /**\n   * If `true`, the backdrop is not rendered.\n   * @default false\n   */\n  hideBackdrop: PropTypes.bool,\n  /**\n   * Always keep the children in the DOM.\n   * This prop can be useful in SEO situation or\n   * when you want to maximize the responsiveness of the Modal.\n   * @default false\n   */\n  keepMounted: PropTypes.bool,\n  /**\n   * Callback fired when the component requests to be closed.\n   * The `reason` parameter can optionally be used to control the response to `onClose`.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n   */\n  onClose: PropTypes.func,\n  /**\n   * A function called when a transition enters.\n   */\n  onTransitionEnter: PropTypes.func,\n  /**\n   * A function called when a transition has exited.\n   */\n  onTransitionExited: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * The props used for each slot inside the Modal.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside the Modal.\n   * Either a string to use a HTML element or a component.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    backdrop: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default Modal;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getDialogUtilityClass(slot) {\n  return generateUtilityClass('MuiDialog', slot);\n}\nconst dialogClasses = generateUtilityClasses('MuiDialog', ['root', 'scrollPaper', 'scrollBody', 'container', 'paper', 'paperScrollPaper', 'paperScrollBody', 'paperWidthFalse', 'paperWidthXs', 'paperWidthSm', 'paperWidthMd', 'paperWidthLg', 'paperWidthXl', 'paperFullWidth', 'paperFullScreen']);\nexport default dialogClasses;","'use client';\n\nimport * as React from 'react';\nconst DialogContext = /*#__PURE__*/React.createContext({});\nif (process.env.NODE_ENV !== 'production') {\n  DialogContext.displayName = 'DialogContext';\n}\nexport default DialogContext;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport useId from '@mui/utils/useId';\nimport capitalize from \"../utils/capitalize.js\";\nimport Modal from \"../Modal/index.js\";\nimport Fade from \"../Fade/index.js\";\nimport Paper from \"../Paper/index.js\";\nimport dialogClasses, { getDialogUtilityClass } from \"./dialogClasses.js\";\nimport DialogContext from \"./DialogContext.js\";\nimport Backdrop from \"../Backdrop/index.js\";\nimport { styled, useTheme } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst DialogBackdrop = styled(Backdrop, {\n  name: 'MuiDialog',\n  slot: 'Backdrop',\n  overrides: (props, styles) => styles.backdrop\n})({\n  // Improve scrollable dialog support.\n  zIndex: -1\n});\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    scroll,\n    maxWidth,\n    fullWidth,\n    fullScreen\n  } = ownerState;\n  const slots = {\n    root: ['root'],\n    container: ['container', `scroll${capitalize(scroll)}`],\n    paper: ['paper', `paperScroll${capitalize(scroll)}`, `paperWidth${capitalize(String(maxWidth))}`, fullWidth && 'paperFullWidth', fullScreen && 'paperFullScreen']\n  };\n  return composeClasses(slots, getDialogUtilityClass, classes);\n};\nconst DialogRoot = styled(Modal, {\n  name: 'MuiDialog',\n  slot: 'Root'\n})({\n  '@media print': {\n    // Use !important to override the Modal inline-style.\n    position: 'absolute !important'\n  }\n});\nconst DialogContainer = styled('div', {\n  name: 'MuiDialog',\n  slot: 'Container',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.container, styles[`scroll${capitalize(ownerState.scroll)}`]];\n  }\n})({\n  height: '100%',\n  '@media print': {\n    height: 'auto'\n  },\n  // We disable the focus ring for mouse, touch and keyboard users.\n  outline: 0,\n  variants: [{\n    props: {\n      scroll: 'paper'\n    },\n    style: {\n      display: 'flex',\n      justifyContent: 'center',\n      alignItems: 'center'\n    }\n  }, {\n    props: {\n      scroll: 'body'\n    },\n    style: {\n      overflowY: 'auto',\n      overflowX: 'hidden',\n      textAlign: 'center',\n      '&::after': {\n        content: '\"\"',\n        display: 'inline-block',\n        verticalAlign: 'middle',\n        height: '100%',\n        width: '0'\n      }\n    }\n  }]\n});\nconst DialogPaper = styled(Paper, {\n  name: 'MuiDialog',\n  slot: 'Paper',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.paper, styles[`scrollPaper${capitalize(ownerState.scroll)}`], styles[`paperWidth${capitalize(String(ownerState.maxWidth))}`], ownerState.fullWidth && styles.paperFullWidth, ownerState.fullScreen && styles.paperFullScreen];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  margin: 32,\n  position: 'relative',\n  overflowY: 'auto',\n  '@media print': {\n    overflowY: 'visible',\n    boxShadow: 'none'\n  },\n  variants: [{\n    props: {\n      scroll: 'paper'\n    },\n    style: {\n      display: 'flex',\n      flexDirection: 'column',\n      maxHeight: 'calc(100% - 64px)'\n    }\n  }, {\n    props: {\n      scroll: 'body'\n    },\n    style: {\n      display: 'inline-block',\n      verticalAlign: 'middle',\n      textAlign: 'initial'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !ownerState.maxWidth,\n    style: {\n      maxWidth: 'calc(100% - 64px)'\n    }\n  }, {\n    props: {\n      maxWidth: 'xs'\n    },\n    style: {\n      maxWidth: theme.breakpoints.unit === 'px' ? Math.max(theme.breakpoints.values.xs, 444) : `max(${theme.breakpoints.values.xs}${theme.breakpoints.unit}, 444px)`,\n      [`&.${dialogClasses.paperScrollBody}`]: {\n        [theme.breakpoints.down(Math.max(theme.breakpoints.values.xs, 444) + 32 * 2)]: {\n          maxWidth: 'calc(100% - 64px)'\n        }\n      }\n    }\n  }, ...Object.keys(theme.breakpoints.values).filter(maxWidth => maxWidth !== 'xs').map(maxWidth => ({\n    props: {\n      maxWidth\n    },\n    style: {\n      maxWidth: `${theme.breakpoints.values[maxWidth]}${theme.breakpoints.unit}`,\n      [`&.${dialogClasses.paperScrollBody}`]: {\n        [theme.breakpoints.down(theme.breakpoints.values[maxWidth] + 32 * 2)]: {\n          maxWidth: 'calc(100% - 64px)'\n        }\n      }\n    }\n  })), {\n    props: ({\n      ownerState\n    }) => ownerState.fullWidth,\n    style: {\n      width: 'calc(100% - 64px)'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.fullScreen,\n    style: {\n      margin: 0,\n      width: '100%',\n      maxWidth: '100%',\n      height: '100%',\n      maxHeight: 'none',\n      borderRadius: 0,\n      [`&.${dialogClasses.paperScrollBody}`]: {\n        margin: 0,\n        maxWidth: '100%'\n      }\n    }\n  }]\n})));\n\n/**\n * Dialogs are overlaid modal paper based components with a backdrop.\n */\nconst Dialog = /*#__PURE__*/React.forwardRef(function Dialog(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiDialog'\n  });\n  const theme = useTheme();\n  const defaultTransitionDuration = {\n    enter: theme.transitions.duration.enteringScreen,\n    exit: theme.transitions.duration.leavingScreen\n  };\n  const {\n    'aria-describedby': ariaDescribedby,\n    'aria-labelledby': ariaLabelledbyProp,\n    'aria-modal': ariaModal = true,\n    BackdropComponent,\n    BackdropProps,\n    children,\n    className,\n    disableEscapeKeyDown = false,\n    fullScreen = false,\n    fullWidth = false,\n    maxWidth = 'sm',\n    onClick,\n    onClose,\n    open,\n    PaperComponent = Paper,\n    PaperProps = {},\n    scroll = 'paper',\n    slots = {},\n    slotProps = {},\n    TransitionComponent = Fade,\n    transitionDuration = defaultTransitionDuration,\n    TransitionProps,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    disableEscapeKeyDown,\n    fullScreen,\n    fullWidth,\n    maxWidth,\n    scroll\n  };\n  const classes = useUtilityClasses(ownerState);\n  const backdropClick = React.useRef();\n  const handleMouseDown = event => {\n    // We don't want to close the dialog when clicking the dialog content.\n    // Make sure the event starts and ends on the same DOM element.\n    backdropClick.current = event.target === event.currentTarget;\n  };\n  const handleBackdropClick = event => {\n    if (onClick) {\n      onClick(event);\n    }\n\n    // Ignore the events not coming from the \"backdrop\".\n    if (!backdropClick.current) {\n      return;\n    }\n    backdropClick.current = null;\n    if (onClose) {\n      onClose(event, 'backdropClick');\n    }\n  };\n  const ariaLabelledby = useId(ariaLabelledbyProp);\n  const dialogContextValue = React.useMemo(() => {\n    return {\n      titleId: ariaLabelledby\n    };\n  }, [ariaLabelledby]);\n  const backwardCompatibleSlots = {\n    transition: TransitionComponent,\n    ...slots\n  };\n  const backwardCompatibleSlotProps = {\n    transition: TransitionProps,\n    paper: PaperProps,\n    backdrop: BackdropProps,\n    ...slotProps\n  };\n  const externalForwardedProps = {\n    slots: backwardCompatibleSlots,\n    slotProps: backwardCompatibleSlotProps\n  };\n  const [RootSlot, rootSlotProps] = useSlot('root', {\n    elementType: DialogRoot,\n    shouldForwardComponentProp: true,\n    externalForwardedProps,\n    ownerState,\n    className: clsx(classes.root, className),\n    ref\n  });\n  const [BackdropSlot, backdropSlotProps] = useSlot('backdrop', {\n    elementType: DialogBackdrop,\n    shouldForwardComponentProp: true,\n    externalForwardedProps,\n    ownerState\n  });\n  const [PaperSlot, paperSlotProps] = useSlot('paper', {\n    elementType: DialogPaper,\n    shouldForwardComponentProp: true,\n    externalForwardedProps,\n    ownerState,\n    className: clsx(classes.paper, PaperProps.className)\n  });\n  const [ContainerSlot, containerSlotProps] = useSlot('container', {\n    elementType: DialogContainer,\n    externalForwardedProps,\n    ownerState,\n    className: classes.container\n  });\n  const [TransitionSlot, transitionSlotProps] = useSlot('transition', {\n    elementType: Fade,\n    externalForwardedProps,\n    ownerState,\n    additionalProps: {\n      appear: true,\n      in: open,\n      timeout: transitionDuration,\n      role: 'presentation'\n    }\n  });\n  return /*#__PURE__*/_jsx(RootSlot, {\n    closeAfterTransition: true,\n    slots: {\n      backdrop: BackdropSlot\n    },\n    slotProps: {\n      backdrop: {\n        transitionDuration,\n        as: BackdropComponent,\n        ...backdropSlotProps\n      }\n    },\n    disableEscapeKeyDown: disableEscapeKeyDown,\n    onClose: onClose,\n    open: open,\n    onClick: handleBackdropClick,\n    ...rootSlotProps,\n    ...other,\n    children: /*#__PURE__*/_jsx(TransitionSlot, {\n      ...transitionSlotProps,\n      children: /*#__PURE__*/_jsx(ContainerSlot, {\n        onMouseDown: handleMouseDown,\n        ...containerSlotProps,\n        children: /*#__PURE__*/_jsx(PaperSlot, {\n          as: PaperComponent,\n          elevation: 24,\n          role: \"dialog\",\n          \"aria-describedby\": ariaDescribedby,\n          \"aria-labelledby\": ariaLabelledby,\n          \"aria-modal\": ariaModal,\n          ...paperSlotProps,\n          children: /*#__PURE__*/_jsx(DialogContext.Provider, {\n            value: dialogContextValue,\n            children: children\n          })\n        })\n      })\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Dialog.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The id(s) of the element(s) that describe the dialog.\n   */\n  'aria-describedby': PropTypes.string,\n  /**\n   * The id(s) of the element(s) that label the dialog.\n   */\n  'aria-labelledby': PropTypes.string,\n  /**\n   * Informs assistive technologies that the element is modal.\n   * It's added on the element with role=\"dialog\".\n   * @default true\n   */\n  'aria-modal': PropTypes.oneOfType([PropTypes.oneOf(['false', 'true']), PropTypes.bool]),\n  /**\n   * A backdrop component. This prop enables custom backdrop rendering.\n   * @deprecated Use `slots.backdrop` instead. While this prop currently works, it will be removed in the next major version.\n   * Use the `slots.backdrop` prop to make your application ready for the next version of Material UI.\n   * @default styled(Backdrop, {\n   *   name: 'MuiModal',\n   *   slot: 'Backdrop',\n   * })({\n   *   zIndex: -1,\n   * })\n   */\n  BackdropComponent: PropTypes.elementType,\n  /**\n   * @ignore\n   */\n  BackdropProps: PropTypes.object,\n  /**\n   * Dialog children, usually the included sub-components.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, hitting escape will not fire the `onClose` callback.\n   * @default false\n   */\n  disableEscapeKeyDown: PropTypes.bool,\n  /**\n   * If `true`, the dialog is full-screen.\n   * @default false\n   */\n  fullScreen: PropTypes.bool,\n  /**\n   * If `true`, the dialog stretches to `maxWidth`.\n   *\n   * Notice that the dialog width grow is limited by the default margin.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * Determine the max-width of the dialog.\n   * The dialog width grows with the size of the screen.\n   * Set to `false` to disable `maxWidth`.\n   * @default 'sm'\n   */\n  maxWidth: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['xs', 'sm', 'md', 'lg', 'xl', false]), PropTypes.string]),\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`.\n   */\n  onClose: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * The component used to render the body of the dialog.\n   * @default Paper\n   */\n  PaperComponent: PropTypes.elementType,\n  /**\n   * Props applied to the [`Paper`](https://mui.com/material-ui/api/paper/) element.\n   * @default {}\n   * @deprecated Use `slotProps.paper` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  PaperProps: PropTypes.object,\n  /**\n   * Determine the container for scrolling the dialog.\n   * @default 'paper'\n   */\n  scroll: PropTypes.oneOf(['body', 'paper']),\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    container: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    paper: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    transition: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    backdrop: PropTypes.elementType,\n    container: PropTypes.elementType,\n    paper: PropTypes.elementType,\n    root: PropTypes.elementType,\n    transition: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The component used for the transition.\n   * [Follow this guide](https://mui.com/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   * @default Fade\n   * @deprecated Use `slots.transition` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  TransitionComponent: PropTypes.elementType,\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   * @default {\n   *   enter: theme.transitions.duration.enteringScreen,\n   *   exit: theme.transitions.duration.leavingScreen,\n   * }\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })]),\n  /**\n   * Props applied to the transition element.\n   * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.\n   * @deprecated Use `slotProps.transition` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default Dialog;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getDialogActionsUtilityClass(slot) {\n  return generateUtilityClass('MuiDialogActions', slot);\n}\nconst dialogActionsClasses = generateUtilityClasses('MuiDialogActions', ['root', 'spacing']);\nexport default dialogActionsClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getDialogActionsUtilityClass } from \"./dialogActionsClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disableSpacing\n  } = ownerState;\n  const slots = {\n    root: ['root', !disableSpacing && 'spacing']\n  };\n  return composeClasses(slots, getDialogActionsUtilityClass, classes);\n};\nconst DialogActionsRoot = styled('div', {\n  name: 'MuiDialogActions',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, !ownerState.disableSpacing && styles.spacing];\n  }\n})({\n  display: 'flex',\n  alignItems: 'center',\n  padding: 8,\n  justifyContent: 'flex-end',\n  flex: '0 0 auto',\n  variants: [{\n    props: ({\n      ownerState\n    }) => !ownerState.disableSpacing,\n    style: {\n      '& > :not(style) ~ :not(style)': {\n        marginLeft: 8\n      }\n    }\n  }]\n});\nconst DialogActions = /*#__PURE__*/React.forwardRef(function DialogActions(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiDialogActions'\n  });\n  const {\n    className,\n    disableSpacing = false,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    disableSpacing\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(DialogActionsRoot, {\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    ref: ref,\n    ...other\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogActions.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, the actions do not have additional margin.\n   * @default false\n   */\n  disableSpacing: PropTypes.bool,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default DialogActions;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getDialogContentUtilityClass(slot) {\n  return generateUtilityClass('MuiDialogContent', slot);\n}\nconst dialogContentClasses = generateUtilityClasses('MuiDialogContent', ['root', 'dividers']);\nexport default dialogContentClasses;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getDialogTitleUtilityClass(slot) {\n  return generateUtilityClass('MuiDialogTitle', slot);\n}\nconst dialogTitleClasses = generateUtilityClasses('MuiDialogTitle', ['root']);\nexport default dialogTitleClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getDialogContentUtilityClass } from \"./dialogContentClasses.js\";\nimport dialogTitleClasses from \"../DialogTitle/dialogTitleClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    dividers\n  } = ownerState;\n  const slots = {\n    root: ['root', dividers && 'dividers']\n  };\n  return composeClasses(slots, getDialogContentUtilityClass, classes);\n};\nconst DialogContentRoot = styled('div', {\n  name: 'MuiDialogContent',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.dividers && styles.dividers];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  flex: '1 1 auto',\n  // Add iOS momentum scrolling for iOS < 13.0\n  WebkitOverflowScrolling: 'touch',\n  overflowY: 'auto',\n  padding: '20px 24px',\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.dividers,\n    style: {\n      padding: '16px 24px',\n      borderTop: `1px solid ${(theme.vars || theme).palette.divider}`,\n      borderBottom: `1px solid ${(theme.vars || theme).palette.divider}`\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !ownerState.dividers,\n    style: {\n      [`.${dialogTitleClasses.root} + &`]: {\n        paddingTop: 0\n      }\n    }\n  }]\n})));\nconst DialogContent = /*#__PURE__*/React.forwardRef(function DialogContent(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiDialogContent'\n  });\n  const {\n    className,\n    dividers = false,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    dividers\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(DialogContentRoot, {\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    ref: ref,\n    ...other\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogContent.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * Display the top and bottom dividers.\n   * @default false\n   */\n  dividers: PropTypes.bool,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default DialogContent;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getDialogContentTextUtilityClass(slot) {\n  return generateUtilityClass('MuiDialogContentText', slot);\n}\nconst dialogContentTextClasses = generateUtilityClasses('MuiDialogContentText', ['root']);\nexport default dialogContentTextClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport Typography from \"../Typography/index.js\";\nimport { getDialogContentTextUtilityClass } from \"./dialogContentTextClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root']\n  };\n  const composedClasses = composeClasses(slots, getDialogContentTextUtilityClass, classes);\n  return {\n    ...classes,\n    // forward classes to the Typography\n    ...composedClasses\n  };\n};\nconst DialogContentTextRoot = styled(Typography, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiDialogContentText',\n  slot: 'Root'\n})({});\nconst DialogContentText = /*#__PURE__*/React.forwardRef(function DialogContentText(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiDialogContentText'\n  });\n  const {\n    children,\n    className,\n    ...ownerState\n  } = props;\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(DialogContentTextRoot, {\n    component: \"p\",\n    variant: \"body1\",\n    color: \"textSecondary\",\n    ref: ref,\n    ownerState: ownerState,\n    className: clsx(classes.root, className),\n    ...props,\n    classes: classes\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogContentText.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default DialogContentText;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport Typography from \"../Typography/index.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getDialogTitleUtilityClass } from \"./dialogTitleClasses.js\";\nimport DialogContext from \"../Dialog/DialogContext.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root']\n  };\n  return composeClasses(slots, getDialogTitleUtilityClass, classes);\n};\nconst DialogTitleRoot = styled(Typography, {\n  name: 'MuiDialogTitle',\n  slot: 'Root'\n})({\n  padding: '16px 24px',\n  flex: '0 0 auto'\n});\nconst DialogTitle = /*#__PURE__*/React.forwardRef(function DialogTitle(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiDialogTitle'\n  });\n  const {\n    className,\n    id: idProp,\n    ...other\n  } = props;\n  const ownerState = props;\n  const classes = useUtilityClasses(ownerState);\n  const {\n    titleId = idProp\n  } = React.useContext(DialogContext);\n  return /*#__PURE__*/_jsx(DialogTitleRoot, {\n    component: \"h2\",\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    ref: ref,\n    variant: \"h6\",\n    id: idProp ?? titleId,\n    ...other\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? DialogTitle.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * @ignore\n   */\n  id: PropTypes.string,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default DialogTitle;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getDividerUtilityClass(slot) {\n  return generateUtilityClass('MuiDivider', slot);\n}\nconst dividerClasses = generateUtilityClasses('MuiDivider', ['root', 'absolute', 'fullWidth', 'inset', 'middle', 'flexItem', 'light', 'vertical', 'withChildren', 'withChildrenVertical', 'textAlignRight', 'textAlignLeft', 'wrapper', 'wrapperVertical']);\nexport default dividerClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getDividerUtilityClass } from \"./dividerClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    absolute,\n    children,\n    classes,\n    flexItem,\n    light,\n    orientation,\n    textAlign,\n    variant\n  } = ownerState;\n  const slots = {\n    root: ['root', absolute && 'absolute', variant, light && 'light', orientation === 'vertical' && 'vertical', flexItem && 'flexItem', children && 'withChildren', children && orientation === 'vertical' && 'withChildrenVertical', textAlign === 'right' && orientation !== 'vertical' && 'textAlignRight', textAlign === 'left' && orientation !== 'vertical' && 'textAlignLeft'],\n    wrapper: ['wrapper', orientation === 'vertical' && 'wrapperVertical']\n  };\n  return composeClasses(slots, getDividerUtilityClass, classes);\n};\nconst DividerRoot = styled('div', {\n  name: 'MuiDivider',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.absolute && styles.absolute, styles[ownerState.variant], ownerState.light && styles.light, ownerState.orientation === 'vertical' && styles.vertical, ownerState.flexItem && styles.flexItem, ownerState.children && styles.withChildren, ownerState.children && ownerState.orientation === 'vertical' && styles.withChildrenVertical, ownerState.textAlign === 'right' && ownerState.orientation !== 'vertical' && styles.textAlignRight, ownerState.textAlign === 'left' && ownerState.orientation !== 'vertical' && styles.textAlignLeft];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  margin: 0,\n  // Reset browser default style.\n  flexShrink: 0,\n  borderWidth: 0,\n  borderStyle: 'solid',\n  borderColor: (theme.vars || theme).palette.divider,\n  borderBottomWidth: 'thin',\n  variants: [{\n    props: {\n      absolute: true\n    },\n    style: {\n      position: 'absolute',\n      bottom: 0,\n      left: 0,\n      width: '100%'\n    }\n  }, {\n    props: {\n      light: true\n    },\n    style: {\n      borderColor: theme.alpha((theme.vars || theme).palette.divider, 0.08)\n    }\n  }, {\n    props: {\n      variant: 'inset'\n    },\n    style: {\n      marginLeft: 72\n    }\n  }, {\n    props: {\n      variant: 'middle',\n      orientation: 'horizontal'\n    },\n    style: {\n      marginLeft: theme.spacing(2),\n      marginRight: theme.spacing(2)\n    }\n  }, {\n    props: {\n      variant: 'middle',\n      orientation: 'vertical'\n    },\n    style: {\n      marginTop: theme.spacing(1),\n      marginBottom: theme.spacing(1)\n    }\n  }, {\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      height: '100%',\n      borderBottomWidth: 0,\n      borderRightWidth: 'thin'\n    }\n  }, {\n    props: {\n      flexItem: true\n    },\n    style: {\n      alignSelf: 'stretch',\n      height: 'auto'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !!ownerState.children,\n    style: {\n      display: 'flex',\n      textAlign: 'center',\n      border: 0,\n      borderTopStyle: 'solid',\n      borderLeftStyle: 'solid',\n      '&::before, &::after': {\n        content: '\"\"',\n        alignSelf: 'center'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.children && ownerState.orientation !== 'vertical',\n    style: {\n      '&::before, &::after': {\n        width: '100%',\n        borderTop: `thin solid ${(theme.vars || theme).palette.divider}`,\n        borderTopStyle: 'inherit'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.orientation === 'vertical' && ownerState.children,\n    style: {\n      flexDirection: 'column',\n      '&::before, &::after': {\n        height: '100%',\n        borderLeft: `thin solid ${(theme.vars || theme).palette.divider}`,\n        borderLeftStyle: 'inherit'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.textAlign === 'right' && ownerState.orientation !== 'vertical',\n    style: {\n      '&::before': {\n        width: '90%'\n      },\n      '&::after': {\n        width: '10%'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.textAlign === 'left' && ownerState.orientation !== 'vertical',\n    style: {\n      '&::before': {\n        width: '10%'\n      },\n      '&::after': {\n        width: '90%'\n      }\n    }\n  }]\n})));\nconst DividerWrapper = styled('span', {\n  name: 'MuiDivider',\n  slot: 'Wrapper',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.wrapper, ownerState.orientation === 'vertical' && styles.wrapperVertical];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'inline-block',\n  paddingLeft: `calc(${theme.spacing(1)} * 1.2)`,\n  paddingRight: `calc(${theme.spacing(1)} * 1.2)`,\n  whiteSpace: 'nowrap',\n  variants: [{\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      paddingTop: `calc(${theme.spacing(1)} * 1.2)`,\n      paddingBottom: `calc(${theme.spacing(1)} * 1.2)`\n    }\n  }]\n})));\nconst Divider = /*#__PURE__*/React.forwardRef(function Divider(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiDivider'\n  });\n  const {\n    absolute = false,\n    children,\n    className,\n    orientation = 'horizontal',\n    component = children || orientation === 'vertical' ? 'div' : 'hr',\n    flexItem = false,\n    light = false,\n    role = component !== 'hr' ? 'separator' : undefined,\n    textAlign = 'center',\n    variant = 'fullWidth',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    absolute,\n    component,\n    flexItem,\n    light,\n    orientation,\n    role,\n    textAlign,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(DividerRoot, {\n    as: component,\n    className: clsx(classes.root, className),\n    role: role,\n    ref: ref,\n    ownerState: ownerState,\n    \"aria-orientation\": role === 'separator' && (component !== 'hr' || orientation === 'vertical') ? orientation : undefined,\n    ...other,\n    children: children ? /*#__PURE__*/_jsx(DividerWrapper, {\n      className: classes.wrapper,\n      ownerState: ownerState,\n      children: children\n    }) : null\n  });\n});\n\n/**\n * The following flag is used to ensure that this component isn't tabbable i.e.\n * does not get highlight/focus inside of MUI List.\n */\nif (Divider) {\n  Divider.muiSkipListHighlight = true;\n}\nprocess.env.NODE_ENV !== \"production\" ? Divider.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Absolutely position the element.\n   * @default false\n   */\n  absolute: PropTypes.bool,\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, a vertical divider will have the correct height when used in flex container.\n   * (By default, a vertical divider will have a calculated height of `0px` if it is the child of a flex container.)\n   * @default false\n   */\n  flexItem: PropTypes.bool,\n  /**\n   * If `true`, the divider will have a lighter color.\n   * @default false\n   * @deprecated Use <Divider sx={{ opacity: 0.6 }} /> (or any opacity or color) instead. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  light: PropTypes.bool,\n  /**\n   * The component orientation.\n   * @default 'horizontal'\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n  /**\n   * @ignore\n   */\n  role: PropTypes.string,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The text alignment.\n   * @default 'center'\n   */\n  textAlign: PropTypes.oneOf(['center', 'left', 'right']),\n  /**\n   * The variant to use.\n   * @default 'fullWidth'\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['fullWidth', 'inset', 'middle']), PropTypes.string])\n} : void 0;\nexport default Divider;","'use client';\n\nimport * as React from 'react';\nimport deepmerge from '@mui/utils/deepmerge';\nimport refType from '@mui/utils/refType';\nimport PropTypes from 'prop-types';\nimport composeClasses from '@mui/utils/composeClasses';\nimport InputBase from \"../InputBase/index.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport filledInputClasses, { getFilledInputUtilityClass } from \"./filledInputClasses.js\";\nimport { rootOverridesResolver as inputBaseRootOverridesResolver, inputOverridesResolver as inputBaseInputOverridesResolver, InputBaseRoot, InputBaseInput } from \"../InputBase/InputBase.js\";\nimport { capitalize } from \"../utils/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disableUnderline,\n    startAdornment,\n    endAdornment,\n    size,\n    hiddenLabel,\n    multiline\n  } = ownerState;\n  const slots = {\n    root: ['root', !disableUnderline && 'underline', startAdornment && 'adornedStart', endAdornment && 'adornedEnd', size === 'small' && `size${capitalize(size)}`, hiddenLabel && 'hiddenLabel', multiline && 'multiline'],\n    input: ['input']\n  };\n  const composedClasses = composeClasses(slots, getFilledInputUtilityClass, classes);\n  return {\n    ...classes,\n    // forward classes to the InputBase\n    ...composedClasses\n  };\n};\nconst FilledInputRoot = styled(InputBaseRoot, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiFilledInput',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [...inputBaseRootOverridesResolver(props, styles), !ownerState.disableUnderline && styles.underline];\n  }\n})(memoTheme(({\n  theme\n}) => {\n  const light = theme.palette.mode === 'light';\n  const bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n  const backgroundColor = light ? 'rgba(0, 0, 0, 0.06)' : 'rgba(255, 255, 255, 0.09)';\n  const hoverBackground = light ? 'rgba(0, 0, 0, 0.09)' : 'rgba(255, 255, 255, 0.13)';\n  const disabledBackground = light ? 'rgba(0, 0, 0, 0.12)' : 'rgba(255, 255, 255, 0.12)';\n  return {\n    position: 'relative',\n    backgroundColor: theme.vars ? theme.vars.palette.FilledInput.bg : backgroundColor,\n    borderTopLeftRadius: (theme.vars || theme).shape.borderRadius,\n    borderTopRightRadius: (theme.vars || theme).shape.borderRadius,\n    transition: theme.transitions.create('background-color', {\n      duration: theme.transitions.duration.shorter,\n      easing: theme.transitions.easing.easeOut\n    }),\n    '&:hover': {\n      backgroundColor: theme.vars ? theme.vars.palette.FilledInput.hoverBg : hoverBackground,\n      // Reset on touch devices, it doesn't add specificity\n      '@media (hover: none)': {\n        backgroundColor: theme.vars ? theme.vars.palette.FilledInput.bg : backgroundColor\n      }\n    },\n    [`&.${filledInputClasses.focused}`]: {\n      backgroundColor: theme.vars ? theme.vars.palette.FilledInput.bg : backgroundColor\n    },\n    [`&.${filledInputClasses.disabled}`]: {\n      backgroundColor: theme.vars ? theme.vars.palette.FilledInput.disabledBg : disabledBackground\n    },\n    variants: [{\n      props: ({\n        ownerState\n      }) => !ownerState.disableUnderline,\n      style: {\n        '&::after': {\n          left: 0,\n          bottom: 0,\n          content: '\"\"',\n          position: 'absolute',\n          right: 0,\n          transform: 'scaleX(0)',\n          transition: theme.transitions.create('transform', {\n            duration: theme.transitions.duration.shorter,\n            easing: theme.transitions.easing.easeOut\n          }),\n          pointerEvents: 'none' // Transparent to the hover style.\n        },\n        [`&.${filledInputClasses.focused}:after`]: {\n          // translateX(0) is a workaround for Safari transform scale bug\n          // See https://github.com/mui/material-ui/issues/31766\n          transform: 'scaleX(1) translateX(0)'\n        },\n        [`&.${filledInputClasses.error}`]: {\n          '&::before, &::after': {\n            borderBottomColor: (theme.vars || theme).palette.error.main\n          }\n        },\n        '&::before': {\n          borderBottom: `1px solid ${theme.vars ? theme.alpha(theme.vars.palette.common.onBackground, theme.vars.opacity.inputUnderline) : bottomLineColor}`,\n          left: 0,\n          bottom: 0,\n          content: '\"\\\\00a0\"',\n          position: 'absolute',\n          right: 0,\n          transition: theme.transitions.create('border-bottom-color', {\n            duration: theme.transitions.duration.shorter\n          }),\n          pointerEvents: 'none' // Transparent to the hover style.\n        },\n        [`&:hover:not(.${filledInputClasses.disabled}, .${filledInputClasses.error}):before`]: {\n          borderBottom: `1px solid ${(theme.vars || theme).palette.text.primary}`\n        },\n        [`&.${filledInputClasses.disabled}:before`]: {\n          borderBottomStyle: 'dotted'\n        }\n      }\n    }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()) // check all the used fields in the style below\n    .map(([color]) => ({\n      props: {\n        disableUnderline: false,\n        color\n      },\n      style: {\n        '&::after': {\n          borderBottom: `2px solid ${(theme.vars || theme).palette[color]?.main}`\n        }\n      }\n    })), {\n      props: ({\n        ownerState\n      }) => ownerState.startAdornment,\n      style: {\n        paddingLeft: 12\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.endAdornment,\n      style: {\n        paddingRight: 12\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.multiline,\n      style: {\n        padding: '25px 12px 8px'\n      }\n    }, {\n      props: ({\n        ownerState,\n        size\n      }) => ownerState.multiline && size === 'small',\n      style: {\n        paddingTop: 21,\n        paddingBottom: 4\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.multiline && ownerState.hiddenLabel,\n      style: {\n        paddingTop: 16,\n        paddingBottom: 17\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.multiline && ownerState.hiddenLabel && ownerState.size === 'small',\n      style: {\n        paddingTop: 8,\n        paddingBottom: 9\n      }\n    }]\n  };\n}));\nconst FilledInputInput = styled(InputBaseInput, {\n  name: 'MuiFilledInput',\n  slot: 'Input',\n  overridesResolver: inputBaseInputOverridesResolver\n})(memoTheme(({\n  theme\n}) => ({\n  paddingTop: 25,\n  paddingRight: 12,\n  paddingBottom: 8,\n  paddingLeft: 12,\n  ...(!theme.vars && {\n    '&:-webkit-autofill': {\n      WebkitBoxShadow: theme.palette.mode === 'light' ? null : '0 0 0 100px #266798 inset',\n      WebkitTextFillColor: theme.palette.mode === 'light' ? null : '#fff',\n      caretColor: theme.palette.mode === 'light' ? null : '#fff',\n      borderTopLeftRadius: 'inherit',\n      borderTopRightRadius: 'inherit'\n    }\n  }),\n  ...(theme.vars && {\n    '&:-webkit-autofill': {\n      borderTopLeftRadius: 'inherit',\n      borderTopRightRadius: 'inherit'\n    },\n    [theme.getColorSchemeSelector('dark')]: {\n      '&:-webkit-autofill': {\n        WebkitBoxShadow: '0 0 0 100px #266798 inset',\n        WebkitTextFillColor: '#fff',\n        caretColor: '#fff'\n      }\n    }\n  }),\n  variants: [{\n    props: {\n      size: 'small'\n    },\n    style: {\n      paddingTop: 21,\n      paddingBottom: 4\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.hiddenLabel,\n    style: {\n      paddingTop: 16,\n      paddingBottom: 17\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.startAdornment,\n    style: {\n      paddingLeft: 0\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.endAdornment,\n    style: {\n      paddingRight: 0\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.hiddenLabel && ownerState.size === 'small',\n    style: {\n      paddingTop: 8,\n      paddingBottom: 9\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.multiline,\n    style: {\n      paddingTop: 0,\n      paddingBottom: 0,\n      paddingLeft: 0,\n      paddingRight: 0\n    }\n  }]\n})));\nconst FilledInput = /*#__PURE__*/React.forwardRef(function FilledInput(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiFilledInput'\n  });\n  const {\n    disableUnderline = false,\n    components = {},\n    componentsProps: componentsPropsProp,\n    fullWidth = false,\n    hiddenLabel,\n    // declare here to prevent spreading to DOM\n    inputComponent = 'input',\n    multiline = false,\n    slotProps,\n    slots = {},\n    type = 'text',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    disableUnderline,\n    fullWidth,\n    inputComponent,\n    multiline,\n    type\n  };\n  const classes = useUtilityClasses(props);\n  const filledInputComponentsProps = {\n    root: {\n      ownerState\n    },\n    input: {\n      ownerState\n    }\n  };\n  const componentsProps = slotProps ?? componentsPropsProp ? deepmerge(filledInputComponentsProps, slotProps ?? componentsPropsProp) : filledInputComponentsProps;\n  const RootSlot = slots.root ?? components.Root ?? FilledInputRoot;\n  const InputSlot = slots.input ?? components.Input ?? FilledInputInput;\n  return /*#__PURE__*/_jsx(InputBase, {\n    slots: {\n      root: RootSlot,\n      input: InputSlot\n    },\n    slotProps: componentsProps,\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type,\n    ...other,\n    classes: classes\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? FilledInput.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n  /**\n   * If `true`, the `input` element is focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * The prop defaults to the value (`'primary'`) inherited from the parent FormControl component.\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary']), PropTypes.string]),\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Input: PropTypes.elementType,\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    input: PropTypes.object,\n    root: PropTypes.object\n  }),\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n  /**\n   * If `true`, the component is disabled.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the input will not have an underline.\n   * @default false\n   */\n  disableUnderline: PropTypes.bool,\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n  /**\n   * If `true`, the `input` will indicate an error.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the `input` will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * If `true`, the label is hidden.\n   * This is used to increase density for a `FilledInput`.\n   * Be sure to add `aria-label` to the `input` element.\n   * @default false\n   */\n  hiddenLabel: PropTypes.bool,\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   * @default 'input'\n   */\n  inputComponent: PropTypes.elementType,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * @default {}\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   * The prop defaults to the value (`'none'`) inherited from the parent FormControl component.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * Minimum number of rows to display when multiline option is set to true.\n   */\n  minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * If `true`, a [TextareaAutosize](https://mui.com/material-ui/react-textarea-autosize/) element is rendered.\n   * @default false\n   */\n  multiline: PropTypes.bool,\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n  /**\n   * The short hint displayed in the `input` before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n  /**\n   * If `true`, the `input` element is required.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  required: PropTypes.bool,\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.\n   *\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.object,\n    root: PropTypes.object\n  }),\n  /**\n   * The components used for each slot inside.\n   *\n   * This prop is an alias for the `components` prop, which will be deprecated in the future.\n   *\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#input_types).\n   * @default 'text'\n   */\n  type: PropTypes.string,\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nFilledInput.muiName = 'Input';\nexport default FilledInput;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getFormControlUtilityClasses(slot) {\n  return generateUtilityClass('MuiFormControl', slot);\n}\nconst formControlClasses = generateUtilityClasses('MuiFormControl', ['root', 'marginNone', 'marginNormal', 'marginDense', 'fullWidth', 'disabled']);\nexport default formControlClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { isFilled, isAdornedStart } from \"../InputBase/utils.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport isMuiElement from \"../utils/isMuiElement.js\";\nimport FormControlContext from \"./FormControlContext.js\";\nimport { getFormControlUtilityClasses } from \"./formControlClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    margin,\n    fullWidth\n  } = ownerState;\n  const slots = {\n    root: ['root', margin !== 'none' && `margin${capitalize(margin)}`, fullWidth && 'fullWidth']\n  };\n  return composeClasses(slots, getFormControlUtilityClasses, classes);\n};\nconst FormControlRoot = styled('div', {\n  name: 'MuiFormControl',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[`margin${capitalize(ownerState.margin)}`], ownerState.fullWidth && styles.fullWidth];\n  }\n})({\n  display: 'inline-flex',\n  flexDirection: 'column',\n  position: 'relative',\n  // Reset fieldset default style.\n  minWidth: 0,\n  padding: 0,\n  margin: 0,\n  border: 0,\n  verticalAlign: 'top',\n  // Fix alignment issue on Safari.\n  variants: [{\n    props: {\n      margin: 'normal'\n    },\n    style: {\n      marginTop: 16,\n      marginBottom: 8\n    }\n  }, {\n    props: {\n      margin: 'dense'\n    },\n    style: {\n      marginTop: 8,\n      marginBottom: 4\n    }\n  }, {\n    props: {\n      fullWidth: true\n    },\n    style: {\n      width: '100%'\n    }\n  }]\n});\n\n/**\n * Provides context such as filled/focused/error/required for form inputs.\n * Relying on the context provides high flexibility and ensures that the state always stays\n * consistent across the children of the `FormControl`.\n * This context is used by the following components:\n *\n *  - FormLabel\n *  - FormHelperText\n *  - Input\n *  - InputLabel\n *\n * You can find one composition example below and more going to [the demos](/material-ui/react-text-field/#components).\n *\n * ```jsx\n * <FormControl>\n *   <InputLabel htmlFor=\"my-input\">Email address</InputLabel>\n *   <Input id=\"my-input\" aria-describedby=\"my-helper-text\" />\n *   <FormHelperText id=\"my-helper-text\">We'll never share your email.</FormHelperText>\n * </FormControl>\n * ```\n *\n * ⚠️ Only one `InputBase` can be used within a FormControl because it creates visual inconsistencies.\n * For instance, only one input can be focused at the same time, the state shouldn't be shared.\n */\nconst FormControl = /*#__PURE__*/React.forwardRef(function FormControl(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiFormControl'\n  });\n  const {\n    children,\n    className,\n    color = 'primary',\n    component = 'div',\n    disabled = false,\n    error = false,\n    focused: visuallyFocused,\n    fullWidth = false,\n    hiddenLabel = false,\n    margin = 'none',\n    required = false,\n    size = 'medium',\n    variant = 'outlined',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    color,\n    component,\n    disabled,\n    error,\n    fullWidth,\n    hiddenLabel,\n    margin,\n    required,\n    size,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  const [adornedStart, setAdornedStart] = React.useState(() => {\n    // We need to iterate through the children and find the Input in order\n    // to fully support server-side rendering.\n    let initialAdornedStart = false;\n    if (children) {\n      React.Children.forEach(children, child => {\n        if (!isMuiElement(child, ['Input', 'Select'])) {\n          return;\n        }\n        const input = isMuiElement(child, ['Select']) ? child.props.input : child;\n        if (input && isAdornedStart(input.props)) {\n          initialAdornedStart = true;\n        }\n      });\n    }\n    return initialAdornedStart;\n  });\n  const [filled, setFilled] = React.useState(() => {\n    // We need to iterate through the children and find the Input in order\n    // to fully support server-side rendering.\n    let initialFilled = false;\n    if (children) {\n      React.Children.forEach(children, child => {\n        if (!isMuiElement(child, ['Input', 'Select'])) {\n          return;\n        }\n        if (isFilled(child.props, true) || isFilled(child.props.inputProps, true)) {\n          initialFilled = true;\n        }\n      });\n    }\n    return initialFilled;\n  });\n  const [focusedState, setFocused] = React.useState(false);\n  if (disabled && focusedState) {\n    setFocused(false);\n  }\n  const focused = visuallyFocused !== undefined && !disabled ? visuallyFocused : focusedState;\n  let registerEffect;\n  const registeredInput = React.useRef(false);\n  if (process.env.NODE_ENV !== 'production') {\n    registerEffect = () => {\n      if (registeredInput.current) {\n        console.error(['MUI: There are multiple `InputBase` components inside a FormControl.', 'This creates visual inconsistencies, only use one `InputBase`.'].join('\\n'));\n      }\n      registeredInput.current = true;\n      return () => {\n        registeredInput.current = false;\n      };\n    };\n  }\n  const onFilled = React.useCallback(() => {\n    setFilled(true);\n  }, []);\n  const onEmpty = React.useCallback(() => {\n    setFilled(false);\n  }, []);\n  const childContext = React.useMemo(() => {\n    return {\n      adornedStart,\n      setAdornedStart,\n      color,\n      disabled,\n      error,\n      filled,\n      focused,\n      fullWidth,\n      hiddenLabel,\n      size,\n      onBlur: () => {\n        setFocused(false);\n      },\n      onFocus: () => {\n        setFocused(true);\n      },\n      onEmpty,\n      onFilled,\n      registerEffect,\n      required,\n      variant\n    };\n  }, [adornedStart, color, disabled, error, filled, focused, fullWidth, hiddenLabel, registerEffect, onEmpty, onFilled, required, size, variant]);\n  return /*#__PURE__*/_jsx(FormControlContext.Provider, {\n    value: childContext,\n    children: /*#__PURE__*/_jsx(FormControlRoot, {\n      as: component,\n      ownerState: ownerState,\n      className: clsx(classes.root, className),\n      ref: ref,\n      ...other,\n      children: children\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? FormControl.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, the label, input and helper text should be displayed in a disabled state.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the label is displayed in an error state.\n   * @default false\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the component is displayed in focused state.\n   */\n  focused: PropTypes.bool,\n  /**\n   * If `true`, the component will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * If `true`, the label is hidden.\n   * This is used to increase density for a `FilledInput`.\n   * Be sure to add `aria-label` to the `input` element.\n   * @default false\n   */\n  hiddenLabel: PropTypes.bool,\n  /**\n   * If `dense` or `normal`, will adjust vertical spacing of this and contained components.\n   * @default 'none'\n   */\n  margin: PropTypes.oneOf(['dense', 'none', 'normal']),\n  /**\n   * If `true`, the label will indicate that the `input` is required.\n   * @default false\n   */\n  required: PropTypes.bool,\n  /**\n   * The size of the component.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The variant to use.\n   * @default 'outlined'\n   */\n  variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nexport default FormControl;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getFormControlLabelUtilityClasses(slot) {\n  return generateUtilityClass('MuiFormControlLabel', slot);\n}\nconst formControlLabelClasses = generateUtilityClasses('MuiFormControlLabel', ['root', 'labelPlacementStart', 'labelPlacementTop', 'labelPlacementBottom', 'disabled', 'label', 'error', 'required', 'asterisk']);\nexport default formControlLabelClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport refType from '@mui/utils/refType';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { useFormControl } from \"../FormControl/index.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport Typography from \"../Typography/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport formControlLabelClasses, { getFormControlLabelUtilityClasses } from \"./formControlLabelClasses.js\";\nimport formControlState from \"../FormControl/formControlState.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disabled,\n    labelPlacement,\n    error,\n    required\n  } = ownerState;\n  const slots = {\n    root: ['root', disabled && 'disabled', `labelPlacement${capitalize(labelPlacement)}`, error && 'error', required && 'required'],\n    label: ['label', disabled && 'disabled'],\n    asterisk: ['asterisk', error && 'error']\n  };\n  return composeClasses(slots, getFormControlLabelUtilityClasses, classes);\n};\nexport const FormControlLabelRoot = styled('label', {\n  name: 'MuiFormControlLabel',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [{\n      [`& .${formControlLabelClasses.label}`]: styles.label\n    }, styles.root, styles[`labelPlacement${capitalize(ownerState.labelPlacement)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'inline-flex',\n  alignItems: 'center',\n  cursor: 'pointer',\n  // For correct alignment with the text.\n  verticalAlign: 'middle',\n  WebkitTapHighlightColor: 'transparent',\n  marginLeft: -11,\n  marginRight: 16,\n  // used for row presentation of radio/checkbox\n  [`&.${formControlLabelClasses.disabled}`]: {\n    cursor: 'default'\n  },\n  [`& .${formControlLabelClasses.label}`]: {\n    [`&.${formControlLabelClasses.disabled}`]: {\n      color: (theme.vars || theme).palette.text.disabled\n    }\n  },\n  variants: [{\n    props: {\n      labelPlacement: 'start'\n    },\n    style: {\n      flexDirection: 'row-reverse',\n      marginRight: -11\n    }\n  }, {\n    props: {\n      labelPlacement: 'top'\n    },\n    style: {\n      flexDirection: 'column-reverse'\n    }\n  }, {\n    props: {\n      labelPlacement: 'bottom'\n    },\n    style: {\n      flexDirection: 'column'\n    }\n  }, {\n    props: ({\n      labelPlacement\n    }) => labelPlacement === 'start' || labelPlacement === 'top' || labelPlacement === 'bottom',\n    style: {\n      marginLeft: 16 // used for row presentation of radio/checkbox\n    }\n  }]\n})));\nconst AsteriskComponent = styled('span', {\n  name: 'MuiFormControlLabel',\n  slot: 'Asterisk'\n})(memoTheme(({\n  theme\n}) => ({\n  [`&.${formControlLabelClasses.error}`]: {\n    color: (theme.vars || theme).palette.error.main\n  }\n})));\n\n/**\n * Drop-in replacement of the `Radio`, `Switch` and `Checkbox` component.\n * Use this component if you want to display an extra label.\n */\nconst FormControlLabel = /*#__PURE__*/React.forwardRef(function FormControlLabel(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiFormControlLabel'\n  });\n  const {\n    checked,\n    className,\n    componentsProps = {},\n    control,\n    disabled: disabledProp,\n    disableTypography,\n    inputRef,\n    label: labelProp,\n    labelPlacement = 'end',\n    name,\n    onChange,\n    required: requiredProp,\n    slots = {},\n    slotProps = {},\n    value,\n    ...other\n  } = props;\n  const muiFormControl = useFormControl();\n  const disabled = disabledProp ?? control.props.disabled ?? muiFormControl?.disabled;\n  const required = requiredProp ?? control.props.required;\n  const controlProps = {\n    disabled,\n    required\n  };\n  ['checked', 'name', 'onChange', 'value', 'inputRef'].forEach(key => {\n    if (typeof control.props[key] === 'undefined' && typeof props[key] !== 'undefined') {\n      controlProps[key] = props[key];\n    }\n  });\n  const fcs = formControlState({\n    props,\n    muiFormControl,\n    states: ['error']\n  });\n  const ownerState = {\n    ...props,\n    disabled,\n    labelPlacement,\n    required,\n    error: fcs.error\n  };\n  const classes = useUtilityClasses(ownerState);\n  const externalForwardedProps = {\n    slots,\n    slotProps: {\n      ...componentsProps,\n      ...slotProps\n    }\n  };\n  const [TypographySlot, typographySlotProps] = useSlot('typography', {\n    elementType: Typography,\n    externalForwardedProps,\n    ownerState\n  });\n  let label = labelProp;\n  if (label != null && label.type !== Typography && !disableTypography) {\n    label = /*#__PURE__*/_jsx(TypographySlot, {\n      component: \"span\",\n      ...typographySlotProps,\n      className: clsx(classes.label, typographySlotProps?.className),\n      children: label\n    });\n  }\n  return /*#__PURE__*/_jsxs(FormControlLabelRoot, {\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    ref: ref,\n    ...other,\n    children: [/*#__PURE__*/React.cloneElement(control, controlProps), required ? /*#__PURE__*/_jsxs(\"div\", {\n      children: [label, /*#__PURE__*/_jsxs(AsteriskComponent, {\n        ownerState: ownerState,\n        \"aria-hidden\": true,\n        className: classes.asterisk,\n        children: [\"\\u2009\", '*']\n      })]\n    }) : label]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? FormControlLabel.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * If `true`, the component appears selected.\n   */\n  checked: PropTypes.bool,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   * @deprecated use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  componentsProps: PropTypes.shape({\n    typography: PropTypes.object\n  }),\n  /**\n   * A control element. For instance, it can be a `Radio`, a `Switch` or a `Checkbox`.\n   */\n  control: PropTypes.element.isRequired,\n  /**\n   * If `true`, the control is disabled.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the label is rendered as it is passed without an additional typography node.\n   */\n  disableTypography: PropTypes.bool,\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n  /**\n   * A text or an element to be used in an enclosing label element.\n   */\n  label: PropTypes.node,\n  /**\n   * The position of the label.\n   * @default 'end'\n   */\n  labelPlacement: PropTypes.oneOf(['bottom', 'end', 'start', 'top']),\n  /**\n   * @ignore\n   */\n  name: PropTypes.string,\n  /**\n   * Callback fired when the state is changed.\n   *\n   * @param {React.SyntheticEvent} event The event source of the callback.\n   * You can pull out the new checked state by accessing `event.target.checked` (boolean).\n   */\n  onChange: PropTypes.func,\n  /**\n   * If `true`, the label will indicate that the `input` is required.\n   */\n  required: PropTypes.bool,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    typography: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    typography: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The value of the component.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default FormControlLabel;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getFormHelperTextUtilityClasses(slot) {\n  return generateUtilityClass('MuiFormHelperText', slot);\n}\nconst formHelperTextClasses = generateUtilityClasses('MuiFormHelperText', ['root', 'error', 'disabled', 'sizeSmall', 'sizeMedium', 'contained', 'focused', 'filled', 'required']);\nexport default formHelperTextClasses;","'use client';\n\nvar _span;\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport formControlState from \"../FormControl/formControlState.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport formHelperTextClasses, { getFormHelperTextUtilityClasses } from \"./formHelperTextClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    contained,\n    size,\n    disabled,\n    error,\n    filled,\n    focused,\n    required\n  } = ownerState;\n  const slots = {\n    root: ['root', disabled && 'disabled', error && 'error', size && `size${capitalize(size)}`, contained && 'contained', focused && 'focused', filled && 'filled', required && 'required']\n  };\n  return composeClasses(slots, getFormHelperTextUtilityClasses, classes);\n};\nconst FormHelperTextRoot = styled('p', {\n  name: 'MuiFormHelperText',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.size && styles[`size${capitalize(ownerState.size)}`], ownerState.contained && styles.contained, ownerState.filled && styles.filled];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  color: (theme.vars || theme).palette.text.secondary,\n  ...theme.typography.caption,\n  textAlign: 'left',\n  marginTop: 3,\n  marginRight: 0,\n  marginBottom: 0,\n  marginLeft: 0,\n  [`&.${formHelperTextClasses.disabled}`]: {\n    color: (theme.vars || theme).palette.text.disabled\n  },\n  [`&.${formHelperTextClasses.error}`]: {\n    color: (theme.vars || theme).palette.error.main\n  },\n  variants: [{\n    props: {\n      size: 'small'\n    },\n    style: {\n      marginTop: 4\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.contained,\n    style: {\n      marginLeft: 14,\n      marginRight: 14\n    }\n  }]\n})));\nconst FormHelperText = /*#__PURE__*/React.forwardRef(function FormHelperText(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiFormHelperText'\n  });\n  const {\n    children,\n    className,\n    component = 'p',\n    disabled,\n    error,\n    filled,\n    focused,\n    margin,\n    required,\n    variant,\n    ...other\n  } = props;\n  const muiFormControl = useFormControl();\n  const fcs = formControlState({\n    props,\n    muiFormControl,\n    states: ['variant', 'size', 'disabled', 'error', 'filled', 'focused', 'required']\n  });\n  const ownerState = {\n    ...props,\n    component,\n    contained: fcs.variant === 'filled' || fcs.variant === 'outlined',\n    variant: fcs.variant,\n    size: fcs.size,\n    disabled: fcs.disabled,\n    error: fcs.error,\n    filled: fcs.filled,\n    focused: fcs.focused,\n    required: fcs.required\n  };\n\n  // This issue explains why this is required: https://github.com/mui/material-ui/issues/42184\n  delete ownerState.ownerState;\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(FormHelperTextRoot, {\n    as: component,\n    className: clsx(classes.root, className),\n    ref: ref,\n    ...other,\n    ownerState: ownerState,\n    children: children === ' ' ? // notranslate needed while Google Translate will not fix zero-width space issue\n    _span || (_span = /*#__PURE__*/_jsx(\"span\", {\n      className: \"notranslate\",\n      \"aria-hidden\": true,\n      children: \"\\u200B\"\n    })) : children\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? FormHelperText.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   *\n   * If `' '` is provided, the component reserves one line height for displaying a future message.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, the helper text should be displayed in a disabled state.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, helper text should be displayed in an error state.\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the helper text should use filled classes key.\n   */\n  filled: PropTypes.bool,\n  /**\n   * If `true`, the helper text should use focused classes key.\n   */\n  focused: PropTypes.bool,\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: PropTypes.oneOf(['dense']),\n  /**\n   * If `true`, the helper text should use required classes key.\n   */\n  required: PropTypes.bool,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['filled', 'outlined', 'standard']), PropTypes.string])\n} : void 0;\nexport default FormHelperText;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getFormLabelUtilityClasses(slot) {\n  return generateUtilityClass('MuiFormLabel', slot);\n}\nconst formLabelClasses = generateUtilityClasses('MuiFormLabel', ['root', 'colorSecondary', 'focused', 'disabled', 'error', 'filled', 'required', 'asterisk']);\nexport default formLabelClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport formControlState from \"../FormControl/formControlState.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport formLabelClasses, { getFormLabelUtilityClasses } from \"./formLabelClasses.js\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    color,\n    focused,\n    disabled,\n    error,\n    filled,\n    required\n  } = ownerState;\n  const slots = {\n    root: ['root', `color${capitalize(color)}`, disabled && 'disabled', error && 'error', filled && 'filled', focused && 'focused', required && 'required'],\n    asterisk: ['asterisk', error && 'error']\n  };\n  return composeClasses(slots, getFormLabelUtilityClasses, classes);\n};\nexport const FormLabelRoot = styled('label', {\n  name: 'MuiFormLabel',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.color === 'secondary' && styles.colorSecondary, ownerState.filled && styles.filled];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  color: (theme.vars || theme).palette.text.secondary,\n  ...theme.typography.body1,\n  lineHeight: '1.4375em',\n  padding: 0,\n  position: 'relative',\n  variants: [...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      [`&.${formLabelClasses.focused}`]: {\n        color: (theme.vars || theme).palette[color].main\n      }\n    }\n  })), {\n    props: {},\n    style: {\n      [`&.${formLabelClasses.disabled}`]: {\n        color: (theme.vars || theme).palette.text.disabled\n      },\n      [`&.${formLabelClasses.error}`]: {\n        color: (theme.vars || theme).palette.error.main\n      }\n    }\n  }]\n})));\nconst AsteriskComponent = styled('span', {\n  name: 'MuiFormLabel',\n  slot: 'Asterisk'\n})(memoTheme(({\n  theme\n}) => ({\n  [`&.${formLabelClasses.error}`]: {\n    color: (theme.vars || theme).palette.error.main\n  }\n})));\nconst FormLabel = /*#__PURE__*/React.forwardRef(function FormLabel(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiFormLabel'\n  });\n  const {\n    children,\n    className,\n    color,\n    component = 'label',\n    disabled,\n    error,\n    filled,\n    focused,\n    required,\n    ...other\n  } = props;\n  const muiFormControl = useFormControl();\n  const fcs = formControlState({\n    props,\n    muiFormControl,\n    states: ['color', 'required', 'focused', 'disabled', 'error', 'filled']\n  });\n  const ownerState = {\n    ...props,\n    color: fcs.color || 'primary',\n    component,\n    disabled: fcs.disabled,\n    error: fcs.error,\n    filled: fcs.filled,\n    focused: fcs.focused,\n    required: fcs.required\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsxs(FormLabelRoot, {\n    as: component,\n    ownerState: ownerState,\n    className: clsx(classes.root, className),\n    ref: ref,\n    ...other,\n    children: [children, fcs.required && /*#__PURE__*/_jsxs(AsteriskComponent, {\n      ownerState: ownerState,\n      \"aria-hidden\": true,\n      className: classes.asterisk,\n      children: [\"\\u2009\", '*']\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? FormLabel.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, the label should be displayed in a disabled state.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the label is displayed in an error state.\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the label should use filled classes key.\n   */\n  filled: PropTypes.bool,\n  /**\n   * If `true`, the input of this label is focused (used by `FormGroup` components).\n   */\n  focused: PropTypes.bool,\n  /**\n   * If `true`, the label will indicate that the `input` is required.\n   */\n  required: PropTypes.bool,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default FormLabel;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport useTimeout from '@mui/utils/useTimeout';\nimport elementAcceptingRef from '@mui/utils/elementAcceptingRef';\nimport getReactElementRef from '@mui/utils/getReactElementRef';\nimport { Transition } from 'react-transition-group';\nimport { useTheme } from \"../zero-styled/index.js\";\nimport { getTransitionProps, reflow } from \"../transitions/utils.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction getScale(value) {\n  return `scale(${value}, ${value ** 2})`;\n}\nconst styles = {\n  entering: {\n    opacity: 1,\n    transform: getScale(1)\n  },\n  entered: {\n    opacity: 1,\n    transform: 'none'\n  }\n};\n\n/*\n TODO v6: remove\n Conditionally apply a workaround for the CSS transition bug in Safari 15.4 / WebKit browsers.\n */\nconst isWebKit154 = typeof navigator !== 'undefined' && /^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent) && /(os |version\\/)15(.|_)4/i.test(navigator.userAgent);\n\n/**\n * The Grow transition is used by the [Tooltip](/material-ui/react-tooltip/) and\n * [Popover](/material-ui/react-popover/) components.\n * It uses [react-transition-group](https://github.com/reactjs/react-transition-group) internally.\n */\nconst Grow = /*#__PURE__*/React.forwardRef(function Grow(props, ref) {\n  const {\n    addEndListener,\n    appear = true,\n    children,\n    easing,\n    in: inProp,\n    onEnter,\n    onEntered,\n    onEntering,\n    onExit,\n    onExited,\n    onExiting,\n    style,\n    timeout = 'auto',\n    // eslint-disable-next-line react/prop-types\n    TransitionComponent = Transition,\n    ...other\n  } = props;\n  const timer = useTimeout();\n  const autoTimeout = React.useRef();\n  const theme = useTheme();\n  const nodeRef = React.useRef(null);\n  const handleRef = useForkRef(nodeRef, getReactElementRef(children), ref);\n  const normalizedTransitionCallback = callback => maybeIsAppearing => {\n    if (callback) {\n      const node = nodeRef.current;\n\n      // onEnterXxx and onExitXxx callbacks have a different arguments.length value.\n      if (maybeIsAppearing === undefined) {\n        callback(node);\n      } else {\n        callback(node, maybeIsAppearing);\n      }\n    }\n  };\n  const handleEntering = normalizedTransitionCallback(onEntering);\n  const handleEnter = normalizedTransitionCallback((node, isAppearing) => {\n    reflow(node); // So the animation always start from the start.\n\n    const {\n      duration: transitionDuration,\n      delay,\n      easing: transitionTimingFunction\n    } = getTransitionProps({\n      style,\n      timeout,\n      easing\n    }, {\n      mode: 'enter'\n    });\n    let duration;\n    if (timeout === 'auto') {\n      duration = theme.transitions.getAutoHeightDuration(node.clientHeight);\n      autoTimeout.current = duration;\n    } else {\n      duration = transitionDuration;\n    }\n    node.style.transition = [theme.transitions.create('opacity', {\n      duration,\n      delay\n    }), theme.transitions.create('transform', {\n      duration: isWebKit154 ? duration : duration * 0.666,\n      delay,\n      easing: transitionTimingFunction\n    })].join(',');\n    if (onEnter) {\n      onEnter(node, isAppearing);\n    }\n  });\n  const handleEntered = normalizedTransitionCallback(onEntered);\n  const handleExiting = normalizedTransitionCallback(onExiting);\n  const handleExit = normalizedTransitionCallback(node => {\n    const {\n      duration: transitionDuration,\n      delay,\n      easing: transitionTimingFunction\n    } = getTransitionProps({\n      style,\n      timeout,\n      easing\n    }, {\n      mode: 'exit'\n    });\n    let duration;\n    if (timeout === 'auto') {\n      duration = theme.transitions.getAutoHeightDuration(node.clientHeight);\n      autoTimeout.current = duration;\n    } else {\n      duration = transitionDuration;\n    }\n    node.style.transition = [theme.transitions.create('opacity', {\n      duration,\n      delay\n    }), theme.transitions.create('transform', {\n      duration: isWebKit154 ? duration : duration * 0.666,\n      delay: isWebKit154 ? delay : delay || duration * 0.333,\n      easing: transitionTimingFunction\n    })].join(',');\n    node.style.opacity = 0;\n    node.style.transform = getScale(0.75);\n    if (onExit) {\n      onExit(node);\n    }\n  });\n  const handleExited = normalizedTransitionCallback(onExited);\n  const handleAddEndListener = next => {\n    if (timeout === 'auto') {\n      timer.start(autoTimeout.current || 0, next);\n    }\n    if (addEndListener) {\n      // Old call signature before `react-transition-group` implemented `nodeRef`\n      addEndListener(nodeRef.current, next);\n    }\n  };\n  return /*#__PURE__*/_jsx(TransitionComponent, {\n    appear: appear,\n    in: inProp,\n    nodeRef: nodeRef,\n    onEnter: handleEnter,\n    onEntered: handleEntered,\n    onEntering: handleEntering,\n    onExit: handleExit,\n    onExited: handleExited,\n    onExiting: handleExiting,\n    addEndListener: handleAddEndListener,\n    timeout: timeout === 'auto' ? null : timeout,\n    ...other,\n    children: (state, {\n      ownerState,\n      ...restChildProps\n    }) => {\n      return /*#__PURE__*/React.cloneElement(children, {\n        style: {\n          opacity: 0,\n          transform: getScale(0.75),\n          visibility: state === 'exited' && !inProp ? 'hidden' : undefined,\n          ...styles[state],\n          ...style,\n          ...children.props.style\n        },\n        ref: handleRef,\n        ...restChildProps\n      });\n    }\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Grow.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Add a custom transition end trigger. Called with the transitioning DOM\n   * node and a done callback. Allows for more fine grained transition end\n   * logic. Note: Timeouts are still used as a fallback if provided.\n   */\n  addEndListener: PropTypes.func,\n  /**\n   * Perform the enter transition when it first mounts if `in` is also `true`.\n   * Set this to `false` to disable this behavior.\n   * @default true\n   */\n  appear: PropTypes.bool,\n  /**\n   * A single child content element.\n   */\n  children: elementAcceptingRef.isRequired,\n  /**\n   * The transition timing function.\n   * You may specify a single easing or a object containing enter and exit values.\n   */\n  easing: PropTypes.oneOfType([PropTypes.shape({\n    enter: PropTypes.string,\n    exit: PropTypes.string\n  }), PropTypes.string]),\n  /**\n   * If `true`, the component will transition in.\n   */\n  in: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  onEnter: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onEntered: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onEntering: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onExit: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onExited: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onExiting: PropTypes.func,\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   *\n   * Set to 'auto' to automatically calculate transition time based on height.\n   * @default 'auto'\n   */\n  timeout: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })])\n} : void 0;\nif (Grow) {\n  Grow.muiSupportAuto = true;\n}\nexport default Grow;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport composeClasses from '@mui/utils/composeClasses';\nimport deepmerge from '@mui/utils/deepmerge';\nimport refType from '@mui/utils/refType';\nimport InputBase from \"../InputBase/index.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport inputClasses, { getInputUtilityClass } from \"./inputClasses.js\";\nimport { rootOverridesResolver as inputBaseRootOverridesResolver, inputOverridesResolver as inputBaseInputOverridesResolver, InputBaseRoot, InputBaseInput } from \"../InputBase/InputBase.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disableUnderline\n  } = ownerState;\n  const slots = {\n    root: ['root', !disableUnderline && 'underline'],\n    input: ['input']\n  };\n  const composedClasses = composeClasses(slots, getInputUtilityClass, classes);\n  return {\n    ...classes,\n    // forward classes to the InputBase\n    ...composedClasses\n  };\n};\nconst InputRoot = styled(InputBaseRoot, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiInput',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [...inputBaseRootOverridesResolver(props, styles), !ownerState.disableUnderline && styles.underline];\n  }\n})(memoTheme(({\n  theme\n}) => {\n  const light = theme.palette.mode === 'light';\n  let bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n  if (theme.vars) {\n    bottomLineColor = theme.alpha(theme.vars.palette.common.onBackground, theme.vars.opacity.inputUnderline);\n  }\n  return {\n    position: 'relative',\n    variants: [{\n      props: ({\n        ownerState\n      }) => ownerState.formControl,\n      style: {\n        'label + &': {\n          marginTop: 16\n        }\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => !ownerState.disableUnderline,\n      style: {\n        '&::after': {\n          left: 0,\n          bottom: 0,\n          content: '\"\"',\n          position: 'absolute',\n          right: 0,\n          transform: 'scaleX(0)',\n          transition: theme.transitions.create('transform', {\n            duration: theme.transitions.duration.shorter,\n            easing: theme.transitions.easing.easeOut\n          }),\n          pointerEvents: 'none' // Transparent to the hover style.\n        },\n        [`&.${inputClasses.focused}:after`]: {\n          // translateX(0) is a workaround for Safari transform scale bug\n          // See https://github.com/mui/material-ui/issues/31766\n          transform: 'scaleX(1) translateX(0)'\n        },\n        [`&.${inputClasses.error}`]: {\n          '&::before, &::after': {\n            borderBottomColor: (theme.vars || theme).palette.error.main\n          }\n        },\n        '&::before': {\n          borderBottom: `1px solid ${bottomLineColor}`,\n          left: 0,\n          bottom: 0,\n          content: '\"\\\\00a0\"',\n          position: 'absolute',\n          right: 0,\n          transition: theme.transitions.create('border-bottom-color', {\n            duration: theme.transitions.duration.shorter\n          }),\n          pointerEvents: 'none' // Transparent to the hover style.\n        },\n        [`&:hover:not(.${inputClasses.disabled}, .${inputClasses.error}):before`]: {\n          borderBottom: `2px solid ${(theme.vars || theme).palette.text.primary}`,\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            borderBottom: `1px solid ${bottomLineColor}`\n          }\n        },\n        [`&.${inputClasses.disabled}:before`]: {\n          borderBottomStyle: 'dotted'\n        }\n      }\n    }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n      props: {\n        color,\n        disableUnderline: false\n      },\n      style: {\n        '&::after': {\n          borderBottom: `2px solid ${(theme.vars || theme).palette[color].main}`\n        }\n      }\n    }))]\n  };\n}));\nconst InputInput = styled(InputBaseInput, {\n  name: 'MuiInput',\n  slot: 'Input',\n  overridesResolver: inputBaseInputOverridesResolver\n})({});\nconst Input = /*#__PURE__*/React.forwardRef(function Input(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiInput'\n  });\n  const {\n    disableUnderline = false,\n    components = {},\n    componentsProps: componentsPropsProp,\n    fullWidth = false,\n    inputComponent = 'input',\n    multiline = false,\n    slotProps,\n    slots = {},\n    type = 'text',\n    ...other\n  } = props;\n  const classes = useUtilityClasses(props);\n  const ownerState = {\n    disableUnderline\n  };\n  const inputComponentsProps = {\n    root: {\n      ownerState\n    }\n  };\n  const componentsProps = slotProps ?? componentsPropsProp ? deepmerge(slotProps ?? componentsPropsProp, inputComponentsProps) : inputComponentsProps;\n  const RootSlot = slots.root ?? components.Root ?? InputRoot;\n  const InputSlot = slots.input ?? components.Input ?? InputInput;\n  return /*#__PURE__*/_jsx(InputBase, {\n    slots: {\n      root: RootSlot,\n      input: InputSlot\n    },\n    slotProps: componentsProps,\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type,\n    ...other,\n    classes: classes\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Input.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n  /**\n   * If `true`, the `input` element is focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * The prop defaults to the value (`'primary'`) inherited from the parent FormControl component.\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary']), PropTypes.string]),\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Input: PropTypes.elementType,\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    input: PropTypes.object,\n    root: PropTypes.object\n  }),\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n  /**\n   * If `true`, the component is disabled.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the `input` will not have an underline.\n   * @default false\n   */\n  disableUnderline: PropTypes.bool,\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n  /**\n   * If `true`, the `input` will indicate an error.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the `input` will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   * @default 'input'\n   */\n  inputComponent: PropTypes.elementType,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * @default {}\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   * The prop defaults to the value (`'none'`) inherited from the parent FormControl component.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * Minimum number of rows to display when multiline option is set to true.\n   */\n  minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * If `true`, a [TextareaAutosize](https://mui.com/material-ui/react-textarea-autosize/) element is rendered.\n   * @default false\n   */\n  multiline: PropTypes.bool,\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n  /**\n   * The short hint displayed in the `input` before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n  /**\n   * If `true`, the `input` element is required.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  required: PropTypes.bool,\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.\n   *\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.object,\n    root: PropTypes.object\n  }),\n  /**\n   * The components used for each slot inside.\n   *\n   * This prop is an alias for the `components` prop, which will be deprecated in the future.\n   *\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#input_types).\n   * @default 'text'\n   */\n  type: PropTypes.string,\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nInput.muiName = 'Input';\nexport default Input;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getInputLabelUtilityClasses(slot) {\n  return generateUtilityClass('MuiInputLabel', slot);\n}\nconst inputLabelClasses = generateUtilityClasses('MuiInputLabel', ['root', 'focused', 'disabled', 'error', 'required', 'asterisk', 'formControl', 'sizeSmall', 'shrink', 'animated', 'standard', 'filled', 'outlined']);\nexport default inputLabelClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport composeClasses from '@mui/utils/composeClasses';\nimport clsx from 'clsx';\nimport formControlState from \"../FormControl/formControlState.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport FormLabel, { formLabelClasses } from \"../FormLabel/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getInputLabelUtilityClasses } from \"./inputLabelClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    formControl,\n    size,\n    shrink,\n    disableAnimation,\n    variant,\n    required\n  } = ownerState;\n  const slots = {\n    root: ['root', formControl && 'formControl', !disableAnimation && 'animated', shrink && 'shrink', size && size !== 'medium' && `size${capitalize(size)}`, variant],\n    asterisk: [required && 'asterisk']\n  };\n  const composedClasses = composeClasses(slots, getInputLabelUtilityClasses, classes);\n  return {\n    ...classes,\n    // forward the focused, disabled, etc. classes to the FormLabel\n    ...composedClasses\n  };\n};\nconst InputLabelRoot = styled(FormLabel, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiInputLabel',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [{\n      [`& .${formLabelClasses.asterisk}`]: styles.asterisk\n    }, styles.root, ownerState.formControl && styles.formControl, ownerState.size === 'small' && styles.sizeSmall, ownerState.shrink && styles.shrink, !ownerState.disableAnimation && styles.animated, ownerState.focused && styles.focused, styles[ownerState.variant]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'block',\n  transformOrigin: 'top left',\n  whiteSpace: 'nowrap',\n  overflow: 'hidden',\n  textOverflow: 'ellipsis',\n  maxWidth: '100%',\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.formControl,\n    style: {\n      position: 'absolute',\n      left: 0,\n      top: 0,\n      // slight alteration to spec spacing to match visual spec result\n      transform: 'translate(0, 20px) scale(1)'\n    }\n  }, {\n    props: {\n      size: 'small'\n    },\n    style: {\n      // Compensation for the `Input.inputSizeSmall` style.\n      transform: 'translate(0, 17px) scale(1)'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.shrink,\n    style: {\n      transform: 'translate(0, -1.5px) scale(0.75)',\n      transformOrigin: 'top left',\n      maxWidth: '133%'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !ownerState.disableAnimation,\n    style: {\n      transition: theme.transitions.create(['color', 'transform', 'max-width'], {\n        duration: theme.transitions.duration.shorter,\n        easing: theme.transitions.easing.easeOut\n      })\n    }\n  }, {\n    props: {\n      variant: 'filled'\n    },\n    style: {\n      // Chrome's autofill feature gives the input field a yellow background.\n      // Since the input field is behind the label in the HTML tree,\n      // the input field is drawn last and hides the label with an opaque background color.\n      // zIndex: 1 will raise the label above opaque background-colors of input.\n      zIndex: 1,\n      pointerEvents: 'none',\n      transform: 'translate(12px, 16px) scale(1)',\n      maxWidth: 'calc(100% - 24px)'\n    }\n  }, {\n    props: {\n      variant: 'filled',\n      size: 'small'\n    },\n    style: {\n      transform: 'translate(12px, 13px) scale(1)'\n    }\n  }, {\n    props: ({\n      variant,\n      ownerState\n    }) => variant === 'filled' && ownerState.shrink,\n    style: {\n      userSelect: 'none',\n      pointerEvents: 'auto',\n      transform: 'translate(12px, 7px) scale(0.75)',\n      maxWidth: 'calc(133% - 24px)'\n    }\n  }, {\n    props: ({\n      variant,\n      ownerState,\n      size\n    }) => variant === 'filled' && ownerState.shrink && size === 'small',\n    style: {\n      transform: 'translate(12px, 4px) scale(0.75)'\n    }\n  }, {\n    props: {\n      variant: 'outlined'\n    },\n    style: {\n      // see comment above on filled.zIndex\n      zIndex: 1,\n      pointerEvents: 'none',\n      transform: 'translate(14px, 16px) scale(1)',\n      maxWidth: 'calc(100% - 24px)'\n    }\n  }, {\n    props: {\n      variant: 'outlined',\n      size: 'small'\n    },\n    style: {\n      transform: 'translate(14px, 9px) scale(1)'\n    }\n  }, {\n    props: ({\n      variant,\n      ownerState\n    }) => variant === 'outlined' && ownerState.shrink,\n    style: {\n      userSelect: 'none',\n      pointerEvents: 'auto',\n      // Theoretically, we should have (8+5)*2/0.75 = 34px\n      // but it feels a better when it bleeds a bit on the left, so 32px.\n      maxWidth: 'calc(133% - 32px)',\n      transform: 'translate(14px, -9px) scale(0.75)'\n    }\n  }]\n})));\nconst InputLabel = /*#__PURE__*/React.forwardRef(function InputLabel(inProps, ref) {\n  const props = useDefaultProps({\n    name: 'MuiInputLabel',\n    props: inProps\n  });\n  const {\n    disableAnimation = false,\n    margin,\n    shrink: shrinkProp,\n    variant,\n    className,\n    ...other\n  } = props;\n  const muiFormControl = useFormControl();\n  let shrink = shrinkProp;\n  if (typeof shrink === 'undefined' && muiFormControl) {\n    shrink = muiFormControl.filled || muiFormControl.focused || muiFormControl.adornedStart;\n  }\n  const fcs = formControlState({\n    props,\n    muiFormControl,\n    states: ['size', 'variant', 'required', 'focused']\n  });\n  const ownerState = {\n    ...props,\n    disableAnimation,\n    formControl: muiFormControl,\n    shrink,\n    size: fcs.size,\n    variant: fcs.variant,\n    required: fcs.required,\n    focused: fcs.focused\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(InputLabelRoot, {\n    \"data-shrink\": shrink,\n    ref: ref,\n    className: clsx(classes.root, className),\n    ...other,\n    ownerState: ownerState,\n    classes: classes\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? InputLabel.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['error', 'info', 'primary', 'secondary', 'success', 'warning']), PropTypes.string]),\n  /**\n   * If `true`, the transition animation is disabled.\n   * @default false\n   */\n  disableAnimation: PropTypes.bool,\n  /**\n   * If `true`, the component is disabled.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the label is displayed in an error state.\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the `input` of this label is focused.\n   */\n  focused: PropTypes.bool,\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   */\n  margin: PropTypes.oneOf(['dense']),\n  /**\n   * if `true`, the label will indicate that the `input` is required.\n   */\n  required: PropTypes.bool,\n  /**\n   * If `true`, the label is shrunk.\n   */\n  shrink: PropTypes.bool,\n  /**\n   * The size of the component.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nexport default InputLabel;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getLinearProgressUtilityClass(slot) {\n  return generateUtilityClass('MuiLinearProgress', slot);\n}\nconst linearProgressClasses = generateUtilityClasses('MuiLinearProgress', ['root', 'colorPrimary', 'colorSecondary', 'determinate', 'indeterminate', 'buffer', 'query', 'dashed', 'dashedColorPrimary', 'dashedColorSecondary', 'bar', 'bar1', 'bar2', 'barColorPrimary', 'barColorSecondary', 'bar1Indeterminate', 'bar1Determinate', 'bar1Buffer', 'bar2Indeterminate', 'bar2Buffer']);\nexport default linearProgressClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport { keyframes, css, styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport { getLinearProgressUtilityClass } from \"./linearProgressClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst TRANSITION_DURATION = 4; // seconds\nconst indeterminate1Keyframe = keyframes`\n  0% {\n    left: -35%;\n    right: 100%;\n  }\n\n  60% {\n    left: 100%;\n    right: -90%;\n  }\n\n  100% {\n    left: 100%;\n    right: -90%;\n  }\n`;\n\n// This implementation is for supporting both Styled-components v4+ and Pigment CSS.\n// A global animation has to be created here for Styled-components v4+ (https://github.com/styled-components/styled-components/blob/main/packages/styled-components/src/utils/errors.md#12).\n// which can be done by checking typeof indeterminate1Keyframe !== 'string' (at runtime, Pigment CSS transform keyframes`` to a string).\nconst indeterminate1Animation = typeof indeterminate1Keyframe !== 'string' ? css`\n        animation: ${indeterminate1Keyframe} 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;\n      ` : null;\nconst indeterminate2Keyframe = keyframes`\n  0% {\n    left: -200%;\n    right: 100%;\n  }\n\n  60% {\n    left: 107%;\n    right: -8%;\n  }\n\n  100% {\n    left: 107%;\n    right: -8%;\n  }\n`;\nconst indeterminate2Animation = typeof indeterminate2Keyframe !== 'string' ? css`\n        animation: ${indeterminate2Keyframe} 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite;\n      ` : null;\nconst bufferKeyframe = keyframes`\n  0% {\n    opacity: 1;\n    background-position: 0 -23px;\n  }\n\n  60% {\n    opacity: 0;\n    background-position: 0 -23px;\n  }\n\n  100% {\n    opacity: 1;\n    background-position: -200px -23px;\n  }\n`;\nconst bufferAnimation = typeof bufferKeyframe !== 'string' ? css`\n        animation: ${bufferKeyframe} 3s infinite linear;\n      ` : null;\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    variant,\n    color\n  } = ownerState;\n  const slots = {\n    root: ['root', `color${capitalize(color)}`, variant],\n    dashed: ['dashed', `dashedColor${capitalize(color)}`],\n    bar1: ['bar', 'bar1', `barColor${capitalize(color)}`, (variant === 'indeterminate' || variant === 'query') && 'bar1Indeterminate', variant === 'determinate' && 'bar1Determinate', variant === 'buffer' && 'bar1Buffer'],\n    bar2: ['bar', 'bar2', variant !== 'buffer' && `barColor${capitalize(color)}`, variant === 'buffer' && `color${capitalize(color)}`, (variant === 'indeterminate' || variant === 'query') && 'bar2Indeterminate', variant === 'buffer' && 'bar2Buffer']\n  };\n  return composeClasses(slots, getLinearProgressUtilityClass, classes);\n};\nconst getColorShade = (theme, color) => {\n  if (theme.vars) {\n    return theme.vars.palette.LinearProgress[`${color}Bg`];\n  }\n  return theme.palette.mode === 'light' ? theme.lighten(theme.palette[color].main, 0.62) : theme.darken(theme.palette[color].main, 0.5);\n};\nconst LinearProgressRoot = styled('span', {\n  name: 'MuiLinearProgress',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[`color${capitalize(ownerState.color)}`], styles[ownerState.variant]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  position: 'relative',\n  overflow: 'hidden',\n  display: 'block',\n  height: 4,\n  // Fix Safari's bug during composition of different paint.\n  zIndex: 0,\n  '@media print': {\n    colorAdjust: 'exact'\n  },\n  variants: [...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      backgroundColor: getColorShade(theme, color)\n    }\n  })), {\n    props: ({\n      ownerState\n    }) => ownerState.color === 'inherit' && ownerState.variant !== 'buffer',\n    style: {\n      '&::before': {\n        content: '\"\"',\n        position: 'absolute',\n        left: 0,\n        top: 0,\n        right: 0,\n        bottom: 0,\n        backgroundColor: 'currentColor',\n        opacity: 0.3\n      }\n    }\n  }, {\n    props: {\n      variant: 'buffer'\n    },\n    style: {\n      backgroundColor: 'transparent'\n    }\n  }, {\n    props: {\n      variant: 'query'\n    },\n    style: {\n      transform: 'rotate(180deg)'\n    }\n  }]\n})));\nconst LinearProgressDashed = styled('span', {\n  name: 'MuiLinearProgress',\n  slot: 'Dashed',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.dashed, styles[`dashedColor${capitalize(ownerState.color)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  position: 'absolute',\n  marginTop: 0,\n  height: '100%',\n  width: '100%',\n  backgroundSize: '10px 10px',\n  backgroundPosition: '0 -23px',\n  variants: [{\n    props: {\n      color: 'inherit'\n    },\n    style: {\n      opacity: 0.3,\n      backgroundImage: `radial-gradient(currentColor 0%, currentColor 16%, transparent 42%)`\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => {\n    const backgroundColor = getColorShade(theme, color);\n    return {\n      props: {\n        color\n      },\n      style: {\n        backgroundImage: `radial-gradient(${backgroundColor} 0%, ${backgroundColor} 16%, transparent 42%)`\n      }\n    };\n  })]\n})), bufferAnimation || {\n  // At runtime for Pigment CSS, `bufferAnimation` will be null and the generated keyframe will be used.\n  animation: `${bufferKeyframe} 3s infinite linear`\n});\nconst LinearProgressBar1 = styled('span', {\n  name: 'MuiLinearProgress',\n  slot: 'Bar1',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.bar, styles.bar1, styles[`barColor${capitalize(ownerState.color)}`], (ownerState.variant === 'indeterminate' || ownerState.variant === 'query') && styles.bar1Indeterminate, ownerState.variant === 'determinate' && styles.bar1Determinate, ownerState.variant === 'buffer' && styles.bar1Buffer];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  width: '100%',\n  position: 'absolute',\n  left: 0,\n  bottom: 0,\n  top: 0,\n  transition: 'transform 0.2s linear',\n  transformOrigin: 'left',\n  variants: [{\n    props: {\n      color: 'inherit'\n    },\n    style: {\n      backgroundColor: 'currentColor'\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      backgroundColor: (theme.vars || theme).palette[color].main\n    }\n  })), {\n    props: {\n      variant: 'determinate'\n    },\n    style: {\n      transition: `transform .${TRANSITION_DURATION}s linear`\n    }\n  }, {\n    props: {\n      variant: 'buffer'\n    },\n    style: {\n      zIndex: 1,\n      transition: `transform .${TRANSITION_DURATION}s linear`\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.variant === 'indeterminate' || ownerState.variant === 'query',\n    style: {\n      width: 'auto'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.variant === 'indeterminate' || ownerState.variant === 'query',\n    style: indeterminate1Animation || {\n      animation: `${indeterminate1Keyframe} 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite`\n    }\n  }]\n})));\nconst LinearProgressBar2 = styled('span', {\n  name: 'MuiLinearProgress',\n  slot: 'Bar2',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.bar, styles.bar2, styles[`barColor${capitalize(ownerState.color)}`], (ownerState.variant === 'indeterminate' || ownerState.variant === 'query') && styles.bar2Indeterminate, ownerState.variant === 'buffer' && styles.bar2Buffer];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  width: '100%',\n  position: 'absolute',\n  left: 0,\n  bottom: 0,\n  top: 0,\n  transition: 'transform 0.2s linear',\n  transformOrigin: 'left',\n  variants: [...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      '--LinearProgressBar2-barColor': (theme.vars || theme).palette[color].main\n    }\n  })), {\n    props: ({\n      ownerState\n    }) => ownerState.variant !== 'buffer' && ownerState.color !== 'inherit',\n    style: {\n      backgroundColor: 'var(--LinearProgressBar2-barColor, currentColor)'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.variant !== 'buffer' && ownerState.color === 'inherit',\n    style: {\n      backgroundColor: 'currentColor'\n    }\n  }, {\n    props: {\n      color: 'inherit'\n    },\n    style: {\n      opacity: 0.3\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color,\n      variant: 'buffer'\n    },\n    style: {\n      backgroundColor: getColorShade(theme, color),\n      transition: `transform .${TRANSITION_DURATION}s linear`\n    }\n  })), {\n    props: ({\n      ownerState\n    }) => ownerState.variant === 'indeterminate' || ownerState.variant === 'query',\n    style: {\n      width: 'auto'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.variant === 'indeterminate' || ownerState.variant === 'query',\n    style: indeterminate2Animation || {\n      animation: `${indeterminate2Keyframe} 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) 1.15s infinite`\n    }\n  }]\n})));\n\n/**\n * ## ARIA\n *\n * If the progress bar is describing the loading progress of a particular region of a page,\n * you should use `aria-describedby` to point to the progress bar, and set the `aria-busy`\n * attribute to `true` on that region until it has finished loading.\n */\nconst LinearProgress = /*#__PURE__*/React.forwardRef(function LinearProgress(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiLinearProgress'\n  });\n  const {\n    className,\n    color = 'primary',\n    value,\n    valueBuffer,\n    variant = 'indeterminate',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    color,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  const isRtl = useRtl();\n  const rootProps = {};\n  const inlineStyles = {\n    bar1: {},\n    bar2: {}\n  };\n  if (variant === 'determinate' || variant === 'buffer') {\n    if (value !== undefined) {\n      rootProps['aria-valuenow'] = Math.round(value);\n      rootProps['aria-valuemin'] = 0;\n      rootProps['aria-valuemax'] = 100;\n      let transform = value - 100;\n      if (isRtl) {\n        transform = -transform;\n      }\n      inlineStyles.bar1.transform = `translateX(${transform}%)`;\n    } else if (process.env.NODE_ENV !== 'production') {\n      console.error('MUI: You need to provide a value prop ' + 'when using the determinate or buffer variant of LinearProgress .');\n    }\n  }\n  if (variant === 'buffer') {\n    if (valueBuffer !== undefined) {\n      let transform = (valueBuffer || 0) - 100;\n      if (isRtl) {\n        transform = -transform;\n      }\n      inlineStyles.bar2.transform = `translateX(${transform}%)`;\n    } else if (process.env.NODE_ENV !== 'production') {\n      console.error('MUI: You need to provide a valueBuffer prop ' + 'when using the buffer variant of LinearProgress.');\n    }\n  }\n  return /*#__PURE__*/_jsxs(LinearProgressRoot, {\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    role: \"progressbar\",\n    ...rootProps,\n    ref: ref,\n    ...other,\n    children: [variant === 'buffer' ? /*#__PURE__*/_jsx(LinearProgressDashed, {\n      className: classes.dashed,\n      ownerState: ownerState\n    }) : null, /*#__PURE__*/_jsx(LinearProgressBar1, {\n      className: classes.bar1,\n      ownerState: ownerState,\n      style: inlineStyles.bar1\n    }), variant === 'determinate' ? null : /*#__PURE__*/_jsx(LinearProgressBar2, {\n      className: classes.bar2,\n      ownerState: ownerState,\n      style: inlineStyles.bar2\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? LinearProgress.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['inherit', 'primary', 'secondary']), PropTypes.string]),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The value of the progress indicator for the determinate and buffer variants.\n   * Value between 0 and 100.\n   */\n  value: PropTypes.number,\n  /**\n   * The value for the buffer variant.\n   * Value between 0 and 100.\n   */\n  valueBuffer: PropTypes.number,\n  /**\n   * The variant to use.\n   * Use indeterminate or query when there is no progress value.\n   * @default 'indeterminate'\n   */\n  variant: PropTypes.oneOf(['buffer', 'determinate', 'indeterminate', 'query'])\n} : void 0;\nexport default LinearProgress;","'use client';\n\nimport * as React from 'react';\n\n/**\n * @ignore - internal component.\n */\nconst ListContext = /*#__PURE__*/React.createContext({});\nif (process.env.NODE_ENV !== 'production') {\n  ListContext.displayName = 'ListContext';\n}\nexport default ListContext;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getListUtilityClass(slot) {\n  return generateUtilityClass('MuiList', slot);\n}\nconst listClasses = generateUtilityClasses('MuiList', ['root', 'padding', 'dense', 'subheader']);\nexport default listClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport ListContext from \"./ListContext.js\";\nimport { getListUtilityClass } from \"./listClasses.js\";\nimport { jsxs as _jsxs, jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    disablePadding,\n    dense,\n    subheader\n  } = ownerState;\n  const slots = {\n    root: ['root', !disablePadding && 'padding', dense && 'dense', subheader && 'subheader']\n  };\n  return composeClasses(slots, getListUtilityClass, classes);\n};\nconst ListRoot = styled('ul', {\n  name: 'MuiList',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, !ownerState.disablePadding && styles.padding, ownerState.dense && styles.dense, ownerState.subheader && styles.subheader];\n  }\n})({\n  listStyle: 'none',\n  margin: 0,\n  padding: 0,\n  position: 'relative',\n  variants: [{\n    props: ({\n      ownerState\n    }) => !ownerState.disablePadding,\n    style: {\n      paddingTop: 8,\n      paddingBottom: 8\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.subheader,\n    style: {\n      paddingTop: 0\n    }\n  }]\n});\nconst List = /*#__PURE__*/React.forwardRef(function List(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiList'\n  });\n  const {\n    children,\n    className,\n    component = 'ul',\n    dense = false,\n    disablePadding = false,\n    subheader,\n    ...other\n  } = props;\n  const context = React.useMemo(() => ({\n    dense\n  }), [dense]);\n  const ownerState = {\n    ...props,\n    component,\n    dense,\n    disablePadding\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsx(ListContext.Provider, {\n    value: context,\n    children: /*#__PURE__*/_jsxs(ListRoot, {\n      as: component,\n      className: clsx(classes.root, className),\n      ref: ref,\n      ownerState: ownerState,\n      ...other,\n      children: [subheader, children]\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? List.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input is used for\n   * the list and list items.\n   * The prop is available to descendant components as the `dense` context.\n   * @default false\n   */\n  dense: PropTypes.bool,\n  /**\n   * If `true`, vertical padding is removed from the list.\n   * @default false\n   */\n  disablePadding: PropTypes.bool,\n  /**\n   * The content of the subheader, normally `ListSubheader`.\n   */\n  subheader: PropTypes.node,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default List;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getListItemIconUtilityClass(slot) {\n  return generateUtilityClass('MuiListItemIcon', slot);\n}\nconst listItemIconClasses = generateUtilityClasses('MuiListItemIcon', ['root', 'alignItemsFlexStart']);\nexport default listItemIconClasses;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getListItemTextUtilityClass(slot) {\n  return generateUtilityClass('MuiListItemText', slot);\n}\nconst listItemTextClasses = generateUtilityClasses('MuiListItemText', ['root', 'multiline', 'dense', 'inset', 'primary', 'secondary']);\nexport default listItemTextClasses;","'use client';\n\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport ownerDocument from \"../utils/ownerDocument.js\";\nimport List from \"../List/index.js\";\nimport getScrollbarSize from \"../utils/getScrollbarSize.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport useEnhancedEffect from \"../utils/useEnhancedEffect.js\";\nimport { ownerWindow } from \"../utils/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nfunction nextItem(list, item, disableListWrap) {\n  if (list === item) {\n    return list.firstChild;\n  }\n  if (item && item.nextElementSibling) {\n    return item.nextElementSibling;\n  }\n  return disableListWrap ? null : list.firstChild;\n}\nfunction previousItem(list, item, disableListWrap) {\n  if (list === item) {\n    return disableListWrap ? list.firstChild : list.lastChild;\n  }\n  if (item && item.previousElementSibling) {\n    return item.previousElementSibling;\n  }\n  return disableListWrap ? null : list.lastChild;\n}\nfunction textCriteriaMatches(nextFocus, textCriteria) {\n  if (textCriteria === undefined) {\n    return true;\n  }\n  let text = nextFocus.innerText;\n  if (text === undefined) {\n    // jsdom doesn't support innerText\n    text = nextFocus.textContent;\n  }\n  text = text.trim().toLowerCase();\n  if (text.length === 0) {\n    return false;\n  }\n  if (textCriteria.repeating) {\n    return text[0] === textCriteria.keys[0];\n  }\n  return text.startsWith(textCriteria.keys.join(''));\n}\nfunction moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, traversalFunction, textCriteria) {\n  let wrappedOnce = false;\n  let nextFocus = traversalFunction(list, currentFocus, currentFocus ? disableListWrap : false);\n  while (nextFocus) {\n    // Prevent infinite loop.\n    if (nextFocus === list.firstChild) {\n      if (wrappedOnce) {\n        return false;\n      }\n      wrappedOnce = true;\n    }\n\n    // Same logic as useAutocomplete.js\n    const nextFocusDisabled = disabledItemsFocusable ? false : nextFocus.disabled || nextFocus.getAttribute('aria-disabled') === 'true';\n    if (!nextFocus.hasAttribute('tabindex') || !textCriteriaMatches(nextFocus, textCriteria) || nextFocusDisabled) {\n      // Move to the next element.\n      nextFocus = traversalFunction(list, nextFocus, disableListWrap);\n    } else {\n      nextFocus.focus();\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * A permanently displayed menu following https://www.w3.org/WAI/ARIA/apg/patterns/menu-button/.\n * It's exposed to help customization of the [`Menu`](/material-ui/api/menu/) component if you\n * use it separately you need to move focus into the component manually. Once\n * the focus is placed inside the component it is fully keyboard accessible.\n */\nconst MenuList = /*#__PURE__*/React.forwardRef(function MenuList(props, ref) {\n  const {\n    // private\n    // eslint-disable-next-line react/prop-types\n    actions,\n    autoFocus = false,\n    autoFocusItem = false,\n    children,\n    className,\n    disabledItemsFocusable = false,\n    disableListWrap = false,\n    onKeyDown,\n    variant = 'selectedMenu',\n    ...other\n  } = props;\n  const listRef = React.useRef(null);\n  const textCriteriaRef = React.useRef({\n    keys: [],\n    repeating: true,\n    previousKeyMatched: true,\n    lastTime: null\n  });\n  useEnhancedEffect(() => {\n    if (autoFocus) {\n      listRef.current.focus();\n    }\n  }, [autoFocus]);\n  React.useImperativeHandle(actions, () => ({\n    adjustStyleForScrollbar: (containerElement, {\n      direction\n    }) => {\n      // Let's ignore that piece of logic if users are already overriding the width\n      // of the menu.\n      const noExplicitWidth = !listRef.current.style.width;\n      if (containerElement.clientHeight < listRef.current.clientHeight && noExplicitWidth) {\n        const scrollbarSize = `${getScrollbarSize(ownerWindow(containerElement))}px`;\n        listRef.current.style[direction === 'rtl' ? 'paddingLeft' : 'paddingRight'] = scrollbarSize;\n        listRef.current.style.width = `calc(100% + ${scrollbarSize})`;\n      }\n      return listRef.current;\n    }\n  }), []);\n  const handleKeyDown = event => {\n    const list = listRef.current;\n    const key = event.key;\n    const isModifierKeyPressed = event.ctrlKey || event.metaKey || event.altKey;\n    if (isModifierKeyPressed) {\n      if (onKeyDown) {\n        onKeyDown(event);\n      }\n      return;\n    }\n\n    /**\n     * @type {Element} - will always be defined since we are in a keydown handler\n     * attached to an element. A keydown event is either dispatched to the activeElement\n     * or document.body or document.documentElement. Only the first case will\n     * trigger this specific handler.\n     */\n    const currentFocus = ownerDocument(list).activeElement;\n    if (key === 'ArrowDown') {\n      // Prevent scroll of the page\n      event.preventDefault();\n      moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, nextItem);\n    } else if (key === 'ArrowUp') {\n      event.preventDefault();\n      moveFocus(list, currentFocus, disableListWrap, disabledItemsFocusable, previousItem);\n    } else if (key === 'Home') {\n      event.preventDefault();\n      moveFocus(list, null, disableListWrap, disabledItemsFocusable, nextItem);\n    } else if (key === 'End') {\n      event.preventDefault();\n      moveFocus(list, null, disableListWrap, disabledItemsFocusable, previousItem);\n    } else if (key.length === 1) {\n      const criteria = textCriteriaRef.current;\n      const lowerKey = key.toLowerCase();\n      const currTime = performance.now();\n      if (criteria.keys.length > 0) {\n        // Reset\n        if (currTime - criteria.lastTime > 500) {\n          criteria.keys = [];\n          criteria.repeating = true;\n          criteria.previousKeyMatched = true;\n        } else if (criteria.repeating && lowerKey !== criteria.keys[0]) {\n          criteria.repeating = false;\n        }\n      }\n      criteria.lastTime = currTime;\n      criteria.keys.push(lowerKey);\n      const keepFocusOnCurrent = currentFocus && !criteria.repeating && textCriteriaMatches(currentFocus, criteria);\n      if (criteria.previousKeyMatched && (keepFocusOnCurrent || moveFocus(list, currentFocus, false, disabledItemsFocusable, nextItem, criteria))) {\n        event.preventDefault();\n      } else {\n        criteria.previousKeyMatched = false;\n      }\n    }\n    if (onKeyDown) {\n      onKeyDown(event);\n    }\n  };\n  const handleRef = useForkRef(listRef, ref);\n\n  /**\n   * the index of the item should receive focus\n   * in a `variant=\"selectedMenu\"` it's the first `selected` item\n   * otherwise it's the very first item.\n   */\n  let activeItemIndex = -1;\n  // since we inject focus related props into children we have to do a lookahead\n  // to check if there is a `selected` item. We're looking for the last `selected`\n  // item and use the first valid item as a fallback\n  React.Children.forEach(children, (child, index) => {\n    if (! /*#__PURE__*/React.isValidElement(child)) {\n      if (activeItemIndex === index) {\n        activeItemIndex += 1;\n        if (activeItemIndex >= children.length) {\n          // there are no focusable items within the list.\n          activeItemIndex = -1;\n        }\n      }\n      return;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"MUI: The Menu component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n    if (!child.props.disabled) {\n      if (variant === 'selectedMenu' && child.props.selected) {\n        activeItemIndex = index;\n      } else if (activeItemIndex === -1) {\n        activeItemIndex = index;\n      }\n    }\n    if (activeItemIndex === index && (child.props.disabled || child.props.muiSkipListHighlight || child.type.muiSkipListHighlight)) {\n      activeItemIndex += 1;\n      if (activeItemIndex >= children.length) {\n        // there are no focusable items within the list.\n        activeItemIndex = -1;\n      }\n    }\n  });\n  const items = React.Children.map(children, (child, index) => {\n    if (index === activeItemIndex) {\n      const newChildProps = {};\n      if (autoFocusItem) {\n        newChildProps.autoFocus = true;\n      }\n      if (child.props.tabIndex === undefined && variant === 'selectedMenu') {\n        newChildProps.tabIndex = 0;\n      }\n      return /*#__PURE__*/React.cloneElement(child, newChildProps);\n    }\n    return child;\n  });\n  return /*#__PURE__*/_jsx(List, {\n    role: \"menu\",\n    ref: handleRef,\n    className: className,\n    onKeyDown: handleKeyDown,\n    tabIndex: autoFocus ? 0 : -1,\n    ...other,\n    children: items\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? MenuList.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * If `true`, will focus the `[role=\"menu\"]` container and move into tab order.\n   * @default false\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * If `true`, will focus the first menuitem if `variant=\"menu\"` or selected item\n   * if `variant=\"selectedMenu\"`.\n   * @default false\n   */\n  autoFocusItem: PropTypes.bool,\n  /**\n   * MenuList contents, normally `MenuItem`s.\n   */\n  children: PropTypes.node,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, will allow focus on disabled items.\n   * @default false\n   */\n  disabledItemsFocusable: PropTypes.bool,\n  /**\n   * If `true`, the menu items will not wrap focus.\n   * @default false\n   */\n  disableListWrap: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  onKeyDown: PropTypes.func,\n  /**\n   * The variant to use. Use `menu` to prevent selected items from impacting the initial focus\n   * and the vertical alignment relative to the anchor element.\n   * @default 'selectedMenu'\n   */\n  variant: PropTypes.oneOf(['menu', 'selectedMenu'])\n} : void 0;\nexport default MenuList;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getPopoverUtilityClass(slot) {\n  return generateUtilityClass('MuiPopover', slot);\n}\nconst popoverClasses = generateUtilityClasses('MuiPopover', ['root', 'paper']);\nexport default popoverClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport HTMLElementType from '@mui/utils/HTMLElementType';\nimport refType from '@mui/utils/refType';\nimport elementTypeAcceptingRef from '@mui/utils/elementTypeAcceptingRef';\nimport integerPropType from '@mui/utils/integerPropType';\nimport chainPropTypes from '@mui/utils/chainPropTypes';\nimport isHostComponent from '@mui/utils/isHostComponent';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport debounce from \"../utils/debounce.js\";\nimport ownerDocument from \"../utils/ownerDocument.js\";\nimport ownerWindow from \"../utils/ownerWindow.js\";\nimport Grow from \"../Grow/index.js\";\nimport Modal from \"../Modal/index.js\";\nimport PaperBase from \"../Paper/index.js\";\nimport { getPopoverUtilityClass } from \"./popoverClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { mergeSlotProps } from \"../utils/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport function getOffsetTop(rect, vertical) {\n  let offset = 0;\n  if (typeof vertical === 'number') {\n    offset = vertical;\n  } else if (vertical === 'center') {\n    offset = rect.height / 2;\n  } else if (vertical === 'bottom') {\n    offset = rect.height;\n  }\n  return offset;\n}\nexport function getOffsetLeft(rect, horizontal) {\n  let offset = 0;\n  if (typeof horizontal === 'number') {\n    offset = horizontal;\n  } else if (horizontal === 'center') {\n    offset = rect.width / 2;\n  } else if (horizontal === 'right') {\n    offset = rect.width;\n  }\n  return offset;\n}\nfunction getTransformOriginValue(transformOrigin) {\n  return [transformOrigin.horizontal, transformOrigin.vertical].map(n => typeof n === 'number' ? `${n}px` : n).join(' ');\n}\nfunction resolveAnchorEl(anchorEl) {\n  return typeof anchorEl === 'function' ? anchorEl() : anchorEl;\n}\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root'],\n    paper: ['paper']\n  };\n  return composeClasses(slots, getPopoverUtilityClass, classes);\n};\nexport const PopoverRoot = styled(Modal, {\n  name: 'MuiPopover',\n  slot: 'Root'\n})({});\nexport const PopoverPaper = styled(PaperBase, {\n  name: 'MuiPopover',\n  slot: 'Paper'\n})({\n  position: 'absolute',\n  overflowY: 'auto',\n  overflowX: 'hidden',\n  // So we see the popover when it's empty.\n  // It's most likely on issue on userland.\n  minWidth: 16,\n  minHeight: 16,\n  maxWidth: 'calc(100% - 32px)',\n  maxHeight: 'calc(100% - 32px)',\n  // We disable the focus ring for mouse, touch and keyboard users.\n  outline: 0\n});\nconst Popover = /*#__PURE__*/React.forwardRef(function Popover(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiPopover'\n  });\n  const {\n    action,\n    anchorEl,\n    anchorOrigin = {\n      vertical: 'top',\n      horizontal: 'left'\n    },\n    anchorPosition,\n    anchorReference = 'anchorEl',\n    children,\n    className,\n    container: containerProp,\n    elevation = 8,\n    marginThreshold = 16,\n    open,\n    PaperProps: PaperPropsProp = {},\n    // TODO: remove in v7\n    slots = {},\n    slotProps = {},\n    transformOrigin = {\n      vertical: 'top',\n      horizontal: 'left'\n    },\n    TransitionComponent,\n    // TODO: remove in v7\n    transitionDuration: transitionDurationProp = 'auto',\n    TransitionProps = {},\n    // TODO: remove in v7\n    disableScrollLock = false,\n    ...other\n  } = props;\n  const paperRef = React.useRef();\n  const ownerState = {\n    ...props,\n    anchorOrigin,\n    anchorReference,\n    elevation,\n    marginThreshold,\n    transformOrigin,\n    TransitionComponent,\n    transitionDuration: transitionDurationProp,\n    TransitionProps\n  };\n  const classes = useUtilityClasses(ownerState);\n\n  // Returns the top/left offset of the position\n  // to attach to on the anchor element (or body if none is provided)\n  const getAnchorOffset = React.useCallback(() => {\n    if (anchorReference === 'anchorPosition') {\n      if (process.env.NODE_ENV !== 'production') {\n        if (!anchorPosition) {\n          console.error('MUI: You need to provide a `anchorPosition` prop when using ' + '<Popover anchorReference=\"anchorPosition\" />.');\n        }\n      }\n      return anchorPosition;\n    }\n    const resolvedAnchorEl = resolveAnchorEl(anchorEl);\n\n    // If an anchor element wasn't provided, just use the parent body element of this Popover\n    const anchorElement = resolvedAnchorEl && resolvedAnchorEl.nodeType === 1 ? resolvedAnchorEl : ownerDocument(paperRef.current).body;\n    const anchorRect = anchorElement.getBoundingClientRect();\n    if (process.env.NODE_ENV !== 'production') {\n      const box = anchorElement.getBoundingClientRect();\n      if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n        console.warn(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n      }\n    }\n    return {\n      top: anchorRect.top + getOffsetTop(anchorRect, anchorOrigin.vertical),\n      left: anchorRect.left + getOffsetLeft(anchorRect, anchorOrigin.horizontal)\n    };\n  }, [anchorEl, anchorOrigin.horizontal, anchorOrigin.vertical, anchorPosition, anchorReference]);\n\n  // Returns the base transform origin using the element\n  const getTransformOrigin = React.useCallback(elemRect => {\n    return {\n      vertical: getOffsetTop(elemRect, transformOrigin.vertical),\n      horizontal: getOffsetLeft(elemRect, transformOrigin.horizontal)\n    };\n  }, [transformOrigin.horizontal, transformOrigin.vertical]);\n  const getPositioningStyle = React.useCallback(element => {\n    const elemRect = {\n      width: element.offsetWidth,\n      height: element.offsetHeight\n    };\n\n    // Get the transform origin point on the element itself\n    const elemTransformOrigin = getTransformOrigin(elemRect);\n    if (anchorReference === 'none') {\n      return {\n        top: null,\n        left: null,\n        transformOrigin: getTransformOriginValue(elemTransformOrigin)\n      };\n    }\n\n    // Get the offset of the anchoring element\n    const anchorOffset = getAnchorOffset();\n\n    // Calculate element positioning\n    let top = anchorOffset.top - elemTransformOrigin.vertical;\n    let left = anchorOffset.left - elemTransformOrigin.horizontal;\n    const bottom = top + elemRect.height;\n    const right = left + elemRect.width;\n\n    // Use the parent window of the anchorEl if provided\n    const containerWindow = ownerWindow(resolveAnchorEl(anchorEl));\n\n    // Window thresholds taking required margin into account\n    const heightThreshold = containerWindow.innerHeight - marginThreshold;\n    const widthThreshold = containerWindow.innerWidth - marginThreshold;\n\n    // Check if the vertical axis needs shifting\n    if (marginThreshold !== null && top < marginThreshold) {\n      const diff = top - marginThreshold;\n      top -= diff;\n      elemTransformOrigin.vertical += diff;\n    } else if (marginThreshold !== null && bottom > heightThreshold) {\n      const diff = bottom - heightThreshold;\n      top -= diff;\n      elemTransformOrigin.vertical += diff;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      if (elemRect.height > heightThreshold && elemRect.height && heightThreshold) {\n        console.error(['MUI: The popover component is too tall.', `Some part of it can not be seen on the screen (${elemRect.height - heightThreshold}px).`, 'Please consider adding a `max-height` to improve the user-experience.'].join('\\n'));\n      }\n    }\n\n    // Check if the horizontal axis needs shifting\n    if (marginThreshold !== null && left < marginThreshold) {\n      const diff = left - marginThreshold;\n      left -= diff;\n      elemTransformOrigin.horizontal += diff;\n    } else if (right > widthThreshold) {\n      const diff = right - widthThreshold;\n      left -= diff;\n      elemTransformOrigin.horizontal += diff;\n    }\n    return {\n      top: `${Math.round(top)}px`,\n      left: `${Math.round(left)}px`,\n      transformOrigin: getTransformOriginValue(elemTransformOrigin)\n    };\n  }, [anchorEl, anchorReference, getAnchorOffset, getTransformOrigin, marginThreshold]);\n  const [isPositioned, setIsPositioned] = React.useState(open);\n  const setPositioningStyles = React.useCallback(() => {\n    const element = paperRef.current;\n    if (!element) {\n      return;\n    }\n    const positioning = getPositioningStyle(element);\n    if (positioning.top !== null) {\n      element.style.setProperty('top', positioning.top);\n    }\n    if (positioning.left !== null) {\n      element.style.left = positioning.left;\n    }\n    element.style.transformOrigin = positioning.transformOrigin;\n    setIsPositioned(true);\n  }, [getPositioningStyle]);\n  React.useEffect(() => {\n    if (disableScrollLock) {\n      window.addEventListener('scroll', setPositioningStyles);\n    }\n    return () => window.removeEventListener('scroll', setPositioningStyles);\n  }, [anchorEl, disableScrollLock, setPositioningStyles]);\n  const handleEntering = () => {\n    setPositioningStyles();\n  };\n  const handleExited = () => {\n    setIsPositioned(false);\n  };\n  React.useEffect(() => {\n    if (open) {\n      setPositioningStyles();\n    }\n  });\n  React.useImperativeHandle(action, () => open ? {\n    updatePosition: () => {\n      setPositioningStyles();\n    }\n  } : null, [open, setPositioningStyles]);\n  React.useEffect(() => {\n    if (!open) {\n      return undefined;\n    }\n    const handleResize = debounce(() => {\n      setPositioningStyles();\n    });\n    const containerWindow = ownerWindow(resolveAnchorEl(anchorEl));\n    containerWindow.addEventListener('resize', handleResize);\n    return () => {\n      handleResize.clear();\n      containerWindow.removeEventListener('resize', handleResize);\n    };\n  }, [anchorEl, open, setPositioningStyles]);\n  let transitionDuration = transitionDurationProp;\n  const externalForwardedProps = {\n    slots: {\n      transition: TransitionComponent,\n      ...slots\n    },\n    slotProps: {\n      transition: TransitionProps,\n      paper: PaperPropsProp,\n      ...slotProps\n    }\n  };\n  const [TransitionSlot, transitionSlotProps] = useSlot('transition', {\n    elementType: Grow,\n    externalForwardedProps,\n    ownerState,\n    getSlotProps: handlers => ({\n      ...handlers,\n      onEntering: (element, isAppearing) => {\n        handlers.onEntering?.(element, isAppearing);\n        handleEntering();\n      },\n      onExited: element => {\n        handlers.onExited?.(element);\n        handleExited();\n      }\n    }),\n    additionalProps: {\n      appear: true,\n      in: open\n    }\n  });\n  if (transitionDurationProp === 'auto' && !TransitionSlot.muiSupportAuto) {\n    transitionDuration = undefined;\n  }\n\n  // If the container prop is provided, use that\n  // If the anchorEl prop is provided, use its parent body element as the container\n  // If neither are provided let the Modal take care of choosing the container\n  const container = containerProp || (anchorEl ? ownerDocument(resolveAnchorEl(anchorEl)).body : undefined);\n  const [RootSlot, {\n    slots: rootSlotsProp,\n    slotProps: rootSlotPropsProp,\n    ...rootProps\n  }] = useSlot('root', {\n    ref,\n    elementType: PopoverRoot,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      ...other\n    },\n    shouldForwardComponentProp: true,\n    additionalProps: {\n      slots: {\n        backdrop: slots.backdrop\n      },\n      slotProps: {\n        backdrop: mergeSlotProps(typeof slotProps.backdrop === 'function' ? slotProps.backdrop(ownerState) : slotProps.backdrop, {\n          invisible: true\n        })\n      },\n      container,\n      open\n    },\n    ownerState,\n    className: clsx(classes.root, className)\n  });\n  const [PaperSlot, paperProps] = useSlot('paper', {\n    ref: paperRef,\n    className: classes.paper,\n    elementType: PopoverPaper,\n    externalForwardedProps,\n    shouldForwardComponentProp: true,\n    additionalProps: {\n      elevation,\n      style: isPositioned ? undefined : {\n        opacity: 0\n      }\n    },\n    ownerState\n  });\n  return /*#__PURE__*/_jsx(RootSlot, {\n    ...rootProps,\n    ...(!isHostComponent(RootSlot) && {\n      slots: rootSlotsProp,\n      slotProps: rootSlotPropsProp,\n      disableScrollLock\n    }),\n    children: /*#__PURE__*/_jsx(TransitionSlot, {\n      ...transitionSlotProps,\n      timeout: transitionDuration,\n      children: /*#__PURE__*/_jsx(PaperSlot, {\n        ...paperProps,\n        children: children\n      })\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Popover.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * A ref for imperative actions.\n   * It currently only supports updatePosition() action.\n   */\n  action: refType,\n  /**\n   * An HTML element, [PopoverVirtualElement](https://mui.com/material-ui/react-popover/#virtual-element),\n   * or a function that returns either.\n   * It's used to set the position of the popover.\n   */\n  anchorEl: chainPropTypes(PropTypes.oneOfType([HTMLElementType, PropTypes.func]), props => {\n    if (props.open && (!props.anchorReference || props.anchorReference === 'anchorEl')) {\n      const resolvedAnchorEl = resolveAnchorEl(props.anchorEl);\n      if (resolvedAnchorEl && resolvedAnchorEl.nodeType === 1) {\n        const box = resolvedAnchorEl.getBoundingClientRect();\n        if (process.env.NODE_ENV !== 'test' && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n          return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n        }\n      } else {\n        return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', `It should be an Element or PopoverVirtualElement instance but it's \\`${resolvedAnchorEl}\\` instead.`].join('\\n'));\n      }\n    }\n    return null;\n  }),\n  /**\n   * This is the point on the anchor where the popover's\n   * `anchorEl` will attach to. This is not used when the\n   * anchorReference is 'anchorPosition'.\n   *\n   * Options:\n   * vertical: [top, center, bottom];\n   * horizontal: [left, center, right].\n   * @default {\n   *   vertical: 'top',\n   *   horizontal: 'left',\n   * }\n   */\n  anchorOrigin: PropTypes.shape({\n    horizontal: PropTypes.oneOfType([PropTypes.oneOf(['center', 'left', 'right']), PropTypes.number]).isRequired,\n    vertical: PropTypes.oneOfType([PropTypes.oneOf(['bottom', 'center', 'top']), PropTypes.number]).isRequired\n  }),\n  /**\n   * This is the position that may be used to set the position of the popover.\n   * The coordinates are relative to the application's client area.\n   */\n  anchorPosition: PropTypes.shape({\n    left: PropTypes.number.isRequired,\n    top: PropTypes.number.isRequired\n  }),\n  /**\n   * This determines which anchor prop to refer to when setting\n   * the position of the popover.\n   * @default 'anchorEl'\n   */\n  anchorReference: PropTypes.oneOf(['anchorEl', 'anchorPosition', 'none']),\n  /**\n   * A backdrop component. This prop enables custom backdrop rendering.\n   * @deprecated Use `slots.backdrop` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default styled(Backdrop, {\n   *   name: 'MuiModal',\n   *   slot: 'Backdrop',\n   *   overridesResolver: (props, styles) => {\n   *     return styles.backdrop;\n   *   },\n   * })({\n   *   zIndex: -1,\n   * })\n   */\n  BackdropComponent: PropTypes.elementType,\n  /**\n   * Props applied to the [`Backdrop`](/material-ui/api/backdrop/) element.\n   * @deprecated Use `slotProps.backdrop` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  BackdropProps: PropTypes.object,\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * An HTML element, component instance, or function that returns either.\n   * The `container` will passed to the Modal component.\n   *\n   * By default, it uses the body of the anchorEl's top-level document object,\n   * so it's simply `document.body` most of the time.\n   */\n  container: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),\n  /**\n   * Disable the scroll lock behavior.\n   * @default false\n   */\n  disableScrollLock: PropTypes.bool,\n  /**\n   * The elevation of the popover.\n   * @default 8\n   */\n  elevation: integerPropType,\n  /**\n   * Specifies how close to the edge of the window the popover can appear.\n   * If null, the popover will not be constrained by the window.\n   * @default 16\n   */\n  marginThreshold: PropTypes.number,\n  /**\n   * Callback fired when the component requests to be closed.\n   * The `reason` parameter can optionally be used to control the response to `onClose`.\n   */\n  onClose: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * Props applied to the [`Paper`](https://mui.com/material-ui/api/paper/) element.\n   *\n   * This prop is an alias for `slotProps.paper` and will be overridden by it if both are used.\n   * @deprecated Use `slotProps.paper` instead.\n   *\n   * @default {}\n   */\n  PaperProps: PropTypes /* @typescript-to-proptypes-ignore */.shape({\n    component: elementTypeAcceptingRef\n  }),\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    paper: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    transition: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    backdrop: PropTypes.elementType,\n    paper: PropTypes.elementType,\n    root: PropTypes.elementType,\n    transition: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * This is the point on the popover which\n   * will attach to the anchor's origin.\n   *\n   * Options:\n   * vertical: [top, center, bottom, x(px)];\n   * horizontal: [left, center, right, x(px)].\n   * @default {\n   *   vertical: 'top',\n   *   horizontal: 'left',\n   * }\n   */\n  transformOrigin: PropTypes.shape({\n    horizontal: PropTypes.oneOfType([PropTypes.oneOf(['center', 'left', 'right']), PropTypes.number]).isRequired,\n    vertical: PropTypes.oneOfType([PropTypes.oneOf(['bottom', 'center', 'top']), PropTypes.number]).isRequired\n  }),\n  /**\n   * The component used for the transition.\n   * [Follow this guide](https://mui.com/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   * @deprecated use the `slots.transition` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default Grow\n   */\n  TransitionComponent: PropTypes.elementType,\n  /**\n   * Set to 'auto' to automatically calculate transition time based on height.\n   * @default 'auto'\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })]),\n  /**\n   * Props applied to the transition element.\n   * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.\n   * @deprecated use the `slotProps.transition` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default {}\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default Popover;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getMenuUtilityClass(slot) {\n  return generateUtilityClass('MuiMenu', slot);\n}\nconst menuClasses = generateUtilityClasses('MuiMenu', ['root', 'paper', 'list']);\nexport default menuClasses;","'use client';\n\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport HTMLElementType from '@mui/utils/HTMLElementType';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport useSlotProps from '@mui/utils/useSlotProps';\nimport MenuList from \"../MenuList/index.js\";\nimport Popover, { PopoverPaper } from \"../Popover/index.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport { getMenuUtilityClass } from \"./menuClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst RTL_ORIGIN = {\n  vertical: 'top',\n  horizontal: 'right'\n};\nconst LTR_ORIGIN = {\n  vertical: 'top',\n  horizontal: 'left'\n};\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root'],\n    paper: ['paper'],\n    list: ['list']\n  };\n  return composeClasses(slots, getMenuUtilityClass, classes);\n};\nconst MenuRoot = styled(Popover, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiMenu',\n  slot: 'Root'\n})({});\nexport const MenuPaper = styled(PopoverPaper, {\n  name: 'MuiMenu',\n  slot: 'Paper'\n})({\n  // specZ: The maximum height of a simple menu should be one or more rows less than the view\n  // height. This ensures a tappable area outside of the simple menu with which to dismiss\n  // the menu.\n  maxHeight: 'calc(100% - 96px)',\n  // Add iOS momentum scrolling for iOS < 13.0\n  WebkitOverflowScrolling: 'touch'\n});\nconst MenuMenuList = styled(MenuList, {\n  name: 'MuiMenu',\n  slot: 'List'\n})({\n  // We disable the focus ring for mouse, touch and keyboard users.\n  outline: 0\n});\nconst Menu = /*#__PURE__*/React.forwardRef(function Menu(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiMenu'\n  });\n  const {\n    autoFocus = true,\n    children,\n    className,\n    disableAutoFocusItem = false,\n    MenuListProps = {},\n    onClose,\n    open,\n    PaperProps = {},\n    PopoverClasses,\n    transitionDuration = 'auto',\n    TransitionProps: {\n      onEntering,\n      ...TransitionProps\n    } = {},\n    variant = 'selectedMenu',\n    slots = {},\n    slotProps = {},\n    ...other\n  } = props;\n  const isRtl = useRtl();\n  const ownerState = {\n    ...props,\n    autoFocus,\n    disableAutoFocusItem,\n    MenuListProps,\n    onEntering,\n    PaperProps,\n    transitionDuration,\n    TransitionProps,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  const autoFocusItem = autoFocus && !disableAutoFocusItem && open;\n  const menuListActionsRef = React.useRef(null);\n  const handleEntering = (element, isAppearing) => {\n    if (menuListActionsRef.current) {\n      menuListActionsRef.current.adjustStyleForScrollbar(element, {\n        direction: isRtl ? 'rtl' : 'ltr'\n      });\n    }\n    if (onEntering) {\n      onEntering(element, isAppearing);\n    }\n  };\n  const handleListKeyDown = event => {\n    if (event.key === 'Tab') {\n      event.preventDefault();\n      if (onClose) {\n        onClose(event, 'tabKeyDown');\n      }\n    }\n  };\n\n  /**\n   * the index of the item should receive focus\n   * in a `variant=\"selectedMenu\"` it's the first `selected` item\n   * otherwise it's the very first item.\n   */\n  let activeItemIndex = -1;\n  // since we inject focus related props into children we have to do a lookahead\n  // to check if there is a `selected` item. We're looking for the last `selected`\n  // item and use the first valid item as a fallback\n  React.Children.map(children, (child, index) => {\n    if (! /*#__PURE__*/React.isValidElement(child)) {\n      return;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"MUI: The Menu component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n    if (!child.props.disabled) {\n      if (variant === 'selectedMenu' && child.props.selected) {\n        activeItemIndex = index;\n      } else if (activeItemIndex === -1) {\n        activeItemIndex = index;\n      }\n    }\n  });\n  const externalForwardedProps = {\n    slots,\n    slotProps: {\n      list: MenuListProps,\n      transition: TransitionProps,\n      paper: PaperProps,\n      ...slotProps\n    }\n  };\n  const rootSlotProps = useSlotProps({\n    elementType: slots.root,\n    externalSlotProps: slotProps.root,\n    ownerState,\n    className: [classes.root, className]\n  });\n  const [PaperSlot, paperSlotProps] = useSlot('paper', {\n    className: classes.paper,\n    elementType: MenuPaper,\n    externalForwardedProps,\n    shouldForwardComponentProp: true,\n    ownerState\n  });\n  const [ListSlot, listSlotProps] = useSlot('list', {\n    className: clsx(classes.list, MenuListProps.className),\n    elementType: MenuMenuList,\n    shouldForwardComponentProp: true,\n    externalForwardedProps,\n    getSlotProps: handlers => ({\n      ...handlers,\n      onKeyDown: event => {\n        handleListKeyDown(event);\n        handlers.onKeyDown?.(event);\n      }\n    }),\n    ownerState\n  });\n  const resolvedTransitionProps = typeof externalForwardedProps.slotProps.transition === 'function' ? externalForwardedProps.slotProps.transition(ownerState) : externalForwardedProps.slotProps.transition;\n  return /*#__PURE__*/_jsx(MenuRoot, {\n    onClose: onClose,\n    anchorOrigin: {\n      vertical: 'bottom',\n      horizontal: isRtl ? 'right' : 'left'\n    },\n    transformOrigin: isRtl ? RTL_ORIGIN : LTR_ORIGIN,\n    slots: {\n      root: slots.root,\n      paper: PaperSlot,\n      backdrop: slots.backdrop,\n      ...(slots.transition && {\n        // TODO: pass `slots.transition` directly once `TransitionComponent` is removed from Popover\n        transition: slots.transition\n      })\n    },\n    slotProps: {\n      root: rootSlotProps,\n      paper: paperSlotProps,\n      backdrop: typeof slotProps.backdrop === 'function' ? slotProps.backdrop(ownerState) : slotProps.backdrop,\n      transition: {\n        ...resolvedTransitionProps,\n        onEntering: (...args) => {\n          handleEntering(...args);\n          resolvedTransitionProps?.onEntering?.(...args);\n        }\n      }\n    },\n    open: open,\n    ref: ref,\n    transitionDuration: transitionDuration,\n    ownerState: ownerState,\n    ...other,\n    classes: PopoverClasses,\n    children: /*#__PURE__*/_jsx(ListSlot, {\n      actions: menuListActionsRef,\n      autoFocus: autoFocus && (activeItemIndex === -1 || disableAutoFocusItem),\n      autoFocusItem: autoFocusItem,\n      variant: variant,\n      ...listSlotProps,\n      children: children\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Menu.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * An HTML element, or a function that returns one.\n   * It's used to set the position of the menu.\n   */\n  anchorEl: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([HTMLElementType, PropTypes.func]),\n  /**\n   * If `true` (Default) will focus the `[role=\"menu\"]` if no focusable child is found. Disabled\n   * children are not focusable. If you set this prop to `false` focus will be placed\n   * on the parent modal container. This has severe accessibility implications\n   * and should only be considered if you manage focus otherwise.\n   * @default true\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * Menu contents, normally `MenuItem`s.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * When opening the menu will not focus the active item but the `[role=\"menu\"]`\n   * unless `autoFocus` is also set to `false`. Not using the default means not\n   * following WAI-ARIA authoring practices. Please be considerate about possible\n   * accessibility implications.\n   * @default false\n   */\n  disableAutoFocusItem: PropTypes.bool,\n  /**\n   * Props applied to the [`MenuList`](https://mui.com/material-ui/api/menu-list/) element.\n   * @deprecated use the `slotProps.list` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default {}\n   */\n  MenuListProps: PropTypes.object,\n  /**\n   * Callback fired when the component requests to be closed.\n   *\n   * @param {object} event The event source of the callback.\n   * @param {string} reason Can be: `\"escapeKeyDown\"`, `\"backdropClick\"`, `\"tabKeyDown\"`.\n   */\n  onClose: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * @ignore\n   */\n  PaperProps: PropTypes.object,\n  /**\n   * `classes` prop applied to the [`Popover`](https://mui.com/material-ui/api/popover/) element.\n   */\n  PopoverClasses: PropTypes.object,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    backdrop: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    list: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    paper: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    transition: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    backdrop: PropTypes.elementType,\n    list: PropTypes.elementType,\n    paper: PropTypes.elementType,\n    root: PropTypes.elementType,\n    transition: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The length of the transition in `ms`, or 'auto'\n   * @default 'auto'\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.oneOf(['auto']), PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })]),\n  /**\n   * Props applied to the transition element.\n   * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.\n   * @deprecated use the `slotProps.transition` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default {}\n   */\n  TransitionProps: PropTypes.object,\n  /**\n   * The variant to use. Use `menu` to prevent selected items from impacting the initial focus.\n   * @default 'selectedMenu'\n   */\n  variant: PropTypes.oneOf(['menu', 'selectedMenu'])\n} : void 0;\nexport default Menu;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getMenuItemUtilityClass(slot) {\n  return generateUtilityClass('MuiMenuItem', slot);\n}\nconst menuItemClasses = generateUtilityClasses('MuiMenuItem', ['root', 'focusVisible', 'dense', 'disabled', 'divider', 'gutters', 'selected']);\nexport default menuItemClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport ListContext from \"../List/ListContext.js\";\nimport ButtonBase from \"../ButtonBase/index.js\";\nimport useEnhancedEffect from \"../utils/useEnhancedEffect.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport { dividerClasses } from \"../Divider/index.js\";\nimport { listItemIconClasses } from \"../ListItemIcon/index.js\";\nimport { listItemTextClasses } from \"../ListItemText/index.js\";\nimport menuItemClasses, { getMenuItemUtilityClass } from \"./menuItemClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport const overridesResolver = (props, styles) => {\n  const {\n    ownerState\n  } = props;\n  return [styles.root, ownerState.dense && styles.dense, ownerState.divider && styles.divider, !ownerState.disableGutters && styles.gutters];\n};\nconst useUtilityClasses = ownerState => {\n  const {\n    disabled,\n    dense,\n    divider,\n    disableGutters,\n    selected,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', dense && 'dense', disabled && 'disabled', !disableGutters && 'gutters', divider && 'divider', selected && 'selected']\n  };\n  const composedClasses = composeClasses(slots, getMenuItemUtilityClass, classes);\n  return {\n    ...classes,\n    ...composedClasses\n  };\n};\nconst MenuItemRoot = styled(ButtonBase, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiMenuItem',\n  slot: 'Root',\n  overridesResolver\n})(memoTheme(({\n  theme\n}) => ({\n  ...theme.typography.body1,\n  display: 'flex',\n  justifyContent: 'flex-start',\n  alignItems: 'center',\n  position: 'relative',\n  textDecoration: 'none',\n  minHeight: 48,\n  paddingTop: 6,\n  paddingBottom: 6,\n  boxSizing: 'border-box',\n  whiteSpace: 'nowrap',\n  '&:hover': {\n    textDecoration: 'none',\n    backgroundColor: (theme.vars || theme).palette.action.hover,\n    // Reset on touch devices, it doesn't add specificity\n    '@media (hover: none)': {\n      backgroundColor: 'transparent'\n    }\n  },\n  [`&.${menuItemClasses.selected}`]: {\n    backgroundColor: theme.alpha((theme.vars || theme).palette.primary.main, (theme.vars || theme).palette.action.selectedOpacity),\n    [`&.${menuItemClasses.focusVisible}`]: {\n      backgroundColor: theme.alpha((theme.vars || theme).palette.primary.main, `${(theme.vars || theme).palette.action.selectedOpacity} + ${(theme.vars || theme).palette.action.focusOpacity}`)\n    }\n  },\n  [`&.${menuItemClasses.selected}:hover`]: {\n    backgroundColor: theme.alpha((theme.vars || theme).palette.primary.main, `${(theme.vars || theme).palette.action.selectedOpacity} + ${(theme.vars || theme).palette.action.hoverOpacity}`),\n    // Reset on touch devices, it doesn't add specificity\n    '@media (hover: none)': {\n      backgroundColor: theme.alpha((theme.vars || theme).palette.primary.main, (theme.vars || theme).palette.action.selectedOpacity)\n    }\n  },\n  [`&.${menuItemClasses.focusVisible}`]: {\n    backgroundColor: (theme.vars || theme).palette.action.focus\n  },\n  [`&.${menuItemClasses.disabled}`]: {\n    opacity: (theme.vars || theme).palette.action.disabledOpacity\n  },\n  [`& + .${dividerClasses.root}`]: {\n    marginTop: theme.spacing(1),\n    marginBottom: theme.spacing(1)\n  },\n  [`& + .${dividerClasses.inset}`]: {\n    marginLeft: 52\n  },\n  [`& .${listItemTextClasses.root}`]: {\n    marginTop: 0,\n    marginBottom: 0\n  },\n  [`& .${listItemTextClasses.inset}`]: {\n    paddingLeft: 36\n  },\n  [`& .${listItemIconClasses.root}`]: {\n    minWidth: 36\n  },\n  variants: [{\n    props: ({\n      ownerState\n    }) => !ownerState.disableGutters,\n    style: {\n      paddingLeft: 16,\n      paddingRight: 16\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.divider,\n    style: {\n      borderBottom: `1px solid ${(theme.vars || theme).palette.divider}`,\n      backgroundClip: 'padding-box'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => !ownerState.dense,\n    style: {\n      [theme.breakpoints.up('sm')]: {\n        minHeight: 'auto'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.dense,\n    style: {\n      minHeight: 32,\n      // https://m2.material.io/components/menus#specs > Dense\n      paddingTop: 4,\n      paddingBottom: 4,\n      ...theme.typography.body2,\n      [`& .${listItemIconClasses.root} svg`]: {\n        fontSize: '1.25rem'\n      }\n    }\n  }]\n})));\nconst MenuItem = /*#__PURE__*/React.forwardRef(function MenuItem(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiMenuItem'\n  });\n  const {\n    autoFocus = false,\n    component = 'li',\n    dense = false,\n    divider = false,\n    disableGutters = false,\n    focusVisibleClassName,\n    role = 'menuitem',\n    tabIndex: tabIndexProp,\n    className,\n    ...other\n  } = props;\n  const context = React.useContext(ListContext);\n  const childContext = React.useMemo(() => ({\n    dense: dense || context.dense || false,\n    disableGutters\n  }), [context.dense, dense, disableGutters]);\n  const menuItemRef = React.useRef(null);\n  useEnhancedEffect(() => {\n    if (autoFocus) {\n      if (menuItemRef.current) {\n        menuItemRef.current.focus();\n      } else if (process.env.NODE_ENV !== 'production') {\n        console.error('MUI: Unable to set focus to a MenuItem whose component has not been rendered.');\n      }\n    }\n  }, [autoFocus]);\n  const ownerState = {\n    ...props,\n    dense: childContext.dense,\n    divider,\n    disableGutters\n  };\n  const classes = useUtilityClasses(props);\n  const handleRef = useForkRef(menuItemRef, ref);\n  let tabIndex;\n  if (!props.disabled) {\n    tabIndex = tabIndexProp !== undefined ? tabIndexProp : -1;\n  }\n  return /*#__PURE__*/_jsx(ListContext.Provider, {\n    value: childContext,\n    children: /*#__PURE__*/_jsx(MenuItemRoot, {\n      ref: handleRef,\n      role: role,\n      tabIndex: tabIndex,\n      component: component,\n      focusVisibleClassName: clsx(classes.focusVisible, focusVisibleClassName),\n      className: clsx(classes.root, className),\n      ...other,\n      ownerState: ownerState,\n      classes: classes\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? MenuItem.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * If `true`, the list item is focused during the first mount.\n   * Focus will also be triggered if the value changes from false to true.\n   * @default false\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * If `true`, compact vertical padding designed for keyboard and mouse input is used.\n   * The prop defaults to the value inherited from the parent Menu component.\n   * @default false\n   */\n  dense: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the left and right padding is removed.\n   * @default false\n   */\n  disableGutters: PropTypes.bool,\n  /**\n   * If `true`, a 1px light border is added to the bottom of the menu item.\n   * @default false\n   */\n  divider: PropTypes.bool,\n  /**\n   * This prop can help identify which element has keyboard focus.\n   * The class name will be applied when the element gains the focus through keyboard interaction.\n   * It's a polyfill for the [CSS :focus-visible selector](https://drafts.csswg.org/selectors-4/#the-focus-visible-pseudo).\n   * The rationale for using this feature [is explained here](https://github.com/WICG/focus-visible/blob/HEAD/explainer.md).\n   * A [polyfill can be used](https://github.com/WICG/focus-visible) to apply a `focus-visible` class to other components\n   * if needed.\n   */\n  focusVisibleClassName: PropTypes.string,\n  /**\n   * @ignore\n   */\n  role: PropTypes.string,\n  /**\n   * If `true`, the component is selected.\n   * @default false\n   */\n  selected: PropTypes.bool,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * @default 0\n   */\n  tabIndex: PropTypes.number\n} : void 0;\nexport default MenuItem;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getNativeSelectUtilityClasses(slot) {\n  return generateUtilityClass('MuiNativeSelect', slot);\n}\nconst nativeSelectClasses = generateUtilityClasses('MuiNativeSelect', ['root', 'select', 'multiple', 'filled', 'outlined', 'standard', 'disabled', 'icon', 'iconOpen', 'iconFilled', 'iconOutlined', 'iconStandard', 'nativeInput', 'error']);\nexport default nativeSelectClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport refType from '@mui/utils/refType';\nimport composeClasses from '@mui/utils/composeClasses';\nimport capitalize from \"../utils/capitalize.js\";\nimport nativeSelectClasses, { getNativeSelectUtilityClasses } from \"./nativeSelectClasses.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    variant,\n    disabled,\n    multiple,\n    open,\n    error\n  } = ownerState;\n  const slots = {\n    select: ['select', variant, disabled && 'disabled', multiple && 'multiple', error && 'error'],\n    icon: ['icon', `icon${capitalize(variant)}`, open && 'iconOpen', disabled && 'disabled']\n  };\n  return composeClasses(slots, getNativeSelectUtilityClasses, classes);\n};\nexport const StyledSelectSelect = styled('select', {\n  name: 'MuiNativeSelect'\n})(({\n  theme\n}) => ({\n  // Reset\n  MozAppearance: 'none',\n  // Reset\n  WebkitAppearance: 'none',\n  // When interacting quickly, the text can end up selected.\n  // Native select can't be selected either.\n  userSelect: 'none',\n  // Reset\n  borderRadius: 0,\n  cursor: 'pointer',\n  '&:focus': {\n    // Reset Chrome style\n    borderRadius: 0\n  },\n  [`&.${nativeSelectClasses.disabled}`]: {\n    cursor: 'default'\n  },\n  '&[multiple]': {\n    height: 'auto'\n  },\n  '&:not([multiple]) option, &:not([multiple]) optgroup': {\n    backgroundColor: (theme.vars || theme).palette.background.paper\n  },\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.variant !== 'filled' && ownerState.variant !== 'outlined',\n    style: {\n      // Bump specificity to allow extending custom inputs\n      '&&&': {\n        paddingRight: 24,\n        minWidth: 16 // So it doesn't collapse.\n      }\n    }\n  }, {\n    props: {\n      variant: 'filled'\n    },\n    style: {\n      '&&&': {\n        paddingRight: 32\n      }\n    }\n  }, {\n    props: {\n      variant: 'outlined'\n    },\n    style: {\n      borderRadius: (theme.vars || theme).shape.borderRadius,\n      '&:focus': {\n        borderRadius: (theme.vars || theme).shape.borderRadius // Reset the reset for Chrome style\n      },\n      '&&&': {\n        paddingRight: 32\n      }\n    }\n  }]\n}));\nconst NativeSelectSelect = styled(StyledSelectSelect, {\n  name: 'MuiNativeSelect',\n  slot: 'Select',\n  shouldForwardProp: rootShouldForwardProp,\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.select, styles[ownerState.variant], ownerState.error && styles.error, {\n      [`&.${nativeSelectClasses.multiple}`]: styles.multiple\n    }];\n  }\n})({});\nexport const StyledSelectIcon = styled('svg', {\n  name: 'MuiNativeSelect'\n})(({\n  theme\n}) => ({\n  // We use a position absolute over a flexbox in order to forward the pointer events\n  // to the input and to support wrapping tags..\n  position: 'absolute',\n  right: 0,\n  // Center vertically, height is 1em\n  top: 'calc(50% - .5em)',\n  // Don't block pointer events on the select under the icon.\n  pointerEvents: 'none',\n  color: (theme.vars || theme).palette.action.active,\n  [`&.${nativeSelectClasses.disabled}`]: {\n    color: (theme.vars || theme).palette.action.disabled\n  },\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.open,\n    style: {\n      transform: 'rotate(180deg)'\n    }\n  }, {\n    props: {\n      variant: 'filled'\n    },\n    style: {\n      right: 7\n    }\n  }, {\n    props: {\n      variant: 'outlined'\n    },\n    style: {\n      right: 7\n    }\n  }]\n}));\nconst NativeSelectIcon = styled(StyledSelectIcon, {\n  name: 'MuiNativeSelect',\n  slot: 'Icon',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.icon, ownerState.variant && styles[`icon${capitalize(ownerState.variant)}`], ownerState.open && styles.iconOpen];\n  }\n})({});\n\n/**\n * @ignore - internal component.\n */\nconst NativeSelectInput = /*#__PURE__*/React.forwardRef(function NativeSelectInput(props, ref) {\n  const {\n    className,\n    disabled,\n    error,\n    IconComponent,\n    inputRef,\n    variant = 'standard',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    disabled,\n    variant,\n    error\n  };\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [/*#__PURE__*/_jsx(NativeSelectSelect, {\n      ownerState: ownerState,\n      className: clsx(classes.select, className),\n      disabled: disabled,\n      ref: inputRef || ref,\n      ...other\n    }), props.multiple ? null : /*#__PURE__*/_jsx(NativeSelectIcon, {\n      as: IconComponent,\n      ownerState: ownerState,\n      className: classes.icon\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? NativeSelectInput.propTypes = {\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<option>` elements.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * The CSS class name of the select element.\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, the select is disabled.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the `select input` will indicate an error.\n   */\n  error: PropTypes.bool,\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: PropTypes.elementType.isRequired,\n  /**\n   * Use that prop to pass a ref to the native select element.\n   * @deprecated\n   */\n  inputRef: refType,\n  /**\n   * @ignore\n   */\n  multiple: PropTypes.bool,\n  /**\n   * Name attribute of the `select` or hidden `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * Callback fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n  /**\n   * The input value.\n   */\n  value: PropTypes.any,\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])\n} : void 0;\nexport default NativeSelectInput;","'use client';\n\nvar _span;\nimport PropTypes from 'prop-types';\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst NotchedOutlineRoot = styled('fieldset', {\n  name: 'MuiNotchedOutlined',\n  shouldForwardProp: rootShouldForwardProp\n})({\n  textAlign: 'left',\n  position: 'absolute',\n  bottom: 0,\n  right: 0,\n  top: -5,\n  left: 0,\n  margin: 0,\n  padding: '0 8px',\n  pointerEvents: 'none',\n  borderRadius: 'inherit',\n  borderStyle: 'solid',\n  borderWidth: 1,\n  overflow: 'hidden',\n  minWidth: '0%'\n});\nconst NotchedOutlineLegend = styled('legend', {\n  name: 'MuiNotchedOutlined',\n  shouldForwardProp: rootShouldForwardProp\n})(memoTheme(({\n  theme\n}) => ({\n  float: 'unset',\n  // Fix conflict with bootstrap\n  width: 'auto',\n  // Fix conflict with bootstrap\n  overflow: 'hidden',\n  // Fix Horizontal scroll when label too long\n  variants: [{\n    props: ({\n      ownerState\n    }) => !ownerState.withLabel,\n    style: {\n      padding: 0,\n      lineHeight: '11px',\n      // sync with `height` in `legend` styles\n      transition: theme.transitions.create('width', {\n        duration: 150,\n        easing: theme.transitions.easing.easeOut\n      })\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.withLabel,\n    style: {\n      display: 'block',\n      // Fix conflict with normalize.css and sanitize.css\n      padding: 0,\n      height: 11,\n      // sync with `lineHeight` in `legend` styles\n      fontSize: '0.75em',\n      visibility: 'hidden',\n      maxWidth: 0.01,\n      transition: theme.transitions.create('max-width', {\n        duration: 50,\n        easing: theme.transitions.easing.easeOut\n      }),\n      whiteSpace: 'nowrap',\n      '& > span': {\n        paddingLeft: 5,\n        paddingRight: 5,\n        display: 'inline-block',\n        opacity: 0,\n        visibility: 'visible'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.withLabel && ownerState.notched,\n    style: {\n      maxWidth: '100%',\n      transition: theme.transitions.create('max-width', {\n        duration: 100,\n        easing: theme.transitions.easing.easeOut,\n        delay: 50\n      })\n    }\n  }]\n})));\n\n/**\n * @ignore - internal component.\n */\nexport default function NotchedOutline(props) {\n  const {\n    children,\n    classes,\n    className,\n    label,\n    notched,\n    ...other\n  } = props;\n  const withLabel = label != null && label !== '';\n  const ownerState = {\n    ...props,\n    notched,\n    withLabel\n  };\n  return /*#__PURE__*/_jsx(NotchedOutlineRoot, {\n    \"aria-hidden\": true,\n    className: className,\n    ownerState: ownerState,\n    ...other,\n    children: /*#__PURE__*/_jsx(NotchedOutlineLegend, {\n      ownerState: ownerState,\n      children: withLabel ? /*#__PURE__*/_jsx(\"span\", {\n        children: label\n      }) : // notranslate needed while Google Translate will not fix zero-width space issue\n      _span || (_span = /*#__PURE__*/_jsx(\"span\", {\n        className: \"notranslate\",\n        \"aria-hidden\": true,\n        children: \"\\u200B\"\n      }))\n    })\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? NotchedOutline.propTypes /* remove-proptypes */ = {\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The label.\n   */\n  label: PropTypes.node,\n  /**\n   * If `true`, the outline is notched to accommodate the label.\n   */\n  notched: PropTypes.bool.isRequired,\n  /**\n   * @ignore\n   */\n  style: PropTypes.object\n} : void 0;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport refType from '@mui/utils/refType';\nimport composeClasses from '@mui/utils/composeClasses';\nimport NotchedOutline from \"./NotchedOutline.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport formControlState from \"../FormControl/formControlState.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport outlinedInputClasses, { getOutlinedInputUtilityClass } from \"./outlinedInputClasses.js\";\nimport InputBase, { rootOverridesResolver as inputBaseRootOverridesResolver, inputOverridesResolver as inputBaseInputOverridesResolver, InputBaseRoot, InputBaseInput } from \"../InputBase/InputBase.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsxs as _jsxs, jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root'],\n    notchedOutline: ['notchedOutline'],\n    input: ['input']\n  };\n  const composedClasses = composeClasses(slots, getOutlinedInputUtilityClass, classes);\n  return {\n    ...classes,\n    // forward classes to the InputBase\n    ...composedClasses\n  };\n};\nconst OutlinedInputRoot = styled(InputBaseRoot, {\n  shouldForwardProp: prop => rootShouldForwardProp(prop) || prop === 'classes',\n  name: 'MuiOutlinedInput',\n  slot: 'Root',\n  overridesResolver: inputBaseRootOverridesResolver\n})(memoTheme(({\n  theme\n}) => {\n  const borderColor = theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)';\n  return {\n    position: 'relative',\n    borderRadius: (theme.vars || theme).shape.borderRadius,\n    [`&:hover .${outlinedInputClasses.notchedOutline}`]: {\n      borderColor: (theme.vars || theme).palette.text.primary\n    },\n    // Reset on touch devices, it doesn't add specificity\n    '@media (hover: none)': {\n      [`&:hover .${outlinedInputClasses.notchedOutline}`]: {\n        borderColor: theme.vars ? theme.alpha(theme.vars.palette.common.onBackground, 0.23) : borderColor\n      }\n    },\n    [`&.${outlinedInputClasses.focused} .${outlinedInputClasses.notchedOutline}`]: {\n      borderWidth: 2\n    },\n    variants: [...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n      props: {\n        color\n      },\n      style: {\n        [`&.${outlinedInputClasses.focused} .${outlinedInputClasses.notchedOutline}`]: {\n          borderColor: (theme.vars || theme).palette[color].main\n        }\n      }\n    })), {\n      props: {},\n      // to override the above style\n      style: {\n        [`&.${outlinedInputClasses.error} .${outlinedInputClasses.notchedOutline}`]: {\n          borderColor: (theme.vars || theme).palette.error.main\n        },\n        [`&.${outlinedInputClasses.disabled} .${outlinedInputClasses.notchedOutline}`]: {\n          borderColor: (theme.vars || theme).palette.action.disabled\n        }\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.startAdornment,\n      style: {\n        paddingLeft: 14\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.endAdornment,\n      style: {\n        paddingRight: 14\n      }\n    }, {\n      props: ({\n        ownerState\n      }) => ownerState.multiline,\n      style: {\n        padding: '16.5px 14px'\n      }\n    }, {\n      props: ({\n        ownerState,\n        size\n      }) => ownerState.multiline && size === 'small',\n      style: {\n        padding: '8.5px 14px'\n      }\n    }]\n  };\n}));\nconst NotchedOutlineRoot = styled(NotchedOutline, {\n  name: 'MuiOutlinedInput',\n  slot: 'NotchedOutline'\n})(memoTheme(({\n  theme\n}) => {\n  const borderColor = theme.palette.mode === 'light' ? 'rgba(0, 0, 0, 0.23)' : 'rgba(255, 255, 255, 0.23)';\n  return {\n    borderColor: theme.vars ? theme.alpha(theme.vars.palette.common.onBackground, 0.23) : borderColor\n  };\n}));\nconst OutlinedInputInput = styled(InputBaseInput, {\n  name: 'MuiOutlinedInput',\n  slot: 'Input',\n  overridesResolver: inputBaseInputOverridesResolver\n})(memoTheme(({\n  theme\n}) => ({\n  padding: '16.5px 14px',\n  ...(!theme.vars && {\n    '&:-webkit-autofill': {\n      WebkitBoxShadow: theme.palette.mode === 'light' ? null : '0 0 0 100px #266798 inset',\n      WebkitTextFillColor: theme.palette.mode === 'light' ? null : '#fff',\n      caretColor: theme.palette.mode === 'light' ? null : '#fff',\n      borderRadius: 'inherit'\n    }\n  }),\n  ...(theme.vars && {\n    '&:-webkit-autofill': {\n      borderRadius: 'inherit'\n    },\n    [theme.getColorSchemeSelector('dark')]: {\n      '&:-webkit-autofill': {\n        WebkitBoxShadow: '0 0 0 100px #266798 inset',\n        WebkitTextFillColor: '#fff',\n        caretColor: '#fff'\n      }\n    }\n  }),\n  variants: [{\n    props: {\n      size: 'small'\n    },\n    style: {\n      padding: '8.5px 14px'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.multiline,\n    style: {\n      padding: 0\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.startAdornment,\n    style: {\n      paddingLeft: 0\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.endAdornment,\n    style: {\n      paddingRight: 0\n    }\n  }]\n})));\nconst OutlinedInput = /*#__PURE__*/React.forwardRef(function OutlinedInput(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiOutlinedInput'\n  });\n  const {\n    components = {},\n    fullWidth = false,\n    inputComponent = 'input',\n    label,\n    multiline = false,\n    notched,\n    slots = {},\n    slotProps = {},\n    type = 'text',\n    ...other\n  } = props;\n  const classes = useUtilityClasses(props);\n  const muiFormControl = useFormControl();\n  const fcs = formControlState({\n    props,\n    muiFormControl,\n    states: ['color', 'disabled', 'error', 'focused', 'hiddenLabel', 'size', 'required']\n  });\n  const ownerState = {\n    ...props,\n    color: fcs.color || 'primary',\n    disabled: fcs.disabled,\n    error: fcs.error,\n    focused: fcs.focused,\n    formControl: muiFormControl,\n    fullWidth,\n    hiddenLabel: fcs.hiddenLabel,\n    multiline,\n    size: fcs.size,\n    type\n  };\n  const RootSlot = slots.root ?? components.Root ?? OutlinedInputRoot;\n  const InputSlot = slots.input ?? components.Input ?? OutlinedInputInput;\n  const [NotchedSlot, notchedProps] = useSlot('notchedOutline', {\n    elementType: NotchedOutlineRoot,\n    className: classes.notchedOutline,\n    shouldForwardComponentProp: true,\n    ownerState,\n    externalForwardedProps: {\n      slots,\n      slotProps\n    },\n    additionalProps: {\n      label: label != null && label !== '' && fcs.required ? /*#__PURE__*/_jsxs(React.Fragment, {\n        children: [label, \"\\u2009\", '*']\n      }) : label\n    }\n  });\n  return /*#__PURE__*/_jsx(InputBase, {\n    slots: {\n      root: RootSlot,\n      input: InputSlot\n    },\n    slotProps: slotProps,\n    renderSuffix: state => /*#__PURE__*/_jsx(NotchedSlot, {\n      ...notchedProps,\n      notched: typeof notched !== 'undefined' ? notched : Boolean(state.startAdornment || state.filled || state.focused)\n    }),\n    fullWidth: fullWidth,\n    inputComponent: inputComponent,\n    multiline: multiline,\n    ref: ref,\n    type: type,\n    ...other,\n    classes: {\n      ...classes,\n      notchedOutline: null\n    }\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? OutlinedInput.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n  /**\n   * If `true`, the `input` element is focused during the first mount.\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * The prop defaults to the value (`'primary'`) inherited from the parent FormControl component.\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary']), PropTypes.string]),\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Input: PropTypes.elementType,\n    Root: PropTypes.elementType\n  }),\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n  /**\n   * If `true`, the component is disabled.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * End `InputAdornment` for this component.\n   */\n  endAdornment: PropTypes.node,\n  /**\n   * If `true`, the `input` will indicate an error.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  error: PropTypes.bool,\n  /**\n   * If `true`, the `input` will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * The id of the `input` element.\n   */\n  id: PropTypes.string,\n  /**\n   * The component used for the `input` element.\n   * Either a string to use a HTML element or a component.\n   * @default 'input'\n   */\n  inputComponent: PropTypes.elementType,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * @default {}\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n  /**\n   * The label of the `input`. It is only used for layout. The actual labelling\n   * is handled by `InputLabel`.\n   */\n  label: PropTypes.node,\n  /**\n   * If `dense`, will adjust vertical spacing. This is normally obtained via context from\n   * FormControl.\n   * The prop defaults to the value (`'none'`) inherited from the parent FormControl component.\n   */\n  margin: PropTypes.oneOf(['dense', 'none']),\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * Minimum number of rows to display when multiline option is set to true.\n   */\n  minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * If `true`, a [TextareaAutosize](https://mui.com/material-ui/react-textarea-autosize/) element is rendered.\n   * @default false\n   */\n  multiline: PropTypes.bool,\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * If `true`, the outline is notched to accommodate the label.\n   */\n  notched: PropTypes.bool,\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {React.ChangeEvent<HTMLTextAreaElement | HTMLInputElement>} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n  /**\n   * The short hint displayed in the `input` before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n  /**\n   * It prevents the user from changing the value of the field\n   * (not from interacting with the field).\n   */\n  readOnly: PropTypes.bool,\n  /**\n   * If `true`, the `input` element is required.\n   * The prop defaults to the value (`false`) inherited from the parent FormControl component.\n   */\n  required: PropTypes.bool,\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.object,\n    notchedOutline: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.object\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    notchedOutline: PropTypes.elementType,\n    root: PropTypes.elementType\n  }),\n  /**\n   * Start `InputAdornment` for this component.\n   */\n  startAdornment: PropTypes.node,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#input_types).\n   * @default 'text'\n   */\n  type: PropTypes.string,\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any\n} : void 0;\nOutlinedInput.muiName = 'Input';\nexport default OutlinedInput;","const visuallyHidden = {\n  border: 0,\n  clip: 'rect(0 0 0 0)',\n  height: '1px',\n  margin: '-1px',\n  overflow: 'hidden',\n  padding: 0,\n  position: 'absolute',\n  whiteSpace: 'nowrap',\n  width: '1px'\n};\nexport default visuallyHidden;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSelectUtilityClasses(slot) {\n  return generateUtilityClass('MuiSelect', slot);\n}\nconst selectClasses = generateUtilityClasses('MuiSelect', ['root', 'select', 'multiple', 'filled', 'outlined', 'standard', 'disabled', 'focused', 'icon', 'iconOpen', 'iconFilled', 'iconOutlined', 'iconStandard', 'nativeInput', 'error']);\nexport default selectClasses;","'use client';\n\nimport _formatErrorMessage from \"@mui/utils/formatMuiErrorMessage\";\nvar _span;\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport useId from '@mui/utils/useId';\nimport refType from '@mui/utils/refType';\nimport ownerDocument from \"../utils/ownerDocument.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport Menu from \"../Menu/Menu.js\";\nimport { StyledSelectSelect, StyledSelectIcon } from \"../NativeSelect/NativeSelectInput.js\";\nimport { isFilled } from \"../InputBase/utils.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport slotShouldForwardProp from \"../styles/slotShouldForwardProp.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport useControlled from \"../utils/useControlled.js\";\nimport selectClasses, { getSelectUtilityClasses } from \"./selectClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst SelectSelect = styled(StyledSelectSelect, {\n  name: 'MuiSelect',\n  slot: 'Select',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [\n    // Win specificity over the input base\n    {\n      [`&.${selectClasses.select}`]: styles.select\n    }, {\n      [`&.${selectClasses.select}`]: styles[ownerState.variant]\n    }, {\n      [`&.${selectClasses.error}`]: styles.error\n    }, {\n      [`&.${selectClasses.multiple}`]: styles.multiple\n    }];\n  }\n})({\n  // Win specificity over the input base\n  [`&.${selectClasses.select}`]: {\n    height: 'auto',\n    // Resets for multiple select with chips\n    minHeight: '1.4375em',\n    // Required for select\\text-field height consistency\n    textOverflow: 'ellipsis',\n    whiteSpace: 'nowrap',\n    overflow: 'hidden'\n  }\n});\nconst SelectIcon = styled(StyledSelectIcon, {\n  name: 'MuiSelect',\n  slot: 'Icon',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.icon, ownerState.variant && styles[`icon${capitalize(ownerState.variant)}`], ownerState.open && styles.iconOpen];\n  }\n})({});\nconst SelectNativeInput = styled('input', {\n  shouldForwardProp: prop => slotShouldForwardProp(prop) && prop !== 'classes',\n  name: 'MuiSelect',\n  slot: 'NativeInput'\n})({\n  bottom: 0,\n  left: 0,\n  position: 'absolute',\n  opacity: 0,\n  pointerEvents: 'none',\n  width: '100%',\n  boxSizing: 'border-box'\n});\nfunction areEqualValues(a, b) {\n  if (typeof b === 'object' && b !== null) {\n    return a === b;\n  }\n\n  // The value could be a number, the DOM will stringify it anyway.\n  return String(a) === String(b);\n}\nfunction isEmpty(display) {\n  return display == null || typeof display === 'string' && !display.trim();\n}\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    variant,\n    disabled,\n    multiple,\n    open,\n    error\n  } = ownerState;\n  const slots = {\n    select: ['select', variant, disabled && 'disabled', multiple && 'multiple', error && 'error'],\n    icon: ['icon', `icon${capitalize(variant)}`, open && 'iconOpen', disabled && 'disabled'],\n    nativeInput: ['nativeInput']\n  };\n  return composeClasses(slots, getSelectUtilityClasses, classes);\n};\n\n/**\n * @ignore - internal component.\n */\nconst SelectInput = /*#__PURE__*/React.forwardRef(function SelectInput(props, ref) {\n  const {\n    'aria-describedby': ariaDescribedby,\n    'aria-label': ariaLabel,\n    autoFocus,\n    autoWidth,\n    children,\n    className,\n    defaultOpen,\n    defaultValue,\n    disabled,\n    displayEmpty,\n    error = false,\n    IconComponent,\n    inputRef: inputRefProp,\n    labelId,\n    MenuProps = {},\n    multiple,\n    name,\n    onBlur,\n    onChange,\n    onClose,\n    onFocus,\n    onOpen,\n    open: openProp,\n    readOnly,\n    renderValue,\n    required,\n    SelectDisplayProps = {},\n    tabIndex: tabIndexProp,\n    // catching `type` from Input which makes no sense for SelectInput\n    type,\n    value: valueProp,\n    variant = 'standard',\n    ...other\n  } = props;\n  const [value, setValueState] = useControlled({\n    controlled: valueProp,\n    default: defaultValue,\n    name: 'Select'\n  });\n  const [openState, setOpenState] = useControlled({\n    controlled: openProp,\n    default: defaultOpen,\n    name: 'Select'\n  });\n  const inputRef = React.useRef(null);\n  const displayRef = React.useRef(null);\n  const [displayNode, setDisplayNode] = React.useState(null);\n  const {\n    current: isOpenControlled\n  } = React.useRef(openProp != null);\n  const [menuMinWidthState, setMenuMinWidthState] = React.useState();\n  const handleRef = useForkRef(ref, inputRefProp);\n  const handleDisplayRef = React.useCallback(node => {\n    displayRef.current = node;\n    if (node) {\n      setDisplayNode(node);\n    }\n  }, []);\n  const anchorElement = displayNode?.parentNode;\n  React.useImperativeHandle(handleRef, () => ({\n    focus: () => {\n      displayRef.current.focus();\n    },\n    node: inputRef.current,\n    value\n  }), [value]);\n\n  // Resize menu on `defaultOpen` automatic toggle.\n  React.useEffect(() => {\n    if (defaultOpen && openState && displayNode && !isOpenControlled) {\n      setMenuMinWidthState(autoWidth ? null : anchorElement.clientWidth);\n      displayRef.current.focus();\n    }\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [displayNode, autoWidth]);\n  // `isOpenControlled` is ignored because the component should never switch between controlled and uncontrolled modes.\n  // `defaultOpen` and `openState` are ignored to avoid unnecessary callbacks.\n  React.useEffect(() => {\n    if (autoFocus) {\n      displayRef.current.focus();\n    }\n  }, [autoFocus]);\n  React.useEffect(() => {\n    if (!labelId) {\n      return undefined;\n    }\n    const label = ownerDocument(displayRef.current).getElementById(labelId);\n    if (label) {\n      const handler = () => {\n        if (getSelection().isCollapsed) {\n          displayRef.current.focus();\n        }\n      };\n      label.addEventListener('click', handler);\n      return () => {\n        label.removeEventListener('click', handler);\n      };\n    }\n    return undefined;\n  }, [labelId]);\n  const update = (open, event) => {\n    if (open) {\n      if (onOpen) {\n        onOpen(event);\n      }\n    } else if (onClose) {\n      onClose(event);\n    }\n    if (!isOpenControlled) {\n      setMenuMinWidthState(autoWidth ? null : anchorElement.clientWidth);\n      setOpenState(open);\n    }\n  };\n  const handleMouseDown = event => {\n    // Ignore everything but left-click\n    if (event.button !== 0) {\n      return;\n    }\n    // Hijack the default focus behavior.\n    event.preventDefault();\n    displayRef.current.focus();\n    update(true, event);\n  };\n  const handleClose = event => {\n    update(false, event);\n  };\n  const childrenArray = React.Children.toArray(children);\n\n  // Support autofill.\n  const handleChange = event => {\n    const child = childrenArray.find(childItem => childItem.props.value === event.target.value);\n    if (child === undefined) {\n      return;\n    }\n    setValueState(child.props.value);\n    if (onChange) {\n      onChange(event, child);\n    }\n  };\n  const handleItemClick = child => event => {\n    let newValue;\n\n    // We use the tabindex attribute to signal the available options.\n    if (!event.currentTarget.hasAttribute('tabindex')) {\n      return;\n    }\n    if (multiple) {\n      newValue = Array.isArray(value) ? value.slice() : [];\n      const itemIndex = value.indexOf(child.props.value);\n      if (itemIndex === -1) {\n        newValue.push(child.props.value);\n      } else {\n        newValue.splice(itemIndex, 1);\n      }\n    } else {\n      newValue = child.props.value;\n    }\n    if (child.props.onClick) {\n      child.props.onClick(event);\n    }\n    if (value !== newValue) {\n      setValueState(newValue);\n      if (onChange) {\n        // Redefine target to allow name and value to be read.\n        // This allows seamless integration with the most popular form libraries.\n        // https://github.com/mui/material-ui/issues/13485#issuecomment-676048492\n        // Clone the event to not override `target` of the original event.\n        const nativeEvent = event.nativeEvent || event;\n        const clonedEvent = new nativeEvent.constructor(nativeEvent.type, nativeEvent);\n        Object.defineProperty(clonedEvent, 'target', {\n          writable: true,\n          value: {\n            value: newValue,\n            name\n          }\n        });\n        onChange(clonedEvent, child);\n      }\n    }\n    if (!multiple) {\n      update(false, event);\n    }\n  };\n  const handleKeyDown = event => {\n    if (!readOnly) {\n      const validKeys = [' ', 'ArrowUp', 'ArrowDown',\n      // The native select doesn't respond to enter on macOS, but it's recommended by\n      // https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-select-only/\n      'Enter'];\n      if (validKeys.includes(event.key)) {\n        event.preventDefault();\n        update(true, event);\n      }\n    }\n  };\n  const open = displayNode !== null && openState;\n  const handleBlur = event => {\n    // if open event.stopImmediatePropagation\n    if (!open && onBlur) {\n      // Preact support, target is read only property on a native event.\n      Object.defineProperty(event, 'target', {\n        writable: true,\n        value: {\n          value,\n          name\n        }\n      });\n      onBlur(event);\n    }\n  };\n  delete other['aria-invalid'];\n  let display;\n  let displaySingle;\n  const displayMultiple = [];\n  let computeDisplay = false;\n  let foundMatch = false;\n\n  // No need to display any value if the field is empty.\n  if (isFilled({\n    value\n  }) || displayEmpty) {\n    if (renderValue) {\n      display = renderValue(value);\n    } else {\n      computeDisplay = true;\n    }\n  }\n  const items = childrenArray.map(child => {\n    if (! /*#__PURE__*/React.isValidElement(child)) {\n      return null;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"MUI: The Select component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n    let selected;\n    if (multiple) {\n      if (!Array.isArray(value)) {\n        throw new Error(process.env.NODE_ENV !== \"production\" ? 'MUI: The `value` prop must be an array ' + 'when using the `Select` component with `multiple`.' : _formatErrorMessage(2));\n      }\n      selected = value.some(v => areEqualValues(v, child.props.value));\n      if (selected && computeDisplay) {\n        displayMultiple.push(child.props.children);\n      }\n    } else {\n      selected = areEqualValues(value, child.props.value);\n      if (selected && computeDisplay) {\n        displaySingle = child.props.children;\n      }\n    }\n    if (selected) {\n      foundMatch = true;\n    }\n    return /*#__PURE__*/React.cloneElement(child, {\n      'aria-selected': selected ? 'true' : 'false',\n      onClick: handleItemClick(child),\n      onKeyUp: event => {\n        if (event.key === ' ') {\n          // otherwise our MenuItems dispatches a click event\n          // it's not behavior of the native <option> and causes\n          // the select to close immediately since we open on space keydown\n          event.preventDefault();\n        }\n        if (child.props.onKeyUp) {\n          child.props.onKeyUp(event);\n        }\n      },\n      role: 'option',\n      selected,\n      value: undefined,\n      // The value is most likely not a valid HTML attribute.\n      'data-value': child.props.value // Instead, we provide it as a data attribute.\n    });\n  });\n  if (process.env.NODE_ENV !== 'production') {\n    // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useEffect(() => {\n      if (!foundMatch && !multiple && value !== '') {\n        const values = childrenArray.map(child => child.props.value);\n        console.warn([`MUI: You have provided an out-of-range value \\`${value}\\` for the select ${name ? `(name=\"${name}\") ` : ''}component.`, \"Consider providing a value that matches one of the available options or ''.\", `The available values are ${values.filter(x => x != null).map(x => `\\`${x}\\``).join(', ') || '\"\"'}.`].join('\\n'));\n      }\n    }, [foundMatch, childrenArray, multiple, name, value]);\n  }\n  if (computeDisplay) {\n    if (multiple) {\n      if (displayMultiple.length === 0) {\n        display = null;\n      } else {\n        display = displayMultiple.reduce((output, child, index) => {\n          output.push(child);\n          if (index < displayMultiple.length - 1) {\n            output.push(', ');\n          }\n          return output;\n        }, []);\n      }\n    } else {\n      display = displaySingle;\n    }\n  }\n\n  // Avoid performing a layout computation in the render method.\n  let menuMinWidth = menuMinWidthState;\n  if (!autoWidth && isOpenControlled && displayNode) {\n    menuMinWidth = anchorElement.clientWidth;\n  }\n  let tabIndex;\n  if (typeof tabIndexProp !== 'undefined') {\n    tabIndex = tabIndexProp;\n  } else {\n    tabIndex = disabled ? null : 0;\n  }\n  const buttonId = SelectDisplayProps.id || (name ? `mui-component-select-${name}` : undefined);\n  const ownerState = {\n    ...props,\n    variant,\n    value,\n    open,\n    error\n  };\n  const classes = useUtilityClasses(ownerState);\n  const paperProps = {\n    ...MenuProps.PaperProps,\n    ...(typeof MenuProps.slotProps?.paper === 'function' ? MenuProps.slotProps.paper(ownerState) : MenuProps.slotProps?.paper)\n  };\n  const listProps = {\n    ...MenuProps.MenuListProps,\n    ...(typeof MenuProps.slotProps?.list === 'function' ? MenuProps.slotProps.list(ownerState) : MenuProps.slotProps?.list)\n  };\n  const listboxId = useId();\n  return /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [/*#__PURE__*/_jsx(SelectSelect, {\n      as: \"div\",\n      ref: handleDisplayRef,\n      tabIndex: tabIndex,\n      role: \"combobox\",\n      \"aria-controls\": open ? listboxId : undefined,\n      \"aria-disabled\": disabled ? 'true' : undefined,\n      \"aria-expanded\": open ? 'true' : 'false',\n      \"aria-haspopup\": \"listbox\",\n      \"aria-label\": ariaLabel,\n      \"aria-labelledby\": [labelId, buttonId].filter(Boolean).join(' ') || undefined,\n      \"aria-describedby\": ariaDescribedby,\n      \"aria-required\": required ? 'true' : undefined,\n      \"aria-invalid\": error ? 'true' : undefined,\n      onKeyDown: handleKeyDown,\n      onMouseDown: disabled || readOnly ? null : handleMouseDown,\n      onBlur: handleBlur,\n      onFocus: onFocus,\n      ...SelectDisplayProps,\n      ownerState: ownerState,\n      className: clsx(SelectDisplayProps.className, classes.select, className)\n      // The id is required for proper a11y\n      ,\n      id: buttonId,\n      children: isEmpty(display) ? // notranslate needed while Google Translate will not fix zero-width space issue\n      _span || (_span = /*#__PURE__*/_jsx(\"span\", {\n        className: \"notranslate\",\n        \"aria-hidden\": true,\n        children: \"\\u200B\"\n      })) : display\n    }), /*#__PURE__*/_jsx(SelectNativeInput, {\n      \"aria-invalid\": error,\n      value: Array.isArray(value) ? value.join(',') : value,\n      name: name,\n      ref: inputRef,\n      \"aria-hidden\": true,\n      onChange: handleChange,\n      tabIndex: -1,\n      disabled: disabled,\n      className: classes.nativeInput,\n      autoFocus: autoFocus,\n      required: required,\n      ...other,\n      ownerState: ownerState\n    }), /*#__PURE__*/_jsx(SelectIcon, {\n      as: IconComponent,\n      className: classes.icon,\n      ownerState: ownerState\n    }), /*#__PURE__*/_jsx(Menu, {\n      id: `menu-${name || ''}`,\n      anchorEl: anchorElement,\n      open: open,\n      onClose: handleClose,\n      anchorOrigin: {\n        vertical: 'bottom',\n        horizontal: 'center'\n      },\n      transformOrigin: {\n        vertical: 'top',\n        horizontal: 'center'\n      },\n      ...MenuProps,\n      slotProps: {\n        ...MenuProps.slotProps,\n        list: {\n          'aria-labelledby': labelId,\n          role: 'listbox',\n          'aria-multiselectable': multiple ? 'true' : undefined,\n          disableListWrap: true,\n          id: listboxId,\n          ...listProps\n        },\n        paper: {\n          ...paperProps,\n          style: {\n            minWidth: menuMinWidth,\n            ...(paperProps != null ? paperProps.style : null)\n          }\n        }\n      },\n      children: items\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? SelectInput.propTypes = {\n  /**\n   * @ignore\n   */\n  'aria-describedby': PropTypes.string,\n  /**\n   * @ignore\n   */\n  'aria-label': PropTypes.string,\n  /**\n   * @ignore\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * If `true`, the width of the popover will automatically be set according to the items inside the\n   * menu, otherwise it will be at least the width of the select input.\n   */\n  autoWidth: PropTypes.bool,\n  /**\n   * The option elements to populate the select with.\n   * Can be some `<MenuItem>` elements.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * The CSS class name of the select element.\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, the component is toggled on mount. Use when the component open state is not controlled.\n   * You can only use it when the `native` prop is `false` (default).\n   */\n  defaultOpen: PropTypes.bool,\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n  /**\n   * If `true`, the select is disabled.\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the selected item is displayed even if its value is empty.\n   */\n  displayEmpty: PropTypes.bool,\n  /**\n   * If `true`, the `select input` will indicate an error.\n   */\n  error: PropTypes.bool,\n  /**\n   * The icon that displays the arrow.\n   */\n  IconComponent: PropTypes.elementType.isRequired,\n  /**\n   * Imperative handle implementing `{ value: T, node: HTMLElement, focus(): void }`\n   * Equivalent to `ref`\n   */\n  inputRef: refType,\n  /**\n   * The ID of an element that acts as an additional label. The Select will\n   * be labelled by the additional label and the selected value.\n   */\n  labelId: PropTypes.string,\n  /**\n   * Props applied to the [`Menu`](/material-ui/api/menu/) element.\n   */\n  MenuProps: PropTypes.object,\n  /**\n   * If `true`, `value` must be an array and the menu will support multiple selections.\n   */\n  multiple: PropTypes.bool,\n  /**\n   * Name attribute of the `select` or hidden `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n  /**\n   * Callback fired when a menu item is selected.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (any).\n   * @param {object} [child] The react element that was selected.\n   */\n  onChange: PropTypes.func,\n  /**\n   * Callback fired when the component requests to be closed.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n  /**\n   * Callback fired when the component requests to be opened.\n   * Use in controlled mode (see open).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onOpen: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  readOnly: PropTypes.bool,\n  /**\n   * Render the selected value.\n   *\n   * @param {any} value The `value` provided to the component.\n   * @returns {ReactNode}\n   */\n  renderValue: PropTypes.func,\n  /**\n   * If `true`, the component is required.\n   */\n  required: PropTypes.bool,\n  /**\n   * Props applied to the clickable div element.\n   */\n  SelectDisplayProps: PropTypes.object,\n  /**\n   * @ignore\n   */\n  tabIndex: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * @ignore\n   */\n  type: PropTypes.any,\n  /**\n   * The input value.\n   */\n  value: PropTypes.any,\n  /**\n   * The variant to use.\n   */\n  variant: PropTypes.oneOf(['standard', 'outlined', 'filled'])\n} : void 0;\nexport default SelectInput;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport deepmerge from '@mui/utils/deepmerge';\nimport composeClasses from '@mui/utils/composeClasses';\nimport getReactElementRef from '@mui/utils/getReactElementRef';\nimport SelectInput from \"./SelectInput.js\";\nimport formControlState from \"../FormControl/formControlState.js\";\nimport useFormControl from \"../FormControl/useFormControl.js\";\nimport ArrowDropDownIcon from \"../internal/svg-icons/ArrowDropDown.js\";\nimport Input from \"../Input/index.js\";\nimport NativeSelectInput from \"../NativeSelect/NativeSelectInput.js\";\nimport FilledInput from \"../FilledInput/index.js\";\nimport OutlinedInput from \"../OutlinedInput/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport useForkRef from \"../utils/useForkRef.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport rootShouldForwardProp from \"../styles/rootShouldForwardProp.js\";\nimport { getSelectUtilityClasses } from \"./selectClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root']\n  };\n  const composedClasses = composeClasses(slots, getSelectUtilityClasses, classes);\n  return {\n    ...classes,\n    ...composedClasses\n  };\n};\nconst styledRootConfig = {\n  name: 'MuiSelect',\n  slot: 'Root',\n  shouldForwardProp: prop => rootShouldForwardProp(prop) && prop !== 'variant'\n};\nconst StyledInput = styled(Input, styledRootConfig)('');\nconst StyledOutlinedInput = styled(OutlinedInput, styledRootConfig)('');\nconst StyledFilledInput = styled(FilledInput, styledRootConfig)('');\nconst Select = /*#__PURE__*/React.forwardRef(function Select(inProps, ref) {\n  const props = useDefaultProps({\n    name: 'MuiSelect',\n    props: inProps\n  });\n  const {\n    autoWidth = false,\n    children,\n    classes: classesProp = {},\n    className,\n    defaultOpen = false,\n    displayEmpty = false,\n    IconComponent = ArrowDropDownIcon,\n    id,\n    input,\n    inputProps,\n    label,\n    labelId,\n    MenuProps,\n    multiple = false,\n    native = false,\n    onClose,\n    onOpen,\n    open,\n    renderValue,\n    SelectDisplayProps,\n    variant: variantProp = 'outlined',\n    ...other\n  } = props;\n  const inputComponent = native ? NativeSelectInput : SelectInput;\n  const muiFormControl = useFormControl();\n  const fcs = formControlState({\n    props,\n    muiFormControl,\n    states: ['variant', 'error']\n  });\n  const variant = fcs.variant || variantProp;\n  const ownerState = {\n    ...props,\n    variant,\n    classes: classesProp\n  };\n  const classes = useUtilityClasses(ownerState);\n  const {\n    root,\n    ...restOfClasses\n  } = classes;\n  const InputComponent = input || {\n    standard: /*#__PURE__*/_jsx(StyledInput, {\n      ownerState: ownerState\n    }),\n    outlined: /*#__PURE__*/_jsx(StyledOutlinedInput, {\n      label: label,\n      ownerState: ownerState\n    }),\n    filled: /*#__PURE__*/_jsx(StyledFilledInput, {\n      ownerState: ownerState\n    })\n  }[variant];\n  const inputComponentRef = useForkRef(ref, getReactElementRef(InputComponent));\n  return /*#__PURE__*/_jsx(React.Fragment, {\n    children: /*#__PURE__*/React.cloneElement(InputComponent, {\n      // Most of the logic is implemented in `SelectInput`.\n      // The `Select` component is a simple API wrapper to expose something better to play with.\n      inputComponent,\n      inputProps: {\n        children,\n        error: fcs.error,\n        IconComponent,\n        variant,\n        type: undefined,\n        // We render a select. We can ignore the type provided by the `Input`.\n        multiple,\n        ...(native ? {\n          id\n        } : {\n          autoWidth,\n          defaultOpen,\n          displayEmpty,\n          labelId,\n          MenuProps,\n          onClose,\n          onOpen,\n          open,\n          renderValue,\n          SelectDisplayProps: {\n            id,\n            ...SelectDisplayProps\n          }\n        }),\n        ...inputProps,\n        classes: inputProps ? deepmerge(restOfClasses, inputProps.classes) : restOfClasses,\n        ...(input ? input.props.inputProps : {})\n      },\n      ...((multiple && native || displayEmpty) && variant === 'outlined' ? {\n        notched: true\n      } : {}),\n      ref: inputComponentRef,\n      className: clsx(InputComponent.props.className, className, classes.root),\n      // If a custom input is provided via 'input' prop, do not allow 'variant' to be propagated to it's root element. See https://github.com/mui/material-ui/issues/33894.\n      ...(!input && {\n        variant\n      }),\n      ...other\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Select.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * If `true`, the width of the popover will automatically be set according to the items inside the\n   * menu, otherwise it will be at least the width of the select input.\n   * @default false\n   */\n  autoWidth: PropTypes.bool,\n  /**\n   * The option elements to populate the select with.\n   * Can be some `MenuItem` when `native` is false and `option` when `native` is true.\n   *\n   * ⚠️The `MenuItem` elements **must** be direct descendants when `native` is false.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   * @default {}\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, the component is initially open. Use when the component open state is not controlled (i.e. the `open` prop is not defined).\n   * You can only use it when the `native` prop is `false` (default).\n   * @default false\n   */\n  defaultOpen: PropTypes.bool,\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n  /**\n   * If `true`, a value is displayed even if no items are selected.\n   *\n   * In order to display a meaningful value, a function can be passed to the `renderValue` prop which\n   * returns the value to be displayed when no items are selected.\n   *\n   * ⚠️ When using this prop, make sure the label doesn't overlap with the empty displayed value.\n   * The label should either be hidden or forced to a shrunk state.\n   * @default false\n   */\n  displayEmpty: PropTypes.bool,\n  /**\n   * The icon that displays the arrow.\n   * @default ArrowDropDownIcon\n   */\n  IconComponent: PropTypes.elementType,\n  /**\n   * The `id` of the wrapper element or the `select` element when `native`.\n   */\n  id: PropTypes.string,\n  /**\n   * An `Input` element; does not have to be a material-ui specific `Input`.\n   */\n  input: PropTypes.element,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * When `native` is `true`, the attributes are applied on the `select` element.\n   */\n  inputProps: PropTypes.object,\n  /**\n   * See [OutlinedInput#label](https://mui.com/material-ui/api/outlined-input/#props)\n   */\n  label: PropTypes.node,\n  /**\n   * The ID of an element that acts as an additional label. The Select will\n   * be labelled by the additional label and the selected value.\n   */\n  labelId: PropTypes.string,\n  /**\n   * Props applied to the [`Menu`](https://mui.com/material-ui/api/menu/) element.\n   */\n  MenuProps: PropTypes.object,\n  /**\n   * If `true`, `value` must be an array and the menu will support multiple selections.\n   * @default false\n   */\n  multiple: PropTypes.bool,\n  /**\n   * If `true`, the component uses a native `select` element.\n   * @default false\n   */\n  native: PropTypes.bool,\n  /**\n   * Callback fired when a menu item is selected.\n   *\n   * @param {SelectChangeEvent<Value>} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (any).\n   * **Warning**: This is a generic event, not a change event, unless the change event is caused by browser autofill.\n   * @param {object} [child] The react element that was selected when `native` is `false` (default).\n   */\n  onChange: PropTypes.func,\n  /**\n   * Callback fired when the component requests to be closed.\n   * Use it in either controlled (see the `open` prop), or uncontrolled mode (to detect when the Select collapses).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onClose: PropTypes.func,\n  /**\n   * Callback fired when the component requests to be opened.\n   * Use it in either controlled (see the `open` prop), or uncontrolled mode (to detect when the Select expands).\n   *\n   * @param {object} event The event source of the callback.\n   */\n  onOpen: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   * You can only use it when the `native` prop is `false` (default).\n   */\n  open: PropTypes.bool,\n  /**\n   * Render the selected value.\n   * You can only use it when the `native` prop is `false` (default).\n   *\n   * @param {any} value The `value` provided to the component.\n   * @returns {ReactNode}\n   */\n  renderValue: PropTypes.func,\n  /**\n   * Props applied to the clickable div element.\n   */\n  SelectDisplayProps: PropTypes.object,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The `input` value. Providing an empty string will select no options.\n   * Set to an empty string `''` if you don't want any of the available options to be selected.\n   *\n   * If the value is an object it must have reference equality with the option in order to be selected.\n   * If the value is not an object, the string representation must match with the string representation of the option in order to be selected.\n   */\n  value: PropTypes.oneOfType([PropTypes.oneOf(['']), PropTypes.any]),\n  /**\n   * The variant to use.\n   * @default 'outlined'\n   */\n  variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nSelect.muiName = 'Select';\nexport default Select;","function areArraysEqual(array1, array2, itemComparer = (a, b) => a === b) {\n  return array1.length === array2.length && array1.every((value, index) => itemComparer(value, array2[index]));\n}\nexport default areArraysEqual;","'use client';\n\nimport * as React from 'react';\nimport ownerDocument from '@mui/utils/ownerDocument';\nimport useControlled from '@mui/utils/useControlled';\nimport useEnhancedEffect from '@mui/utils/useEnhancedEffect';\nimport useEventCallback from '@mui/utils/useEventCallback';\nimport useForkRef from '@mui/utils/useForkRef';\nimport isFocusVisible from '@mui/utils/isFocusVisible';\nimport visuallyHidden from '@mui/utils/visuallyHidden';\nimport clamp from '@mui/utils/clamp';\nimport extractEventHandlers from '@mui/utils/extractEventHandlers';\nimport areArraysEqual from \"../utils/areArraysEqual.js\";\nconst INTENTIONAL_DRAG_COUNT_THRESHOLD = 2;\nfunction getNewValue(currentValue, step, direction, min, max) {\n  return direction === 1 ? Math.min(currentValue + step, max) : Math.max(currentValue - step, min);\n}\nfunction asc(a, b) {\n  return a - b;\n}\nfunction findClosest(values, currentValue) {\n  const {\n    index: closestIndex\n  } = values.reduce((acc, value, index) => {\n    const distance = Math.abs(currentValue - value);\n    if (acc === null || distance < acc.distance || distance === acc.distance) {\n      return {\n        distance,\n        index\n      };\n    }\n    return acc;\n  }, null) ?? {};\n  return closestIndex;\n}\nfunction trackFinger(event, touchId) {\n  // The event is TouchEvent\n  if (touchId.current !== undefined && event.changedTouches) {\n    const touchEvent = event;\n    for (let i = 0; i < touchEvent.changedTouches.length; i += 1) {\n      const touch = touchEvent.changedTouches[i];\n      if (touch.identifier === touchId.current) {\n        return {\n          x: touch.clientX,\n          y: touch.clientY\n        };\n      }\n    }\n    return false;\n  }\n\n  // The event is MouseEvent\n  return {\n    x: event.clientX,\n    y: event.clientY\n  };\n}\nexport function valueToPercent(value, min, max) {\n  return (value - min) * 100 / (max - min);\n}\nfunction percentToValue(percent, min, max) {\n  return (max - min) * percent + min;\n}\nfunction getDecimalPrecision(num) {\n  // This handles the case when num is very small (0.00000001), js will turn this into 1e-8.\n  // When num is bigger than 1 or less than -1 it won't get converted to this notation so it's fine.\n  if (Math.abs(num) < 1) {\n    const parts = num.toExponential().split('e-');\n    const matissaDecimalPart = parts[0].split('.')[1];\n    return (matissaDecimalPart ? matissaDecimalPart.length : 0) + parseInt(parts[1], 10);\n  }\n  const decimalPart = num.toString().split('.')[1];\n  return decimalPart ? decimalPart.length : 0;\n}\nfunction roundValueToStep(value, step, min) {\n  const nearest = Math.round((value - min) / step) * step + min;\n  return Number(nearest.toFixed(getDecimalPrecision(step)));\n}\nfunction setValueIndex({\n  values,\n  newValue,\n  index\n}) {\n  const output = values.slice();\n  output[index] = newValue;\n  return output.sort(asc);\n}\nfunction focusThumb({\n  sliderRef,\n  activeIndex,\n  setActive\n}) {\n  const doc = ownerDocument(sliderRef.current);\n  if (!sliderRef.current?.contains(doc.activeElement) || Number(doc?.activeElement?.getAttribute('data-index')) !== activeIndex) {\n    sliderRef.current?.querySelector(`[type=\"range\"][data-index=\"${activeIndex}\"]`).focus();\n  }\n  if (setActive) {\n    setActive(activeIndex);\n  }\n}\nfunction areValuesEqual(newValue, oldValue) {\n  if (typeof newValue === 'number' && typeof oldValue === 'number') {\n    return newValue === oldValue;\n  }\n  if (typeof newValue === 'object' && typeof oldValue === 'object') {\n    return areArraysEqual(newValue, oldValue);\n  }\n  return false;\n}\nconst axisProps = {\n  horizontal: {\n    offset: percent => ({\n      left: `${percent}%`\n    }),\n    leap: percent => ({\n      width: `${percent}%`\n    })\n  },\n  'horizontal-reverse': {\n    offset: percent => ({\n      right: `${percent}%`\n    }),\n    leap: percent => ({\n      width: `${percent}%`\n    })\n  },\n  vertical: {\n    offset: percent => ({\n      bottom: `${percent}%`\n    }),\n    leap: percent => ({\n      height: `${percent}%`\n    })\n  }\n};\nexport const Identity = x => x;\n\n// TODO: remove support for Safari < 13.\n// https://caniuse.com/#search=touch-action\n//\n// Safari, on iOS, supports touch action since v13.\n// Over 80% of the iOS phones are compatible\n// in August 2020.\n// Utilizing the CSS.supports method to check if touch-action is supported.\n// Since CSS.supports is supported on all but Edge@12 and IE and touch-action\n// is supported on both Edge@12 and IE if CSS.supports is not available that means that\n// touch-action will be supported\nlet cachedSupportsTouchActionNone;\nfunction doesSupportTouchActionNone() {\n  if (cachedSupportsTouchActionNone === undefined) {\n    if (typeof CSS !== 'undefined' && typeof CSS.supports === 'function') {\n      cachedSupportsTouchActionNone = CSS.supports('touch-action', 'none');\n    } else {\n      cachedSupportsTouchActionNone = true;\n    }\n  }\n  return cachedSupportsTouchActionNone;\n}\nexport function useSlider(parameters) {\n  const {\n    'aria-labelledby': ariaLabelledby,\n    defaultValue,\n    disabled = false,\n    disableSwap = false,\n    isRtl = false,\n    marks: marksProp = false,\n    max = 100,\n    min = 0,\n    name,\n    onChange,\n    onChangeCommitted,\n    orientation = 'horizontal',\n    rootRef: ref,\n    scale = Identity,\n    step = 1,\n    shiftStep = 10,\n    tabIndex,\n    value: valueProp\n  } = parameters;\n  const touchId = React.useRef(undefined);\n  // We can't use the :active browser pseudo-classes.\n  // - The active state isn't triggered when clicking on the rail.\n  // - The active state isn't transferred when inversing a range slider.\n  const [active, setActive] = React.useState(-1);\n  const [open, setOpen] = React.useState(-1);\n  const [dragging, setDragging] = React.useState(false);\n  const moveCount = React.useRef(0);\n  // lastChangedValue is updated whenever onChange is triggered.\n  const lastChangedValue = React.useRef(null);\n  const [valueDerived, setValueState] = useControlled({\n    controlled: valueProp,\n    default: defaultValue ?? min,\n    name: 'Slider'\n  });\n  const handleChange = onChange && ((event, value, thumbIndex) => {\n    // Redefine target to allow name and value to be read.\n    // This allows seamless integration with the most popular form libraries.\n    // https://github.com/mui/material-ui/issues/13485#issuecomment-676048492\n    // Clone the event to not override `target` of the original event.\n    const nativeEvent = event.nativeEvent || event;\n    // @ts-ignore The nativeEvent is function, not object\n    const clonedEvent = new nativeEvent.constructor(nativeEvent.type, nativeEvent);\n    Object.defineProperty(clonedEvent, 'target', {\n      writable: true,\n      value: {\n        value,\n        name\n      }\n    });\n    lastChangedValue.current = value;\n    onChange(clonedEvent, value, thumbIndex);\n  });\n  const range = Array.isArray(valueDerived);\n  let values = range ? valueDerived.slice().sort(asc) : [valueDerived];\n  values = values.map(value => value == null ? min : clamp(value, min, max));\n  const marks = marksProp === true && step !== null ? [...Array(Math.floor((max - min) / step) + 1)].map((_, index) => ({\n    value: min + step * index\n  })) : marksProp || [];\n  const marksValues = marks.map(mark => mark.value);\n  const [focusedThumbIndex, setFocusedThumbIndex] = React.useState(-1);\n  const sliderRef = React.useRef(null);\n  const handleRef = useForkRef(ref, sliderRef);\n  const createHandleHiddenInputFocus = otherHandlers => event => {\n    const index = Number(event.currentTarget.getAttribute('data-index'));\n    if (isFocusVisible(event.target)) {\n      setFocusedThumbIndex(index);\n    }\n    setOpen(index);\n    otherHandlers?.onFocus?.(event);\n  };\n  const createHandleHiddenInputBlur = otherHandlers => event => {\n    if (!isFocusVisible(event.target)) {\n      setFocusedThumbIndex(-1);\n    }\n    setOpen(-1);\n    otherHandlers?.onBlur?.(event);\n  };\n  const changeValue = (event, valueInput) => {\n    const index = Number(event.currentTarget.getAttribute('data-index'));\n    const value = values[index];\n    const marksIndex = marksValues.indexOf(value);\n    let newValue = valueInput;\n    if (marks && step == null) {\n      const maxMarksValue = marksValues[marksValues.length - 1];\n      if (newValue >= maxMarksValue) {\n        newValue = maxMarksValue;\n      } else if (newValue <= marksValues[0]) {\n        newValue = marksValues[0];\n      } else {\n        newValue = newValue < value ? marksValues[marksIndex - 1] : marksValues[marksIndex + 1];\n      }\n    }\n    newValue = clamp(newValue, min, max);\n    if (range) {\n      // Bound the new value to the thumb's neighbours.\n      if (disableSwap) {\n        newValue = clamp(newValue, values[index - 1] || -Infinity, values[index + 1] || Infinity);\n      }\n      const previousValue = newValue;\n      newValue = setValueIndex({\n        values,\n        newValue,\n        index\n      });\n      let activeIndex = index;\n\n      // Potentially swap the index if needed.\n      if (!disableSwap) {\n        activeIndex = newValue.indexOf(previousValue);\n      }\n      focusThumb({\n        sliderRef,\n        activeIndex\n      });\n    }\n    setValueState(newValue);\n    setFocusedThumbIndex(index);\n    if (handleChange && !areValuesEqual(newValue, valueDerived)) {\n      handleChange(event, newValue, index);\n    }\n    if (onChangeCommitted) {\n      onChangeCommitted(event, lastChangedValue.current ?? newValue);\n    }\n  };\n  const createHandleHiddenInputKeyDown = otherHandlers => event => {\n    if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'PageUp', 'PageDown', 'Home', 'End'].includes(event.key)) {\n      event.preventDefault();\n      const index = Number(event.currentTarget.getAttribute('data-index'));\n      const value = values[index];\n      let newValue = null;\n      // Keys actions that change the value by more than the most granular `step`\n      // value are only applied if the step not `null`.\n      // When step is `null`, the `marks` prop is used instead to define valid values.\n      if (step != null) {\n        const stepSize = event.shiftKey ? shiftStep : step;\n        switch (event.key) {\n          case 'ArrowUp':\n            newValue = getNewValue(value, stepSize, 1, min, max);\n            break;\n          case 'ArrowRight':\n            newValue = getNewValue(value, stepSize, isRtl ? -1 : 1, min, max);\n            break;\n          case 'ArrowDown':\n            newValue = getNewValue(value, stepSize, -1, min, max);\n            break;\n          case 'ArrowLeft':\n            newValue = getNewValue(value, stepSize, isRtl ? 1 : -1, min, max);\n            break;\n          case 'PageUp':\n            newValue = getNewValue(value, shiftStep, 1, min, max);\n            break;\n          case 'PageDown':\n            newValue = getNewValue(value, shiftStep, -1, min, max);\n            break;\n          case 'Home':\n            newValue = min;\n            break;\n          case 'End':\n            newValue = max;\n            break;\n          default:\n            break;\n        }\n      } else if (marks) {\n        const maxMarksValue = marksValues[marksValues.length - 1];\n        const currentMarkIndex = marksValues.indexOf(value);\n        const decrementKeys = [isRtl ? 'ArrowRight' : 'ArrowLeft', 'ArrowDown', 'PageDown', 'Home'];\n        const incrementKeys = [isRtl ? 'ArrowLeft' : 'ArrowRight', 'ArrowUp', 'PageUp', 'End'];\n        if (decrementKeys.includes(event.key)) {\n          if (currentMarkIndex === 0) {\n            newValue = marksValues[0];\n          } else {\n            newValue = marksValues[currentMarkIndex - 1];\n          }\n        } else if (incrementKeys.includes(event.key)) {\n          if (currentMarkIndex === marksValues.length - 1) {\n            newValue = maxMarksValue;\n          } else {\n            newValue = marksValues[currentMarkIndex + 1];\n          }\n        }\n      }\n      if (newValue != null) {\n        changeValue(event, newValue);\n      }\n    }\n    otherHandlers?.onKeyDown?.(event);\n  };\n  useEnhancedEffect(() => {\n    if (disabled && sliderRef.current.contains(document.activeElement)) {\n      // This is necessary because Firefox and Safari will keep focus\n      // on a disabled element:\n      // https://codesandbox.io/p/sandbox/mui-pr-22247-forked-h151h?file=/src/App.js\n      // @ts-ignore\n      document.activeElement?.blur();\n    }\n  }, [disabled]);\n  if (disabled && active !== -1) {\n    setActive(-1);\n  }\n  if (disabled && focusedThumbIndex !== -1) {\n    setFocusedThumbIndex(-1);\n  }\n  const createHandleHiddenInputChange = otherHandlers => event => {\n    otherHandlers.onChange?.(event);\n    // this handles value change by Pointer or Touch events\n    // @ts-ignore\n    changeValue(event, event.target.valueAsNumber);\n  };\n  const previousIndex = React.useRef(undefined);\n  let axis = orientation;\n  if (isRtl && orientation === 'horizontal') {\n    axis += '-reverse';\n  }\n  const getFingerNewValue = ({\n    finger,\n    move = false\n  }) => {\n    const {\n      current: slider\n    } = sliderRef;\n    const {\n      width,\n      height,\n      bottom,\n      left\n    } = slider.getBoundingClientRect();\n    let percent;\n    if (axis.startsWith('vertical')) {\n      percent = (bottom - finger.y) / height;\n    } else {\n      percent = (finger.x - left) / width;\n    }\n    if (axis.includes('-reverse')) {\n      percent = 1 - percent;\n    }\n    let newValue;\n    newValue = percentToValue(percent, min, max);\n    if (step) {\n      newValue = roundValueToStep(newValue, step, min);\n    } else {\n      const closestIndex = findClosest(marksValues, newValue);\n      newValue = marksValues[closestIndex];\n    }\n    newValue = clamp(newValue, min, max);\n    let activeIndex = 0;\n    if (range) {\n      if (!move) {\n        activeIndex = findClosest(values, newValue);\n      } else {\n        activeIndex = previousIndex.current;\n      }\n\n      // Bound the new value to the thumb's neighbours.\n      if (disableSwap) {\n        newValue = clamp(newValue, values[activeIndex - 1] || -Infinity, values[activeIndex + 1] || Infinity);\n      }\n      const previousValue = newValue;\n      newValue = setValueIndex({\n        values,\n        newValue,\n        index: activeIndex\n      });\n\n      // Potentially swap the index if needed.\n      if (!(disableSwap && move)) {\n        activeIndex = newValue.indexOf(previousValue);\n        previousIndex.current = activeIndex;\n      }\n    }\n    return {\n      newValue,\n      activeIndex\n    };\n  };\n  const handleTouchMove = useEventCallback(nativeEvent => {\n    const finger = trackFinger(nativeEvent, touchId);\n    if (!finger) {\n      return;\n    }\n    moveCount.current += 1;\n\n    // Cancel move in case some other element consumed a mouseup event and it was not fired.\n    // @ts-ignore buttons doesn't not exists on touch event\n    if (nativeEvent.type === 'mousemove' && nativeEvent.buttons === 0) {\n      // eslint-disable-next-line @typescript-eslint/no-use-before-define\n      handleTouchEnd(nativeEvent);\n      return;\n    }\n    const {\n      newValue,\n      activeIndex\n    } = getFingerNewValue({\n      finger,\n      move: true\n    });\n    focusThumb({\n      sliderRef,\n      activeIndex,\n      setActive\n    });\n    setValueState(newValue);\n    if (!dragging && moveCount.current > INTENTIONAL_DRAG_COUNT_THRESHOLD) {\n      setDragging(true);\n    }\n    if (handleChange && !areValuesEqual(newValue, valueDerived)) {\n      handleChange(nativeEvent, newValue, activeIndex);\n    }\n  });\n  const handleTouchEnd = useEventCallback(nativeEvent => {\n    const finger = trackFinger(nativeEvent, touchId);\n    setDragging(false);\n    if (!finger) {\n      return;\n    }\n    const {\n      newValue\n    } = getFingerNewValue({\n      finger,\n      move: true\n    });\n    setActive(-1);\n    if (nativeEvent.type === 'touchend') {\n      setOpen(-1);\n    }\n    if (onChangeCommitted) {\n      onChangeCommitted(nativeEvent, lastChangedValue.current ?? newValue);\n    }\n    touchId.current = undefined;\n\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    stopListening();\n  });\n  const handleTouchStart = useEventCallback(nativeEvent => {\n    if (disabled) {\n      return;\n    }\n    // If touch-action: none; is not supported we need to prevent the scroll manually.\n    if (!doesSupportTouchActionNone()) {\n      nativeEvent.preventDefault();\n    }\n    const touch = nativeEvent.changedTouches[0];\n    if (touch != null) {\n      // A number that uniquely identifies the current finger in the touch session.\n      touchId.current = touch.identifier;\n    }\n    const finger = trackFinger(nativeEvent, touchId);\n    if (finger !== false) {\n      const {\n        newValue,\n        activeIndex\n      } = getFingerNewValue({\n        finger\n      });\n      focusThumb({\n        sliderRef,\n        activeIndex,\n        setActive\n      });\n      setValueState(newValue);\n      if (handleChange && !areValuesEqual(newValue, valueDerived)) {\n        handleChange(nativeEvent, newValue, activeIndex);\n      }\n    }\n    moveCount.current = 0;\n    const doc = ownerDocument(sliderRef.current);\n    doc.addEventListener('touchmove', handleTouchMove, {\n      passive: true\n    });\n    doc.addEventListener('touchend', handleTouchEnd, {\n      passive: true\n    });\n  });\n  const stopListening = React.useCallback(() => {\n    const doc = ownerDocument(sliderRef.current);\n    doc.removeEventListener('mousemove', handleTouchMove);\n    doc.removeEventListener('mouseup', handleTouchEnd);\n    doc.removeEventListener('touchmove', handleTouchMove);\n    doc.removeEventListener('touchend', handleTouchEnd);\n  }, [handleTouchEnd, handleTouchMove]);\n  React.useEffect(() => {\n    const {\n      current: slider\n    } = sliderRef;\n    slider.addEventListener('touchstart', handleTouchStart, {\n      passive: doesSupportTouchActionNone()\n    });\n    return () => {\n      slider.removeEventListener('touchstart', handleTouchStart);\n      stopListening();\n    };\n  }, [stopListening, handleTouchStart]);\n  React.useEffect(() => {\n    if (disabled) {\n      stopListening();\n    }\n  }, [disabled, stopListening]);\n  const createHandleMouseDown = otherHandlers => event => {\n    otherHandlers.onMouseDown?.(event);\n    if (disabled) {\n      return;\n    }\n    if (event.defaultPrevented) {\n      return;\n    }\n\n    // Only handle left clicks\n    if (event.button !== 0) {\n      return;\n    }\n\n    // Avoid text selection\n    event.preventDefault();\n    const finger = trackFinger(event, touchId);\n    if (finger !== false) {\n      const {\n        newValue,\n        activeIndex\n      } = getFingerNewValue({\n        finger\n      });\n      focusThumb({\n        sliderRef,\n        activeIndex,\n        setActive\n      });\n      setValueState(newValue);\n      if (handleChange && !areValuesEqual(newValue, valueDerived)) {\n        handleChange(event, newValue, activeIndex);\n      }\n    }\n    moveCount.current = 0;\n    const doc = ownerDocument(sliderRef.current);\n    doc.addEventListener('mousemove', handleTouchMove, {\n      passive: true\n    });\n    doc.addEventListener('mouseup', handleTouchEnd);\n  };\n  const trackOffset = valueToPercent(range ? values[0] : min, min, max);\n  const trackLeap = valueToPercent(values[values.length - 1], min, max) - trackOffset;\n  const getRootProps = (externalProps = {}) => {\n    const externalHandlers = extractEventHandlers(externalProps);\n    const ownEventHandlers = {\n      onMouseDown: createHandleMouseDown(externalHandlers || {})\n    };\n    const mergedEventHandlers = {\n      ...externalHandlers,\n      ...ownEventHandlers\n    };\n    return {\n      ...externalProps,\n      ref: handleRef,\n      ...mergedEventHandlers\n    };\n  };\n  const createHandleMouseOver = otherHandlers => event => {\n    otherHandlers.onMouseOver?.(event);\n    const index = Number(event.currentTarget.getAttribute('data-index'));\n    setOpen(index);\n  };\n  const createHandleMouseLeave = otherHandlers => event => {\n    otherHandlers.onMouseLeave?.(event);\n    setOpen(-1);\n  };\n  const getThumbProps = (externalProps = {}) => {\n    const externalHandlers = extractEventHandlers(externalProps);\n    const ownEventHandlers = {\n      onMouseOver: createHandleMouseOver(externalHandlers || {}),\n      onMouseLeave: createHandleMouseLeave(externalHandlers || {})\n    };\n    return {\n      ...externalProps,\n      ...externalHandlers,\n      ...ownEventHandlers\n    };\n  };\n  const getThumbStyle = index => {\n    return {\n      // So the non active thumb doesn't show its label on hover.\n      pointerEvents: active !== -1 && active !== index ? 'none' : undefined\n    };\n  };\n  let cssWritingMode;\n  if (orientation === 'vertical') {\n    cssWritingMode = isRtl ? 'vertical-rl' : 'vertical-lr';\n  }\n  const getHiddenInputProps = (externalProps = {}) => {\n    const externalHandlers = extractEventHandlers(externalProps);\n    const ownEventHandlers = {\n      onChange: createHandleHiddenInputChange(externalHandlers || {}),\n      onFocus: createHandleHiddenInputFocus(externalHandlers || {}),\n      onBlur: createHandleHiddenInputBlur(externalHandlers || {}),\n      onKeyDown: createHandleHiddenInputKeyDown(externalHandlers || {})\n    };\n    const mergedEventHandlers = {\n      ...externalHandlers,\n      ...ownEventHandlers\n    };\n    return {\n      tabIndex,\n      'aria-labelledby': ariaLabelledby,\n      'aria-orientation': orientation,\n      'aria-valuemax': scale(max),\n      'aria-valuemin': scale(min),\n      name,\n      type: 'range',\n      min: parameters.min,\n      max: parameters.max,\n      step: parameters.step === null && parameters.marks ? 'any' : parameters.step ?? undefined,\n      disabled,\n      ...externalProps,\n      ...mergedEventHandlers,\n      style: {\n        ...visuallyHidden,\n        direction: isRtl ? 'rtl' : 'ltr',\n        // So that VoiceOver's focus indicator matches the thumb's dimensions\n        width: '100%',\n        height: '100%',\n        writingMode: cssWritingMode\n      }\n    };\n  };\n  return {\n    active,\n    axis: axis,\n    axisProps,\n    dragging,\n    focusedThumbIndex,\n    getHiddenInputProps,\n    getRootProps,\n    getThumbProps,\n    marks: marks,\n    open,\n    range,\n    rootRef: handleRef,\n    trackLeap,\n    trackOffset,\n    values,\n    getThumbStyle\n  };\n}","import isHostComponent from '@mui/utils/isHostComponent';\nconst shouldSpreadAdditionalProps = Slot => {\n  return !Slot || !isHostComponent(Slot);\n};\nexport default shouldSpreadAdditionalProps;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSliderUtilityClass(slot) {\n  return generateUtilityClass('MuiSlider', slot);\n}\nconst sliderClasses = generateUtilityClasses('MuiSlider', ['root', 'active', 'colorPrimary', 'colorSecondary', 'colorError', 'colorInfo', 'colorSuccess', 'colorWarning', 'disabled', 'dragging', 'focusVisible', 'mark', 'markActive', 'marked', 'markLabel', 'markLabelActive', 'rail', 'sizeSmall', 'thumb', 'thumbColorPrimary', 'thumbColorSecondary', 'thumbColorError', 'thumbColorSuccess', 'thumbColorInfo', 'thumbColorWarning', 'track', 'trackInverted', 'trackFalse', 'thumbSizeSmall', 'valueLabel', 'valueLabelOpen', 'valueLabelCircle', 'valueLabelLabel', 'vertical']);\nexport default sliderClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport sliderClasses from \"./sliderClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useValueLabelClasses = props => {\n  const {\n    open\n  } = props;\n  const utilityClasses = {\n    offset: clsx(open && sliderClasses.valueLabelOpen),\n    circle: sliderClasses.valueLabelCircle,\n    label: sliderClasses.valueLabelLabel\n  };\n  return utilityClasses;\n};\n\n/**\n * @ignore - internal component.\n */\nexport default function SliderValueLabel(props) {\n  const {\n    children,\n    className,\n    value\n  } = props;\n  const classes = useValueLabelClasses(props);\n  if (!children) {\n    return null;\n  }\n  return /*#__PURE__*/React.cloneElement(children, {\n    className: children.props.className\n  }, /*#__PURE__*/_jsxs(React.Fragment, {\n    children: [children.props.children, /*#__PURE__*/_jsx(\"span\", {\n      className: clsx(classes.offset, className),\n      \"aria-hidden\": true,\n      children: /*#__PURE__*/_jsx(\"span\", {\n        className: classes.circle,\n        children: /*#__PURE__*/_jsx(\"span\", {\n          className: classes.label,\n          children: value\n        })\n      })\n    })]\n  }));\n}\nprocess.env.NODE_ENV !== \"production\" ? SliderValueLabel.propTypes = {\n  children: PropTypes.element.isRequired,\n  className: PropTypes.string,\n  value: PropTypes.node\n} : void 0;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport chainPropTypes from '@mui/utils/chainPropTypes';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport useSlotProps from '@mui/utils/useSlotProps';\nimport isHostComponent from '@mui/utils/isHostComponent';\nimport { useSlider, valueToPercent } from \"./useSlider.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport slotShouldForwardProp from \"../styles/slotShouldForwardProp.js\";\nimport shouldSpreadAdditionalProps from \"../utils/shouldSpreadAdditionalProps.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport BaseSliderValueLabel from \"./SliderValueLabel.js\";\nimport sliderClasses, { getSliderUtilityClass } from \"./sliderClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nfunction Identity(x) {\n  return x;\n}\nexport const SliderRoot = styled('span', {\n  name: 'MuiSlider',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[`color${capitalize(ownerState.color)}`], ownerState.size !== 'medium' && styles[`size${capitalize(ownerState.size)}`], ownerState.marked && styles.marked, ownerState.orientation === 'vertical' && styles.vertical, ownerState.track === 'inverted' && styles.trackInverted, ownerState.track === false && styles.trackFalse];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  borderRadius: 12,\n  boxSizing: 'content-box',\n  display: 'inline-block',\n  position: 'relative',\n  cursor: 'pointer',\n  touchAction: 'none',\n  WebkitTapHighlightColor: 'transparent',\n  '@media print': {\n    colorAdjust: 'exact'\n  },\n  [`&.${sliderClasses.disabled}`]: {\n    pointerEvents: 'none',\n    cursor: 'default',\n    color: (theme.vars || theme).palette.grey[400]\n  },\n  [`&.${sliderClasses.dragging}`]: {\n    [`& .${sliderClasses.thumb}, & .${sliderClasses.track}`]: {\n      transition: 'none'\n    }\n  },\n  variants: [...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      color: (theme.vars || theme).palette[color].main\n    }\n  })), {\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      height: 4,\n      width: '100%',\n      padding: '13px 0',\n      // The primary input mechanism of the device includes a pointing device of limited accuracy.\n      '@media (pointer: coarse)': {\n        // Reach 42px touch target, about ~8mm on screen.\n        padding: '20px 0'\n      }\n    }\n  }, {\n    props: {\n      orientation: 'horizontal',\n      size: 'small'\n    },\n    style: {\n      height: 2\n    }\n  }, {\n    props: {\n      orientation: 'horizontal',\n      marked: true\n    },\n    style: {\n      marginBottom: 20\n    }\n  }, {\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      height: '100%',\n      width: 4,\n      padding: '0 13px',\n      // The primary input mechanism of the device includes a pointing device of limited accuracy.\n      '@media (pointer: coarse)': {\n        // Reach 42px touch target, about ~8mm on screen.\n        padding: '0 20px'\n      }\n    }\n  }, {\n    props: {\n      orientation: 'vertical',\n      size: 'small'\n    },\n    style: {\n      width: 2\n    }\n  }, {\n    props: {\n      orientation: 'vertical',\n      marked: true\n    },\n    style: {\n      marginRight: 44\n    }\n  }]\n})));\nexport const SliderRail = styled('span', {\n  name: 'MuiSlider',\n  slot: 'Rail'\n})({\n  display: 'block',\n  position: 'absolute',\n  borderRadius: 'inherit',\n  backgroundColor: 'currentColor',\n  opacity: 0.38,\n  variants: [{\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      width: '100%',\n      height: 'inherit',\n      top: '50%',\n      transform: 'translateY(-50%)'\n    }\n  }, {\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      height: '100%',\n      width: 'inherit',\n      left: '50%',\n      transform: 'translateX(-50%)'\n    }\n  }, {\n    props: {\n      track: 'inverted'\n    },\n    style: {\n      opacity: 1\n    }\n  }]\n});\nexport const SliderTrack = styled('span', {\n  name: 'MuiSlider',\n  slot: 'Track'\n})(memoTheme(({\n  theme\n}) => {\n  return {\n    display: 'block',\n    position: 'absolute',\n    borderRadius: 'inherit',\n    border: '1px solid currentColor',\n    backgroundColor: 'currentColor',\n    transition: theme.transitions.create(['left', 'width', 'bottom', 'height'], {\n      duration: theme.transitions.duration.shortest\n    }),\n    variants: [{\n      props: {\n        size: 'small'\n      },\n      style: {\n        border: 'none'\n      }\n    }, {\n      props: {\n        orientation: 'horizontal'\n      },\n      style: {\n        height: 'inherit',\n        top: '50%',\n        transform: 'translateY(-50%)'\n      }\n    }, {\n      props: {\n        orientation: 'vertical'\n      },\n      style: {\n        width: 'inherit',\n        left: '50%',\n        transform: 'translateX(-50%)'\n      }\n    }, {\n      props: {\n        track: false\n      },\n      style: {\n        display: 'none'\n      }\n    }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n      props: {\n        color,\n        track: 'inverted'\n      },\n      style: {\n        ...(theme.vars ? {\n          backgroundColor: theme.vars.palette.Slider[`${color}Track`],\n          borderColor: theme.vars.palette.Slider[`${color}Track`]\n        } : {\n          backgroundColor: theme.lighten(theme.palette[color].main, 0.62),\n          borderColor: theme.lighten(theme.palette[color].main, 0.62),\n          ...theme.applyStyles('dark', {\n            backgroundColor: theme.darken(theme.palette[color].main, 0.5)\n          }),\n          ...theme.applyStyles('dark', {\n            borderColor: theme.darken(theme.palette[color].main, 0.5)\n          })\n        })\n      }\n    }))]\n  };\n}));\nexport const SliderThumb = styled('span', {\n  name: 'MuiSlider',\n  slot: 'Thumb',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.thumb, styles[`thumbColor${capitalize(ownerState.color)}`], ownerState.size !== 'medium' && styles[`thumbSize${capitalize(ownerState.size)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  position: 'absolute',\n  width: 20,\n  height: 20,\n  boxSizing: 'border-box',\n  borderRadius: '50%',\n  outline: 0,\n  backgroundColor: 'currentColor',\n  display: 'flex',\n  alignItems: 'center',\n  justifyContent: 'center',\n  transition: theme.transitions.create(['box-shadow', 'left', 'bottom'], {\n    duration: theme.transitions.duration.shortest\n  }),\n  '&::before': {\n    position: 'absolute',\n    content: '\"\"',\n    borderRadius: 'inherit',\n    width: '100%',\n    height: '100%',\n    boxShadow: (theme.vars || theme).shadows[2]\n  },\n  '&::after': {\n    position: 'absolute',\n    content: '\"\"',\n    borderRadius: '50%',\n    // 42px is the hit target\n    width: 42,\n    height: 42,\n    top: '50%',\n    left: '50%',\n    transform: 'translate(-50%, -50%)'\n  },\n  [`&.${sliderClasses.disabled}`]: {\n    '&:hover': {\n      boxShadow: 'none'\n    }\n  },\n  variants: [{\n    props: {\n      size: 'small'\n    },\n    style: {\n      width: 12,\n      height: 12,\n      '&::before': {\n        boxShadow: 'none'\n      }\n    }\n  }, {\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      top: '50%',\n      transform: 'translate(-50%, -50%)'\n    }\n  }, {\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      left: '50%',\n      transform: 'translate(-50%, 50%)'\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      [`&:hover, &.${sliderClasses.focusVisible}`]: {\n        boxShadow: `0px 0px 0px 8px ${theme.alpha((theme.vars || theme).palette[color].main, 0.16)}`,\n        '@media (hover: none)': {\n          boxShadow: 'none'\n        }\n      },\n      [`&.${sliderClasses.active}`]: {\n        boxShadow: `0px 0px 0px 14px ${theme.alpha((theme.vars || theme).palette[color].main, 0.16)}`\n      }\n    }\n  }))]\n})));\nconst SliderValueLabel = styled(BaseSliderValueLabel, {\n  name: 'MuiSlider',\n  slot: 'ValueLabel'\n})(memoTheme(({\n  theme\n}) => ({\n  zIndex: 1,\n  whiteSpace: 'nowrap',\n  ...theme.typography.body2,\n  fontWeight: 500,\n  transition: theme.transitions.create(['transform'], {\n    duration: theme.transitions.duration.shortest\n  }),\n  position: 'absolute',\n  backgroundColor: (theme.vars || theme).palette.grey[600],\n  borderRadius: 2,\n  color: (theme.vars || theme).palette.common.white,\n  display: 'flex',\n  alignItems: 'center',\n  justifyContent: 'center',\n  padding: '0.25rem 0.75rem',\n  variants: [{\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      transform: 'translateY(-100%) scale(0)',\n      top: '-10px',\n      transformOrigin: 'bottom center',\n      '&::before': {\n        position: 'absolute',\n        content: '\"\"',\n        width: 8,\n        height: 8,\n        transform: 'translate(-50%, 50%) rotate(45deg)',\n        backgroundColor: 'inherit',\n        bottom: 0,\n        left: '50%'\n      },\n      [`&.${sliderClasses.valueLabelOpen}`]: {\n        transform: 'translateY(-100%) scale(1)'\n      }\n    }\n  }, {\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      transform: 'translateY(-50%) scale(0)',\n      right: '30px',\n      top: '50%',\n      transformOrigin: 'right center',\n      '&::before': {\n        position: 'absolute',\n        content: '\"\"',\n        width: 8,\n        height: 8,\n        transform: 'translate(-50%, -50%) rotate(45deg)',\n        backgroundColor: 'inherit',\n        right: -8,\n        top: '50%'\n      },\n      [`&.${sliderClasses.valueLabelOpen}`]: {\n        transform: 'translateY(-50%) scale(1)'\n      }\n    }\n  }, {\n    props: {\n      size: 'small'\n    },\n    style: {\n      fontSize: theme.typography.pxToRem(12),\n      padding: '0.25rem 0.5rem'\n    }\n  }, {\n    props: {\n      orientation: 'vertical',\n      size: 'small'\n    },\n    style: {\n      right: '20px'\n    }\n  }]\n})));\nprocess.env.NODE_ENV !== \"production\" ? SliderValueLabel.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * @ignore\n   */\n  children: PropTypes.element.isRequired,\n  /**\n   * @ignore\n   */\n  index: PropTypes.number.isRequired,\n  /**\n   * @ignore\n   */\n  open: PropTypes.bool.isRequired,\n  /**\n   * @ignore\n   */\n  value: PropTypes.node\n} : void 0;\nexport { SliderValueLabel };\nexport const SliderMark = styled('span', {\n  name: 'MuiSlider',\n  slot: 'Mark',\n  shouldForwardProp: prop => slotShouldForwardProp(prop) && prop !== 'markActive',\n  overridesResolver: (props, styles) => {\n    const {\n      markActive\n    } = props;\n    return [styles.mark, markActive && styles.markActive];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  position: 'absolute',\n  width: 2,\n  height: 2,\n  borderRadius: 1,\n  backgroundColor: 'currentColor',\n  variants: [{\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      top: '50%',\n      transform: 'translate(-1px, -50%)'\n    }\n  }, {\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      left: '50%',\n      transform: 'translate(-50%, 1px)'\n    }\n  }, {\n    props: {\n      markActive: true\n    },\n    style: {\n      backgroundColor: (theme.vars || theme).palette.background.paper,\n      opacity: 0.8\n    }\n  }]\n})));\nexport const SliderMarkLabel = styled('span', {\n  name: 'MuiSlider',\n  slot: 'MarkLabel',\n  shouldForwardProp: prop => slotShouldForwardProp(prop) && prop !== 'markLabelActive'\n})(memoTheme(({\n  theme\n}) => ({\n  ...theme.typography.body2,\n  color: (theme.vars || theme).palette.text.secondary,\n  position: 'absolute',\n  whiteSpace: 'nowrap',\n  variants: [{\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      top: 30,\n      transform: 'translateX(-50%)',\n      '@media (pointer: coarse)': {\n        top: 40\n      }\n    }\n  }, {\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      left: 36,\n      transform: 'translateY(50%)',\n      '@media (pointer: coarse)': {\n        left: 44\n      }\n    }\n  }, {\n    props: {\n      markLabelActive: true\n    },\n    style: {\n      color: (theme.vars || theme).palette.text.primary\n    }\n  }]\n})));\nconst useUtilityClasses = ownerState => {\n  const {\n    disabled,\n    dragging,\n    marked,\n    orientation,\n    track,\n    classes,\n    color,\n    size\n  } = ownerState;\n  const slots = {\n    root: ['root', disabled && 'disabled', dragging && 'dragging', marked && 'marked', orientation === 'vertical' && 'vertical', track === 'inverted' && 'trackInverted', track === false && 'trackFalse', color && `color${capitalize(color)}`, size && `size${capitalize(size)}`],\n    rail: ['rail'],\n    track: ['track'],\n    mark: ['mark'],\n    markActive: ['markActive'],\n    markLabel: ['markLabel'],\n    markLabelActive: ['markLabelActive'],\n    valueLabel: ['valueLabel'],\n    thumb: ['thumb', disabled && 'disabled', size && `thumbSize${capitalize(size)}`, color && `thumbColor${capitalize(color)}`],\n    active: ['active'],\n    disabled: ['disabled'],\n    focusVisible: ['focusVisible']\n  };\n  return composeClasses(slots, getSliderUtilityClass, classes);\n};\nconst Forward = ({\n  children\n}) => children;\nconst Slider = /*#__PURE__*/React.forwardRef(function Slider(inputProps, ref) {\n  const props = useDefaultProps({\n    props: inputProps,\n    name: 'MuiSlider'\n  });\n  const isRtl = useRtl();\n  const {\n    'aria-label': ariaLabel,\n    'aria-valuetext': ariaValuetext,\n    'aria-labelledby': ariaLabelledby,\n    // eslint-disable-next-line react/prop-types\n    component = 'span',\n    components = {},\n    componentsProps = {},\n    color = 'primary',\n    classes: classesProp,\n    className,\n    disableSwap = false,\n    disabled = false,\n    getAriaLabel,\n    getAriaValueText,\n    marks: marksProp = false,\n    max = 100,\n    min = 0,\n    name,\n    onChange,\n    onChangeCommitted,\n    orientation = 'horizontal',\n    shiftStep = 10,\n    size = 'medium',\n    step = 1,\n    scale = Identity,\n    slotProps,\n    slots,\n    tabIndex,\n    track = 'normal',\n    value: valueProp,\n    valueLabelDisplay = 'off',\n    valueLabelFormat = Identity,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    isRtl,\n    max,\n    min,\n    classes: classesProp,\n    disabled,\n    disableSwap,\n    orientation,\n    marks: marksProp,\n    color,\n    size,\n    step,\n    shiftStep,\n    scale,\n    track,\n    valueLabelDisplay,\n    valueLabelFormat\n  };\n  const {\n    axisProps,\n    getRootProps,\n    getHiddenInputProps,\n    getThumbProps,\n    open,\n    active,\n    axis,\n    focusedThumbIndex,\n    range,\n    dragging,\n    marks,\n    values,\n    trackOffset,\n    trackLeap,\n    getThumbStyle\n  } = useSlider({\n    ...ownerState,\n    rootRef: ref\n  });\n  ownerState.marked = marks.length > 0 && marks.some(mark => mark.label);\n  ownerState.dragging = dragging;\n  ownerState.focusedThumbIndex = focusedThumbIndex;\n  const classes = useUtilityClasses(ownerState);\n\n  // support both `slots` and `components` for backward compatibility\n  const RootSlot = slots?.root ?? components.Root ?? SliderRoot;\n  const RailSlot = slots?.rail ?? components.Rail ?? SliderRail;\n  const TrackSlot = slots?.track ?? components.Track ?? SliderTrack;\n  const ThumbSlot = slots?.thumb ?? components.Thumb ?? SliderThumb;\n  const ValueLabelSlot = slots?.valueLabel ?? components.ValueLabel ?? SliderValueLabel;\n  const MarkSlot = slots?.mark ?? components.Mark ?? SliderMark;\n  const MarkLabelSlot = slots?.markLabel ?? components.MarkLabel ?? SliderMarkLabel;\n  const InputSlot = slots?.input ?? components.Input ?? 'input';\n  const rootSlotProps = slotProps?.root ?? componentsProps.root;\n  const railSlotProps = slotProps?.rail ?? componentsProps.rail;\n  const trackSlotProps = slotProps?.track ?? componentsProps.track;\n  const thumbSlotProps = slotProps?.thumb ?? componentsProps.thumb;\n  const valueLabelSlotProps = slotProps?.valueLabel ?? componentsProps.valueLabel;\n  const markSlotProps = slotProps?.mark ?? componentsProps.mark;\n  const markLabelSlotProps = slotProps?.markLabel ?? componentsProps.markLabel;\n  const inputSlotProps = slotProps?.input ?? componentsProps.input;\n  const rootProps = useSlotProps({\n    elementType: RootSlot,\n    getSlotProps: getRootProps,\n    externalSlotProps: rootSlotProps,\n    externalForwardedProps: other,\n    additionalProps: {\n      ...(shouldSpreadAdditionalProps(RootSlot) && {\n        as: component\n      })\n    },\n    ownerState: {\n      ...ownerState,\n      ...rootSlotProps?.ownerState\n    },\n    className: [classes.root, className]\n  });\n  const railProps = useSlotProps({\n    elementType: RailSlot,\n    externalSlotProps: railSlotProps,\n    ownerState,\n    className: classes.rail\n  });\n  const trackProps = useSlotProps({\n    elementType: TrackSlot,\n    externalSlotProps: trackSlotProps,\n    additionalProps: {\n      style: {\n        ...axisProps[axis].offset(trackOffset),\n        ...axisProps[axis].leap(trackLeap)\n      }\n    },\n    ownerState: {\n      ...ownerState,\n      ...trackSlotProps?.ownerState\n    },\n    className: classes.track\n  });\n  const thumbProps = useSlotProps({\n    elementType: ThumbSlot,\n    getSlotProps: getThumbProps,\n    externalSlotProps: thumbSlotProps,\n    ownerState: {\n      ...ownerState,\n      ...thumbSlotProps?.ownerState\n    },\n    className: classes.thumb\n  });\n  const valueLabelProps = useSlotProps({\n    elementType: ValueLabelSlot,\n    externalSlotProps: valueLabelSlotProps,\n    ownerState: {\n      ...ownerState,\n      ...valueLabelSlotProps?.ownerState\n    },\n    className: classes.valueLabel\n  });\n  const markProps = useSlotProps({\n    elementType: MarkSlot,\n    externalSlotProps: markSlotProps,\n    ownerState,\n    className: classes.mark\n  });\n  const markLabelProps = useSlotProps({\n    elementType: MarkLabelSlot,\n    externalSlotProps: markLabelSlotProps,\n    ownerState,\n    className: classes.markLabel\n  });\n  const inputSliderProps = useSlotProps({\n    elementType: InputSlot,\n    getSlotProps: getHiddenInputProps,\n    externalSlotProps: inputSlotProps,\n    ownerState\n  });\n  return /*#__PURE__*/_jsxs(RootSlot, {\n    ...rootProps,\n    children: [/*#__PURE__*/_jsx(RailSlot, {\n      ...railProps\n    }), /*#__PURE__*/_jsx(TrackSlot, {\n      ...trackProps\n    }), marks.filter(mark => mark.value >= min && mark.value <= max).map((mark, index) => {\n      const percent = valueToPercent(mark.value, min, max);\n      const style = axisProps[axis].offset(percent);\n      let markActive;\n      if (track === false) {\n        markActive = values.includes(mark.value);\n      } else {\n        markActive = track === 'normal' && (range ? mark.value >= values[0] && mark.value <= values[values.length - 1] : mark.value <= values[0]) || track === 'inverted' && (range ? mark.value <= values[0] || mark.value >= values[values.length - 1] : mark.value >= values[0]);\n      }\n      return /*#__PURE__*/_jsxs(React.Fragment, {\n        children: [/*#__PURE__*/_jsx(MarkSlot, {\n          \"data-index\": index,\n          ...markProps,\n          ...(!isHostComponent(MarkSlot) && {\n            markActive\n          }),\n          style: {\n            ...style,\n            ...markProps.style\n          },\n          className: clsx(markProps.className, markActive && classes.markActive)\n        }), mark.label != null ? /*#__PURE__*/_jsx(MarkLabelSlot, {\n          \"aria-hidden\": true,\n          \"data-index\": index,\n          ...markLabelProps,\n          ...(!isHostComponent(MarkLabelSlot) && {\n            markLabelActive: markActive\n          }),\n          style: {\n            ...style,\n            ...markLabelProps.style\n          },\n          className: clsx(classes.markLabel, markLabelProps.className, markActive && classes.markLabelActive),\n          children: mark.label\n        }) : null]\n      }, index);\n    }), values.map((value, index) => {\n      const percent = valueToPercent(value, min, max);\n      const style = axisProps[axis].offset(percent);\n      const ValueLabelComponent = valueLabelDisplay === 'off' ? Forward : ValueLabelSlot;\n      return /*#__PURE__*/ /* TODO v6: Change component structure. It will help in avoiding the complicated React.cloneElement API added in SliderValueLabel component. Should be: Thumb -> Input, ValueLabel. Follow Joy UI's Slider structure. */_jsx(ValueLabelComponent, {\n        ...(!isHostComponent(ValueLabelComponent) && {\n          valueLabelFormat,\n          valueLabelDisplay,\n          value: typeof valueLabelFormat === 'function' ? valueLabelFormat(scale(value), index) : valueLabelFormat,\n          index,\n          open: open === index || active === index || valueLabelDisplay === 'on',\n          disabled\n        }),\n        ...valueLabelProps,\n        children: /*#__PURE__*/_jsx(ThumbSlot, {\n          \"data-index\": index,\n          ...thumbProps,\n          className: clsx(classes.thumb, thumbProps.className, active === index && classes.active, focusedThumbIndex === index && classes.focusVisible),\n          style: {\n            ...style,\n            ...getThumbStyle(index),\n            ...thumbProps.style\n          },\n          children: /*#__PURE__*/_jsx(InputSlot, {\n            \"data-index\": index,\n            \"aria-label\": getAriaLabel ? getAriaLabel(index) : ariaLabel,\n            \"aria-valuenow\": scale(value),\n            \"aria-labelledby\": ariaLabelledby,\n            \"aria-valuetext\": getAriaValueText ? getAriaValueText(scale(value), index) : ariaValuetext,\n            value: values[index],\n            ...inputSliderProps\n          })\n        })\n      }, index);\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Slider.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The label of the slider.\n   */\n  'aria-label': chainPropTypes(PropTypes.string, props => {\n    const range = Array.isArray(props.value || props.defaultValue);\n    if (range && props['aria-label'] != null) {\n      return new Error('MUI: You need to use the `getAriaLabel` prop instead of `aria-label` when using a range slider.');\n    }\n    return null;\n  }),\n  /**\n   * The id of the element containing a label for the slider.\n   */\n  'aria-labelledby': PropTypes.string,\n  /**\n   * A string value that provides a user-friendly name for the current value of the slider.\n   */\n  'aria-valuetext': chainPropTypes(PropTypes.string, props => {\n    const range = Array.isArray(props.value || props.defaultValue);\n    if (range && props['aria-valuetext'] != null) {\n      return new Error('MUI: You need to use the `getAriaValueText` prop instead of `aria-valuetext` when using a range slider.');\n    }\n    return null;\n  }),\n  /**\n   * @ignore\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The components used for each slot inside.\n   *\n   * @deprecated use the `slots` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  components: PropTypes.shape({\n    Input: PropTypes.elementType,\n    Mark: PropTypes.elementType,\n    MarkLabel: PropTypes.elementType,\n    Rail: PropTypes.elementType,\n    Root: PropTypes.elementType,\n    Thumb: PropTypes.elementType,\n    Track: PropTypes.elementType,\n    ValueLabel: PropTypes.elementType\n  }),\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   *\n   * @deprecated use the `slotProps` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   *\n   * @default {}\n   */\n  componentsProps: PropTypes.shape({\n    input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    mark: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    markLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    rail: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    thumb: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    track: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    valueLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n      children: PropTypes.element,\n      className: PropTypes.string,\n      open: PropTypes.bool,\n      style: PropTypes.object,\n      value: PropTypes.node,\n      valueLabelDisplay: PropTypes.oneOf(['auto', 'off', 'on'])\n    })])\n  }),\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number]),\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the active thumb doesn't swap when moving pointer over a thumb while dragging another thumb.\n   * @default false\n   */\n  disableSwap: PropTypes.bool,\n  /**\n   * Accepts a function which returns a string value that provides a user-friendly name for the thumb labels of the slider.\n   * This is important for screen reader users.\n   * @param {number} index The thumb label's index to format.\n   * @returns {string}\n   */\n  getAriaLabel: PropTypes.func,\n  /**\n   * Accepts a function which returns a string value that provides a user-friendly name for the current value of the slider.\n   * This is important for screen reader users.\n   * @param {number} value The thumb label's value to format.\n   * @param {number} index The thumb label's index to format.\n   * @returns {string}\n   */\n  getAriaValueText: PropTypes.func,\n  /**\n   * Marks indicate predetermined values to which the user can move the slider.\n   * If `true` the marks are spaced according the value of the `step` prop.\n   * If an array, it should contain objects with `value` and an optional `label` keys.\n   * @default false\n   */\n  marks: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.shape({\n    label: PropTypes.node,\n    value: PropTypes.number.isRequired\n  })), PropTypes.bool]),\n  /**\n   * The maximum allowed value of the slider.\n   * Should not be equal to min.\n   * @default 100\n   */\n  max: PropTypes.number,\n  /**\n   * The minimum allowed value of the slider.\n   * Should not be equal to max.\n   * @default 0\n   */\n  min: PropTypes.number,\n  /**\n   * Name attribute of the hidden `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * Callback function that is fired when the slider's value changed.\n   *\n   * @param {Event} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (any).\n   * **Warning**: This is a generic event not a change event.\n   * @param {Value} value The new value.\n   * @param {number} activeThumb Index of the currently moved thumb.\n   */\n  onChange: PropTypes.func,\n  /**\n   * Callback function that is fired when the `mouseup` is triggered.\n   *\n   * @param {React.SyntheticEvent | Event} event The event source of the callback. **Warning**: This is a generic event not a change event.\n   * @param {Value} value The new value.\n   */\n  onChangeCommitted: PropTypes.func,\n  /**\n   * The component orientation.\n   * @default 'horizontal'\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n  /**\n   * A transformation function, to change the scale of the slider.\n   * @param {any} x\n   * @returns {any}\n   * @default function Identity(x) {\n   *   return x;\n   * }\n   */\n  scale: PropTypes.func,\n  /**\n   * The granularity with which the slider can step through values when using Page Up/Page Down or Shift + Arrow Up/Arrow Down.\n   * @default 10\n   */\n  shiftStep: PropTypes.number,\n  /**\n   * The size of the slider.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium']), PropTypes.string]),\n  /**\n   * The props used for each slot inside the Slider.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    mark: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    markLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    rail: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    thumb: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    track: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    valueLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({\n      children: PropTypes.element,\n      className: PropTypes.string,\n      open: PropTypes.bool,\n      style: PropTypes.object,\n      value: PropTypes.node,\n      valueLabelDisplay: PropTypes.oneOf(['auto', 'off', 'on'])\n    })])\n  }),\n  /**\n   * The components used for each slot inside the Slider.\n   * Either a string to use a HTML element or a component.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    input: PropTypes.elementType,\n    mark: PropTypes.elementType,\n    markLabel: PropTypes.elementType,\n    rail: PropTypes.elementType,\n    root: PropTypes.elementType,\n    thumb: PropTypes.elementType,\n    track: PropTypes.elementType,\n    valueLabel: PropTypes.elementType\n  }),\n  /**\n   * The granularity with which the slider can step through values. (A \"discrete\" slider.)\n   * The `min` prop serves as the origin for the valid values.\n   * We recommend (max - min) to be evenly divisible by the step.\n   *\n   * When step is `null`, the thumb can only be slid onto marks provided with the `marks` prop.\n   * @default 1\n   */\n  step: PropTypes.number,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Tab index attribute of the hidden `input` element.\n   */\n  tabIndex: PropTypes.number,\n  /**\n   * The track presentation:\n   *\n   * - `normal` the track will render a bar representing the slider value.\n   * - `inverted` the track will render a bar representing the remaining slider value.\n   * - `false` the track will render without a bar.\n   * @default 'normal'\n   */\n  track: PropTypes.oneOf(['inverted', 'normal', false]),\n  /**\n   * The value of the slider.\n   * For ranged sliders, provide an array with two values.\n   */\n  value: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.number), PropTypes.number]),\n  /**\n   * Controls when the value label is displayed:\n   *\n   * - `auto` the value label will display when the thumb is hovered or focused.\n   * - `on` will display persistently.\n   * - `off` will never display.\n   * @default 'off'\n   */\n  valueLabelDisplay: PropTypes.oneOf(['auto', 'off', 'on']),\n  /**\n   * The format function the value label's value.\n   *\n   * When a function is provided, it should have the following signature:\n   *\n   * - {number} value The value label's value to format\n   * - {number} index The value label's index to format\n   * @param {any} x\n   * @returns {any}\n   * @default function Identity(x) {\n   *   return x;\n   * }\n   */\n  valueLabelFormat: PropTypes.oneOfType([PropTypes.func, PropTypes.string])\n} : void 0;\nexport default Slider;","'use client';\n\nimport * as React from 'react';\nimport useEventCallback from '@mui/utils/useEventCallback';\nimport useTimeout from '@mui/utils/useTimeout';\nimport extractEventHandlers from '@mui/utils/extractEventHandlers';\nfunction useSnackbar(parameters = {}) {\n  const {\n    autoHideDuration = null,\n    disableWindowBlurListener = false,\n    onClose,\n    open,\n    resumeHideDuration\n  } = parameters;\n  const timerAutoHide = useTimeout();\n  React.useEffect(() => {\n    if (!open) {\n      return undefined;\n    }\n\n    /**\n     * @param {KeyboardEvent} nativeEvent\n     */\n    function handleKeyDown(nativeEvent) {\n      if (!nativeEvent.defaultPrevented) {\n        if (nativeEvent.key === 'Escape') {\n          // not calling `preventDefault` since we don't know if people may ignore this event e.g. a permanently open snackbar\n          onClose?.(nativeEvent, 'escapeKeyDown');\n        }\n      }\n    }\n    document.addEventListener('keydown', handleKeyDown);\n    return () => {\n      document.removeEventListener('keydown', handleKeyDown);\n    };\n  }, [open, onClose]);\n  const handleClose = useEventCallback((event, reason) => {\n    onClose?.(event, reason);\n  });\n  const setAutoHideTimer = useEventCallback(autoHideDurationParam => {\n    if (!onClose || autoHideDurationParam == null) {\n      return;\n    }\n    timerAutoHide.start(autoHideDurationParam, () => {\n      handleClose(null, 'timeout');\n    });\n  });\n  React.useEffect(() => {\n    if (open) {\n      setAutoHideTimer(autoHideDuration);\n    }\n    return timerAutoHide.clear;\n  }, [open, autoHideDuration, setAutoHideTimer, timerAutoHide]);\n  const handleClickAway = event => {\n    onClose?.(event, 'clickaway');\n  };\n\n  // Pause the timer when the user is interacting with the Snackbar\n  // or when the user hide the window.\n  const handlePause = timerAutoHide.clear;\n\n  // Restart the timer when the user is no longer interacting with the Snackbar\n  // or when the window is shown back.\n  const handleResume = React.useCallback(() => {\n    if (autoHideDuration != null) {\n      setAutoHideTimer(resumeHideDuration != null ? resumeHideDuration : autoHideDuration * 0.5);\n    }\n  }, [autoHideDuration, resumeHideDuration, setAutoHideTimer]);\n  const createHandleBlur = otherHandlers => event => {\n    const onBlurCallback = otherHandlers.onBlur;\n    onBlurCallback?.(event);\n    handleResume();\n  };\n  const createHandleFocus = otherHandlers => event => {\n    const onFocusCallback = otherHandlers.onFocus;\n    onFocusCallback?.(event);\n    handlePause();\n  };\n  const createMouseEnter = otherHandlers => event => {\n    const onMouseEnterCallback = otherHandlers.onMouseEnter;\n    onMouseEnterCallback?.(event);\n    handlePause();\n  };\n  const createMouseLeave = otherHandlers => event => {\n    const onMouseLeaveCallback = otherHandlers.onMouseLeave;\n    onMouseLeaveCallback?.(event);\n    handleResume();\n  };\n  React.useEffect(() => {\n    // TODO: window global should be refactored here\n    if (!disableWindowBlurListener && open) {\n      window.addEventListener('focus', handleResume);\n      window.addEventListener('blur', handlePause);\n      return () => {\n        window.removeEventListener('focus', handleResume);\n        window.removeEventListener('blur', handlePause);\n      };\n    }\n    return undefined;\n  }, [disableWindowBlurListener, open, handleResume, handlePause]);\n  const getRootProps = (externalProps = {}) => {\n    const externalEventHandlers = {\n      ...extractEventHandlers(parameters),\n      ...extractEventHandlers(externalProps)\n    };\n    return {\n      // ClickAwayListener adds an `onClick` prop which results in the alert not being announced.\n      // See https://github.com/mui/material-ui/issues/29080\n      role: 'presentation',\n      ...externalProps,\n      ...externalEventHandlers,\n      onBlur: createHandleBlur(externalEventHandlers),\n      onFocus: createHandleFocus(externalEventHandlers),\n      onMouseEnter: createMouseEnter(externalEventHandlers),\n      onMouseLeave: createMouseLeave(externalEventHandlers)\n    };\n  };\n  return {\n    getRootProps,\n    onClickAway: handleClickAway\n  };\n}\nexport default useSnackbar;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSnackbarContentUtilityClass(slot) {\n  return generateUtilityClass('MuiSnackbarContent', slot);\n}\nconst snackbarContentClasses = generateUtilityClasses('MuiSnackbarContent', ['root', 'message', 'action']);\nexport default snackbarContentClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { emphasize } from '@mui/system/colorManipulator';\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport Paper from \"../Paper/index.js\";\nimport { getSnackbarContentUtilityClass } from \"./snackbarContentClasses.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root'],\n    action: ['action'],\n    message: ['message']\n  };\n  return composeClasses(slots, getSnackbarContentUtilityClass, classes);\n};\nconst SnackbarContentRoot = styled(Paper, {\n  name: 'MuiSnackbarContent',\n  slot: 'Root'\n})(memoTheme(({\n  theme\n}) => {\n  const emphasis = theme.palette.mode === 'light' ? 0.8 : 0.98;\n  return {\n    ...theme.typography.body2,\n    color: theme.vars ? theme.vars.palette.SnackbarContent.color : theme.palette.getContrastText(emphasize(theme.palette.background.default, emphasis)),\n    backgroundColor: theme.vars ? theme.vars.palette.SnackbarContent.bg : emphasize(theme.palette.background.default, emphasis),\n    display: 'flex',\n    alignItems: 'center',\n    flexWrap: 'wrap',\n    padding: '6px 16px',\n    flexGrow: 1,\n    [theme.breakpoints.up('sm')]: {\n      flexGrow: 'initial',\n      minWidth: 288\n    }\n  };\n}));\nconst SnackbarContentMessage = styled('div', {\n  name: 'MuiSnackbarContent',\n  slot: 'Message'\n})({\n  padding: '8px 0'\n});\nconst SnackbarContentAction = styled('div', {\n  name: 'MuiSnackbarContent',\n  slot: 'Action'\n})({\n  display: 'flex',\n  alignItems: 'center',\n  marginLeft: 'auto',\n  paddingLeft: 16,\n  marginRight: -8\n});\nconst SnackbarContent = /*#__PURE__*/React.forwardRef(function SnackbarContent(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiSnackbarContent'\n  });\n  const {\n    action,\n    className,\n    message,\n    role = 'alert',\n    ...other\n  } = props;\n  const ownerState = props;\n  const classes = useUtilityClasses(ownerState);\n  return /*#__PURE__*/_jsxs(SnackbarContentRoot, {\n    role: role,\n    elevation: 6,\n    className: clsx(classes.root, className),\n    ownerState: ownerState,\n    ref: ref,\n    ...other,\n    children: [/*#__PURE__*/_jsx(SnackbarContentMessage, {\n      className: classes.message,\n      ownerState: ownerState,\n      children: message\n    }), action ? /*#__PURE__*/_jsx(SnackbarContentAction, {\n      className: classes.action,\n      ownerState: ownerState,\n      children: action\n    }) : null]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? SnackbarContent.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The action to display. It renders after the message, at the end of the snackbar.\n   */\n  action: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The message to display.\n   */\n  message: PropTypes.node,\n  /**\n   * The ARIA role attribute of the element.\n   * @default 'alert'\n   */\n  role: PropTypes.string,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default SnackbarContent;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getSnackbarUtilityClass(slot) {\n  return generateUtilityClass('MuiSnackbar', slot);\n}\nconst snackbarClasses = generateUtilityClasses('MuiSnackbar', ['root', 'anchorOriginTopCenter', 'anchorOriginBottomCenter', 'anchorOriginTopRight', 'anchorOriginBottomRight', 'anchorOriginTopLeft', 'anchorOriginBottomLeft']);\nexport default snackbarClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport composeClasses from '@mui/utils/composeClasses';\nimport useSnackbar from \"./useSnackbar.js\";\nimport ClickAwayListener from \"../ClickAwayListener/index.js\";\nimport { styled, useTheme } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport Grow from \"../Grow/index.js\";\nimport SnackbarContent from \"../SnackbarContent/index.js\";\nimport { getSnackbarUtilityClass } from \"./snackbarClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    anchorOrigin\n  } = ownerState;\n  const slots = {\n    root: ['root', `anchorOrigin${capitalize(anchorOrigin.vertical)}${capitalize(anchorOrigin.horizontal)}`]\n  };\n  return composeClasses(slots, getSnackbarUtilityClass, classes);\n};\nconst SnackbarRoot = styled('div', {\n  name: 'MuiSnackbar',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[`anchorOrigin${capitalize(ownerState.anchorOrigin.vertical)}${capitalize(ownerState.anchorOrigin.horizontal)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  zIndex: (theme.vars || theme).zIndex.snackbar,\n  position: 'fixed',\n  display: 'flex',\n  left: 8,\n  right: 8,\n  justifyContent: 'center',\n  alignItems: 'center',\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.anchorOrigin.vertical === 'top',\n    style: {\n      top: 8,\n      [theme.breakpoints.up('sm')]: {\n        top: 24\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.anchorOrigin.vertical !== 'top',\n    style: {\n      bottom: 8,\n      [theme.breakpoints.up('sm')]: {\n        bottom: 24\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.anchorOrigin.horizontal === 'left',\n    style: {\n      justifyContent: 'flex-start',\n      [theme.breakpoints.up('sm')]: {\n        left: 24,\n        right: 'auto'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.anchorOrigin.horizontal === 'right',\n    style: {\n      justifyContent: 'flex-end',\n      [theme.breakpoints.up('sm')]: {\n        right: 24,\n        left: 'auto'\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.anchorOrigin.horizontal === 'center',\n    style: {\n      [theme.breakpoints.up('sm')]: {\n        left: '50%',\n        right: 'auto',\n        transform: 'translateX(-50%)'\n      }\n    }\n  }]\n})));\nconst Snackbar = /*#__PURE__*/React.forwardRef(function Snackbar(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiSnackbar'\n  });\n  const theme = useTheme();\n  const defaultTransitionDuration = {\n    enter: theme.transitions.duration.enteringScreen,\n    exit: theme.transitions.duration.leavingScreen\n  };\n  const {\n    action,\n    anchorOrigin: {\n      vertical,\n      horizontal\n    } = {\n      vertical: 'bottom',\n      horizontal: 'left'\n    },\n    autoHideDuration = null,\n    children,\n    className,\n    ClickAwayListenerProps: ClickAwayListenerPropsProp,\n    ContentProps: ContentPropsProp,\n    disableWindowBlurListener = false,\n    message,\n    onBlur,\n    onClose,\n    onFocus,\n    onMouseEnter,\n    onMouseLeave,\n    open,\n    resumeHideDuration,\n    slots = {},\n    slotProps = {},\n    TransitionComponent: TransitionComponentProp,\n    transitionDuration = defaultTransitionDuration,\n    TransitionProps: {\n      onEnter,\n      onExited,\n      ...TransitionPropsProp\n    } = {},\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    anchorOrigin: {\n      vertical,\n      horizontal\n    },\n    autoHideDuration,\n    disableWindowBlurListener,\n    TransitionComponent: TransitionComponentProp,\n    transitionDuration\n  };\n  const classes = useUtilityClasses(ownerState);\n  const {\n    getRootProps,\n    onClickAway\n  } = useSnackbar({\n    ...ownerState\n  });\n  const [exited, setExited] = React.useState(true);\n  const handleExited = node => {\n    setExited(true);\n    if (onExited) {\n      onExited(node);\n    }\n  };\n  const handleEnter = (node, isAppearing) => {\n    setExited(false);\n    if (onEnter) {\n      onEnter(node, isAppearing);\n    }\n  };\n  const externalForwardedProps = {\n    slots: {\n      transition: TransitionComponentProp,\n      ...slots\n    },\n    slotProps: {\n      content: ContentPropsProp,\n      clickAwayListener: ClickAwayListenerPropsProp,\n      transition: TransitionPropsProp,\n      ...slotProps\n    }\n  };\n  const [Root, rootProps] = useSlot('root', {\n    ref,\n    className: [classes.root, className],\n    elementType: SnackbarRoot,\n    getSlotProps: getRootProps,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      ...other\n    },\n    ownerState\n  });\n  const [ClickAwaySlot, {\n    ownerState: clickAwayOwnerStateProp,\n    ...clickAwayListenerProps\n  }] = useSlot('clickAwayListener', {\n    elementType: ClickAwayListener,\n    externalForwardedProps,\n    getSlotProps: handlers => ({\n      onClickAway: (...params) => {\n        const event = params[0];\n        handlers.onClickAway?.(...params);\n        if (event?.defaultMuiPrevented) {\n          return;\n        }\n        onClickAway(...params);\n      }\n    }),\n    ownerState\n  });\n  const [ContentSlot, contentSlotProps] = useSlot('content', {\n    elementType: SnackbarContent,\n    shouldForwardComponentProp: true,\n    externalForwardedProps,\n    additionalProps: {\n      message,\n      action\n    },\n    ownerState\n  });\n  const [TransitionSlot, transitionProps] = useSlot('transition', {\n    elementType: Grow,\n    externalForwardedProps,\n    getSlotProps: handlers => ({\n      onEnter: (...params) => {\n        handlers.onEnter?.(...params);\n        handleEnter(...params);\n      },\n      onExited: (...params) => {\n        handlers.onExited?.(...params);\n        handleExited(...params);\n      }\n    }),\n    additionalProps: {\n      appear: true,\n      in: open,\n      timeout: transitionDuration,\n      direction: vertical === 'top' ? 'down' : 'up'\n    },\n    ownerState\n  });\n\n  // So we only render active snackbars.\n  if (!open && exited) {\n    return null;\n  }\n  return /*#__PURE__*/_jsx(ClickAwaySlot, {\n    ...clickAwayListenerProps,\n    ...(slots.clickAwayListener && {\n      ownerState: clickAwayOwnerStateProp\n    }),\n    children: /*#__PURE__*/_jsx(Root, {\n      ...rootProps,\n      children: /*#__PURE__*/_jsx(TransitionSlot, {\n        ...transitionProps,\n        children: children || /*#__PURE__*/_jsx(ContentSlot, {\n          ...contentSlotProps\n        })\n      })\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Snackbar.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The action to display. It renders after the message, at the end of the snackbar.\n   */\n  action: PropTypes.node,\n  /**\n   * The anchor of the `Snackbar`.\n   * On smaller screens, the component grows to occupy all the available width,\n   * the horizontal alignment is ignored.\n   * @default { vertical: 'bottom', horizontal: 'left' }\n   */\n  anchorOrigin: PropTypes.shape({\n    horizontal: PropTypes.oneOf(['center', 'left', 'right']).isRequired,\n    vertical: PropTypes.oneOf(['bottom', 'top']).isRequired\n  }),\n  /**\n   * The number of milliseconds to wait before automatically calling the\n   * `onClose` function. `onClose` should then set the state of the `open`\n   * prop to hide the Snackbar. This behavior is disabled by default with\n   * the `null` value.\n   * @default null\n   */\n  autoHideDuration: PropTypes.number,\n  /**\n   * Replace the `SnackbarContent` component.\n   */\n  children: PropTypes.element,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * Props applied to the `ClickAwayListener` element.\n   * @deprecated Use `slotProps.clickAwayListener` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  ClickAwayListenerProps: PropTypes.object,\n  /**\n   * Props applied to the [`SnackbarContent`](https://mui.com/material-ui/api/snackbar-content/) element.\n   * @deprecated Use `slotProps.content` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  ContentProps: PropTypes.object,\n  /**\n   * If `true`, the `autoHideDuration` timer will expire even if the window is not focused.\n   * @default false\n   */\n  disableWindowBlurListener: PropTypes.bool,\n  /**\n   * When displaying multiple consecutive snackbars using a single parent-rendered\n   * `<Snackbar/>`, add the `key` prop to ensure independent treatment of each message.\n   * For instance, use `<Snackbar key={message} />`. Otherwise, messages might update\n   * in place, and features like `autoHideDuration` could be affected.\n   */\n  key: () => null,\n  /**\n   * The message to display.\n   */\n  message: PropTypes.node,\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n  /**\n   * Callback fired when the component requests to be closed.\n   * Typically `onClose` is used to set state in the parent component,\n   * which is used to control the `Snackbar` `open` prop.\n   * The `reason` parameter can optionally be used to control the response to `onClose`,\n   * for example ignoring `clickaway`.\n   *\n   * @param {React.SyntheticEvent<any> | Event} event The event source of the callback.\n   * @param {string} reason Can be: `\"timeout\"` (`autoHideDuration` expired), `\"clickaway\"`, or `\"escapeKeyDown\"`.\n   */\n  onClose: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onMouseEnter: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onMouseLeave: PropTypes.func,\n  /**\n   * If `true`, the component is shown.\n   */\n  open: PropTypes.bool,\n  /**\n   * The number of milliseconds to wait before dismissing after user interaction.\n   * If `autoHideDuration` prop isn't specified, it does nothing.\n   * If `autoHideDuration` prop is specified but `resumeHideDuration` isn't,\n   * we default to `autoHideDuration / 2` ms.\n   */\n  resumeHideDuration: PropTypes.number,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes /* @typescript-to-proptypes-ignore */.shape({\n    clickAwayListener: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    content: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    transition: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    clickAwayListener: PropTypes.elementType,\n    content: PropTypes.elementType,\n    root: PropTypes.elementType,\n    transition: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The component used for the transition.\n   * [Follow this guide](https://mui.com/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n   * @deprecated Use `slots.transition` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default Grow\n   */\n  TransitionComponent: PropTypes.elementType,\n  /**\n   * The duration for the transition, in milliseconds.\n   * You may specify a single timeout for all transitions, or individually with an object.\n   * @default {\n   *   enter: theme.transitions.duration.enteringScreen,\n   *   exit: theme.transitions.duration.leavingScreen,\n   * }\n   */\n  transitionDuration: PropTypes.oneOfType([PropTypes.number, PropTypes.shape({\n    appear: PropTypes.number,\n    enter: PropTypes.number,\n    exit: PropTypes.number\n  })]),\n  /**\n   * Props applied to the transition element.\n   * By default, the element is based on this [`Transition`](https://reactcommunity.org/react-transition-group/transition/) component.\n   * @deprecated Use `slotProps.transition` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default {}\n   */\n  TransitionProps: PropTypes.object\n} : void 0;\nexport default Snackbar;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getTabUtilityClass(slot) {\n  return generateUtilityClass('MuiTab', slot);\n}\nconst tabClasses = generateUtilityClasses('MuiTab', ['root', 'labelIcon', 'textColorInherit', 'textColorPrimary', 'textColorSecondary', 'selected', 'disabled', 'fullWidth', 'wrapped', 'iconWrapper', 'icon']);\nexport default tabClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport ButtonBase from \"../ButtonBase/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport unsupportedProp from \"../utils/unsupportedProp.js\";\nimport tabClasses, { getTabUtilityClass } from \"./tabClasses.js\";\nimport { jsxs as _jsxs } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    textColor,\n    fullWidth,\n    wrapped,\n    icon,\n    label,\n    selected,\n    disabled\n  } = ownerState;\n  const slots = {\n    root: ['root', icon && label && 'labelIcon', `textColor${capitalize(textColor)}`, fullWidth && 'fullWidth', wrapped && 'wrapped', selected && 'selected', disabled && 'disabled'],\n    icon: ['iconWrapper', 'icon']\n  };\n  return composeClasses(slots, getTabUtilityClass, classes);\n};\nconst TabRoot = styled(ButtonBase, {\n  name: 'MuiTab',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.label && ownerState.icon && styles.labelIcon, styles[`textColor${capitalize(ownerState.textColor)}`], ownerState.fullWidth && styles.fullWidth, ownerState.wrapped && styles.wrapped, {\n      [`& .${tabClasses.iconWrapper}`]: styles.iconWrapper\n    }, {\n      [`& .${tabClasses.icon}`]: styles.icon\n    }];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  ...theme.typography.button,\n  maxWidth: 360,\n  minWidth: 90,\n  position: 'relative',\n  minHeight: 48,\n  flexShrink: 0,\n  padding: '12px 16px',\n  overflow: 'hidden',\n  whiteSpace: 'normal',\n  textAlign: 'center',\n  lineHeight: 1.25,\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.label && (ownerState.iconPosition === 'top' || ownerState.iconPosition === 'bottom'),\n    style: {\n      flexDirection: 'column'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.label && ownerState.iconPosition !== 'top' && ownerState.iconPosition !== 'bottom',\n    style: {\n      flexDirection: 'row'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.icon && ownerState.label,\n    style: {\n      minHeight: 72,\n      paddingTop: 9,\n      paddingBottom: 9\n    }\n  }, {\n    props: ({\n      ownerState,\n      iconPosition\n    }) => ownerState.icon && ownerState.label && iconPosition === 'top',\n    style: {\n      [`& > .${tabClasses.icon}`]: {\n        marginBottom: 6\n      }\n    }\n  }, {\n    props: ({\n      ownerState,\n      iconPosition\n    }) => ownerState.icon && ownerState.label && iconPosition === 'bottom',\n    style: {\n      [`& > .${tabClasses.icon}`]: {\n        marginTop: 6\n      }\n    }\n  }, {\n    props: ({\n      ownerState,\n      iconPosition\n    }) => ownerState.icon && ownerState.label && iconPosition === 'start',\n    style: {\n      [`& > .${tabClasses.icon}`]: {\n        marginRight: theme.spacing(1)\n      }\n    }\n  }, {\n    props: ({\n      ownerState,\n      iconPosition\n    }) => ownerState.icon && ownerState.label && iconPosition === 'end',\n    style: {\n      [`& > .${tabClasses.icon}`]: {\n        marginLeft: theme.spacing(1)\n      }\n    }\n  }, {\n    props: {\n      textColor: 'inherit'\n    },\n    style: {\n      color: 'inherit',\n      opacity: 0.6,\n      // same opacity as theme.palette.text.secondary\n      [`&.${tabClasses.selected}`]: {\n        opacity: 1\n      },\n      [`&.${tabClasses.disabled}`]: {\n        opacity: (theme.vars || theme).palette.action.disabledOpacity\n      }\n    }\n  }, {\n    props: {\n      textColor: 'primary'\n    },\n    style: {\n      color: (theme.vars || theme).palette.text.secondary,\n      [`&.${tabClasses.selected}`]: {\n        color: (theme.vars || theme).palette.primary.main\n      },\n      [`&.${tabClasses.disabled}`]: {\n        color: (theme.vars || theme).palette.text.disabled\n      }\n    }\n  }, {\n    props: {\n      textColor: 'secondary'\n    },\n    style: {\n      color: (theme.vars || theme).palette.text.secondary,\n      [`&.${tabClasses.selected}`]: {\n        color: (theme.vars || theme).palette.secondary.main\n      },\n      [`&.${tabClasses.disabled}`]: {\n        color: (theme.vars || theme).palette.text.disabled\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.fullWidth,\n    style: {\n      flexShrink: 1,\n      flexGrow: 1,\n      flexBasis: 0,\n      maxWidth: 'none'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.wrapped,\n    style: {\n      fontSize: theme.typography.pxToRem(12)\n    }\n  }]\n})));\nconst Tab = /*#__PURE__*/React.forwardRef(function Tab(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiTab'\n  });\n  const {\n    className,\n    disabled = false,\n    disableFocusRipple = false,\n    // eslint-disable-next-line react/prop-types\n    fullWidth,\n    icon: iconProp,\n    iconPosition = 'top',\n    // eslint-disable-next-line react/prop-types\n    indicator,\n    label,\n    onChange,\n    onClick,\n    onFocus,\n    // eslint-disable-next-line react/prop-types\n    selected,\n    // eslint-disable-next-line react/prop-types\n    selectionFollowsFocus,\n    // eslint-disable-next-line react/prop-types\n    textColor = 'inherit',\n    value,\n    wrapped = false,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    disabled,\n    disableFocusRipple,\n    selected,\n    icon: !!iconProp,\n    iconPosition,\n    label: !!label,\n    fullWidth,\n    textColor,\n    wrapped\n  };\n  const classes = useUtilityClasses(ownerState);\n  const icon = iconProp && label && /*#__PURE__*/React.isValidElement(iconProp) ? /*#__PURE__*/React.cloneElement(iconProp, {\n    className: clsx(classes.icon, iconProp.props.className)\n  }) : iconProp;\n  const handleClick = event => {\n    if (!selected && onChange) {\n      onChange(event, value);\n    }\n    if (onClick) {\n      onClick(event);\n    }\n  };\n  const handleFocus = event => {\n    if (selectionFollowsFocus && !selected && onChange) {\n      onChange(event, value);\n    }\n    if (onFocus) {\n      onFocus(event);\n    }\n  };\n  return /*#__PURE__*/_jsxs(TabRoot, {\n    focusRipple: !disableFocusRipple,\n    className: clsx(classes.root, className),\n    ref: ref,\n    role: \"tab\",\n    \"aria-selected\": selected,\n    disabled: disabled,\n    onClick: handleClick,\n    onFocus: handleFocus,\n    ownerState: ownerState,\n    tabIndex: selected ? 0 : -1,\n    ...other,\n    children: [iconPosition === 'top' || iconPosition === 'start' ? /*#__PURE__*/_jsxs(React.Fragment, {\n      children: [icon, label]\n    }) : /*#__PURE__*/_jsxs(React.Fragment, {\n      children: [label, icon]\n    }), indicator]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Tab.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * This prop isn't supported.\n   * Use the `component` prop if you need to change the children structure.\n   */\n  children: unsupportedProp,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the  keyboard focus ripple is disabled.\n   * @default false\n   */\n  disableFocusRipple: PropTypes.bool,\n  /**\n   * If `true`, the ripple effect is disabled.\n   *\n   * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n   * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.\n   * @default false\n   */\n  disableRipple: PropTypes.bool,\n  /**\n   * The icon to display.\n   */\n  icon: PropTypes.oneOfType([PropTypes.element, PropTypes.string]),\n  /**\n   * The position of the icon relative to the label.\n   * @default 'top'\n   */\n  iconPosition: PropTypes.oneOf(['bottom', 'end', 'start', 'top']),\n  /**\n   * The label element.\n   */\n  label: PropTypes.node,\n  /**\n   * @ignore\n   */\n  onChange: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onClick: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * You can provide your own value. Otherwise, we fallback to the child position index.\n   */\n  value: PropTypes.any,\n  /**\n   * Tab labels appear in a single row.\n   * They can use a second line if needed.\n   * @default false\n   */\n  wrapped: PropTypes.bool\n} : void 0;\nexport default Tab;","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M15.41 16.09l-4.58-4.59 4.58-4.59L14 5.5l-6 6 6 6z\"\n}), 'KeyboardArrowLeft');","'use client';\n\nimport createSvgIcon from \"../../utils/createSvgIcon.js\";\n\n/**\n * @ignore - internal component.\n */\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z\"\n}), 'KeyboardArrowRight');","function easeInOutSin(time) {\n  return (1 + Math.sin(Math.PI * time - Math.PI / 2)) / 2;\n}\nexport default function animate(property, element, to, options = {}, cb = () => {}) {\n  const {\n    ease = easeInOutSin,\n    duration = 300 // standard\n  } = options;\n  let start = null;\n  const from = element[property];\n  let cancelled = false;\n  const cancel = () => {\n    cancelled = true;\n  };\n  const step = timestamp => {\n    if (cancelled) {\n      cb(new Error('Animation cancelled'));\n      return;\n    }\n    if (start === null) {\n      start = timestamp;\n    }\n    const time = Math.min(1, (timestamp - start) / duration);\n    element[property] = ease(time) * (to - from) + from;\n    if (time >= 1) {\n      requestAnimationFrame(() => {\n        cb(null);\n      });\n      return;\n    }\n    requestAnimationFrame(step);\n  };\n  if (from === to) {\n    cb(new Error('Element already at target position'));\n    return cancel;\n  }\n  requestAnimationFrame(step);\n  return cancel;\n}","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from \"../utils/debounce.js\";\nimport { ownerWindow, unstable_useEnhancedEffect as useEnhancedEffect } from \"../utils/index.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst styles = {\n  width: 99,\n  height: 99,\n  position: 'absolute',\n  top: -9999,\n  overflow: 'scroll'\n};\n\n/**\n * @ignore - internal component.\n * The component originates from https://github.com/STORIS/react-scrollbar-size.\n * It has been moved into the core in order to minimize the bundle size.\n */\nexport default function ScrollbarSize(props) {\n  const {\n    onChange,\n    ...other\n  } = props;\n  const scrollbarHeight = React.useRef();\n  const nodeRef = React.useRef(null);\n  const setMeasurements = () => {\n    scrollbarHeight.current = nodeRef.current.offsetHeight - nodeRef.current.clientHeight;\n  };\n  useEnhancedEffect(() => {\n    const handleResize = debounce(() => {\n      const prevHeight = scrollbarHeight.current;\n      setMeasurements();\n      if (prevHeight !== scrollbarHeight.current) {\n        onChange(scrollbarHeight.current);\n      }\n    });\n    const containerWindow = ownerWindow(nodeRef.current);\n    containerWindow.addEventListener('resize', handleResize);\n    return () => {\n      handleResize.clear();\n      containerWindow.removeEventListener('resize', handleResize);\n    };\n  }, [onChange]);\n  React.useEffect(() => {\n    setMeasurements();\n    onChange(scrollbarHeight.current);\n  }, [onChange]);\n  return /*#__PURE__*/_jsx(\"div\", {\n    style: styles,\n    ...other,\n    ref: nodeRef\n  });\n}\nprocess.env.NODE_ENV !== \"production\" ? ScrollbarSize.propTypes = {\n  onChange: PropTypes.func.isRequired\n} : void 0;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getTabScrollButtonUtilityClass(slot) {\n  return generateUtilityClass('MuiTabScrollButton', slot);\n}\nconst tabScrollButtonClasses = generateUtilityClasses('MuiTabScrollButton', ['root', 'vertical', 'horizontal', 'disabled']);\nexport default tabScrollButtonClasses;","'use client';\n\n/* eslint-disable jsx-a11y/aria-role */\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport useSlotProps from '@mui/utils/useSlotProps';\nimport KeyboardArrowLeft from \"../internal/svg-icons/KeyboardArrowLeft.js\";\nimport KeyboardArrowRight from \"../internal/svg-icons/KeyboardArrowRight.js\";\nimport ButtonBase from \"../ButtonBase/index.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport tabScrollButtonClasses, { getTabScrollButtonUtilityClass } from \"./tabScrollButtonClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    orientation,\n    disabled\n  } = ownerState;\n  const slots = {\n    root: ['root', orientation, disabled && 'disabled']\n  };\n  return composeClasses(slots, getTabScrollButtonUtilityClass, classes);\n};\nconst TabScrollButtonRoot = styled(ButtonBase, {\n  name: 'MuiTabScrollButton',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, ownerState.orientation && styles[ownerState.orientation]];\n  }\n})({\n  width: 40,\n  flexShrink: 0,\n  opacity: 0.8,\n  [`&.${tabScrollButtonClasses.disabled}`]: {\n    opacity: 0\n  },\n  variants: [{\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      width: '100%',\n      height: 40,\n      '& svg': {\n        transform: 'var(--TabScrollButton-svgRotate)'\n      }\n    }\n  }]\n});\nconst TabScrollButton = /*#__PURE__*/React.forwardRef(function TabScrollButton(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiTabScrollButton'\n  });\n  const {\n    className,\n    slots = {},\n    slotProps = {},\n    direction,\n    orientation,\n    disabled,\n    ...other\n  } = props;\n  const isRtl = useRtl();\n  const ownerState = {\n    isRtl,\n    ...props\n  };\n  const classes = useUtilityClasses(ownerState);\n  const StartButtonIcon = slots.StartScrollButtonIcon ?? KeyboardArrowLeft;\n  const EndButtonIcon = slots.EndScrollButtonIcon ?? KeyboardArrowRight;\n  const startButtonIconProps = useSlotProps({\n    elementType: StartButtonIcon,\n    externalSlotProps: slotProps.startScrollButtonIcon,\n    additionalProps: {\n      fontSize: 'small'\n    },\n    ownerState\n  });\n  const endButtonIconProps = useSlotProps({\n    elementType: EndButtonIcon,\n    externalSlotProps: slotProps.endScrollButtonIcon,\n    additionalProps: {\n      fontSize: 'small'\n    },\n    ownerState\n  });\n  return /*#__PURE__*/_jsx(TabScrollButtonRoot, {\n    component: \"div\",\n    className: clsx(classes.root, className),\n    ref: ref,\n    role: null,\n    ownerState: ownerState,\n    tabIndex: null,\n    ...other,\n    style: {\n      ...other.style,\n      ...(orientation === 'vertical' && {\n        '--TabScrollButton-svgRotate': `rotate(${isRtl ? -90 : 90}deg)`\n      })\n    },\n    children: direction === 'left' ? /*#__PURE__*/_jsx(StartButtonIcon, {\n      ...startButtonIconProps\n    }) : /*#__PURE__*/_jsx(EndButtonIcon, {\n      ...endButtonIconProps\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? TabScrollButton.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The direction the button should indicate.\n   */\n  direction: PropTypes.oneOf(['left', 'right']).isRequired,\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * The component orientation (layout flow direction).\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']).isRequired,\n  /**\n   * The extra props for the slot components.\n   * You can override the existing props or add new ones.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    endScrollButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    startScrollButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    EndScrollButtonIcon: PropTypes.elementType,\n    StartScrollButtonIcon: PropTypes.elementType\n  }),\n  /**\n   * @ignore\n   */\n  style: PropTypes.object,\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])\n} : void 0;\nexport default TabScrollButton;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getTabsUtilityClass(slot) {\n  return generateUtilityClass('MuiTabs', slot);\n}\nconst tabsClasses = generateUtilityClasses('MuiTabs', ['root', 'vertical', 'list', 'flexContainer', 'flexContainerVertical', 'centered', 'scroller', 'fixed', 'scrollableX', 'scrollableY', 'hideScrollbar', 'scrollButtons', 'scrollButtonsHideMobile', 'indicator']);\nexport default tabsClasses;","'use client';\n\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport refType from '@mui/utils/refType';\nimport composeClasses from '@mui/utils/composeClasses';\nimport { useRtl } from '@mui/system/RtlProvider';\nimport useSlotProps from '@mui/utils/useSlotProps';\nimport { styled, useTheme } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport debounce from \"../utils/debounce.js\";\nimport animate from \"../internal/animate.js\";\nimport ScrollbarSize from \"./ScrollbarSize.js\";\nimport TabScrollButton from \"../TabScrollButton/index.js\";\nimport useEventCallback from \"../utils/useEventCallback.js\";\nimport tabsClasses, { getTabsUtilityClass } from \"./tabsClasses.js\";\nimport ownerDocument from \"../utils/ownerDocument.js\";\nimport ownerWindow from \"../utils/ownerWindow.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst nextItem = (list, item) => {\n  if (list === item) {\n    return list.firstChild;\n  }\n  if (item && item.nextElementSibling) {\n    return item.nextElementSibling;\n  }\n  return list.firstChild;\n};\nconst previousItem = (list, item) => {\n  if (list === item) {\n    return list.lastChild;\n  }\n  if (item && item.previousElementSibling) {\n    return item.previousElementSibling;\n  }\n  return list.lastChild;\n};\nconst moveFocus = (list, currentFocus, traversalFunction) => {\n  let wrappedOnce = false;\n  let nextFocus = traversalFunction(list, currentFocus);\n  while (nextFocus) {\n    // Prevent infinite loop.\n    if (nextFocus === list.firstChild) {\n      if (wrappedOnce) {\n        return;\n      }\n      wrappedOnce = true;\n    }\n\n    // Same logic as useAutocomplete.js\n    const nextFocusDisabled = nextFocus.disabled || nextFocus.getAttribute('aria-disabled') === 'true';\n    if (!nextFocus.hasAttribute('tabindex') || nextFocusDisabled) {\n      // Move to the next element.\n      nextFocus = traversalFunction(list, nextFocus);\n    } else {\n      nextFocus.focus();\n      return;\n    }\n  }\n};\nconst useUtilityClasses = ownerState => {\n  const {\n    vertical,\n    fixed,\n    hideScrollbar,\n    scrollableX,\n    scrollableY,\n    centered,\n    scrollButtonsHideMobile,\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root', vertical && 'vertical'],\n    scroller: ['scroller', fixed && 'fixed', hideScrollbar && 'hideScrollbar', scrollableX && 'scrollableX', scrollableY && 'scrollableY'],\n    list: ['list', 'flexContainer', vertical && 'flexContainerVertical', vertical && 'vertical', centered && 'centered'],\n    indicator: ['indicator'],\n    scrollButtons: ['scrollButtons', scrollButtonsHideMobile && 'scrollButtonsHideMobile'],\n    scrollableX: [scrollableX && 'scrollableX'],\n    hideScrollbar: [hideScrollbar && 'hideScrollbar']\n  };\n  return composeClasses(slots, getTabsUtilityClass, classes);\n};\nconst TabsRoot = styled('div', {\n  name: 'MuiTabs',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [{\n      [`& .${tabsClasses.scrollButtons}`]: styles.scrollButtons\n    }, {\n      [`& .${tabsClasses.scrollButtons}`]: ownerState.scrollButtonsHideMobile && styles.scrollButtonsHideMobile\n    }, styles.root, ownerState.vertical && styles.vertical];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  overflow: 'hidden',\n  minHeight: 48,\n  // Add iOS momentum scrolling for iOS < 13.0\n  WebkitOverflowScrolling: 'touch',\n  display: 'flex',\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.vertical,\n    style: {\n      flexDirection: 'column'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.scrollButtonsHideMobile,\n    style: {\n      [`& .${tabsClasses.scrollButtons}`]: {\n        [theme.breakpoints.down('sm')]: {\n          display: 'none'\n        }\n      }\n    }\n  }]\n})));\nconst TabsScroller = styled('div', {\n  name: 'MuiTabs',\n  slot: 'Scroller',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.scroller, ownerState.fixed && styles.fixed, ownerState.hideScrollbar && styles.hideScrollbar, ownerState.scrollableX && styles.scrollableX, ownerState.scrollableY && styles.scrollableY];\n  }\n})({\n  position: 'relative',\n  display: 'inline-block',\n  flex: '1 1 auto',\n  whiteSpace: 'nowrap',\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.fixed,\n    style: {\n      overflowX: 'hidden',\n      width: '100%'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.hideScrollbar,\n    style: {\n      // Hide dimensionless scrollbar on macOS\n      scrollbarWidth: 'none',\n      // Firefox\n      '&::-webkit-scrollbar': {\n        display: 'none' // Safari + Chrome\n      }\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.scrollableX,\n    style: {\n      overflowX: 'auto',\n      overflowY: 'hidden'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.scrollableY,\n    style: {\n      overflowY: 'auto',\n      overflowX: 'hidden'\n    }\n  }]\n});\nconst List = styled('div', {\n  name: 'MuiTabs',\n  slot: 'List',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.list, styles.flexContainer, ownerState.vertical && styles.flexContainerVertical, ownerState.centered && styles.centered];\n  }\n})({\n  display: 'flex',\n  variants: [{\n    props: ({\n      ownerState\n    }) => ownerState.vertical,\n    style: {\n      flexDirection: 'column'\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.centered,\n    style: {\n      justifyContent: 'center'\n    }\n  }]\n});\nconst TabsIndicator = styled('span', {\n  name: 'MuiTabs',\n  slot: 'Indicator'\n})(memoTheme(({\n  theme\n}) => ({\n  position: 'absolute',\n  height: 2,\n  bottom: 0,\n  width: '100%',\n  transition: theme.transitions.create(),\n  variants: [{\n    props: {\n      indicatorColor: 'primary'\n    },\n    style: {\n      backgroundColor: (theme.vars || theme).palette.primary.main\n    }\n  }, {\n    props: {\n      indicatorColor: 'secondary'\n    },\n    style: {\n      backgroundColor: (theme.vars || theme).palette.secondary.main\n    }\n  }, {\n    props: ({\n      ownerState\n    }) => ownerState.vertical,\n    style: {\n      height: '100%',\n      width: 2,\n      right: 0\n    }\n  }]\n})));\nconst TabsScrollbarSize = styled(ScrollbarSize)({\n  overflowX: 'auto',\n  overflowY: 'hidden',\n  // Hide dimensionless scrollbar on macOS\n  scrollbarWidth: 'none',\n  // Firefox\n  '&::-webkit-scrollbar': {\n    display: 'none' // Safari + Chrome\n  }\n});\nconst defaultIndicatorStyle = {};\nlet warnedOnceTabPresent = false;\nconst Tabs = /*#__PURE__*/React.forwardRef(function Tabs(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiTabs'\n  });\n  const theme = useTheme();\n  const isRtl = useRtl();\n  const {\n    'aria-label': ariaLabel,\n    'aria-labelledby': ariaLabelledBy,\n    action,\n    centered = false,\n    children: childrenProp,\n    className,\n    component = 'div',\n    allowScrollButtonsMobile = false,\n    indicatorColor = 'primary',\n    onChange,\n    orientation = 'horizontal',\n    ScrollButtonComponent,\n    // TODO: remove in v7 (deprecated in v6)\n    scrollButtons = 'auto',\n    selectionFollowsFocus,\n    slots = {},\n    slotProps = {},\n    TabIndicatorProps = {},\n    // TODO: remove in v7 (deprecated in v6)\n    TabScrollButtonProps = {},\n    // TODO: remove in v7 (deprecated in v6)\n    textColor = 'primary',\n    value,\n    variant = 'standard',\n    visibleScrollbar = false,\n    ...other\n  } = props;\n  const scrollable = variant === 'scrollable';\n  const vertical = orientation === 'vertical';\n  const scrollStart = vertical ? 'scrollTop' : 'scrollLeft';\n  const start = vertical ? 'top' : 'left';\n  const end = vertical ? 'bottom' : 'right';\n  const clientSize = vertical ? 'clientHeight' : 'clientWidth';\n  const size = vertical ? 'height' : 'width';\n  const ownerState = {\n    ...props,\n    component,\n    allowScrollButtonsMobile,\n    indicatorColor,\n    orientation,\n    vertical,\n    scrollButtons,\n    textColor,\n    variant,\n    visibleScrollbar,\n    fixed: !scrollable,\n    hideScrollbar: scrollable && !visibleScrollbar,\n    scrollableX: scrollable && !vertical,\n    scrollableY: scrollable && vertical,\n    centered: centered && !scrollable,\n    scrollButtonsHideMobile: !allowScrollButtonsMobile\n  };\n  const classes = useUtilityClasses(ownerState);\n  const startScrollButtonIconProps = useSlotProps({\n    elementType: slots.StartScrollButtonIcon,\n    externalSlotProps: slotProps.startScrollButtonIcon,\n    ownerState\n  });\n  const endScrollButtonIconProps = useSlotProps({\n    elementType: slots.EndScrollButtonIcon,\n    externalSlotProps: slotProps.endScrollButtonIcon,\n    ownerState\n  });\n  if (process.env.NODE_ENV !== 'production') {\n    if (centered && scrollable) {\n      console.error('MUI: You can not use the `centered={true}` and `variant=\"scrollable\"` properties ' + 'at the same time on a `Tabs` component.');\n    }\n  }\n  const [mounted, setMounted] = React.useState(false);\n  const [indicatorStyle, setIndicatorStyle] = React.useState(defaultIndicatorStyle);\n  const [displayStartScroll, setDisplayStartScroll] = React.useState(false);\n  const [displayEndScroll, setDisplayEndScroll] = React.useState(false);\n  const [updateScrollObserver, setUpdateScrollObserver] = React.useState(false);\n  const [scrollerStyle, setScrollerStyle] = React.useState({\n    overflow: 'hidden',\n    scrollbarWidth: 0\n  });\n  const valueToIndex = new Map();\n  const tabsRef = React.useRef(null);\n  const tabListRef = React.useRef(null);\n  const externalForwardedProps = {\n    slots,\n    slotProps: {\n      indicator: TabIndicatorProps,\n      scrollButton: TabScrollButtonProps,\n      ...slotProps\n    }\n  };\n  const getTabsMeta = () => {\n    const tabsNode = tabsRef.current;\n    let tabsMeta;\n    if (tabsNode) {\n      const rect = tabsNode.getBoundingClientRect();\n      // create a new object with ClientRect class props + scrollLeft\n      tabsMeta = {\n        clientWidth: tabsNode.clientWidth,\n        scrollLeft: tabsNode.scrollLeft,\n        scrollTop: tabsNode.scrollTop,\n        scrollWidth: tabsNode.scrollWidth,\n        top: rect.top,\n        bottom: rect.bottom,\n        left: rect.left,\n        right: rect.right\n      };\n    }\n    let tabMeta;\n    if (tabsNode && value !== false) {\n      const children = tabListRef.current.children;\n      if (children.length > 0) {\n        const tab = children[valueToIndex.get(value)];\n        if (process.env.NODE_ENV !== 'production') {\n          if (!tab) {\n            console.error([`MUI: The \\`value\\` provided to the Tabs component is invalid.`, `None of the Tabs' children match with \"${value}\".`, valueToIndex.keys ? `You can provide one of the following values: ${Array.from(valueToIndex.keys()).join(', ')}.` : null].join('\\n'));\n          }\n        }\n        tabMeta = tab ? tab.getBoundingClientRect() : null;\n        if (process.env.NODE_ENV !== 'production') {\n          if (process.env.NODE_ENV !== 'test' && !warnedOnceTabPresent && tabMeta && tabMeta.width === 0 && tabMeta.height === 0 &&\n          // if the whole Tabs component is hidden, don't warn\n          tabsMeta.clientWidth !== 0) {\n            tabsMeta = null;\n            console.error(['MUI: The `value` provided to the Tabs component is invalid.', `The Tab with this \\`value\\` (\"${value}\") is not part of the document layout.`, \"Make sure the tab item is present in the document or that it's not `display: none`.\"].join('\\n'));\n            warnedOnceTabPresent = true;\n          }\n        }\n      }\n    }\n    return {\n      tabsMeta,\n      tabMeta\n    };\n  };\n  const updateIndicatorState = useEventCallback(() => {\n    const {\n      tabsMeta,\n      tabMeta\n    } = getTabsMeta();\n    let startValue = 0;\n    let startIndicator;\n    if (vertical) {\n      startIndicator = 'top';\n      if (tabMeta && tabsMeta) {\n        startValue = tabMeta.top - tabsMeta.top + tabsMeta.scrollTop;\n      }\n    } else {\n      startIndicator = isRtl ? 'right' : 'left';\n      if (tabMeta && tabsMeta) {\n        startValue = (isRtl ? -1 : 1) * (tabMeta[startIndicator] - tabsMeta[startIndicator] + tabsMeta.scrollLeft);\n      }\n    }\n    const newIndicatorStyle = {\n      [startIndicator]: startValue,\n      // May be wrong until the font is loaded.\n      [size]: tabMeta ? tabMeta[size] : 0\n    };\n    if (typeof indicatorStyle[startIndicator] !== 'number' || typeof indicatorStyle[size] !== 'number') {\n      setIndicatorStyle(newIndicatorStyle);\n    } else {\n      const dStart = Math.abs(indicatorStyle[startIndicator] - newIndicatorStyle[startIndicator]);\n      const dSize = Math.abs(indicatorStyle[size] - newIndicatorStyle[size]);\n      if (dStart >= 1 || dSize >= 1) {\n        setIndicatorStyle(newIndicatorStyle);\n      }\n    }\n  });\n  const scroll = (scrollValue, {\n    animation = true\n  } = {}) => {\n    if (animation) {\n      animate(scrollStart, tabsRef.current, scrollValue, {\n        duration: theme.transitions.duration.standard\n      });\n    } else {\n      tabsRef.current[scrollStart] = scrollValue;\n    }\n  };\n  const moveTabsScroll = delta => {\n    let scrollValue = tabsRef.current[scrollStart];\n    if (vertical) {\n      scrollValue += delta;\n    } else {\n      scrollValue += delta * (isRtl ? -1 : 1);\n    }\n    scroll(scrollValue);\n  };\n  const getScrollSize = () => {\n    const containerSize = tabsRef.current[clientSize];\n    let totalSize = 0;\n    const children = Array.from(tabListRef.current.children);\n    for (let i = 0; i < children.length; i += 1) {\n      const tab = children[i];\n      if (totalSize + tab[clientSize] > containerSize) {\n        // If the first item is longer than the container size, then only scroll\n        // by the container size.\n        if (i === 0) {\n          totalSize = containerSize;\n        }\n        break;\n      }\n      totalSize += tab[clientSize];\n    }\n    return totalSize;\n  };\n  const handleStartScrollClick = () => {\n    moveTabsScroll(-1 * getScrollSize());\n  };\n  const handleEndScrollClick = () => {\n    moveTabsScroll(getScrollSize());\n  };\n  const [ScrollbarSlot, {\n    onChange: scrollbarOnChange,\n    ...scrollbarSlotProps\n  }] = useSlot('scrollbar', {\n    className: clsx(classes.scrollableX, classes.hideScrollbar),\n    elementType: TabsScrollbarSize,\n    shouldForwardComponentProp: true,\n    externalForwardedProps,\n    ownerState\n  });\n\n  // TODO Remove <ScrollbarSize /> as browser support for hiding the scrollbar\n  // with CSS improves.\n  const handleScrollbarSizeChange = React.useCallback(scrollbarWidth => {\n    scrollbarOnChange?.(scrollbarWidth);\n    setScrollerStyle({\n      overflow: null,\n      scrollbarWidth\n    });\n  }, [scrollbarOnChange]);\n  const [ScrollButtonsSlot, scrollButtonSlotProps] = useSlot('scrollButtons', {\n    className: clsx(classes.scrollButtons, TabScrollButtonProps.className),\n    elementType: TabScrollButton,\n    externalForwardedProps,\n    ownerState,\n    additionalProps: {\n      orientation,\n      slots: {\n        StartScrollButtonIcon: slots.startScrollButtonIcon || slots.StartScrollButtonIcon,\n        EndScrollButtonIcon: slots.endScrollButtonIcon || slots.EndScrollButtonIcon\n      },\n      slotProps: {\n        startScrollButtonIcon: startScrollButtonIconProps,\n        endScrollButtonIcon: endScrollButtonIconProps\n      }\n    }\n  });\n  const getConditionalElements = () => {\n    const conditionalElements = {};\n    conditionalElements.scrollbarSizeListener = scrollable ? /*#__PURE__*/_jsx(ScrollbarSlot, {\n      ...scrollbarSlotProps,\n      onChange: handleScrollbarSizeChange\n    }) : null;\n    const scrollButtonsActive = displayStartScroll || displayEndScroll;\n    const showScrollButtons = scrollable && (scrollButtons === 'auto' && scrollButtonsActive || scrollButtons === true);\n    conditionalElements.scrollButtonStart = showScrollButtons ? /*#__PURE__*/_jsx(ScrollButtonsSlot, {\n      direction: isRtl ? 'right' : 'left',\n      onClick: handleStartScrollClick,\n      disabled: !displayStartScroll,\n      ...scrollButtonSlotProps\n    }) : null;\n    conditionalElements.scrollButtonEnd = showScrollButtons ? /*#__PURE__*/_jsx(ScrollButtonsSlot, {\n      direction: isRtl ? 'left' : 'right',\n      onClick: handleEndScrollClick,\n      disabled: !displayEndScroll,\n      ...scrollButtonSlotProps\n    }) : null;\n    return conditionalElements;\n  };\n  const scrollSelectedIntoView = useEventCallback(animation => {\n    const {\n      tabsMeta,\n      tabMeta\n    } = getTabsMeta();\n    if (!tabMeta || !tabsMeta) {\n      return;\n    }\n    if (tabMeta[start] < tabsMeta[start]) {\n      // left side of button is out of view\n      const nextScrollStart = tabsMeta[scrollStart] + (tabMeta[start] - tabsMeta[start]);\n      scroll(nextScrollStart, {\n        animation\n      });\n    } else if (tabMeta[end] > tabsMeta[end]) {\n      // right side of button is out of view\n      const nextScrollStart = tabsMeta[scrollStart] + (tabMeta[end] - tabsMeta[end]);\n      scroll(nextScrollStart, {\n        animation\n      });\n    }\n  });\n  const updateScrollButtonState = useEventCallback(() => {\n    if (scrollable && scrollButtons !== false) {\n      setUpdateScrollObserver(!updateScrollObserver);\n    }\n  });\n  React.useEffect(() => {\n    const handleResize = debounce(() => {\n      // If the Tabs component is replaced by Suspense with a fallback, the last\n      // ResizeObserver's handler that runs because of the change in the layout is trying to\n      // access a dom node that is no longer there (as the fallback component is being shown instead).\n      // See https://github.com/mui/material-ui/issues/33276\n      // TODO: Add tests that will ensure the component is not failing when\n      // replaced by Suspense with a fallback, once React is updated to version 18\n      if (tabsRef.current) {\n        updateIndicatorState();\n      }\n    });\n    let resizeObserver;\n\n    /**\n     * @type {MutationCallback}\n     */\n    const handleMutation = records => {\n      records.forEach(record => {\n        record.removedNodes.forEach(item => {\n          resizeObserver?.unobserve(item);\n        });\n        record.addedNodes.forEach(item => {\n          resizeObserver?.observe(item);\n        });\n      });\n      handleResize();\n      updateScrollButtonState();\n    };\n    const win = ownerWindow(tabsRef.current);\n    win.addEventListener('resize', handleResize);\n    let mutationObserver;\n    if (typeof ResizeObserver !== 'undefined') {\n      resizeObserver = new ResizeObserver(handleResize);\n      Array.from(tabListRef.current.children).forEach(child => {\n        resizeObserver.observe(child);\n      });\n    }\n    if (typeof MutationObserver !== 'undefined') {\n      mutationObserver = new MutationObserver(handleMutation);\n      mutationObserver.observe(tabListRef.current, {\n        childList: true\n      });\n    }\n    return () => {\n      handleResize.clear();\n      win.removeEventListener('resize', handleResize);\n      mutationObserver?.disconnect();\n      resizeObserver?.disconnect();\n    };\n  }, [updateIndicatorState, updateScrollButtonState]);\n\n  /**\n   * Toggle visibility of start and end scroll buttons\n   * Using IntersectionObserver on first and last Tabs.\n   */\n  React.useEffect(() => {\n    const tabListChildren = Array.from(tabListRef.current.children);\n    const length = tabListChildren.length;\n    if (typeof IntersectionObserver !== 'undefined' && length > 0 && scrollable && scrollButtons !== false) {\n      const firstTab = tabListChildren[0];\n      const lastTab = tabListChildren[length - 1];\n      const observerOptions = {\n        root: tabsRef.current,\n        threshold: 0.99\n      };\n      const handleScrollButtonStart = entries => {\n        setDisplayStartScroll(!entries[0].isIntersecting);\n      };\n      const firstObserver = new IntersectionObserver(handleScrollButtonStart, observerOptions);\n      firstObserver.observe(firstTab);\n      const handleScrollButtonEnd = entries => {\n        setDisplayEndScroll(!entries[0].isIntersecting);\n      };\n      const lastObserver = new IntersectionObserver(handleScrollButtonEnd, observerOptions);\n      lastObserver.observe(lastTab);\n      return () => {\n        firstObserver.disconnect();\n        lastObserver.disconnect();\n      };\n    }\n    return undefined;\n  }, [scrollable, scrollButtons, updateScrollObserver, childrenProp?.length]);\n  React.useEffect(() => {\n    setMounted(true);\n  }, []);\n  React.useEffect(() => {\n    updateIndicatorState();\n  });\n  React.useEffect(() => {\n    // Don't animate on the first render.\n    scrollSelectedIntoView(defaultIndicatorStyle !== indicatorStyle);\n  }, [scrollSelectedIntoView, indicatorStyle]);\n  React.useImperativeHandle(action, () => ({\n    updateIndicator: updateIndicatorState,\n    updateScrollButtons: updateScrollButtonState\n  }), [updateIndicatorState, updateScrollButtonState]);\n  const [IndicatorSlot, indicatorSlotProps] = useSlot('indicator', {\n    className: clsx(classes.indicator, TabIndicatorProps.className),\n    elementType: TabsIndicator,\n    externalForwardedProps,\n    ownerState,\n    additionalProps: {\n      style: indicatorStyle\n    }\n  });\n  const indicator = /*#__PURE__*/_jsx(IndicatorSlot, {\n    ...indicatorSlotProps\n  });\n  let childIndex = 0;\n  const children = React.Children.map(childrenProp, child => {\n    if (! /*#__PURE__*/React.isValidElement(child)) {\n      return null;\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      if (isFragment(child)) {\n        console.error([\"MUI: The Tabs component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n      }\n    }\n    const childValue = child.props.value === undefined ? childIndex : child.props.value;\n    valueToIndex.set(childValue, childIndex);\n    const selected = childValue === value;\n    childIndex += 1;\n    return /*#__PURE__*/React.cloneElement(child, {\n      fullWidth: variant === 'fullWidth',\n      indicator: selected && !mounted && indicator,\n      selected,\n      selectionFollowsFocus,\n      onChange,\n      textColor,\n      value: childValue,\n      ...(childIndex === 1 && value === false && !child.props.tabIndex ? {\n        tabIndex: 0\n      } : {})\n    });\n  });\n  const handleKeyDown = event => {\n    // Check if a modifier key (Alt, Shift, Ctrl, Meta) is pressed\n    if (event.altKey || event.shiftKey || event.ctrlKey || event.metaKey) {\n      return;\n    }\n    const list = tabListRef.current;\n    const currentFocus = ownerDocument(list).activeElement;\n    // Keyboard navigation assumes that [role=\"tab\"] are siblings\n    // though we might warn in the future about nested, interactive elements\n    // as a a11y violation\n    const role = currentFocus.getAttribute('role');\n    if (role !== 'tab') {\n      return;\n    }\n    let previousItemKey = orientation === 'horizontal' ? 'ArrowLeft' : 'ArrowUp';\n    let nextItemKey = orientation === 'horizontal' ? 'ArrowRight' : 'ArrowDown';\n    if (orientation === 'horizontal' && isRtl) {\n      // swap previousItemKey with nextItemKey\n      previousItemKey = 'ArrowRight';\n      nextItemKey = 'ArrowLeft';\n    }\n    switch (event.key) {\n      case previousItemKey:\n        event.preventDefault();\n        moveFocus(list, currentFocus, previousItem);\n        break;\n      case nextItemKey:\n        event.preventDefault();\n        moveFocus(list, currentFocus, nextItem);\n        break;\n      case 'Home':\n        event.preventDefault();\n        moveFocus(list, null, nextItem);\n        break;\n      case 'End':\n        event.preventDefault();\n        moveFocus(list, null, previousItem);\n        break;\n      default:\n        break;\n    }\n  };\n  const conditionalElements = getConditionalElements();\n  const [RootSlot, rootSlotProps] = useSlot('root', {\n    ref,\n    className: clsx(classes.root, className),\n    elementType: TabsRoot,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      ...other,\n      component\n    },\n    ownerState\n  });\n  const [ScrollerSlot, scrollerSlotProps] = useSlot('scroller', {\n    ref: tabsRef,\n    className: classes.scroller,\n    elementType: TabsScroller,\n    externalForwardedProps,\n    ownerState,\n    additionalProps: {\n      style: {\n        overflow: scrollerStyle.overflow,\n        [vertical ? `margin${isRtl ? 'Left' : 'Right'}` : 'marginBottom']: visibleScrollbar ? undefined : -scrollerStyle.scrollbarWidth\n      }\n    }\n  });\n  const [ListSlot, listSlotProps] = useSlot('list', {\n    ref: tabListRef,\n    className: clsx(classes.list, classes.flexContainer),\n    elementType: List,\n    externalForwardedProps,\n    ownerState,\n    getSlotProps: handlers => ({\n      ...handlers,\n      onKeyDown: event => {\n        handleKeyDown(event);\n        handlers.onKeyDown?.(event);\n      }\n    })\n  });\n  return /*#__PURE__*/_jsxs(RootSlot, {\n    ...rootSlotProps,\n    children: [conditionalElements.scrollButtonStart, conditionalElements.scrollbarSizeListener, /*#__PURE__*/_jsxs(ScrollerSlot, {\n      ...scrollerSlotProps,\n      children: [/*#__PURE__*/_jsx(ListSlot, {\n        \"aria-label\": ariaLabel,\n        \"aria-labelledby\": ariaLabelledBy,\n        \"aria-orientation\": orientation === 'vertical' ? 'vertical' : null,\n        role: \"tablist\",\n        ...listSlotProps,\n        children: children\n      }), mounted && indicator]\n    }), conditionalElements.scrollButtonEnd]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? Tabs.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * Callback fired when the component mounts.\n   * This is useful when you want to trigger an action programmatically.\n   * It supports two actions: `updateIndicator()` and `updateScrollButtons()`\n   *\n   * @param {object} actions This object contains all possible actions\n   * that can be triggered programmatically.\n   */\n  action: refType,\n  /**\n   * If `true`, the scroll buttons aren't forced hidden on mobile.\n   * By default the scroll buttons are hidden on mobile and takes precedence over `scrollButtons`.\n   * @default false\n   */\n  allowScrollButtonsMobile: PropTypes.bool,\n  /**\n   * The label for the Tabs as a string.\n   */\n  'aria-label': PropTypes.string,\n  /**\n   * An id or list of ids separated by a space that label the Tabs.\n   */\n  'aria-labelledby': PropTypes.string,\n  /**\n   * If `true`, the tabs are centered.\n   * This prop is intended for large views.\n   * @default false\n   */\n  centered: PropTypes.bool,\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The component used for the root node.\n   * Either a string to use a HTML element or a component.\n   */\n  component: PropTypes.elementType,\n  /**\n   * Determines the color of the indicator.\n   * @default 'primary'\n   */\n  indicatorColor: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary']), PropTypes.string]),\n  /**\n   * Callback fired when the value changes.\n   *\n   * @param {React.SyntheticEvent} event The event source of the callback. **Warning**: This is a generic event not a change event.\n   * @param {any} value We default to the index of the child (number)\n   */\n  onChange: PropTypes.func,\n  /**\n   * The component orientation (layout flow direction).\n   * @default 'horizontal'\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n  /**\n   * The component used to render the scroll buttons.\n   * @deprecated use the `slots.scrollButtons` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default TabScrollButton\n   */\n  ScrollButtonComponent: PropTypes.elementType,\n  /**\n   * Determine behavior of scroll buttons when tabs are set to scroll:\n   *\n   * - `auto` will only present them when not all the items are visible.\n   * - `true` will always present them.\n   * - `false` will never present them.\n   *\n   * By default the scroll buttons are hidden on mobile.\n   * This behavior can be disabled with `allowScrollButtonsMobile`.\n   * @default 'auto'\n   */\n  scrollButtons: PropTypes /* @typescript-to-proptypes-ignore */.oneOf(['auto', false, true]),\n  /**\n   * If `true` the selected tab changes on focus. Otherwise it only\n   * changes on activation.\n   */\n  selectionFollowsFocus: PropTypes.bool,\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes.shape({\n    endScrollButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    indicator: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    list: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    root: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    scrollbar: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    scrollButtons: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    scroller: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    startScrollButtonIcon: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    endScrollButtonIcon: PropTypes.elementType,\n    EndScrollButtonIcon: PropTypes.elementType,\n    indicator: PropTypes.elementType,\n    list: PropTypes.elementType,\n    root: PropTypes.elementType,\n    scrollbar: PropTypes.elementType,\n    scrollButtons: PropTypes.elementType,\n    scroller: PropTypes.elementType,\n    startScrollButtonIcon: PropTypes.elementType,\n    StartScrollButtonIcon: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Props applied to the tab indicator element.\n   * @deprecated use the `slotProps.indicator` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default  {}\n   */\n  TabIndicatorProps: PropTypes.object,\n  /**\n   * Props applied to the [`TabScrollButton`](https://mui.com/material-ui/api/tab-scroll-button/) element.\n   * @deprecated use the `slotProps.scrollButtons` prop instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   * @default {}\n   */\n  TabScrollButtonProps: PropTypes.object,\n  /**\n   * Determines the color of the `Tab`.\n   * @default 'primary'\n   */\n  textColor: PropTypes.oneOf(['inherit', 'primary', 'secondary']),\n  /**\n   * The value of the currently selected `Tab`.\n   * If you don't want any selected `Tab`, you can set this prop to `false`.\n   */\n  value: PropTypes.any,\n  /**\n   * Determines additional display behavior of the tabs:\n   *\n   *  - `scrollable` will invoke scrolling properties and allow for horizontally\n   *  scrolling (or swiping) of the tab bar.\n   *  - `fullWidth` will make the tabs grow to use all the available space,\n   *  which should be used for small views, like on mobile.\n   *  - `standard` will render the default state.\n   * @default 'standard'\n   */\n  variant: PropTypes.oneOf(['fullWidth', 'scrollable', 'standard']),\n  /**\n   * If `true`, the scrollbar is visible. It can be useful when displaying\n   * a long vertical list of tabs.\n   * @default false\n   */\n  visibleScrollbar: PropTypes.bool\n} : void 0;\nexport default Tabs;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getTextFieldUtilityClass(slot) {\n  return generateUtilityClass('MuiTextField', slot);\n}\nconst textFieldClasses = generateUtilityClasses('MuiTextField', ['root']);\nexport default textFieldClasses;","'use client';\n\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport useId from '@mui/utils/useId';\nimport refType from '@mui/utils/refType';\nimport { styled } from \"../zero-styled/index.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport Input from \"../Input/index.js\";\nimport FilledInput from \"../FilledInput/index.js\";\nimport OutlinedInput from \"../OutlinedInput/index.js\";\nimport InputLabel from \"../InputLabel/index.js\";\nimport FormControl from \"../FormControl/index.js\";\nimport FormHelperText from \"../FormHelperText/index.js\";\nimport Select from \"../Select/index.js\";\nimport { getTextFieldUtilityClass } from \"./textFieldClasses.js\";\nimport useSlot from \"../utils/useSlot.js\";\nimport { jsx as _jsx, jsxs as _jsxs } from \"react/jsx-runtime\";\nconst variantComponent = {\n  standard: Input,\n  filled: FilledInput,\n  outlined: OutlinedInput\n};\nconst useUtilityClasses = ownerState => {\n  const {\n    classes\n  } = ownerState;\n  const slots = {\n    root: ['root']\n  };\n  return composeClasses(slots, getTextFieldUtilityClass, classes);\n};\nconst TextFieldRoot = styled(FormControl, {\n  name: 'MuiTextField',\n  slot: 'Root'\n})({});\n\n/**\n * The `TextField` is a convenience wrapper for the most common cases (80%).\n * It cannot be all things to all people, otherwise the API would grow out of control.\n *\n * ## Advanced Configuration\n *\n * It's important to understand that the text field is a simple abstraction\n * on top of the following components:\n *\n * - [FormControl](/material-ui/api/form-control/)\n * - [InputLabel](/material-ui/api/input-label/)\n * - [FilledInput](/material-ui/api/filled-input/)\n * - [OutlinedInput](/material-ui/api/outlined-input/)\n * - [Input](/material-ui/api/input/)\n * - [FormHelperText](/material-ui/api/form-helper-text/)\n *\n * If you wish to alter the props applied to the `input` element, you can do so as follows:\n *\n * ```jsx\n * const inputProps = {\n *   step: 300,\n * };\n *\n * return <TextField id=\"time\" type=\"time\" inputProps={inputProps} />;\n * ```\n *\n * For advanced cases, please look at the source of TextField by clicking on the\n * \"Edit this page\" button above. Consider either:\n *\n * - using the upper case props for passing values directly to the components\n * - using the underlying components directly as shown in the demos\n */\nconst TextField = /*#__PURE__*/React.forwardRef(function TextField(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiTextField'\n  });\n  const {\n    autoComplete,\n    autoFocus = false,\n    children,\n    className,\n    color = 'primary',\n    defaultValue,\n    disabled = false,\n    error = false,\n    FormHelperTextProps: FormHelperTextPropsProp,\n    fullWidth = false,\n    helperText,\n    id: idOverride,\n    InputLabelProps: InputLabelPropsProp,\n    inputProps: inputPropsProp,\n    InputProps: InputPropsProp,\n    inputRef,\n    label,\n    maxRows,\n    minRows,\n    multiline = false,\n    name,\n    onBlur,\n    onChange,\n    onFocus,\n    placeholder,\n    required = false,\n    rows,\n    select = false,\n    SelectProps: SelectPropsProp,\n    slots = {},\n    slotProps = {},\n    type,\n    value,\n    variant = 'outlined',\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    autoFocus,\n    color,\n    disabled,\n    error,\n    fullWidth,\n    multiline,\n    required,\n    select,\n    variant\n  };\n  const classes = useUtilityClasses(ownerState);\n  if (process.env.NODE_ENV !== 'production') {\n    if (select && !children) {\n      console.error('MUI: `children` must be passed when using the `TextField` component with `select`.');\n    }\n  }\n  const id = useId(idOverride);\n  const helperTextId = helperText && id ? `${id}-helper-text` : undefined;\n  const inputLabelId = label && id ? `${id}-label` : undefined;\n  const InputComponent = variantComponent[variant];\n  const externalForwardedProps = {\n    slots,\n    slotProps: {\n      input: InputPropsProp,\n      inputLabel: InputLabelPropsProp,\n      htmlInput: inputPropsProp,\n      formHelperText: FormHelperTextPropsProp,\n      select: SelectPropsProp,\n      ...slotProps\n    }\n  };\n  const inputAdditionalProps = {};\n  const inputLabelSlotProps = externalForwardedProps.slotProps.inputLabel;\n  if (variant === 'outlined') {\n    if (inputLabelSlotProps && typeof inputLabelSlotProps.shrink !== 'undefined') {\n      inputAdditionalProps.notched = inputLabelSlotProps.shrink;\n    }\n    inputAdditionalProps.label = label;\n  }\n  if (select) {\n    // unset defaults from textbox inputs\n    if (!SelectPropsProp || !SelectPropsProp.native) {\n      inputAdditionalProps.id = undefined;\n    }\n    inputAdditionalProps['aria-describedby'] = undefined;\n  }\n  const [RootSlot, rootProps] = useSlot('root', {\n    elementType: TextFieldRoot,\n    shouldForwardComponentProp: true,\n    externalForwardedProps: {\n      ...externalForwardedProps,\n      ...other\n    },\n    ownerState,\n    className: clsx(classes.root, className),\n    ref,\n    additionalProps: {\n      disabled,\n      error,\n      fullWidth,\n      required,\n      color,\n      variant\n    }\n  });\n  const [InputSlot, inputProps] = useSlot('input', {\n    elementType: InputComponent,\n    externalForwardedProps,\n    additionalProps: inputAdditionalProps,\n    ownerState\n  });\n  const [InputLabelSlot, inputLabelProps] = useSlot('inputLabel', {\n    elementType: InputLabel,\n    externalForwardedProps,\n    ownerState\n  });\n  const [HtmlInputSlot, htmlInputProps] = useSlot('htmlInput', {\n    elementType: 'input',\n    externalForwardedProps,\n    ownerState\n  });\n  const [FormHelperTextSlot, formHelperTextProps] = useSlot('formHelperText', {\n    elementType: FormHelperText,\n    externalForwardedProps,\n    ownerState\n  });\n  const [SelectSlot, selectProps] = useSlot('select', {\n    elementType: Select,\n    externalForwardedProps,\n    ownerState\n  });\n  const InputElement = /*#__PURE__*/_jsx(InputSlot, {\n    \"aria-describedby\": helperTextId,\n    autoComplete: autoComplete,\n    autoFocus: autoFocus,\n    defaultValue: defaultValue,\n    fullWidth: fullWidth,\n    multiline: multiline,\n    name: name,\n    rows: rows,\n    maxRows: maxRows,\n    minRows: minRows,\n    type: type,\n    value: value,\n    id: id,\n    inputRef: inputRef,\n    onBlur: onBlur,\n    onChange: onChange,\n    onFocus: onFocus,\n    placeholder: placeholder,\n    inputProps: htmlInputProps,\n    slots: {\n      input: slots.htmlInput ? HtmlInputSlot : undefined\n    },\n    ...inputProps\n  });\n  return /*#__PURE__*/_jsxs(RootSlot, {\n    ...rootProps,\n    children: [label != null && label !== '' && /*#__PURE__*/_jsx(InputLabelSlot, {\n      htmlFor: id,\n      id: inputLabelId,\n      ...inputLabelProps,\n      children: label\n    }), select ? /*#__PURE__*/_jsx(SelectSlot, {\n      \"aria-describedby\": helperTextId,\n      id: id,\n      labelId: inputLabelId,\n      value: value,\n      input: InputElement,\n      ...selectProps,\n      children: children\n    }) : InputElement, helperText && /*#__PURE__*/_jsx(FormHelperTextSlot, {\n      id: helperTextId,\n      ...formHelperTextProps,\n      children: helperText\n    })]\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? TextField.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * This prop helps users to fill forms faster, especially on mobile devices.\n   * The name can be confusing, as it's more like an autofill.\n   * You can learn more about it [following the specification](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#autofill).\n   */\n  autoComplete: PropTypes.string,\n  /**\n   * If `true`, the `input` element is focused during the first mount.\n   * @default false\n   */\n  autoFocus: PropTypes.bool,\n  /**\n   * @ignore\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the component.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'primary'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * The default value. Use when the component is not controlled.\n   */\n  defaultValue: PropTypes.any,\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the label is displayed in an error state.\n   * @default false\n   */\n  error: PropTypes.bool,\n  /**\n   * Props applied to the [`FormHelperText`](https://mui.com/material-ui/api/form-helper-text/) element.\n   * @deprecated Use `slotProps.formHelperText` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  FormHelperTextProps: PropTypes.object,\n  /**\n   * If `true`, the input will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * The helper text content.\n   */\n  helperText: PropTypes.node,\n  /**\n   * The id of the `input` element.\n   * Use this prop to make `label` and `helperText` accessible for screen readers.\n   */\n  id: PropTypes.string,\n  /**\n   * Props applied to the [`InputLabel`](https://mui.com/material-ui/api/input-label/) element.\n   * Pointer events like `onClick` are enabled if and only if `shrink` is `true`.\n   * @deprecated Use `slotProps.inputLabel` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  InputLabelProps: PropTypes.object,\n  /**\n   * [Attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#attributes) applied to the `input` element.\n   * @deprecated Use `slotProps.htmlInput` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  inputProps: PropTypes.object,\n  /**\n   * Props applied to the Input element.\n   * It will be a [`FilledInput`](https://mui.com/material-ui/api/filled-input/),\n   * [`OutlinedInput`](https://mui.com/material-ui/api/outlined-input/) or [`Input`](https://mui.com/material-ui/api/input/)\n   * component depending on the `variant` prop value.\n   * @deprecated Use `slotProps.input` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  InputProps: PropTypes.object,\n  /**\n   * Pass a ref to the `input` element.\n   */\n  inputRef: refType,\n  /**\n   * The label content.\n   */\n  label: PropTypes.node,\n  /**\n   * If `dense` or `normal`, will adjust vertical spacing of this and contained components.\n   * @default 'none'\n   */\n  margin: PropTypes.oneOf(['dense', 'none', 'normal']),\n  /**\n   * Maximum number of rows to display when multiline option is set to true.\n   */\n  maxRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * Minimum number of rows to display when multiline option is set to true.\n   */\n  minRows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * If `true`, a `textarea` element is rendered instead of an input.\n   * @default false\n   */\n  multiline: PropTypes.bool,\n  /**\n   * Name attribute of the `input` element.\n   */\n  name: PropTypes.string,\n  /**\n   * @ignore\n   */\n  onBlur: PropTypes.func,\n  /**\n   * Callback fired when the value is changed.\n   *\n   * @param {object} event The event source of the callback.\n   * You can pull out the new value by accessing `event.target.value` (string).\n   */\n  onChange: PropTypes.func,\n  /**\n   * @ignore\n   */\n  onFocus: PropTypes.func,\n  /**\n   * The short hint displayed in the `input` before the user enters a value.\n   */\n  placeholder: PropTypes.string,\n  /**\n   * If `true`, the label is displayed as required and the `input` element is required.\n   * @default false\n   */\n  required: PropTypes.bool,\n  /**\n   * Number of rows to display when multiline option is set to true.\n   */\n  rows: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),\n  /**\n   * Render a [`Select`](https://mui.com/material-ui/api/select/) element while passing the Input element to `Select` as `input` parameter.\n   * If this option is set you must pass the options of the select as children.\n   * @default false\n   */\n  select: PropTypes.bool,\n  /**\n   * Props applied to the [`Select`](https://mui.com/material-ui/api/select/) element.\n   * @deprecated Use `slotProps.select` instead. This prop will be removed in a future major release. See [Migrating from deprecated APIs](https://mui.com/material-ui/migration/migrating-from-deprecated-apis/) for more details.\n   */\n  SelectProps: PropTypes.object,\n  /**\n   * The size of the component.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['medium', 'small']), PropTypes.string]),\n  /**\n   * The props used for each slot inside.\n   * @default {}\n   */\n  slotProps: PropTypes /* @typescript-to-proptypes-ignore */.shape({\n    formHelperText: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    htmlInput: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    input: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    inputLabel: PropTypes.oneOfType([PropTypes.func, PropTypes.object]),\n    select: PropTypes.oneOfType([PropTypes.func, PropTypes.object])\n  }),\n  /**\n   * The components used for each slot inside.\n   * @default {}\n   */\n  slots: PropTypes.shape({\n    formHelperText: PropTypes.elementType,\n    htmlInput: PropTypes.elementType,\n    input: PropTypes.elementType,\n    inputLabel: PropTypes.elementType,\n    root: PropTypes.elementType,\n    select: PropTypes.elementType\n  }),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * Type of the `input` element. It should be [a valid HTML5 input type](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/input#input_types).\n   */\n  type: PropTypes.string,\n  /**\n   * The value of the `input` element, required for a controlled component.\n   */\n  value: PropTypes.any,\n  /**\n   * The variant to use.\n   * @default 'outlined'\n   */\n  variant: PropTypes.oneOf(['filled', 'outlined', 'standard'])\n} : void 0;\nexport default TextField;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getToggleButtonUtilityClass(slot) {\n  return generateUtilityClass('MuiToggleButton', slot);\n}\nconst toggleButtonClasses = generateUtilityClasses('MuiToggleButton', ['root', 'disabled', 'selected', 'standard', 'primary', 'secondary', 'sizeSmall', 'sizeMedium', 'sizeLarge', 'fullWidth']);\nexport default toggleButtonClasses;","'use client';\n\nimport * as React from 'react';\n/**\n * @ignore - internal component.\n */\nconst ToggleButtonGroupContext = /*#__PURE__*/React.createContext({});\nif (process.env.NODE_ENV !== 'production') {\n  ToggleButtonGroupContext.displayName = 'ToggleButtonGroupContext';\n}\nexport default ToggleButtonGroupContext;","'use client';\n\nimport * as React from 'react';\n/**\n * @ignore - internal component.\n */\nconst ToggleButtonGroupButtonContext = /*#__PURE__*/React.createContext(undefined);\nif (process.env.NODE_ENV !== 'production') {\n  ToggleButtonGroupButtonContext.displayName = 'ToggleButtonGroupButtonContext';\n}\nexport default ToggleButtonGroupButtonContext;","// Determine if the toggle button value matches, or is contained in, the\n// candidate group value.\nexport default function isValueSelected(value, candidate) {\n  if (candidate === undefined || value === undefined) {\n    return false;\n  }\n  if (Array.isArray(candidate)) {\n    return candidate.includes(value);\n  }\n  return value === candidate;\n}","'use client';\n\n// @inheritedComponent ButtonBase\nimport * as React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport resolveProps from '@mui/utils/resolveProps';\nimport composeClasses from '@mui/utils/composeClasses';\nimport ButtonBase from \"../ButtonBase/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport createSimplePaletteValueFilter from \"../utils/createSimplePaletteValueFilter.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport toggleButtonClasses, { getToggleButtonUtilityClass } from \"./toggleButtonClasses.js\";\nimport ToggleButtonGroupContext from \"../ToggleButtonGroup/ToggleButtonGroupContext.js\";\nimport ToggleButtonGroupButtonContext from \"../ToggleButtonGroup/ToggleButtonGroupButtonContext.js\";\nimport isValueSelected from \"../ToggleButtonGroup/isValueSelected.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    fullWidth,\n    selected,\n    disabled,\n    size,\n    color\n  } = ownerState;\n  const slots = {\n    root: ['root', selected && 'selected', disabled && 'disabled', fullWidth && 'fullWidth', `size${capitalize(size)}`, color]\n  };\n  return composeClasses(slots, getToggleButtonUtilityClass, classes);\n};\nconst ToggleButtonRoot = styled(ButtonBase, {\n  name: 'MuiToggleButton',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [styles.root, styles[`size${capitalize(ownerState.size)}`]];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  ...theme.typography.button,\n  borderRadius: (theme.vars || theme).shape.borderRadius,\n  padding: 11,\n  border: `1px solid ${(theme.vars || theme).palette.divider}`,\n  color: (theme.vars || theme).palette.action.active,\n  [`&.${toggleButtonClasses.disabled}`]: {\n    color: (theme.vars || theme).palette.action.disabled,\n    border: `1px solid ${(theme.vars || theme).palette.action.disabledBackground}`\n  },\n  '&:hover': {\n    textDecoration: 'none',\n    // Reset on mouse devices\n    backgroundColor: theme.alpha((theme.vars || theme).palette.text.primary, (theme.vars || theme).palette.action.hoverOpacity),\n    '@media (hover: none)': {\n      backgroundColor: 'transparent'\n    }\n  },\n  variants: [{\n    props: {\n      color: 'standard'\n    },\n    style: {\n      [`&.${toggleButtonClasses.selected}`]: {\n        color: (theme.vars || theme).palette.text.primary,\n        backgroundColor: theme.alpha((theme.vars || theme).palette.text.primary, (theme.vars || theme).palette.action.selectedOpacity),\n        '&:hover': {\n          backgroundColor: theme.alpha((theme.vars || theme).palette.text.primary, `${(theme.vars || theme).palette.action.selectedOpacity} + ${(theme.vars || theme).palette.action.hoverOpacity}`),\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            backgroundColor: theme.alpha((theme.vars || theme).palette.text.primary, (theme.vars || theme).palette.action.selectedOpacity)\n          }\n        }\n      }\n    }\n  }, ...Object.entries(theme.palette).filter(createSimplePaletteValueFilter()).map(([color]) => ({\n    props: {\n      color\n    },\n    style: {\n      [`&.${toggleButtonClasses.selected}`]: {\n        color: (theme.vars || theme).palette[color].main,\n        backgroundColor: theme.alpha((theme.vars || theme).palette[color].main, (theme.vars || theme).palette.action.selectedOpacity),\n        '&:hover': {\n          backgroundColor: theme.alpha((theme.vars || theme).palette[color].main, `${(theme.vars || theme).palette.action.selectedOpacity} + ${(theme.vars || theme).palette.action.hoverOpacity}`),\n          // Reset on touch devices, it doesn't add specificity\n          '@media (hover: none)': {\n            backgroundColor: theme.alpha((theme.vars || theme).palette[color].main, (theme.vars || theme).palette.action.selectedOpacity)\n          }\n        }\n      }\n    }\n  })), {\n    props: {\n      fullWidth: true\n    },\n    style: {\n      width: '100%'\n    }\n  }, {\n    props: {\n      size: 'small'\n    },\n    style: {\n      padding: 7,\n      fontSize: theme.typography.pxToRem(13)\n    }\n  }, {\n    props: {\n      size: 'large'\n    },\n    style: {\n      padding: 15,\n      fontSize: theme.typography.pxToRem(15)\n    }\n  }]\n})));\nconst ToggleButton = /*#__PURE__*/React.forwardRef(function ToggleButton(inProps, ref) {\n  // props priority: `inProps` > `contextProps` > `themeDefaultProps`\n  const {\n    value: contextValue,\n    ...contextProps\n  } = React.useContext(ToggleButtonGroupContext);\n  const toggleButtonGroupButtonContextPositionClassName = React.useContext(ToggleButtonGroupButtonContext);\n  const resolvedProps = resolveProps({\n    ...contextProps,\n    selected: isValueSelected(inProps.value, contextValue)\n  }, inProps);\n  const props = useDefaultProps({\n    props: resolvedProps,\n    name: 'MuiToggleButton'\n  });\n  const {\n    children,\n    className,\n    color = 'standard',\n    disabled = false,\n    disableFocusRipple = false,\n    fullWidth = false,\n    onChange,\n    onClick,\n    selected,\n    size = 'medium',\n    value,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    color,\n    disabled,\n    disableFocusRipple,\n    fullWidth,\n    size\n  };\n  const classes = useUtilityClasses(ownerState);\n  const handleChange = event => {\n    if (onClick) {\n      onClick(event, value);\n      if (event.defaultPrevented) {\n        return;\n      }\n    }\n    if (onChange) {\n      onChange(event, value);\n    }\n  };\n  const positionClassName = toggleButtonGroupButtonContextPositionClassName || '';\n  return /*#__PURE__*/_jsx(ToggleButtonRoot, {\n    className: clsx(contextProps.className, classes.root, className, positionClassName),\n    disabled: disabled,\n    focusRipple: !disableFocusRipple,\n    ref: ref,\n    onClick: handleChange,\n    onChange: onChange,\n    value: value,\n    ownerState: ownerState,\n    \"aria-pressed\": selected,\n    ...other,\n    children: children\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? ToggleButton.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the button when it is in an active state.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'standard'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['standard', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * If `true`, the component is disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, the  keyboard focus ripple is disabled.\n   * @default false\n   */\n  disableFocusRipple: PropTypes.bool,\n  /**\n   * If `true`, the ripple effect is disabled.\n   *\n   * ⚠️ Without a ripple there is no styling for :focus-visible by default. Be sure\n   * to highlight the element by applying separate styles with the `.Mui-focusVisible` class.\n   * @default false\n   */\n  disableRipple: PropTypes.bool,\n  /**\n   * If `true`, the button will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * Callback fired when the state changes.\n   *\n   * @param {React.MouseEvent<HTMLElement>} event The event source of the callback.\n   * @param {any} value of the selected button.\n   */\n  onChange: PropTypes.func,\n  /**\n   * Callback fired when the button is clicked.\n   *\n   * @param {React.MouseEvent<HTMLElement>} event The event source of the callback.\n   * @param {any} value of the selected button.\n   */\n  onClick: PropTypes.func,\n  /**\n   * If `true`, the button is rendered in an active state.\n   */\n  selected: PropTypes.bool,\n  /**\n   * The size of the component.\n   * The prop defaults to the value inherited from the parent ToggleButtonGroup component.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The value to associate with the button when selected in a\n   * ToggleButtonGroup.\n   */\n  value: PropTypes /* @typescript-to-proptypes-ignore */.any.isRequired\n} : void 0;\nexport default ToggleButton;","import generateUtilityClasses from '@mui/utils/generateUtilityClasses';\nimport generateUtilityClass from '@mui/utils/generateUtilityClass';\nexport function getToggleButtonGroupUtilityClass(slot) {\n  return generateUtilityClass('MuiToggleButtonGroup', slot);\n}\nconst toggleButtonGroupClasses = generateUtilityClasses('MuiToggleButtonGroup', ['root', 'selected', 'horizontal', 'vertical', 'disabled', 'grouped', 'groupedHorizontal', 'groupedVertical', 'fullWidth', 'firstButton', 'lastButton', 'middleButton']);\nexport default toggleButtonGroupClasses;","'use client';\n\nimport * as React from 'react';\nimport { isFragment } from 'react-is';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport composeClasses from '@mui/utils/composeClasses';\nimport getValidReactChildren from '@mui/utils/getValidReactChildren';\nimport { styled } from \"../zero-styled/index.js\";\nimport memoTheme from \"../utils/memoTheme.js\";\nimport { useDefaultProps } from \"../DefaultPropsProvider/index.js\";\nimport capitalize from \"../utils/capitalize.js\";\nimport toggleButtonGroupClasses, { getToggleButtonGroupUtilityClass } from \"./toggleButtonGroupClasses.js\";\nimport ToggleButtonGroupContext from \"./ToggleButtonGroupContext.js\";\nimport ToggleButtonGroupButtonContext from \"./ToggleButtonGroupButtonContext.js\";\nimport toggleButtonClasses from \"../ToggleButton/toggleButtonClasses.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst useUtilityClasses = ownerState => {\n  const {\n    classes,\n    orientation,\n    fullWidth,\n    disabled\n  } = ownerState;\n  const slots = {\n    root: ['root', orientation, fullWidth && 'fullWidth'],\n    grouped: ['grouped', `grouped${capitalize(orientation)}`, disabled && 'disabled'],\n    firstButton: ['firstButton'],\n    lastButton: ['lastButton'],\n    middleButton: ['middleButton']\n  };\n  return composeClasses(slots, getToggleButtonGroupUtilityClass, classes);\n};\nconst ToggleButtonGroupRoot = styled('div', {\n  name: 'MuiToggleButtonGroup',\n  slot: 'Root',\n  overridesResolver: (props, styles) => {\n    const {\n      ownerState\n    } = props;\n    return [{\n      [`& .${toggleButtonGroupClasses.grouped}`]: styles.grouped\n    }, {\n      [`& .${toggleButtonGroupClasses.grouped}`]: styles[`grouped${capitalize(ownerState.orientation)}`]\n    }, {\n      [`& .${toggleButtonGroupClasses.firstButton}`]: styles.firstButton\n    }, {\n      [`& .${toggleButtonGroupClasses.lastButton}`]: styles.lastButton\n    }, {\n      [`& .${toggleButtonGroupClasses.middleButton}`]: styles.middleButton\n    }, styles.root, ownerState.orientation === 'vertical' && styles.vertical, ownerState.fullWidth && styles.fullWidth];\n  }\n})(memoTheme(({\n  theme\n}) => ({\n  display: 'inline-flex',\n  borderRadius: (theme.vars || theme).shape.borderRadius,\n  variants: [{\n    props: {\n      orientation: 'vertical'\n    },\n    style: {\n      flexDirection: 'column',\n      [`& .${toggleButtonGroupClasses.grouped}`]: {\n        [`&.${toggleButtonGroupClasses.selected} + .${toggleButtonGroupClasses.grouped}.${toggleButtonGroupClasses.selected}`]: {\n          borderTop: 0,\n          marginTop: 0\n        }\n      },\n      [`& .${toggleButtonGroupClasses.firstButton},& .${toggleButtonGroupClasses.middleButton}`]: {\n        borderBottomLeftRadius: 0,\n        borderBottomRightRadius: 0\n      },\n      [`& .${toggleButtonGroupClasses.lastButton},& .${toggleButtonGroupClasses.middleButton}`]: {\n        marginTop: -1,\n        borderTop: '1px solid transparent',\n        borderTopLeftRadius: 0,\n        borderTopRightRadius: 0\n      },\n      [`& .${toggleButtonGroupClasses.lastButton}.${toggleButtonClasses.disabled},& .${toggleButtonGroupClasses.middleButton}.${toggleButtonClasses.disabled}`]: {\n        borderTop: '1px solid transparent'\n      }\n    }\n  }, {\n    props: {\n      fullWidth: true\n    },\n    style: {\n      width: '100%'\n    }\n  }, {\n    props: {\n      orientation: 'horizontal'\n    },\n    style: {\n      [`& .${toggleButtonGroupClasses.grouped}`]: {\n        [`&.${toggleButtonGroupClasses.selected} + .${toggleButtonGroupClasses.grouped}.${toggleButtonGroupClasses.selected}`]: {\n          borderLeft: 0,\n          marginLeft: 0\n        }\n      },\n      [`& .${toggleButtonGroupClasses.firstButton},& .${toggleButtonGroupClasses.middleButton}`]: {\n        borderTopRightRadius: 0,\n        borderBottomRightRadius: 0\n      },\n      [`& .${toggleButtonGroupClasses.lastButton},& .${toggleButtonGroupClasses.middleButton}`]: {\n        marginLeft: -1,\n        borderLeft: '1px solid transparent',\n        borderTopLeftRadius: 0,\n        borderBottomLeftRadius: 0\n      },\n      [`& .${toggleButtonGroupClasses.lastButton}.${toggleButtonClasses.disabled},& .${toggleButtonGroupClasses.middleButton}.${toggleButtonClasses.disabled}`]: {\n        borderLeft: '1px solid transparent'\n      }\n    }\n  }]\n})));\nconst ToggleButtonGroup = /*#__PURE__*/React.forwardRef(function ToggleButtonGroup(inProps, ref) {\n  const props = useDefaultProps({\n    props: inProps,\n    name: 'MuiToggleButtonGroup'\n  });\n  const {\n    children,\n    className,\n    color = 'standard',\n    disabled = false,\n    exclusive = false,\n    fullWidth = false,\n    onChange,\n    orientation = 'horizontal',\n    size = 'medium',\n    value,\n    ...other\n  } = props;\n  const ownerState = {\n    ...props,\n    disabled,\n    fullWidth,\n    orientation,\n    size\n  };\n  const classes = useUtilityClasses(ownerState);\n  const handleChange = React.useCallback((event, buttonValue) => {\n    if (!onChange) {\n      return;\n    }\n    const index = value && value.indexOf(buttonValue);\n    let newValue;\n    if (value && index >= 0) {\n      newValue = value.slice();\n      newValue.splice(index, 1);\n    } else {\n      newValue = value ? value.concat(buttonValue) : [buttonValue];\n    }\n    onChange(event, newValue);\n  }, [onChange, value]);\n  const handleExclusiveChange = React.useCallback((event, buttonValue) => {\n    if (!onChange) {\n      return;\n    }\n    onChange(event, value === buttonValue ? null : buttonValue);\n  }, [onChange, value]);\n  const context = React.useMemo(() => ({\n    className: classes.grouped,\n    onChange: exclusive ? handleExclusiveChange : handleChange,\n    value,\n    size,\n    fullWidth,\n    color,\n    disabled\n  }), [classes.grouped, exclusive, handleExclusiveChange, handleChange, value, size, fullWidth, color, disabled]);\n  const validChildren = getValidReactChildren(children);\n  const childrenCount = validChildren.length;\n  const getButtonPositionClassName = index => {\n    const isFirstButton = index === 0;\n    const isLastButton = index === childrenCount - 1;\n    if (isFirstButton && isLastButton) {\n      return '';\n    }\n    if (isFirstButton) {\n      return classes.firstButton;\n    }\n    if (isLastButton) {\n      return classes.lastButton;\n    }\n    return classes.middleButton;\n  };\n  return /*#__PURE__*/_jsx(ToggleButtonGroupRoot, {\n    role: \"group\",\n    className: clsx(classes.root, className),\n    ref: ref,\n    ownerState: ownerState,\n    ...other,\n    children: /*#__PURE__*/_jsx(ToggleButtonGroupContext.Provider, {\n      value: context,\n      children: validChildren.map((child, index) => {\n        if (process.env.NODE_ENV !== 'production') {\n          if (isFragment(child)) {\n            console.error([\"MUI: The ToggleButtonGroup component doesn't accept a Fragment as a child.\", 'Consider providing an array instead.'].join('\\n'));\n          }\n        }\n        return /*#__PURE__*/_jsx(ToggleButtonGroupButtonContext.Provider, {\n          value: getButtonPositionClassName(index),\n          children: child\n        }, index);\n      })\n    })\n  });\n});\nprocess.env.NODE_ENV !== \"production\" ? ToggleButtonGroup.propTypes /* remove-proptypes */ = {\n  // ┌────────────────────────────── Warning ──────────────────────────────┐\n  // │ These PropTypes are generated from the TypeScript type definitions. │\n  // │    To update them, edit the d.ts file and run `pnpm proptypes`.     │\n  // └─────────────────────────────────────────────────────────────────────┘\n  /**\n   * The content of the component.\n   */\n  children: PropTypes.node,\n  /**\n   * Override or extend the styles applied to the component.\n   */\n  classes: PropTypes.object,\n  /**\n   * @ignore\n   */\n  className: PropTypes.string,\n  /**\n   * The color of the button when it is selected.\n   * It supports both default and custom theme colors, which can be added as shown in the\n   * [palette customization guide](https://mui.com/material-ui/customization/palette/#custom-colors).\n   * @default 'standard'\n   */\n  color: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['standard', 'primary', 'secondary', 'error', 'info', 'success', 'warning']), PropTypes.string]),\n  /**\n   * If `true`, the component is disabled. This implies that all ToggleButton children will be disabled.\n   * @default false\n   */\n  disabled: PropTypes.bool,\n  /**\n   * If `true`, only allow one of the child ToggleButton values to be selected.\n   * @default false\n   */\n  exclusive: PropTypes.bool,\n  /**\n   * If `true`, the button group will take up the full width of its container.\n   * @default false\n   */\n  fullWidth: PropTypes.bool,\n  /**\n   * Callback fired when the value changes.\n   *\n   * @param {React.MouseEvent<HTMLElement>} event The event source of the callback.\n   * @param {any} value of the selected buttons. When `exclusive` is true\n   * this is a single value; when false an array of selected values. If no value\n   * is selected and `exclusive` is true the value is null; when false an empty array.\n   */\n  onChange: PropTypes.func,\n  /**\n   * The component orientation (layout flow direction).\n   * @default 'horizontal'\n   */\n  orientation: PropTypes.oneOf(['horizontal', 'vertical']),\n  /**\n   * The size of the component.\n   * @default 'medium'\n   */\n  size: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([PropTypes.oneOf(['small', 'medium', 'large']), PropTypes.string]),\n  /**\n   * The system prop that allows defining system overrides as well as additional CSS styles.\n   */\n  sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object]),\n  /**\n   * The currently selected value within the group or an array of selected\n   * values when `exclusive` is false.\n   *\n   * The value must have reference equality with the option in order to be selected.\n   */\n  value: PropTypes.any\n} : void 0;\nexport default ToggleButtonGroup;","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6z\"\n}), 'Add');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"m7 10 5 5 5-5z\"\n}), 'ArrowDropDown');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M15.41 7.41 14 6l-6 6 6 6 1.41-1.41L10.83 12z\"\n}), 'ChevronLeft');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM19 4h-3.5l-1-1h-5l-1 1H5v2h14z\"\n}), 'Delete');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M5 20h14v-2H5zM19 9h-4V3H9v6H5l7 7z\"\n}), 'Download');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M3 17.25V21h3.75L17.81 9.94l-3.75-3.75zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.996.996 0 0 0-1.41 0l-1.83 1.83 3.75 3.75z\"\n}), 'Edit');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n}), 'ExpandMore');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M7 2v11h3v9l7-12h-4l4-8z\"\n}), 'FlashOn');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M15 15H3v2h12zm0-8H3v2h12zM3 13h18v-2H3zm0 8h18v-2H3zM3 3v2h18V3z\"\n}), 'FormatAlignLeft');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M11 18h2v-2h-2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4\"\n}), 'HelpOutline');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2\"\n}), 'MoreHoriz');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4z\"\n}), 'Refresh');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6\"\n}), 'Settings');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"M3 17v2h6v-2zM3 5v2h10V5zm10 16v-2h8v-2h-8v-2h-2v6zM7 9v2H3v2h4v2h2V9zm14 4v-2H11v2zm-6-4h2V7h4V5h-4V3h-2z\"\n}), 'Tune');","\"use client\";\n\nimport createSvgIcon from \"./utils/createSvgIcon.js\";\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nexport default createSvgIcon(/*#__PURE__*/_jsx(\"path\", {\n  d: \"m18.25 7.6-5.5-3.18c-.46-.27-1.04-.27-1.5 0L5.75 7.6c-.46.27-.75.76-.75 1.3v6.35c0 .54.29 1.03.75 1.3l5.5 3.18c.46.27 1.04.27 1.5 0l5.5-3.18c.46-.27.75-.76.75-1.3V8.9c0-.54-.29-1.03-.75-1.3M7 14.96v-4.62l4 2.32v4.61zm5-4.03L8 8.61l4-2.31 4 2.31zm1 6.34v-4.61l4-2.32v4.62zM7 2H3.5C2.67 2 2 2.67 2 3.5V7h2V4h3zm10 0h3.5c.83 0 1.5.67 1.5 1.5V7h-2V4h-3zM7 22H3.5c-.83 0-1.5-.67-1.5-1.5V17h2v3h3zm10 0h3.5c.83 0 1.5-.67 1.5-1.5V17h-2v3h-3z\"\n}), 'ViewInAr');","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nexport default `/*\n  Hello there!\n\n  If you're new to OpenSCAD, please learn the basics here:\n  https://openscad.org/documentation.html\n\n  There are lots of amazing libraries in the OpenSCAD ecosystem\n  (see this list: https://openscad.org/libraries.html).\n\n  Some of these libraries are bundled with this playground\n  (search for \"demo\" or \"example\" in the file explorer above)\n  and can be included directly from your models.\n\n  Any bugs (this is an Alpha!) or ideas of features?\n  https://github.com/openscad/openscad-playground/issues/new\n*/\n\ntitle = \"OpenSCAD\";\n\ncolor(\"gray\")\n    rotate([90, 0, 0])\n        translate([0, debug ? -60 : -20, 0])\n            linear_extrude(1)\n                text(title,\n                    halign=\"center\",\n                    valign=\"center\");\n\n// You can find the original for the following example in the file explorer above,\n// under openscad / examples / Basic / CSG-modules.scad\n\n// CSG-modules.scad - Basic usage of modules, if, color, $fs/$fa\n\n// Change this to false to remove the helper geometry\ndebug = true;\n\n// Global resolution\n$fs=$preview ? 1 : 0.1;  // Don't generate smaller facets than 0.1 mm\n$fa=$preview ? 15 : 5;    // Don't generate larger angles than 5 degrees\n\n// Main geometry\ndifference() {\n    intersection() {\n        body();\n        intersector();\n    }\n    holes();\n}\n\n// Helpers\nif (debug) helpers();\n\n// Core geometric primitives.\n// These can be modified to create variations of the final object\n\nmodule body() {\n    color(\"Blue\") sphere(10);\n}\n\nmodule intersector() {\n    color(\"Red\") cube(15, center=true);\n}\n\nmodule holeObject() {\n    color(\"Lime\") cylinder(h=20, r=5, center=true);\n}\n\n// Various modules for visualizing intermediate components\n\nmodule intersected() {\n    intersection() {\n        body();\n        intersector();\n    }\n}\n\nmodule holeA() rotate([0,90,0]) holeObject();\nmodule holeB() rotate([90,0,0]) holeObject();\nmodule holeC() holeObject();\n\nmodule holes() {\n    union() {\n        holeA();\n        holeB();\n        holeC();\n    }\n}\n\nmodule helpers() {\n    // Inner module since it's only needed inside helpers\n    module line() color(\"Black\") cylinder(r=1, h=10, center=true);\n\n    scale(0.5) {\n        translate([-30,0,-40]) {\n            intersected();\n            translate([-15,0,-35]) body();\n            translate([15,0,-35]) intersector();\n            translate([-7.5,0,-17.5]) rotate([0,30,0]) line();\n            translate([7.5,0,-17.5]) rotate([0,-30,0]) line();\n        }\n        translate([30,0,-40]) {\n            holes();\n            translate([-10,0,-35]) holeA();\n            translate([10,0,-35]) holeB();\n            translate([30,0,-35]) holeC();\n            translate([5,0,-17.5]) rotate([0,-20,0]) line();\n            translate([-5,0,-17.5]) rotate([0,30,0]) line();\n            translate([15,0,-17.5]) rotate([0,-45,0]) line();\n        }\n        translate([-20,0,-22.5]) rotate([0,45,0]) line();\n        translate([20,0,-22.5]) rotate([0,-45,0]) line();\n    }\n}\n\necho(version=version());\n// Written by Marius Kintel <marius@kintel.net>\n//\n// To the extent possible under law, the author(s) have dedicated all\n// copyright and related and neighboring rights to this software to the\n// public domain worldwide. This software is distributed without any\n// warranty.\n//\n// You should have received a copy of the CC0 Public Domain\n// Dedication along with this software.\n// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.\n`","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport defaultScad from './default-scad.ts';\nimport { State } from './app-state.ts';\n\nexport const defaultSourcePath = '/playground.scad';\nexport const defaultModelColor = '#f9d72c';\nconst defaultBlurhash = \"|KSPX^%3~qtjMx$lR*x]t7n,R%xuxbM{WBt7ayfk_3bY9FnAt8XOxanjNF%fxbMyIn%3t7NFoLaeoeV[WBo{xar^IoS1xbxcR*S0xbofRjV[j[kCNGofxaWBNHW-xasDR*WTkBxuWBM{s:t7bYahRjfkozWUadofbIW:jZ\";\n  \nexport function createInitialState(state: State | null, source?: {content?: string, path?: string, url?: string, blurhash?: string}): State {\n\n  type Mode = State['view']['layout']['mode'];\n  \n  const mode: Mode = window.matchMedia(\"(min-width: 768px)\").matches \n    ? 'multi' : 'single';\n\n  let initialState: State;\n  if (state) {\n    if (source) throw new Error('Cannot provide source when state is provided');\n    initialState = state;\n  } else {\n    let content, path, url, blurhash;\n    if (source) {\n      content = source.content;\n      path = source.path;\n      url = source.url;\n      blurhash = source.blurhash;\n    } else {\n      content = defaultScad;\n      path = defaultSourcePath;\n      blurhash = defaultBlurhash;\n    }\n    let activePath = path ?? (url && new URL(url).pathname.split('/').pop()) ?? defaultSourcePath;\n    initialState = {\n      params: {\n        activePath,\n        sources: [{path: activePath, content, url}],\n        features: [],\n        exportFormat2D: 'svg',\n        exportFormat3D: 'stl',\n      },\n      view: {\n        layout: {\n          mode: 'multi',\n          editor: true,\n          viewer: true,\n          customizer: false,\n        } as any,\n\n        color: defaultModelColor,\n      },\n      preview: blurhash ? {blurhash} : undefined,\n    };\n  }\n\n  if (initialState.view.layout.mode != mode) {\n    if (mode === 'multi' && initialState.view.layout.mode === 'single') {\n      initialState.view.layout = {\n        mode,\n        editor: true,\n        viewer: true,\n        customizer: initialState.view.layout.focus == 'customizer'\n      }\n    } else if (mode === 'single' && initialState.view.layout.mode === 'multi') {\n      initialState.view.layout = {\n        mode,\n        focus: initialState.view.layout.viewer ? 'viewer'\n          : initialState.view.layout.customizer ? 'customizer'\n          : 'editor'\n      }\n    }\n  }\n\n  initialState.view.showAxes ??= true;\n  initialState.view.showBuildPlate ??= true;\n\n  // fs.writeFile(initialState.params.sourcePath, initialState.params.source);\n  // if (initialState.params.sourcePath !== defaultSourcePath) {\n  //   fs.writeFile(defaultSourcePath, defaultScad);\n  // }\n  \n  const defaultFeatures = ['lazy-union'];\n  defaultFeatures.forEach(f => {\n    if (initialState.params.features.indexOf(f) < 0)\n    initialState.params.features.push(f);\n  });\n\n  return initialState;\n}\n\nexport function getBlankProjectState() {\n  return createInitialState(null, {\n    path: defaultSourcePath,\n    content: defaultScad, \n  });\n}\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport { State } from \"./app-state.ts\";\nimport { VALID_EXPORT_FORMATS_2D, VALID_EXPORT_FORMATS_3D } from './formats.ts';\nimport { validateArray, validateBoolean, validateString, validateStringEnum } from \"../utils.ts\";\nimport { createInitialState, defaultModelColor, defaultSourcePath } from \"./initial-state.ts\";\n\nexport function buildUrlForStateParams(state: State) {//partialState: {params: State['params'], view: State['view']}) {\n  return `${location.protocol}//${location.host}${location.pathname}#${encodeStateParamsAsFragment(state)}`;\n}\nexport async function writeStateInFragment(state: State) {\n  history.replaceState(state, '', '#' + await encodeStateParamsAsFragment(state));\n}\nasync function compressString(input: string): Promise<string> {\n  return btoa(String.fromCharCode(...new Uint8Array(await new Response(new ReadableStream({\n    start(controller) {\n      controller.enqueue(new TextEncoder().encode(input));\n      controller.close();\n    }\n  }).pipeThrough(new CompressionStream('gzip'))).arrayBuffer())));\n}\n\nasync function decompressString(compressedInput: string): Promise<string> {\n  return new TextDecoder().decode(await new Response(new ReadableStream({\n    start(controller) {\n      controller.enqueue(Uint8Array.from(atob(compressedInput), c => c.charCodeAt(0)));\n      controller.close();\n    }\n  }).pipeThrough(new DecompressionStream('gzip'))).arrayBuffer());\n}\n\n// async function addFile(path: string, content: string) {\n//   const state = JSON.parse(await decompressString(window.location.hash.substring(1)));\n//   // console.log(JSON.stringify(state, null, 2)); // Put a breakpoint here if you wanna peek into the state\n//   state.params.sources.push({ path, content });\n//   window.history.pushState(state, '', '#' + await compressString(JSON.stringify(state)));\n//   window.location.reload();\n// }\n\nexport function encodeStateParamsAsFragment(state: State) {\n  const json = JSON.stringify({\n    params: state.params,\n    view: state.view,\n    preview: state.preview,\n  });\n  // return encodeURIComponent(json);\n  return compressString(json);\n}\nexport async function readStateFromFragment(): Promise<State | null> {\n  if (window.location.hash.startsWith('#') && window.location.hash.length > 1) {\n    try {\n      const serialized = window.location.hash.substring(1);\n      if (serialized === 'blank') {\n        return createInitialState(null, {content: ''});\n      } else if (serialized.startsWith('src=')) {\n        // For testing\n        const src = decodeURIComponent(serialized.substring('src='.length));\n        return createInitialState(null, {content: src});\n      } else if (serialized.startsWith('path=')) {\n        const path = decodeURIComponent(serialized.substring('path='.length));\n        return createInitialState(null, {path}); \n      } else if (serialized.startsWith('url=')) {\n        // For testing\n        const url = decodeURIComponent(serialized.substring('url='.length));\n        const path = '/' + new URL(url).pathname.split('/').pop();\n        return createInitialState(null, {path, url});\n      }\n      let obj;\n      try {\n        obj = JSON.parse(await decompressString(serialized));\n      } catch (e) {\n        // Backwards compatibility\n        obj = JSON.parse(decodeURIComponent(serialized));\n      }\n      const {params, view, preview} = obj;\n      return {\n        params: {\n          activePath: validateString(params?.activePath, () => defaultSourcePath),\n          features: validateArray(params?.features, validateString),\n          vars: params?.vars, // TODO: validate!\n          // Source deserialization also handles legacy links (source + sourcePath)\n          sources: params?.sources ?? (params?.source ? [{path: params?.sourcePath, content: params?.source}] : undefined), // TODO: validate!\n          exportFormat2D: validateStringEnum(params?.exportFormat2D, Object.keys(VALID_EXPORT_FORMATS_2D), s => 'svg'),\n          exportFormat3D: validateStringEnum(params?.exportFormat3D, Object.keys(VALID_EXPORT_FORMATS_3D), s => 'stl'),\n          extruderColors: validateArray(params?.extruderColors, validateString, () => undefined as any as []),\n        },\n        preview: preview ? {\n          thumbhash: preview.thumbhash ? validateString(preview.thumbhash) : undefined,\n          blurhash: preview.blurhash ? validateString(preview.blurhash) : undefined,\n        } : undefined,\n        view: {\n          logs: validateBoolean(view?.logs),\n          extruderPickerVisibility: validateStringEnum(view?.extruderPickerVisibility, ['editing', 'exporting'], s => undefined),\n          layout: {\n            mode: validateStringEnum(view?.layout?.mode, ['multi', 'single']),\n            focus: validateStringEnum(view?.layout?.focus, ['editor', 'viewer', 'customizer'], s => false),\n            editor: validateBoolean(view?.layout['editor']),\n            viewer: validateBoolean(view?.layout['viewer']),\n            customizer: validateBoolean(view?.layout['customizer']),\n          },\n          collapsedCustomizerTabs: validateArray(view?.collapsedCustomizerTabs, validateString),\n          color: validateString(view?.color, () => defaultModelColor),\n          showAxes: validateBoolean(view?.layout?.showAxis, () => true),\n          lineNumbers: validateBoolean(view?.layout?.lineNumbers, () => false)\n        }\n      };\n    } catch (e) {\n      console.error(e);\n    }\n  }\n  return null;\n}\n","import React from \"react\";\nimport { Model } from \"../state/model.ts\";\n\nexport const FSContext = React.createContext<FS | undefined>(undefined);\n\nexport const ModelContext = React.createContext<Model | null>(null);\n\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport React, { CSSProperties, useContext } from 'react';\nimport { Select, MenuItem, FormControl } from '@mui/material';\nimport { ModelContext, FSContext } from './contexts.ts';\nimport { getParentDir, join } from '../fs/filesystem.ts';\nimport { defaultSourcePath } from '../state/initial-state.ts';\nimport { zipArchives } from '../fs/zip-archives.ts';\n\ninterface TreeNode {\n  icon?: string;\n  label: string;\n  data?: string;\n  key: string;\n  children?: TreeNode[];\n  selectable?: boolean;\n}\n\nconst biasedCompare = (a: string, b: string) => \n  a === 'openscad' ? -1 : b === 'openscad' ? 1 : a.localeCompare(b);\n\nfunction listFilesAsNodes(fs: FS, path: string, accept?: (path: string) => boolean): TreeNode[] {\n  const files: [string, string][] = []\n  const dirs: [string, string][] = []\n  for (const name of fs.readdirSync(path)) {\n    if (name.startsWith('.')) {\n      continue;\n    }\n    const childPath = join(path, name);\n    if (accept && !accept(childPath)) {\n      continue;\n    }\n    const stat = fs.lstatSync(childPath);\n    const isDirectory = stat.isDirectory();\n    if (!isDirectory && !name.endsWith('.scad')) {\n      continue;\n    }\n    (isDirectory ? dirs : files).push([name, childPath]);\n  }\n  [files, dirs].forEach(arr => arr.sort(([a], [b]) => biasedCompare(a, b)));\n\n  const nodes: TreeNode[] = []\n  for (const [arr, isDirectory] of [[files, false], [dirs, true]] as [[string, string][], boolean][]) {\n    for (const [name, path] of arr) {\n      let children: TreeNode[] = [];\n      let label = name;\n      if (path.lastIndexOf('/') === 0) {\n        const config = zipArchives[name];\n        if (config && config.gitOrigin) {\n          const repoUrl = config.gitOrigin.repoUrl;\n          if (!children) children = [];\n\n          children.push({\n            icon: 'pi pi-github',\n            label: repoUrl.replaceAll(\"https://github.com/\", ''),\n            key: repoUrl,\n            selectable: true,\n          });\n\n          for (const [label, link] of Object.entries(config.docs ?? [])) {\n            children.push({\n              icon: 'pi pi-book',\n              label,\n              key: link,\n              selectable: true,\n            });\n          }\n        }\n      }\n\n      if (isDirectory) {\n        children = [...children, ...listFilesAsNodes(fs, path, accept)];\n        if (children.length == 0) {\n          continue;\n        }\n      }\n\n      nodes.push({\n        icon: isDirectory ? 'pi pi-folder' : path === defaultSourcePath ? 'pi pi-home' : 'pi pi-file',\n        label,\n        data: path,\n        key: path,\n        children,\n        selectable: !isDirectory\n      });\n    }\n  }\n  return nodes;\n}\n\nexport default function FilePicker({className, style}: {className?: string, style?: CSSProperties}) {\n  const model = useContext(ModelContext);\n  if (!model) throw new Error('No model');\n  const state = model.state;\n\n  const fs = useContext(FSContext);\n\n  const fsItems: TreeNode[] = [];\n  for (const {path} of state.params.sources) {\n    const parent = getParentDir(path);\n    if (parent === '/') {\n      fsItems.push({\n        icon: 'pi pi-home',\n        label: path.split('/').pop() || path,\n        data: path,\n        key: path,\n        selectable: true,\n      });\n    }\n  }\n  if (fs) {\n    fsItems.push(...listFilesAsNodes(fs, '/'));\n  }\n\n  // Flatten tree nodes into selectable items\n  const flattenNodes = (nodes: TreeNode[], indent = 0): Array<{label: string, value: string, indent: number, selectable: boolean}> => {\n    let items: Array<{label: string, value: string, indent: number, selectable: boolean}> = [];\n    for (const node of nodes) {\n      items.push({\n        label: node.label,\n        value: node.key,\n        indent,\n        selectable: node.selectable !== false\n      });\n      if (node.children) {\n        items = items.concat(flattenNodes(node.children, indent + 1));\n      }\n    }\n    return items;\n  };\n\n  const flatItems = flattenNodes(fsItems);\n\n  return (\n    <FormControl fullWidth size=\"small\" className={className} style={style}>\n      <Select\n        value={state.params.activePath || ''}\n        onChange={e => {\n          const key = e.target.value;\n          if (typeof key === 'string') {\n            if (key.startsWith('https://')) {\n              window.open(key, '_blank');\n            } else {\n              model.openFile(key);\n            }\n          }\n        }}\n        title='OpenSCAD Playground Files'\n        sx={{\n          '& .MuiSelect-select': {\n            fontSize: '0.875rem',\n          }\n        }}\n      >\n        {flatItems.map(item => (\n          <MenuItem \n            key={item.value} \n            value={item.value}\n            disabled={!item.selectable}\n            sx={{ \n              pl: 2 + item.indent * 2,\n              fontSize: '0.875rem' \n            }}\n          >\n            {item.label}\n          </MenuItem>\n        ))}\n      </Select>\n    </FormControl>\n  );\n}\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport React, { CSSProperties, useContext, useRef, useState } from 'react';\nimport Editor, { loader, Monaco } from '@monaco-editor/react';\nimport openscadEditorOptions from '../language/openscad-editor-options.ts';\nimport * as monaco from 'monaco-editor/esm/vs/editor/editor.api';\nimport { TextField, IconButton, Box, Menu, MenuItem } from '@mui/material';\nimport { \n  MoreHoriz as MoreIcon, \n  ChevronLeft as ChevronLeftIcon,\n} from '@mui/icons-material';\nimport { buildUrlForStateParams } from '../state/fragment-state.ts';\nimport { getBlankProjectState, defaultSourcePath } from '../state/initial-state.ts';\nimport { ModelContext, FSContext } from './contexts.ts';\nimport FilePicker, {  } from './FilePicker.tsx';\n\n// const isMonacoSupported = false;\nconst isMonacoSupported = (() => {\n  const ua = window.navigator.userAgent;\n  const iosWk = ua.match(/iPad|iPhone/i) && ua.match(/WebKit/i);\n  return !iosWk;\n})();\n\nlet monacoInstance: Monaco | null = null;\nif (isMonacoSupported) {\n  loader.init().then(mi => monacoInstance = mi);\n}\n\nexport default function EditorPanel({className, style}: {className?: string, style?: CSSProperties}) {\n\n  const model = useContext(ModelContext);\n  if (!model) throw new Error('No model');\n\n  const [menuAnchorEl, setMenuAnchorEl] = useState<null | HTMLElement>(null);\n  const menuOpen = Boolean(menuAnchorEl);\n\n  const state = model.state;\n\n  const [editor, setEditor] = useState(null as monaco.editor.IStandaloneCodeEditor | null)\n\n  if (editor) {\n    const checkerRun = state.lastCheckerRun;\n    const editorModel = editor.getModel();\n    if (editorModel) {\n      if (checkerRun && monacoInstance) {\n        monacoInstance.editor.setModelMarkers(editorModel, 'openscad', checkerRun.markers);\n      }\n    }\n  }\n\n  const onMount = (editor: monaco.editor.IStandaloneCodeEditor) => {\n    editor.addAction({\n      id: \"openscad-render\",\n      label: \"Render OpenSCAD\",\n      run: () => model.render({isPreview: false, now: true})\n    });\n    editor.addAction({\n      id: \"openscad-preview\",\n      label: \"Preview OpenSCAD\",\n      run: () => model.render({isPreview: true, now: true})\n    });\n    editor.addAction({\n      id: \"openscad-save-do-nothing\",\n      label: \"Save (disabled)\",\n      keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.KeyS],\n      run: () => {}\n    });\n    editor.addAction({\n      id: \"openscad-save-project\",\n      label: \"Save OpenSCAD project\",\n      keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyMod.Shift | monaco.KeyCode.KeyS],\n      run: () => model.saveProject()\n    });\n    setEditor(editor)\n  }\n\n  return (\n    <Box className={`editor-panel ${className ?? ''}`} sx={{\n      display: 'flex',\n      flexDirection: 'column',\n      height: '100%',\n      width: '100%',\n      backgroundColor: 'background.default',\n      ...(style ?? {})\n    }}>\n      <Box sx={{\n        display: 'flex',\n        flexDirection: 'row',\n        gap: 1,\n        px: 2,\n        py: 1.5,\n        backgroundColor: 'background.paper',\n        borderBottom: 1,\n        borderColor: 'divider',\n        alignItems: 'center',\n        flexShrink: 0\n      }}>\n          \n        <IconButton \n          size=\"small\"\n          onClick={(e) => setMenuAnchorEl(e.currentTarget)}\n          aria-label=\"Editor menu\"\n          title=\"Editor menu\"\n        >\n          <MoreIcon />\n        </IconButton>\n\n        <Menu\n          anchorEl={menuAnchorEl}\n          open={menuOpen}\n          onClose={() => setMenuAnchorEl(null)}\n        >\n          <MenuItem onClick={() => {\n            window.open(buildUrlForStateParams(getBlankProjectState()), '_blank');\n            setMenuAnchorEl(null);\n          }}>\n            New project\n          </MenuItem>\n          <MenuItem disabled>Share project</MenuItem>\n          <MenuItem disabled>New file</MenuItem>\n          <MenuItem disabled>Copy to new file</MenuItem>\n          <MenuItem disabled>Upload file(s)</MenuItem>\n          <MenuItem disabled>Download sources</MenuItem>\n          <MenuItem onClick={() => {\n            editor?.trigger(state.params.activePath, 'editor.action.selectAll', null);\n            setMenuAnchorEl(null);\n          }}>\n            Select All\n          </MenuItem>\n          <MenuItem onClick={() => {\n            editor?.trigger(state.params.activePath, 'actions.find', null);\n            setMenuAnchorEl(null);\n          }}>\n            Find\n          </MenuItem>\n        </Menu>\n        \n        <Box sx={{ flex: 1 }}>\n          <FilePicker />\n        </Box>\n\n        {state.params.activePath !== defaultSourcePath && \n          <IconButton \n            size=\"small\"\n            onClick={() => model.openFile(defaultSourcePath)} \n            title={`Go back to ${defaultSourcePath}`}\n            aria-label={`Go back to ${defaultSourcePath}`}\n          >\n            <ChevronLeftIcon />\n          </IconButton>\n        }\n\n      </Box>\n\n      \n      <Box sx={{\n        position: 'relative',\n        flex: 1,\n        minHeight: 0,\n        overflow: 'hidden'\n      }}>\n        {isMonacoSupported && (\n          <Editor\n            className=\"openscad-editor absolute-fill\"\n            defaultLanguage=\"openscad\"\n            path={state.params.activePath}\n            value={model.source}\n            onChange={s => model.source = s ?? ''}\n            onMount={onMount}\n            options={{\n              ...openscadEditorOptions,\n              fontSize: 16,\n              lineNumbers: state.view.lineNumbers ? 'on' : 'off',\n            }}\n          />\n        )}\n        {!isMonacoSupported && (\n          <TextField \n            className=\"openscad-editor absolute-fill\"\n            value={model.source}\n            onChange={(e) => model.source = e.target.value ?? ''}\n            multiline\n            fullWidth\n          />\n        )}\n      </Box>\n\n      <Box sx={{\n        display: state.view.logs ? 'block' : 'none',\n        overflowY: 'auto',\n        maxHeight: '200px',\n        backgroundColor: 'background.paper',\n        borderTop: 1,\n        borderColor: 'divider',\n        flexShrink: 0,\n        p: 1,\n        fontSize: '12px',\n        fontFamily: 'monospace'\n      }}>\n        {(state.currentRunLogs ?? []).map(([type, text], i) => (\n          <pre key={i} style={{ margin: 0 }}>{text}</pre>\n        ))}\n      </Box>\n    \n    </Box>\n  )\n}\n","/**\n * Encodes an RGBA image to a ThumbHash. RGB should not be premultiplied by A.\n *\n * @param w The width of the input image. Must be ≤100px.\n * @param h The height of the input image. Must be ≤100px.\n * @param rgba The pixels in the input image, row-by-row. Must have w*h*4 elements.\n * @returns The ThumbHash as a Uint8Array.\n */\nexport function rgbaToThumbHash(w, h, rgba) {\n  // Encoding an image larger than 100x100 is slow with no benefit\n  if (w > 100 || h > 100) throw new Error(`${w}x${h} doesn't fit in 100x100`)\n  let { PI, round, max, cos, abs } = Math\n\n  // Determine the average color\n  let avg_r = 0, avg_g = 0, avg_b = 0, avg_a = 0\n  for (let i = 0, j = 0; i < w * h; i++, j += 4) {\n    let alpha = rgba[j + 3] / 255\n    avg_r += alpha / 255 * rgba[j]\n    avg_g += alpha / 255 * rgba[j + 1]\n    avg_b += alpha / 255 * rgba[j + 2]\n    avg_a += alpha\n  }\n  if (avg_a) {\n    avg_r /= avg_a\n    avg_g /= avg_a\n    avg_b /= avg_a\n  }\n\n  let hasAlpha = avg_a < w * h\n  let l_limit = hasAlpha ? 5 : 7 // Use fewer luminance bits if there's alpha\n  let lx = max(1, round(l_limit * w / max(w, h)))\n  let ly = max(1, round(l_limit * h / max(w, h)))\n  let l = [] // luminance\n  let p = [] // yellow - blue\n  let q = [] // red - green\n  let a = [] // alpha\n\n  // Convert the image from RGBA to LPQA (composite atop the average color)\n  for (let i = 0, j = 0; i < w * h; i++, j += 4) {\n    let alpha = rgba[j + 3] / 255\n    let r = avg_r * (1 - alpha) + alpha / 255 * rgba[j]\n    let g = avg_g * (1 - alpha) + alpha / 255 * rgba[j + 1]\n    let b = avg_b * (1 - alpha) + alpha / 255 * rgba[j + 2]\n    l[i] = (r + g + b) / 3\n    p[i] = (r + g) / 2 - b\n    q[i] = r - g\n    a[i] = alpha\n  }\n\n  // Encode using the DCT into DC (constant) and normalized AC (varying) terms\n  let encodeChannel = (channel, nx, ny) => {\n    let dc = 0, ac = [], scale = 0, fx = []\n    for (let cy = 0; cy < ny; cy++) {\n      for (let cx = 0; cx * ny < nx * (ny - cy); cx++) {\n        let f = 0\n        for (let x = 0; x < w; x++)\n          fx[x] = cos(PI / w * cx * (x + 0.5))\n        for (let y = 0; y < h; y++)\n          for (let x = 0, fy = cos(PI / h * cy * (y + 0.5)); x < w; x++)\n            f += channel[x + y * w] * fx[x] * fy\n        f /= w * h\n        if (cx || cy) {\n          ac.push(f)\n          scale = max(scale, abs(f))\n        } else {\n          dc = f\n        }\n      }\n    }\n    if (scale)\n      for (let i = 0; i < ac.length; i++)\n        ac[i] = 0.5 + 0.5 / scale * ac[i]\n    return [dc, ac, scale]\n  }\n  let [l_dc, l_ac, l_scale] = encodeChannel(l, max(3, lx), max(3, ly))\n  let [p_dc, p_ac, p_scale] = encodeChannel(p, 3, 3)\n  let [q_dc, q_ac, q_scale] = encodeChannel(q, 3, 3)\n  let [a_dc, a_ac, a_scale] = hasAlpha ? encodeChannel(a, 5, 5) : []\n\n  // Write the constants\n  let isLandscape = w > h\n  let header24 = round(63 * l_dc) | (round(31.5 + 31.5 * p_dc) << 6) | (round(31.5 + 31.5 * q_dc) << 12) | (round(31 * l_scale) << 18) | (hasAlpha << 23)\n  let header16 = (isLandscape ? ly : lx) | (round(63 * p_scale) << 3) | (round(63 * q_scale) << 9) | (isLandscape << 15)\n  let hash = [header24 & 255, (header24 >> 8) & 255, header24 >> 16, header16 & 255, header16 >> 8]\n  let ac_start = hasAlpha ? 6 : 5\n  let ac_index = 0\n  if (hasAlpha) hash.push(round(15 * a_dc) | (round(15 * a_scale) << 4))\n\n  // Write the varying factors\n  for (let ac of hasAlpha ? [l_ac, p_ac, q_ac, a_ac] : [l_ac, p_ac, q_ac])\n    for (let f of ac)\n      hash[ac_start + (ac_index >> 1)] |= round(15 * f) << ((ac_index++ & 1) << 2)\n  return new Uint8Array(hash)\n}\n\n/**\n * Decodes a ThumbHash to an RGBA image. RGB is not be premultiplied by A.\n *\n * @param hash The bytes of the ThumbHash.\n * @returns The width, height, and pixels of the rendered placeholder image.\n */\nexport function thumbHashToRGBA(hash) {\n  let { PI, min, max, cos, round } = Math\n\n  // Read the constants\n  let header24 = hash[0] | (hash[1] << 8) | (hash[2] << 16)\n  let header16 = hash[3] | (hash[4] << 8)\n  let l_dc = (header24 & 63) / 63\n  let p_dc = ((header24 >> 6) & 63) / 31.5 - 1\n  let q_dc = ((header24 >> 12) & 63) / 31.5 - 1\n  let l_scale = ((header24 >> 18) & 31) / 31\n  let hasAlpha = header24 >> 23\n  let p_scale = ((header16 >> 3) & 63) / 63\n  let q_scale = ((header16 >> 9) & 63) / 63\n  let isLandscape = header16 >> 15\n  let lx = max(3, isLandscape ? hasAlpha ? 5 : 7 : header16 & 7)\n  let ly = max(3, isLandscape ? header16 & 7 : hasAlpha ? 5 : 7)\n  let a_dc = hasAlpha ? (hash[5] & 15) / 15 : 1\n  let a_scale = (hash[5] >> 4) / 15\n\n  // Read the varying factors (boost saturation by 1.25x to compensate for quantization)\n  let ac_start = hasAlpha ? 6 : 5\n  let ac_index = 0\n  let decodeChannel = (nx, ny, scale) => {\n    let ac = []\n    for (let cy = 0; cy < ny; cy++)\n      for (let cx = cy ? 0 : 1; cx * ny < nx * (ny - cy); cx++)\n        ac.push((((hash[ac_start + (ac_index >> 1)] >> ((ac_index++ & 1) << 2)) & 15) / 7.5 - 1) * scale)\n    return ac\n  }\n  let l_ac = decodeChannel(lx, ly, l_scale)\n  let p_ac = decodeChannel(3, 3, p_scale * 1.25)\n  let q_ac = decodeChannel(3, 3, q_scale * 1.25)\n  let a_ac = hasAlpha && decodeChannel(5, 5, a_scale)\n\n  // Decode using the DCT into RGB\n  let ratio = thumbHashToApproximateAspectRatio(hash)\n  let w = round(ratio > 1 ? 32 : 32 * ratio)\n  let h = round(ratio > 1 ? 32 / ratio : 32)\n  let rgba = new Uint8Array(w * h * 4), fx = [], fy = []\n  for (let y = 0, i = 0; y < h; y++) {\n    for (let x = 0; x < w; x++, i += 4) {\n      let l = l_dc, p = p_dc, q = q_dc, a = a_dc\n\n      // Precompute the coefficients\n      for (let cx = 0, n = max(lx, hasAlpha ? 5 : 3); cx < n; cx++)\n        fx[cx] = cos(PI / w * (x + 0.5) * cx)\n      for (let cy = 0, n = max(ly, hasAlpha ? 5 : 3); cy < n; cy++)\n        fy[cy] = cos(PI / h * (y + 0.5) * cy)\n\n      // Decode L\n      for (let cy = 0, j = 0; cy < ly; cy++)\n        for (let cx = cy ? 0 : 1, fy2 = fy[cy] * 2; cx * ly < lx * (ly - cy); cx++, j++)\n          l += l_ac[j] * fx[cx] * fy2\n\n      // Decode P and Q\n      for (let cy = 0, j = 0; cy < 3; cy++) {\n        for (let cx = cy ? 0 : 1, fy2 = fy[cy] * 2; cx < 3 - cy; cx++, j++) {\n          let f = fx[cx] * fy2\n          p += p_ac[j] * f\n          q += q_ac[j] * f\n        }\n      }\n\n      // Decode A\n      if (hasAlpha)\n        for (let cy = 0, j = 0; cy < 5; cy++)\n          for (let cx = cy ? 0 : 1, fy2 = fy[cy] * 2; cx < 5 - cy; cx++, j++)\n            a += a_ac[j] * fx[cx] * fy2\n\n      // Convert to RGB\n      let b = l - 2 / 3 * p\n      let r = (3 * l - b + q) / 2\n      let g = r - q\n      rgba[i] = max(0, 255 * min(1, r))\n      rgba[i + 1] = max(0, 255 * min(1, g))\n      rgba[i + 2] = max(0, 255 * min(1, b))\n      rgba[i + 3] = max(0, 255 * min(1, a))\n    }\n  }\n  return { w, h, rgba }\n}\n\n/**\n * Extracts the average color from a ThumbHash. RGB is not be premultiplied by A.\n *\n * @param hash The bytes of the ThumbHash.\n * @returns The RGBA values for the average color. Each value ranges from 0 to 1.\n */\nexport function thumbHashToAverageRGBA(hash) {\n  let { min, max } = Math\n  let header = hash[0] | (hash[1] << 8) | (hash[2] << 16)\n  let l = (header & 63) / 63\n  let p = ((header >> 6) & 63) / 31.5 - 1\n  let q = ((header >> 12) & 63) / 31.5 - 1\n  let hasAlpha = header >> 23\n  let a = hasAlpha ? (hash[5] & 15) / 15 : 1\n  let b = l - 2 / 3 * p\n  let r = (3 * l - b + q) / 2\n  let g = r - q\n  return {\n    r: max(0, min(1, r)),\n    g: max(0, min(1, g)),\n    b: max(0, min(1, b)),\n    a\n  }\n}\n\n/**\n * Extracts the approximate aspect ratio of the original image.\n *\n * @param hash The bytes of the ThumbHash.\n * @returns The approximate aspect ratio (i.e. width / height).\n */\nexport function thumbHashToApproximateAspectRatio(hash) {\n  let header = hash[3]\n  let hasAlpha = hash[2] & 0x80\n  let isLandscape = hash[4] & 0x80\n  let lx = isLandscape ? hasAlpha ? 5 : 7 : header & 7\n  let ly = isLandscape ? header & 7 : hasAlpha ? 5 : 7\n  return lx / ly\n}\n\n/**\n * Encodes an RGBA image to a PNG data URL. RGB should not be premultiplied by\n * A. This is optimized for speed and simplicity and does not optimize for size\n * at all. This doesn't do any compression (all values are stored uncompressed).\n *\n * @param w The width of the input image. Must be ≤100px.\n * @param h The height of the input image. Must be ≤100px.\n * @param rgba The pixels in the input image, row-by-row. Must have w*h*4 elements.\n * @returns A data URL containing a PNG for the input image.\n */\nexport function rgbaToDataURL(w, h, rgba) {\n  let row = w * 4 + 1\n  let idat = 6 + h * (5 + row)\n  let bytes = [\n    137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0,\n    w >> 8, w & 255, 0, 0, h >> 8, h & 255, 8, 6, 0, 0, 0, 0, 0, 0, 0,\n    idat >>> 24, (idat >> 16) & 255, (idat >> 8) & 255, idat & 255,\n    73, 68, 65, 84, 120, 1\n  ]\n  let table = [\n    0, 498536548, 997073096, 651767980, 1994146192, 1802195444, 1303535960,\n    1342533948, -306674912, -267414716, -690576408, -882789492, -1687895376,\n    -2032938284, -1609899400, -1111625188\n  ]\n  let a = 1, b = 0\n  for (let y = 0, i = 0, end = row - 1; y < h; y++, end += row - 1) {\n    bytes.push(y + 1 < h ? 0 : 1, row & 255, row >> 8, ~row & 255, (row >> 8) ^ 255, 0)\n    for (b = (b + a) % 65521; i < end; i++) {\n      let u = rgba[i] & 255\n      bytes.push(u)\n      a = (a + u) % 65521\n      b = (b + a) % 65521\n    }\n  }\n  bytes.push(\n    b >> 8, b & 255, a >> 8, a & 255, 0, 0, 0, 0,\n    0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130\n  )\n  for (let [start, end] of [[12, 29], [37, 41 + idat]]) {\n    let c = ~0\n    for (let i = start; i < end; i++) {\n      c ^= bytes[i]\n      c = (c >>> 4) ^ table[c & 15]\n      c = (c >>> 4) ^ table[c & 15]\n    }\n    c = ~c\n    bytes[end++] = c >>> 24\n    bytes[end++] = (c >> 16) & 255\n    bytes[end++] = (c >> 8) & 255\n    bytes[end++] = c & 255\n  }\n  return 'data:image/png;base64,' + btoa(String.fromCharCode(...bytes))\n}\n\n/**\n * Decodes a ThumbHash to a PNG data URL. This is a convenience function that\n * just calls \"thumbHashToRGBA\" followed by \"rgbaToDataURL\".\n *\n * @param hash The bytes of the ThumbHash.\n * @returns A data URL containing a PNG for the rendered ThumbHash.\n */\nexport function thumbHashToDataURL(hash) {\n  let image = thumbHashToRGBA(hash)\n  return rgbaToDataURL(image.w, image.h, image.rgba)\n}\n","var q=[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\",\"m\",\"n\",\"o\",\"p\",\"q\",\"r\",\"s\",\"t\",\"u\",\"v\",\"w\",\"x\",\"y\",\"z\",\"#\",\"$\",\"%\",\"*\",\"+\",\",\",\"-\",\".\",\":\",\";\",\"=\",\"?\",\"@\",\"[\",\"]\",\"^\",\"_\",\"{\",\"|\",\"}\",\"~\"],x=t=>{let e=0;for(let r=0;r<t.length;r++){let n=t[r],l=q.indexOf(n);e=e*83+l}return e},p=(t,e)=>{var r=\"\";for(let n=1;n<=e;n++){let l=Math.floor(t)/Math.pow(83,e-n)%83;r+=q[Math.floor(l)]}return r};var f=t=>{let e=t/255;return e<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)},h=t=>{let e=Math.max(0,Math.min(1,t));return e<=.0031308?Math.trunc(e*12.92*255+.5):Math.trunc((1.055*Math.pow(e,.4166666666666667)-.055)*255+.5)},F=t=>t<0?-1:1,M=(t,e)=>F(t)*Math.pow(Math.abs(t),e);var d=class extends Error{constructor(e){super(e),this.name=\"ValidationError\",this.message=e}};var C=t=>{if(!t||t.length<6)throw new d(\"The blurhash string must be at least 6 characters\");let e=x(t[0]),r=Math.floor(e/9)+1,n=e%9+1;if(t.length!==4+2*n*r)throw new d(`blurhash length mismatch: length is ${t.length} but it should be ${4+2*n*r}`)},N=t=>{try{C(t)}catch(e){return{result:!1,errorReason:e.message}}return{result:!0}},z=t=>{let e=t>>16,r=t>>8&255,n=t&255;return[f(e),f(r),f(n)]},L=(t,e)=>{let r=Math.floor(t/361),n=Math.floor(t/19)%19,l=t%19;return[M((r-9)/9,2)*e,M((n-9)/9,2)*e,M((l-9)/9,2)*e]},U=(t,e,r,n)=>{C(t),n=n|1;let l=x(t[0]),m=Math.floor(l/9)+1,b=l%9+1,i=(x(t[1])+1)/166,u=new Array(b*m);for(let o=0;o<u.length;o++)if(o===0){let a=x(t.substring(2,6));u[o]=z(a)}else{let a=x(t.substring(4+o*2,6+o*2));u[o]=L(a,i*n)}let c=e*4,s=new Uint8ClampedArray(c*r);for(let o=0;o<r;o++)for(let a=0;a<e;a++){let y=0,B=0,R=0;for(let w=0;w<m;w++)for(let P=0;P<b;P++){let G=Math.cos(Math.PI*a*P/e)*Math.cos(Math.PI*o*w/r),T=u[P+w*b];y+=T[0]*G,B+=T[1]*G,R+=T[2]*G}let V=h(y),I=h(B),E=h(R);s[4*a+0+o*c]=V,s[4*a+1+o*c]=I,s[4*a+2+o*c]=E,s[4*a+3+o*c]=255}return s},j=U;var A=4,D=(t,e,r,n)=>{let l=0,m=0,b=0,g=e*A;for(let u=0;u<e;u++){let c=A*u;for(let s=0;s<r;s++){let o=c+s*g,a=n(u,s);l+=a*f(t[o]),m+=a*f(t[o+1]),b+=a*f(t[o+2])}}let i=1/(e*r);return[l*i,m*i,b*i]},$=t=>{let e=h(t[0]),r=h(t[1]),n=h(t[2]);return(e<<16)+(r<<8)+n},H=(t,e)=>{let r=Math.floor(Math.max(0,Math.min(18,Math.floor(M(t[0]/e,.5)*9+9.5)))),n=Math.floor(Math.max(0,Math.min(18,Math.floor(M(t[1]/e,.5)*9+9.5)))),l=Math.floor(Math.max(0,Math.min(18,Math.floor(M(t[2]/e,.5)*9+9.5))));return r*19*19+n*19+l},O=(t,e,r,n,l)=>{if(n<1||n>9||l<1||l>9)throw new d(\"BlurHash must have between 1 and 9 components\");if(e*r*4!==t.length)throw new d(\"Width and height must match the pixels array\");let m=[];for(let s=0;s<l;s++)for(let o=0;o<n;o++){let a=o==0&&s==0?1:2,y=D(t,e,r,(B,R)=>a*Math.cos(Math.PI*o*B/e)*Math.cos(Math.PI*s*R/r));m.push(y)}let b=m[0],g=m.slice(1),i=\"\",u=n-1+(l-1)*9;i+=p(u,1);let c;if(g.length>0){let s=Math.max(...g.map(a=>Math.max(...a))),o=Math.floor(Math.max(0,Math.min(82,Math.floor(s*166-.5))));c=(o+1)/166,i+=p(o,1)}else c=1,i+=p(0,1);return i+=p($(b),4),g.forEach(s=>{i+=p(H(s,c),2)}),i},S=O;export{d as ValidationError,j as decode,S as encode,N as isBlurhashValid};\n//# sourceMappingURL=index.js.map","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport { rgbaToThumbHash, thumbHashToRGBA } from 'thumbhash'\nimport { decode as decodeBlurHash, encode as encodeBlurHash } from \"blurhash\";\n\nasync function loadImage(src: string): Promise<HTMLImageElement> {\n  return new Promise((resolve, reject) => {\n    const img = new Image();\n    img.crossOrigin = \"anonymous\";\n    img.onload = () => resolve(img);\n    img.onerror = (...args) => reject(args);\n    img.src = src;\n  });\n}\n\nexport async function imageToBlurhash(imageUrl: string): Promise<string> {\n  const {rgba, w, h} = await getImageThumbnail(imageUrl, {maxSize: 100, opaque: true});\n  const parts = 9;\n  // const parts = 6;\n  return encodeBlurHash(new Uint8ClampedArray(rgba), w, h, parts, parts);\n}\n\nexport async function imageToThumbhash(imagePath: string): Promise<string> {\n  const {rgba, w, h} = await getImageThumbnail(imagePath, {maxSize: 100, opaque: false});\n  const hash = rgbaToThumbHash(w, h, rgba);\n  return btoa(String.fromCharCode(...hash));\n}\n\nexport function blurHashToImage(hash: string, width: number, height: number): string {\n  const pixels = decodeBlurHash(hash, width, height);\n  const canvas = document.createElement(\"canvas\");\n  canvas.width = width;\n  canvas.height = height;\n  const ctx = canvas.getContext(\"2d\")!;\n  const imageData = ctx.createImageData(width, height);\n  imageData.data.set(pixels);\n  ctx.putImageData(imageData, 0, 0);\n  return canvas.toDataURL(\"image/png\");\n}\n\nexport function thumbHashToImage(hash: string): string {\n  const {w: width, h: height, rgba} = thumbHashToRGBA(new Uint8Array([...atob(hash)].map(c => c.charCodeAt(0))));\n  const canvas = document.createElement(\"canvas\");\n  canvas.width = width;\n  canvas.height = height;\n  const ctx = canvas.getContext(\"2d\")!;\n  const imageData = ctx.createImageData(width, height);\n  imageData.data.set(rgba);\n  ctx.putImageData(imageData, 0, 0);\n  return canvas.toDataURL(\"image/png\");\n}\n\nasync function getImageThumbnail(imageUrl: string, {maxSize, opaque}: {maxSize: number, opaque: boolean}): Promise<{rgba: Uint8Array, w: number, h: number}> {\n  const image = await loadImage(imageUrl);\n  const width = image.width;\n  const height = image.height;\n\n  const scale = Math.min(maxSize / width, maxSize / height);\n  const resizedWidth = Math.floor(width * scale);\n  const resizedHeight = Math.floor(height * scale);\n\n  const canvas = document.createElement(\"canvas\");\n  canvas.width = resizedWidth;\n  canvas.height = resizedHeight;\n  const ctx = canvas.getContext(\"2d\");\n  if (!ctx) throw new Error(\"Could not get canvas context\");\n\n  if (opaque) {\n    ctx.fillStyle = 'white';\n    ctx.fillRect(0, 0, resizedWidth, resizedHeight);\n  }\n  ctx.drawImage(image, 0, 0, resizedWidth, resizedHeight);\n\n  const imageData = ctx.getImageData(0, 0, resizedWidth, resizedHeight);\n  const rgba = new Uint8Array(imageData.data.buffer);\n  return {rgba, w: resizedWidth, h: resizedHeight};\n}\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport { CSSProperties, useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { ModelContext } from './contexts.ts';\nimport { Snackbar } from '@mui/material';\nimport { blurHashToImage, imageToBlurhash, imageToThumbhash, thumbHashToImage } from '../io/image_hashes.ts';\n\ndeclare global {\n  namespace JSX {\n    interface IntrinsicElements {\n      \"model-viewer\": any;\n    }\n  }\n}\n\nexport const PREDEFINED_ORBITS: [string, number, number][] = [\n  [\"Diagonal\", Math.PI / 4, Math.PI / 4],\n  [\"Front\", 0, Math.PI / 2],\n  [\"Right\", Math.PI / 2, Math.PI / 2],\n  [\"Back\", Math.PI, Math.PI / 2],\n  [\"Left\", -Math.PI / 2, Math.PI / 2],\n  [\"Top\", 0, 0],\n  [\"Bottom\", 0, Math.PI],\n];\n\nfunction spherePoint(theta: number, phi: number): [number, number, number] {\n  return [\n    Math.cos(theta) * Math.sin(phi),\n    Math.sin(theta) * Math.sin(phi),\n    Math.cos(phi),\n  ];\n}\n\nfunction euclideanDist(a: [number, number, number], b: [number, number, number]): number {\n  const dx = a[0] - b[0];\n  const dy = a[1] - b[1];\n  const dz = a[2] - b[2];\n  return Math.sqrt(dx * dx + dy * dy + dz * dz);\n}\nconst radDist = (a: number, b: number) => Math.min(Math.abs(a - b), Math.abs(a - b + 2 * Math.PI), Math.abs(a - b - 2 * Math.PI));\n\nfunction getClosestPredefinedOrbitIndex(theta: number, phi: number): [number, number, number] {\n  const point = spherePoint(theta, phi);\n  const points = PREDEFINED_ORBITS.map(([_, t, p]) => spherePoint(t, p));\n  const distances = points.map(p => euclideanDist(point, p));\n  const radDistances = PREDEFINED_ORBITS.map(([_, ptheta, pphi]) => Math.max(radDist(theta, ptheta), radDist(phi, pphi)));\n  const [index, dist] = distances.reduce((acc, d, i) => d < acc[1] ? [i, d] : acc, [0, Infinity]) as [number, number];\n  return [index, dist, radDistances[index]];\n}\n\nconst originalOrbit = (([name, theta, phi]) => `${theta}rad ${phi}rad 150%`)(PREDEFINED_ORBITS[0]);\n\nexport default function ViewerPanel({className, style}: {className?: string, style?: CSSProperties}) {\n  const model = useContext(ModelContext);\n  if (!model) throw new Error('No model');\n\n  const state = model.state;\n  const [interactionPrompt, setInteractionPrompt] = useState('auto');\n  const modelViewerRef = useRef<any>();\n  const axesViewerRef = useRef<any>();\n  const [snackbarOpen, setSnackbarOpen] = useState(false);\n  const [snackbarMessage, setSnackbarMessage] = useState('');\n\n  const [loadedUri, setLoadedUri] = useState<string | undefined>();\n\n  const [cachedImageHash, setCachedImageHash] = useState<{hash: string, uri: string} | undefined>(undefined);\n\n  const modelUri = state.output?.displayFileURL ?? state.output?.outFileURL ?? '';\n  const loaded = loadedUri === modelUri;\n\n  if (state?.preview) {\n    let {hash, uri} = cachedImageHash ?? {};\n    if (state.preview.blurhash && hash !== state.preview.blurhash) {\n      hash = state.preview.blurhash;\n      uri = blurHashToImage(hash, 100, 100);\n      setCachedImageHash({hash, uri});\n    } else if (state.preview.thumbhash && hash !== state.preview.thumbhash) {\n      hash = state.preview.thumbhash;\n      uri = thumbHashToImage(hash);\n      setCachedImageHash({hash, uri});\n    }\n  } else if (cachedImageHash) {\n    setCachedImageHash(undefined);\n  }\n\n  const onLoad = useCallback(async (e: any) => {\n    setLoadedUri(modelUri);\n    console.log('onLoad', e);\n\n    if (!modelViewerRef.current) return;\n\n    const uri = await modelViewerRef.current.toDataURL('image/png', 0.5);\n    const preview = {blurhash: await imageToBlurhash(uri)};\n    // const preview = {thumbhash: await imageToThumbhash(uri)};\n    console.log(preview);\n    \n    model?.mutate(s => s.preview = preview);\n  }, [model, modelUri, setLoadedUri, modelViewerRef.current]);\n\n  useEffect(() => {\n    if (!modelViewerRef.current) return;\n\n    const element = modelViewerRef.current;\n    element.addEventListener('load', onLoad);\n    return () => element.removeEventListener('load', onLoad);\n  }, [modelViewerRef.current, onLoad]);\n\n\n  for (const ref of [modelViewerRef, axesViewerRef]) {\n    const otherRef = ref === modelViewerRef ? axesViewerRef : modelViewerRef;\n    useEffect(() => {\n      if (!ref.current) return;\n\n      function handleCameraChange(e: any) {\n        if (!otherRef.current) return;\n        if (e.detail.source === 'user-interaction') {\n          const cameraOrbit = ref.current.getCameraOrbit();\n          cameraOrbit.radius = otherRef.current.getCameraOrbit().radius;\n        \n          otherRef.current.cameraOrbit = cameraOrbit.toString();\n        }\n      }\n      const element = ref.current;\n      element.addEventListener('camera-change', handleCameraChange);\n      return () => element.removeEventListener('camera-change', handleCameraChange);\n    }, [ref.current, otherRef.current]);\n  }\n\n  // Cycle through predefined views when user clicks on the axes viewer\n  useEffect(() => {\n    let mouseDownSpherePoint: [number, number, number] | undefined;\n    function getSpherePoint() {\n      const orbit = axesViewerRef.current.getCameraOrbit();\n      return spherePoint(orbit.theta, orbit.phi);\n    }\n    function onMouseDown(e: MouseEvent) {\n      if (e.target === axesViewerRef.current) {\n        mouseDownSpherePoint = getSpherePoint();\n      }\n    }\n    function onMouseUp(e: MouseEvent) {\n      if (e.target === axesViewerRef.current) {\n        const euclEps = 0.01;\n        const radEps = 0.1;\n\n        const spherePoint = getSpherePoint();\n        const clickDist = mouseDownSpherePoint ? euclideanDist(spherePoint, mouseDownSpherePoint) : Infinity;\n        if (clickDist > euclEps) {\n          return;\n        }\n        // Note: unlike the axes viewer, the model viewer has a prompt that makes the model wiggle around, we only fetch it to get the radius.\n        const axesOrbit = axesViewerRef.current.getCameraOrbit();\n        const modelOrbit = modelViewerRef.current.getCameraOrbit();\n        const [currentIndex, dist, radDist] = getClosestPredefinedOrbitIndex(axesOrbit.theta, axesOrbit.phi);\n        const newIndex = dist < euclEps && radDist < radEps ? (currentIndex + 1) % PREDEFINED_ORBITS.length : currentIndex;\n        const [name, theta, phi] = PREDEFINED_ORBITS[newIndex];\n        Object.assign(modelOrbit, {theta, phi});\n        const newOrbit = modelViewerRef.current.cameraOrbit = axesViewerRef.current.cameraOrbit = modelOrbit.toString();\n        setSnackbarMessage(`${name} view`);\n        setSnackbarOpen(true);\n        setTimeout(() => setSnackbarOpen(false), 1000);\n        setInteractionPrompt('none');\n      }\n    }\n    window.addEventListener('mousedown', onMouseDown);\n    window.addEventListener('mouseup', onMouseUp);\n    // window.addEventListener('click', onClick);\n    return () => {\n      // window.removeEventListener('click', onClick);\n      window.removeEventListener('mousedown', onMouseDown);\n      window.removeEventListener('mouseup', onMouseUp);\n    };\n  });\n\n  return (\n    <div className={`viewer-panel ${className ?? ''}`}\n          style={{\n              display: 'flex',\n              flexDirection: 'column', \n              position: 'relative',\n              height: '100%',\n              width: '100%',\n              backgroundColor: '#2a2a2a',\n              ...(style ?? {})\n          }}>\n      <Snackbar\n        open={snackbarOpen}\n        message={snackbarMessage}\n        anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\n        autoHideDuration={1000}\n        onClose={() => setSnackbarOpen(false)}\n      />\n      <style>\n        {`\n          @keyframes pulse {\n            0% { opacity: 0.4; }\n            50% { opacity: 0.7; }\n            100% { opacity: 0.4; }\n          }\n        `}\n      </style>\n\n      {!loaded && cachedImageHash && \n        <img\n        src={cachedImageHash.uri}\n        style={{\n          animation: 'pulse 1.5s ease-in-out infinite',\n          position: 'absolute',\n          pointerEvents: 'none',\n          width: '100%',\n          height: '100%'\n        }} />\n      }\n\n\n      <model-viewer\n        orientation=\"0deg -90deg 0deg\"\n        class=\"main-viewer\"\n        src={modelUri}\n        style={{\n          transition: 'opacity 0.5s',\n          opacity: loaded ? 1 : 0,\n          position: 'absolute',\n          width: '100%',\n          height: '100%',\n          zIndex: 1,\n        }}\n        camera-orbit={originalOrbit}\n        interaction-prompt={interactionPrompt}\n        environment-image=\"./skybox-lights.jpg\"\n        max-camera-orbit=\"auto 180deg 500%\"\n        min-camera-orbit=\"auto 0deg 10%\"\n        max-field-of-view=\"45deg\"\n        camera-controls\n        ar\n        ref={modelViewerRef}\n      >\n        <span slot=\"progress-bar\"></span>\n      </model-viewer>\n      {state.view.showAxes && (\n        <model-viewer\n                orientation=\"0deg -90deg 0deg\"\n                src=\"./axes.glb\"\n                style={{\n                  position: 'absolute',\n                  bottom: 0,\n                  left: 0,\n                  zIndex: 10,\n                  height: '100px',\n                  width: '100px',\n                }}\n                loading=\"eager\"\n                camera-orbit={originalOrbit}\n                // interpolation-decay=\"0\"\n                environment-image=\"./skybox-lights.jpg\"\n                max-camera-orbit=\"auto 180deg auto\"\n                min-camera-orbit=\"auto 0deg auto\"\n                orbit-sensitivity=\"5\"\n                interaction-prompt=\"none\"\n                camera-controls=\"false\"\n                disable-zoom\n                disable-tap \n                disable-pan\n                ref={axesViewerRef}\n        >\n          <span slot=\"progress-bar\"></span>\n        </model-viewer>\n      )}\n    </div>\n  )\n}\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport { CSSProperties, useState } from 'react';\nimport { IconButton, Menu, MenuItem } from '@mui/material';\nimport { HelpOutline as HelpIcon } from '@mui/icons-material';\n\nexport default function HelpMenu({className, style}: {className?: string, style?: CSSProperties}) {\n  const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n  const open = Boolean(anchorEl);\n\n  const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n    setAnchorEl(event.currentTarget);\n  };\n\n  const handleClose = () => {\n    setAnchorEl(null);\n  };\n\n  const openLink = (url: string) => {\n    window.open(url, '_blank');\n    handleClose();\n  };\n\n  return (\n    <>\n      <IconButton \n        size=\"small\"\n        onClick={handleClick}\n        aria-label=\"Help & Licenses\"\n        title=\"Help & Licenses\"\n        style={style}\n        className={className}\n      >\n        <HelpIcon />\n      </IconButton>\n\n      <Menu\n        anchorEl={anchorEl}\n        open={open}\n        onClose={handleClose}\n      >\n        <MenuItem onClick={() => openLink('https://github.com/openscad/openscad-playground/')}>\n          openscad-playground\n        </MenuItem>\n        <MenuItem onClick={() => openLink('https://github.com/openscad/openscad-playground/blob/main/LICENSE.md')}>\n          LICENSES\n        </MenuItem>\n        <MenuItem onClick={() => openLink('https://openscad.org/documentation.html')}>\n          OpenSCAD Docs\n        </MenuItem>\n        <MenuItem onClick={() => openLink('https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Customizer')}>\n          Customizer Syntax\n        </MenuItem>\n        <MenuItem onClick={() => openLink('https://openscad.org/cheatsheet/')}>\n          OpenSCAD Cheatsheet\n        </MenuItem>\n        <MenuItem onClick={() => openLink('https://github.com/BelfrySCAD/BOSL2/wiki/CheatSheet')}>\n          BOSL2 Cheatsheet\n        </MenuItem>\n      </Menu>\n    </>\n  );\n}","import React, { useContext, useState } from 'react';\nimport { ModelContext } from './contexts.ts';\n\nimport { Button, ButtonGroup, Menu, MenuItem, Divider } from '@mui/material';\nimport { Download as DownloadIcon, ArrowDropDown as ArrowDropDownIcon } from '@mui/icons-material';\n\nexport default function ExportButton({className, style}: {className?: string, style?: React.CSSProperties}) {\n    const model = useContext(ModelContext);\n    if (!model) throw new Error('No model');\n    const state = model.state;\n\n    const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n    const open = Boolean(anchorEl);\n\n    const dropdownModel = state.is2D ? [\n        { data: 'svg', buttonLabel: 'SVG', label: 'SVG (Simple Vector Graphics)', command: () => model!.setFormats('svg', undefined) },\n        { data: 'dxf', buttonLabel: 'DXF', label: 'DXF (Drawing Exchange Format)', command: () => model!.setFormats('dxf', undefined) },\n      ] : [\n        { data: 'glb', buttonLabel: 'Download GLB', label: 'GLB (binary glTF)', command: () => model!.setFormats(undefined, 'glb') },\n        { data: 'stl', buttonLabel: 'Download STL', label: 'STL (binary)', command: () => model!.setFormats(undefined, 'stl') },\n        { data: 'off', buttonLabel: 'Download OFF', label: 'OFF (Object File Format)', command: () => model!.setFormats(undefined, 'off') },\n        { data: '3mf', buttonLabel: 'Download 3MF', label: '3MF (Multimaterial)', command: () => model!.setFormats(undefined, '3mf') },\n      ];\n\n    const exportFormat = state.is2D ? state.params.exportFormat2D : state.params.exportFormat3D;\n    const selectedItem = dropdownModel.find(item => item.data === exportFormat) || dropdownModel[0]!;\n    const disabled = !state.output || state.output.isPreview || state.rendering || state.exporting;\n\n  return (\n    <div className={className} style={style}>\n      <ButtonGroup variant=\"contained\" size=\"small\" disabled={disabled}>\n        <Button \n          startIcon={<DownloadIcon />}\n          onClick={() => model!.export()}\n        >\n          {selectedItem.buttonLabel}\n        </Button>\n        <Button\n          size=\"small\"\n          onClick={(e) => setAnchorEl(e.currentTarget)}\n        >\n          <ArrowDropDownIcon />\n        </Button>\n      </ButtonGroup>\n\n      <Menu\n        anchorEl={anchorEl}\n        open={open}\n        onClose={() => setAnchorEl(null)}\n      >\n        {dropdownModel.map((item) => (\n          <MenuItem \n            key={item.data}\n            onClick={() => {\n              item.command();\n              setAnchorEl(null);\n            }}\n          >\n            {item.label}\n          </MenuItem>\n        ))}\n        {!state.is2D && [\n          <Divider key=\"divider\" />,\n          <MenuItem \n            key=\"materials\"\n            onClick={() => {\n              model!.mutate(s => s.view.extruderPickerVisibility = 'editing');\n              setAnchorEl(null);\n            }}\n          >\n            Edit materials{(state.params.extruderColors ?? []).length > 0 ? ` (${(state.params.extruderColors ?? []).length})` : ''}\n          </MenuItem>\n        ]}\n      </Menu>\n    </div>\n  );\n}\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport { CSSProperties, useContext, useState } from 'react';\nimport { IconButton, Menu, MenuItem, Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, Button } from '@mui/material';\nimport { Settings as SettingsIcon } from '@mui/icons-material';\nimport { ModelContext } from './contexts.ts';\nimport { isInStandaloneMode } from '../utils.ts';\n\nexport default function SettingsMenu({className, style}: {className?: string, style?: CSSProperties}) {\n  const model = useContext(ModelContext);\n  if (!model) throw new Error('No model');\n  const state = model.state;\n\n  const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n  const [confirmOpen, setConfirmOpen] = useState(false);\n  const open = Boolean(anchorEl);\n\n  const handleClick = (event: React.MouseEvent<HTMLElement>) => {\n    setAnchorEl(event.currentTarget);\n  };\n\n  const handleClose = () => {\n    setAnchorEl(null);\n  };\n\n  const handleClearStorage = () => {\n    setConfirmOpen(true);\n    handleClose();\n  };\n\n  const confirmClearStorage = () => {\n    localStorage.clear();\n    location.reload();\n  };\n\n  return (\n    <>\n      <IconButton \n        size=\"small\"\n        onClick={handleClick}\n        aria-label=\"Settings menu\"\n        title=\"Settings menu\"\n        style={style}\n        className={className}\n      >\n        <SettingsIcon />\n      </IconButton>\n\n      <Menu\n        anchorEl={anchorEl}\n        open={open}\n        onClose={handleClose}\n      >\n        <MenuItem onClick={() => {\n          model.changeLayout(state.view.layout.mode === 'multi' ? 'single' : 'multi');\n          handleClose();\n        }}>\n          {state.view.layout.mode === 'multi' ? 'Switch to single panel mode' : 'Switch to side-by-side mode'}\n        </MenuItem>\n        <MenuItem onClick={() => {\n          model.mutate(s => s.view.showAxes = !s.view.showAxes);\n          handleClose();\n        }}>\n          {state.view.showAxes ? 'Hide axes' : 'Show axes'}\n        </MenuItem>\n        <MenuItem onClick={async () => {\n          model.mutate(s => s.view.showBuildPlate = !s.view.showBuildPlate);\n          handleClose();\n          // Re-render the model to apply build plate changes\n          await model.render({isPreview: false, now: true});\n        }}>\n          {state.view.showBuildPlate ? 'Hide build plate' : 'Show build plate'}\n        </MenuItem>\n        <MenuItem onClick={() => {\n          model.mutate(s => s.view.lineNumbers = !s.view.lineNumbers);\n          handleClose();\n        }}>\n          {state.view.lineNumbers ? 'Hide line numbers' : 'Show line numbers'}\n        </MenuItem>\n        {isInStandaloneMode() && (\n          <MenuItem onClick={handleClearStorage}>\n            Clear local storage\n          </MenuItem>\n        )}\n      </Menu>\n\n      <Dialog\n        open={confirmOpen}\n        onClose={() => setConfirmOpen(false)}\n      >\n        <DialogTitle>Clear local storage</DialogTitle>\n        <DialogContent>\n          <DialogContentText>\n            This will clear all the edits you've made and files you've created in this playground \n            and will reset it to factory defaults. Are you sure you wish to proceed? (you might lose your models!)\n          </DialogContentText>\n        </DialogContent>\n        <DialogActions>\n          <Button onClick={() => setConfirmOpen(false)}>Cancel</Button>\n          <Button onClick={confirmClearStorage} color=\"error\" variant=\"contained\">\n            Clear all files!\n          </Button>\n        </DialogActions>\n      </Dialog>\n    </>\n  );\n}","import chroma from 'chroma-js';\nimport React, { useContext, useState } from 'react';\nimport { Dialog, DialogTitle, DialogContent, DialogActions, Button, TextField, Box, IconButton } from '@mui/material';\nimport { Delete as DeleteIcon, Add as AddIcon } from '@mui/icons-material';\nimport { ModelContext } from './contexts.ts';\n\nexport default function MultimaterialColorsDialog() {\n    const model = useContext(ModelContext);\n    if (!model) throw new Error('No model');\n    const state = model.state;\n\n    const [tempExtruderColors, setTempExtruderColors] = useState<string[]>(state.params.extruderColors ?? []);\n\n    function setColor(index: number, color: string) {\n        setTempExtruderColors(tempExtruderColors.map((c, i) => i === index ? color : c));\n    }\n    function removeColor(index: number) {\n        setTempExtruderColors(tempExtruderColors.filter((c, i) => i !== index));\n    }\n    function addColor() {\n        setTempExtruderColors([...tempExtruderColors, '']);\n    }\n\n    const cancelExtruderPicker = () => {\n        setTempExtruderColors(state.params.extruderColors ?? []);\n        model!.mutate(s => s.view.extruderPickerVisibility = undefined);\n    };\n    const canAddColor = !tempExtruderColors.some(c => c.trim() === '');\n    const isValid = tempExtruderColors.every(c => chroma.valid(c) || c.trim() === '');\n    \n    return (\n        <Dialog \n            open={!!state.view.extruderPickerVisibility} \n            onClose={cancelExtruderPicker}\n            maxWidth=\"sm\"\n            fullWidth\n        >\n            <DialogTitle>Multimaterial Color Picker</DialogTitle>\n            <DialogContent>\n                <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2, pt: 1 }}>\n                    <Box sx={{ color: 'text.secondary' }}>\n                        To print on a multimaterial printer using PrusaSlicer, BambuSlicer or OrcaSlicer, \n                        we map the model's colors to the closest match in the list of extruder colors.\n                        Please define the colors of your extruders below.\n                    </Box>\n                    \n                    {tempExtruderColors.map((color, index) => (\n                        <Box key={index} sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n                            <input\n                                type=\"color\"\n                                value={chroma.valid(color) ? chroma(color).hex() : '#000000'}\n                                onChange={(e) => setColor(index, chroma(e.target.value).name())}\n                                style={{ width: 50, height: 40, border: 'none', cursor: 'pointer' }}\n                            />\n                            <TextField\n                                fullWidth\n                                size=\"small\"\n                                value={color}\n                                autoFocus={color === ''}\n                                error={color.trim() === '' || !chroma.valid(color)}\n                                onKeyDown={(e) => {\n                                    if (e.key === 'Enter' && canAddColor) {\n                                        e.preventDefault();\n                                        addColor();\n                                    }\n                                }}\n                                onChange={(e) => {\n                                    let newColor = e.target.value.trim();\n                                    try {\n                                        newColor = chroma(newColor).name();\n                                    } catch (err) {\n                                        console.error(err);\n                                    }\n                                    setColor(index, newColor);\n                                }}\n                            />\n                            <IconButton\n                                color=\"error\"\n                                onClick={() => removeColor(index)}\n                                size=\"small\"\n                            >\n                                <DeleteIcon />\n                            </IconButton>\n                        </Box>\n                    ))}\n                    <Button\n                        startIcon={<AddIcon />}\n                        disabled={!canAddColor}\n                        onClick={addColor}\n                        variant=\"outlined\"\n                    >\n                        Add Color\n                    </Button>\n                </Box>\n            </DialogContent>\n            <DialogActions>\n                <Button onClick={cancelExtruderPicker}>Cancel</Button>\n                <Button \n                    disabled={!isValid}\n                    variant=\"contained\"\n                    onClick={() => {\n                        const wasExporting = state.view.extruderPickerVisibility === 'exporting';\n                        model!.mutate(s => {\n                            s.params.extruderColors = tempExtruderColors.filter(c => c.trim() !== '');\n                            s.view.extruderPickerVisibility = undefined;\n                        });\n                        if (wasExporting) {\n                            model!.export();\n                        }\n                    }}\n                >\n                    {state.view.extruderPickerVisibility === 'exporting' ? \"Export\" : \"Save\"}\n                </Button>\n            </DialogActions>\n        </Dialog>\n    );\n}","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport React, { CSSProperties, useContext } from 'react';\nimport { ModelContext } from './contexts.ts';\nimport * as monaco from 'monaco-editor/esm/vs/editor/editor.api';\nimport { Button, LinearProgress, Badge, Box, Snackbar } from '@mui/material';\nimport { FlashOn as FlashOnIcon, FormatAlignLeft as FormatAlignLeftIcon } from '@mui/icons-material';\nimport HelpMenu from './HelpMenu.tsx';\nimport ExportButton from './ExportButton.tsx';\nimport SettingsMenu from './SettingsMenu.tsx';\nimport MultimaterialColorsDialog from './MultimaterialColorsDialog.tsx';\n\n\nexport default function Footer({style}: {style?: CSSProperties}) {\n  const model = useContext(ModelContext);\n  if (!model) throw new Error('No model');\n  const state = model.state;\n\n  const severityByMarkerSeverity = new Map<monaco.MarkerSeverity, 'error' | 'warning' | 'info'>([\n    [monaco.MarkerSeverity.Error, 'error'],\n    [monaco.MarkerSeverity.Warning, 'warning'],\n    [monaco.MarkerSeverity.Info, 'info'],\n  ]);\n  const markers = state.lastCheckerRun?.markers ?? [];\n  const getBadgeContent = (s: monaco.MarkerSeverity) => {\n    const count = markers.filter(m => m.severity == s).length;\n    return count > 0 ? count : 0;\n  };\n\n  const errorCount = getBadgeContent(monaco.MarkerSeverity.Error);\n  const warningCount = getBadgeContent(monaco.MarkerSeverity.Warning);\n  const infoCount = getBadgeContent(monaco.MarkerSeverity.Info);\n  const maxMarkerSeverity = markers.length == 0 ? undefined : markers.map(m => m.severity).reduce((a, b) => Math.max(a, b));\n  \n  return (\n    <Box>\n      <LinearProgress\n        sx={{\n          visibility: state.rendering || state.previewing || state.checkingSyntax || state.exporting\n            ? 'visible' : 'hidden',\n          height: 3\n        }}\n      />\n      \n      <Box sx={{\n        display: 'flex',\n        flexDirection: 'row',\n        gap: 1.5,\n        alignItems: 'center',\n        px: 2,\n        py: 1.5,\n        backgroundColor: 'background.paper',\n        borderTop: 1,\n        borderColor: 'divider',\n        ...(style ?? {})\n      }}>\n        {state.output && !state.output.isPreview ? (\n          <ExportButton />\n        ) : state.previewing ? (\n          <Button\n            startIcon={<FlashOnIcon />}\n            disabled\n            size=\"small\"\n            variant=\"contained\"\n          >\n            Previewing...\n          </Button>\n        ) : state.output && state.output.isPreview ? (\n          <Button\n            startIcon={<FlashOnIcon />}\n            onClick={() => model.render({isPreview: false, now: true})}\n            size=\"small\"\n            disabled={state.rendering}\n            variant=\"contained\"\n          >\n            {state.rendering ? 'Rendering...' : 'Render'}\n          </Button>\n        ) : undefined}\n        \n        <MultimaterialColorsDialog />\n        \n        {(state.lastCheckerRun || state.output) && (\n          <Badge \n            badgeContent={errorCount + warningCount + infoCount} \n            color={maxMarkerSeverity === monaco.MarkerSeverity.Error ? 'error' : maxMarkerSeverity === monaco.MarkerSeverity.Warning ? 'warning' : 'info'}\n          >\n            <Button\n              startIcon={<FormatAlignLeftIcon />}\n              onClick={() => model.logsVisible = !state.view.logs}\n              size=\"small\"\n              variant={state.view.logs ? 'contained' : 'outlined'}\n            >\n              {state.view.logs ? \"Hide Logs\" : \"Show Logs\"}\n            </Button>\n          </Badge>\n        )}\n\n        <Box sx={{ flex: 1 }} />\n\n        <SettingsMenu />\n        <HelpMenu />\n      </Box>\n    </Box>\n  );\n}\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport React, { useContext } from 'react';\nimport { SingleLayoutComponentId } from '../state/app-state.ts'\nimport { Tabs, Tab, ToggleButton, ToggleButtonGroup, Box } from '@mui/material';\nimport { Edit as EditIcon, ViewInAr as ViewIcon, Tune as TuneIcon } from '@mui/icons-material';\nimport { ModelContext } from './contexts.ts';\n\nexport default function PanelSwitcher() {\n  const model = useContext(ModelContext);\n  if (!model) throw new Error('No model');\n\n  const state = model.state;\n\n  const iconMap = {\n    'editor': <EditIcon fontSize=\"small\" />,\n    'viewer': <ViewIcon fontSize=\"small\" />,\n    'customizer': <TuneIcon fontSize=\"small\" />,\n  };\n\n  const singleTargets: {id: SingleLayoutComponentId, icon: JSX.Element, label: string}[] = [\n    { id: 'editor', icon: iconMap.editor, label: 'Editor' },\n    { id: 'viewer', icon: iconMap.viewer, label: 'Viewer' },\n  ];\n  if ((state.parameterSet?.parameters?.length ?? 0) > 0) {\n    singleTargets.push({ id: 'customizer', icon: iconMap.customizer, label: 'Customizer' });\n  }\n  const multiTargets = singleTargets;\n\n  return (\n    <Box sx={{ \n      borderBottom: 1, \n      borderColor: 'divider',\n      backgroundColor: 'background.paper',\n      px: 2,\n      backdropFilter: 'blur(8px)',\n    }}>\n      {state.view.layout.mode === 'multi' ? (\n        <Box sx={{ \n          display: 'flex', \n          justifyContent: 'center', \n          py: 1.5,\n        }}>\n          <ToggleButtonGroup\n            size=\"small\"\n            aria-label=\"panel visibility\"\n            sx={{\n              gap: 0.5,\n              '& .MuiToggleButton-root': {\n                px: 2,\n                py: 1,\n              }\n            }}\n          >\n            {multiTargets.map(({icon, label, id}) => \n              <ToggleButton\n                key={id}\n                value={id}\n                selected={(state.view.layout as any)[id]}\n                onChange={() => model.changeMultiVisibility(id, !(state.view.layout as any)[id])}\n                aria-label={label}\n              >\n                {icon}\n                <Box component=\"span\" sx={{ ml: 1, fontSize: '0.875rem' }}>{label}</Box>\n              </ToggleButton>\n            )}\n          </ToggleButtonGroup>\n        </Box>\n      ) : (\n        <Tabs\n          value={singleTargets.map(t => t.id).indexOf(state.view.layout.focus)}\n          onChange={(_, newValue) => model.changeSingleVisibility(singleTargets[newValue].id)}\n          aria-label=\"panel tabs\"\n          sx={{\n            '& .MuiTab-root': {\n              px: 3,\n            }\n          }}\n        >\n          {singleTargets.map(({icon, label}) => \n            <Tab \n              key={label}\n              icon={icon} \n              label={label} \n              iconPosition=\"start\"\n              sx={{ gap: 1 }}\n            />\n          )}\n        </Tabs>\n      )}\n    </Box>\n  );\n}\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport React, { CSSProperties, useContext } from 'react';\nimport { ModelContext } from './contexts.ts';\n\nimport { \n  Select, \n  Slider, \n  Checkbox, \n  TextField, \n  Accordion, \n  AccordionSummary, \n  AccordionDetails, \n  MenuItem, \n  Box,\n  FormControlLabel,\n  IconButton,\n  Typography\n} from '@mui/material';\nimport { ExpandMore as ExpandMoreIcon, Refresh as RefreshIcon } from '@mui/icons-material';\nimport { Parameter } from '../state/customizer-types.ts';\n\nexport default function CustomizerPanel({className, style}: {className?: string, style?: CSSProperties}) {\n\n  const model = useContext(ModelContext);\n  if (!model) throw new Error('No model');\n\n  const state = model.state;\n\n  const handleChange = (name: string, value: any) => {\n    model.setVar(name, value);\n  };\n\n  const groupedParameters = (state.parameterSet?.parameters ?? []).reduce((acc, param) => {\n    if (!acc[param.group]) {\n      acc[param.group] = [];\n    }\n    acc[param.group].push(param);\n    return acc;\n  }, {} as { [key: string]: any[] });\n  const groups = Object.entries(groupedParameters);\n  const collapsedTabSet = new Set(state.view.collapsedCustomizerTabs ?? []);\n  const setTabOpen = (name: string, open: boolean) => {\n    if (open) {\n      collapsedTabSet.delete(name);\n    } else {\n      collapsedTabSet.add(name)\n    }\n    model.mutate(s => s.view.collapsedCustomizerTabs = Array.from(collapsedTabSet));\n  }\n\n  return (\n    <Box\n        className={`customizer-panel ${className ?? ''}`}\n        sx={{\n          display: 'flex',\n          flexDirection: 'column',\n          height: '100%',\n          width: '100%',\n          backgroundColor: 'background.default',\n          overflow: 'auto',\n          p: 1,\n          ...style,\n        }}>\n      {groups.map(([group, params]) => (\n        <Accordion \n            key={group}\n            expanded={!collapsedTabSet.has(group)}\n            onChange={(_, expanded) => setTabOpen(group, expanded)}\n            sx={{ \n              mb: 1,\n              '&:first-of-type': {\n                borderRadius: '12px',\n              },\n              '&:last-of-type': {\n                borderRadius: '12px',\n              },\n            }}\n        >\n          <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n            <Typography>{group}</Typography>\n          </AccordionSummary>\n          <AccordionDetails>\n            <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n              {params.map((param) => (\n                <ParameterInput\n                  key={param.name}\n                  value={(state.params.vars ?? {})[param.name]}\n                  param={param}\n                  handleChange={handleChange} />\n              ))}\n            </Box>\n          </AccordionDetails>\n        </Accordion>\n      ))}\n    </Box>\n  );\n};\n\nfunction ParameterInput({param, value, className, style, handleChange}: {param: Parameter, value: any, className?: string, style?: CSSProperties, handleChange: (key: string, value: any) => void}) {\n  const isDefault = value === undefined || JSON.stringify(value) === JSON.stringify(param.initial);\n\n  return (\n    <Box sx={{ display: 'flex', flexDirection: 'column', ...style }}>\n      <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', mb: 1 }}>\n        <Box sx={{ flex: 1 }}>\n          <Typography variant=\"subtitle2\" fontWeight=\"bold\">{param.name}</Typography>\n          {param.caption && <Typography variant=\"caption\" color=\"text.secondary\">{param.caption}</Typography>}\n        </Box>\n        <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n          {param.type === 'number' && 'options' in param && param.options && (\n            <Select\n              size=\"small\"\n              value={value ?? param.initial}\n              onChange={(e) => handleChange(param.name, e.target.value)}\n              sx={{ minWidth: 120 }}\n            >\n              {param.options.map((opt: any) => (\n                <MenuItem key={opt.value} value={opt.value}>{opt.name}</MenuItem>\n              ))}\n            </Select>\n          )}\n          {param.type === 'string' && param.options && (\n            <Select\n              size=\"small\"\n              value={value ?? param.initial}\n              onChange={(e) => handleChange(param.name, e.target.value)}\n              sx={{ minWidth: 120 }}\n            >\n              {param.options.map((opt: any) => (\n                <MenuItem key={opt.value} value={opt.value}>{opt.name}</MenuItem>\n              ))}\n            </Select>\n          )}\n          {param.type === 'boolean' && (\n            <FormControlLabel\n              control={\n                <Checkbox\n                  checked={value ?? param.initial}\n                  onChange={(e) => handleChange(param.name, e.target.checked)}\n                />\n              }\n              label=\"\"\n            />\n          )}\n          {!Array.isArray(param.initial) && param.type === 'number' && !('options' in param) && (\n            <TextField\n              type=\"number\"\n              size=\"small\"\n              value={value ?? param.initial}\n              onChange={(e) => handleChange(param.name, parseFloat(e.target.value))}\n              inputProps={{ \n                step: param.step || 1,\n                min: param.min,\n                max: param.max \n              }}\n              sx={{ width: 100 }}\n            />\n          )}\n          {param.type === 'string' && !param.options && (\n            <TextField\n              size=\"small\"\n              value={value ?? param.initial}\n              onChange={(e) => handleChange(param.name, e.target.value)}\n              sx={{ minWidth: 120 }}\n            />\n          )}\n          {Array.isArray(param.initial) && 'min' in param && (\n            <Box sx={{ display: 'flex', gap: 1 }}>\n              {param.initial.map((_, index) => (\n                <TextField\n                  key={index}\n                  type=\"number\"\n                  size=\"small\"\n                  value={value?.[index] ?? (param.initial as any)[index]}\n                  onChange={(e) => {\n                    const newArray = [...(value ?? param.initial)];\n                    newArray[index] = parseFloat(e.target.value);\n                    handleChange(param.name, newArray);\n                  }}\n                  inputProps={{ \n                    step: param.step || 1,\n                    min: param.min,\n                    max: param.max \n                  }}\n                  sx={{ width: 80 }}\n                />\n              ))}\n            </Box>\n          )}\n          <IconButton\n            size=\"small\"\n            onClick={() => handleChange(param.name, param.initial)}\n            sx={{ visibility: isDefault ? 'hidden' : 'visible' }}\n            title={`Reset ${param.name} to default`}\n          >\n            <RefreshIcon fontSize=\"small\" />\n          </IconButton>\n        </Box>\n      </Box>\n      {!Array.isArray(param.initial) && param.type === 'number' && param.min !== undefined && !('options' in param) && (\n        <Slider\n          value={value ?? param.initial}\n          min={param.min}\n          max={param.max}\n          step={param.step || 1}\n          onChange={(_, newValue) => handleChange(param.name, newValue)}\n          valueLabelDisplay=\"auto\"\n          sx={{ mr: 3 }}\n        />\n      )}\n    </Box>\n  );\n}","import { createTheme } from '@mui/material/styles';\n\nexport const theme = createTheme({\n  palette: {\n    mode: 'dark',\n    primary: {\n      main: '#2196f3',\n      light: '#64b5f6',\n      dark: '#1976d2',\n    },\n    secondary: {\n      main: '#f50057',\n    },\n    background: {\n      default: '#1a1a1a',\n      paper: '#242424',\n    },\n    divider: 'rgba(255, 255, 255, 0.08)',\n    text: {\n      primary: '#e0e0e0',\n      secondary: '#a0a0a0',\n    },\n  },\n  typography: {\n    fontFamily: '\"Inter Variable\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\n    button: {\n      textTransform: 'none',\n      fontWeight: 500,\n    },\n    h6: {\n      fontWeight: 600,\n    },\n  },\n  components: {\n    MuiCssBaseline: {\n      styleOverrides: {\n        body: {\n          scrollbarColor: \"#424242 #1a1a1a\",\n          \"&::-webkit-scrollbar, & *::-webkit-scrollbar\": {\n            width: 8,\n            height: 8,\n          },\n          \"&::-webkit-scrollbar-thumb, & *::-webkit-scrollbar-thumb\": {\n            borderRadius: 8,\n            backgroundColor: \"#424242\",\n          },\n          \"&::-webkit-scrollbar-thumb:hover, & *::-webkit-scrollbar-thumb:hover\": {\n            backgroundColor: \"#525252\",\n          },\n        },\n      },\n    },\n    MuiButton: {\n      styleOverrides: {\n        root: {\n          borderRadius: 8,\n          padding: '8px 20px',\n          fontWeight: 500,\n        },\n        sizeSmall: {\n          padding: '6px 14px',\n          fontSize: '0.8125rem',\n        },\n        contained: {\n          boxShadow: 'none',\n          '&:hover': {\n            boxShadow: 'none',\n          },\n        },\n      },\n      defaultProps: {\n        disableElevation: true,\n      },\n    },\n    MuiIconButton: {\n      styleOverrides: {\n        root: {\n          borderRadius: 8,\n          '&:hover': {\n            backgroundColor: 'rgba(255, 255, 255, 0.08)',\n          },\n        },\n      },\n    },\n    MuiPaper: {\n      styleOverrides: {\n        root: {\n          backgroundImage: 'none',\n          borderRadius: 12,\n        },\n      },\n    },\n    MuiTab: {\n      styleOverrides: {\n        root: {\n          textTransform: 'none',\n          fontWeight: 500,\n          fontSize: '0.875rem',\n          minHeight: 48,\n          '&.Mui-selected': {\n            color: '#2196f3',\n          },\n        },\n      },\n    },\n    MuiTabs: {\n      styleOverrides: {\n        root: {\n          minHeight: 48,\n        },\n        indicator: {\n          height: 3,\n          borderRadius: '3px 3px 0 0',\n        },\n      },\n    },\n    MuiToggleButton: {\n      styleOverrides: {\n        root: {\n          textTransform: 'none',\n          fontWeight: 500,\n          border: '1px solid rgba(255, 255, 255, 0.12)',\n          '&.Mui-selected': {\n            backgroundColor: 'rgba(33, 150, 243, 0.16)',\n            color: '#2196f3',\n            '&:hover': {\n              backgroundColor: 'rgba(33, 150, 243, 0.24)',\n            },\n          },\n        },\n      },\n    },\n    MuiAccordion: {\n      styleOverrides: {\n        root: {\n          backgroundColor: '#2a2a2a',\n          '&:before': {\n            display: 'none',\n          },\n          '&.Mui-expanded': {\n            margin: '8px 0',\n          },\n        },\n      },\n    },\n    MuiLinearProgress: {\n      styleOverrides: {\n        root: {\n          borderRadius: 4,\n          backgroundColor: 'rgba(255, 255, 255, 0.08)',\n        },\n      },\n    },\n    MuiDialog: {\n      styleOverrides: {\n        paper: {\n          backgroundImage: 'none',\n        },\n      },\n    },\n  },\n  shape: {\n    borderRadius: 8,\n  },\n});\n\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport React, { CSSProperties, useEffect, useRef, useState } from 'react';\nimport {MultiLayoutComponentId, State, StatePersister} from '../state/app-state'\nimport { Model, buildCustomizerValues } from '../state/model';\nimport EditorPanel from './EditorPanel';\nimport ViewerPanel from './ViewerPanel';\nimport Footer from './Footer';\nimport { ModelContext, FSContext } from './contexts';\nimport PanelSwitcher from './PanelSwitcher';\nimport CustomizerPanel from './CustomizerPanel';\nimport { ThemeProvider, CssBaseline, Box } from '@mui/material';\nimport { theme } from '../theme';\nimport { CustomizerValues, CustomizerValuesInput, Parameter } from '../state/customizer-types';\n\ninterface AppProps {\n  initialState: State;\n  statePersister: StatePersister;\n  fs: FS;\n  customizerValues?: CustomizerValuesInput;\n  onCustomizerValuesChange?: (values: CustomizerValues) => void;\n  onParametersChange?: (parameters: Parameter[]) => void;\n}\n\nexport function App({\n  initialState,\n  statePersister,\n  fs,\n  customizerValues,\n  onCustomizerValuesChange,\n  onParametersChange,\n}: AppProps) {\n  const [state, setState] = useState(initialState);\n  const externalValuesSignatureRef = useRef<string>('');\n  const lastCustomizerValuesSignatureRef = useRef<string>('');\n  const lastParametersRef = useRef<Parameter[] | null>(null);\n  \n  const model = new Model(fs, state, setState, statePersister);\n  useEffect(() => model.init(), [model]);\n\n  useEffect(() => {\n    if (!customizerValues || Object.keys(customizerValues).length === 0) {\n      externalValuesSignatureRef.current = '';\n      return;\n    }\n    const signature = serializeSimpleMap(customizerValues);\n    if (signature === externalValuesSignatureRef.current) {\n      return;\n    }\n    externalValuesSignatureRef.current = signature;\n    model.setVars(customizerValues);\n  }, [customizerValues, model]);\n\n  useEffect(() => {\n    if (!onCustomizerValuesChange || !state.parameterSet) {\n      if (!state.parameterSet) {\n        lastCustomizerValuesSignatureRef.current = '';\n      }\n      return;\n    }\n\n    const values = buildCustomizerValues(state.parameterSet, state.params.vars);\n    const signature = serializeCustomizerValues(values);\n    if (signature === lastCustomizerValuesSignatureRef.current) {\n      return;\n    }\n    lastCustomizerValuesSignatureRef.current = signature;\n    onCustomizerValuesChange(values);\n  }, [state.parameterSet, state.params.vars, onCustomizerValuesChange]);\n\n  useEffect(() => {\n    if (!onParametersChange) {\n      return;\n    }\n    const parameters = state.parameterSet?.parameters;\n    if (!parameters) {\n      lastParametersRef.current = null;\n      return;\n    }\n    if (lastParametersRef.current === parameters) {\n      return;\n    }\n    lastParametersRef.current = parameters;\n    onParametersChange(parameters);\n  }, [state.parameterSet, onParametersChange]);\n\n  useEffect(() => {\n    const handleKeyDown = (event: KeyboardEvent) => {\n      if (event.key === 'F5') {\n        event.preventDefault();\n        model.render({isPreview: true, now: true})\n      } else if (event.key === 'F6') {\n        event.preventDefault();\n        model.render({isPreview: false, now: true})\n      } else if (event.key === 'F7') {\n        event.preventDefault();\n        model.export();\n      }\n    };\n    window.addEventListener('keydown', handleKeyDown);\n    return () => {\n      window.removeEventListener('keydown', handleKeyDown);\n    };\n  }, []);\n\n  const layout = state.view.layout;\n  const isMultiLayout = layout.mode === 'multi';\n  const isCustomizerOpen = isMultiLayout ? layout.customizer : false;\n  \n  // Calculate panel widths based on layout\n  const getPanelFlex = (panelId: MultiLayoutComponentId): number => {\n    if (!isMultiLayout) return 1;\n    \n    const visiblePanels = [\n      layout.editor ? 'editor' : null,\n      layout.viewer ? 'viewer' : null, \n      layout.customizer ? 'customizer' : null\n    ].filter(Boolean).length;\n    \n    return visiblePanels > 0 ? 1 : 0;\n  };\n  \n  const getPanelDisplay = (panelId: MultiLayoutComponentId): string => {\n    if (!isMultiLayout) return 'flex';\n    return (state.view.layout as any)[panelId] ? 'flex' : 'none';\n  };\n\n  return (\n    <ThemeProvider theme={theme}>\n      <CssBaseline />\n      <ModelContext.Provider value={model}>\n        <FSContext.Provider value={fs}>\n          <Box sx={{\n            display: 'flex',\n            flexDirection: 'column',\n            height: '100vh',\n            width: '100vw',\n            overflow: 'hidden'\n          }}>\n            \n            <PanelSwitcher />\n      \n            <Box sx={{\n              display: 'flex',\n              flexDirection: 'row',\n              flex: 1,\n              minHeight: 0,\n            }}>\n\n              <EditorPanel \n                className=\"editor-panel\"\n                style={{\n                  flex: getPanelFlex('editor'),\n                  display: getPanelDisplay('editor'),\n                  minWidth: 0,\n                }}\n              />\n              \n              <ViewerPanel \n                className=\"viewer-panel\"\n                style={{\n                  flex: getPanelFlex('viewer'),\n                  display: getPanelDisplay('viewer'),\n                  minWidth: 0,\n                }}\n              />\n              \n              <CustomizerPanel \n                className=\"customizer-panel\"\n                style={{\n                  flex: getPanelFlex('customizer'),\n                  display: getPanelDisplay('customizer'),\n                  minWidth: 0,\n                  maxHeight: '100%'\n                }}\n              />\n            </Box>\n\n            <Footer />\n          </Box>\n        </FSContext.Provider>\n      </ModelContext.Provider>\n    </ThemeProvider>\n  );\n}\n\nfunction serializeSimpleMap(values: CustomizerValuesInput): string {\n  const entries = Object.keys(values)\n    .sort()\n    .map(key => [key, values[key]]);\n  return JSON.stringify(entries);\n}\n\nfunction serializeCustomizerValues(values: CustomizerValues): string {\n  const entries = Object.keys(values)\n    .sort()\n    .map(key => [key, values[key]]);\n  return JSON.stringify(entries);\n}\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nexport type ParsedFunctionoidDef = {\n  path: string,\n  name: string,\n  params?: {\n    name: string,\n    defaultValue: string,\n  }[],\n  signature: string,\n  referencesChildren: boolean | null,\n};\nexport type ParsedFunctionoidDefs = {[name: string]: ParsedFunctionoidDef};\n\nexport type ParsedFile = {\n  functions: ParsedFunctionoidDefs,\n  modules: ParsedFunctionoidDefs,\n  vars: string[],\n  includes: string[],\n  uses: string[],\n};\n\nexport const stripComments = (src: string) => src.replaceAll(/\\/\\*(.|[\\s\\S])*?\\*\\/|\\/\\/.*?$/gm, '');\n\nexport function parseOpenSCAD(path: string, src: string, skipPrivates: boolean): ParsedFile {\n  const withoutComments = stripComments(src);\n  const vars = [];\n  const functions: ParsedFunctionoidDefs = {};\n  const modules: ParsedFunctionoidDefs = {};\n  const includes: string[] = [];\n  const uses: string[] = [];\n  for (const m of withoutComments.matchAll(/(use|include)\\s*<([^>]+)>/g)) {\n    (m[1] == 'use' ? uses : includes).push(m[2]);\n  }\n  for (const m of withoutComments.matchAll(/(?:^|[{};])\\s*([$\\w]+)\\s*=/g)) {\n    vars.push(m[1]);\n  }\n  for (const m of withoutComments.matchAll(/(function|module)\\s+([$\\w]+)\\s*\\(([^)]*)\\)(?:\\s*(?:=\\s*)?(\\{\\}|[^{}]+?;))?/gm)) {\n    const type = m[1];\n    const name = m[2];\n    if (skipPrivates && name.startsWith('_')) {\n      continue;\n    }\n    const paramsStr = m[3];\n    const optBody = m[4];\n    const params = [];\n    if (/^(\\s*([$\\w]+(\\s*=[^,()[]+)?(\\s*,\\s*[$\\w]+(\\s*=[^,()[]+)?)*)?\\s*)$/m.test(paramsStr)) {\n      for (const paramStr of paramsStr.split(',')) {\n        const am = /^\\s*([$\\w]+)(?:\\s*=([^,()[]+))?\\s*$/.exec(paramStr);\n        if (am) {\n          const paramName = am[1];\n          const defaultValue = am[2];\n          params.push({\n            name: paramName,\n            defaultValue\n          });\n        }\n      }\n    }\n    (type == 'function' ? functions : modules)[name] = {\n      path,\n      name,\n      signature: `${name}(${paramsStr.replaceAll(/[\\s]+/gm, ' ').replaceAll(/\\b | \\b/g, '')})`,\n      params,\n      referencesChildren: optBody != null ? (optBody.indexOf('children()') >= 0) : null,\n    };\n  }\n  return {vars, functions, modules, includes, uses};\n}\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nexport default `\n  $fa=undef;\n  $fs=undef;\n  $fn=undef;\n  $t=undef;\n\n  $preview=undef;\n\n  // shows rotation\n  $vpr=undef;\n  // shows translation (i.e. won't be affected by rotate and zoom)\n  $vpt=undef;\n  // shows the FOV of the view [Note: Requires version 2021.01]\n  $vpf=undef;\n  // shows the camera distance [Note: Requires version 2015.03]\n  $vpd=undef;\n\n  PI=undef;\n\n  function abs(x) = x;\n  function acos(x) = x;\n  function asin(x) = x;\n  function atan(x) = x;\n  function atan2(y, x) = x;\n  function ceil(x) = x;\n  function chr(x) = 0;\n  function len(assignments) = $children;\n  function let(x) = x;\n  function ln(x) = x;\n  function log(x) = x;\n  function lookup(key, array) = x;\n  function max(values) = x;\n  function min(values) = x;\n  function sqrt(x) = x;\n  function tan(degrees) = x;\n  function rands(min_value, max_value, value_count, seed_value=undef) = x;\n  function search(match_value, string_or_vector, num_returns_per_match=1, index_col_num=0) = x;\n  function ord(x) = x;\n  function round(x) = x;\n  function sign(x) = x;\n  function sin(degrees) = x;\n  function str(values) = x;\n  function norm(x) = x;\n  function pow(base, exponent) = x;\n  function concat(values) = x;\n  function cos(degrees) = x;\n  function cross(a, b) = x;\n  function floor(x) = x;\n  function exp(x) = x;\n  function chr(x) = x;\n  function is_undef(x) = x;\n  function is_list(x) = x;\n  function is_num(x) = x;\n  function is_bool(x) = x;\n  function is_string(x) = x;\n  function is_function(x) = x;\n\n  function version() = '';\n  function version_num() = 0;\n\n  $parent_modules=0;\n  module parent_module(n) {}\n\n  module children() {}\n\n  module render(convexity=undef) {}\n  module surface(file, center=false, invert=false, convexity=undef) {}\n\n  function assert(condition, message=undef) = children();\n  module assert(condition, message=undef) children();\n\n  module cube(size, center=false) {}\n  module sphere(r, d=undef, $fa, $fs, $fn) {}\n  module cylinder(h, r, r1=undef, r2, d, d1, d2, center=false, $fa, $fs, $fn) {}\n  module polyhedron(points, faces, convexity=undef) {}\n\n  module square(size, center=false) {}\n  module circle(r, d=undef, $fa, $fs, $fn) {}\n  module polygon(points, paths, convexity=undef) {}\n  module linear_extrude(height, center=false, twist=undef, slices=undef, scale=undef, convexity=undef) children();\n  module rotate_extrude(degrees, convexity=undef, $fa, $fs, $fn) children();\n\n  module scale(v) children();\n  module resize(newsize, auto=false) children();\n  module rotate(a, v=undef) children();\n  module translate(v) children();\n  module mirror(v) children();\n  module multmatrix(m) children();\n\n  module color(c, alpha) children();\n\n  module offset(r, delta=undef, chamfer) children();\n\n  module minkowski() children();\n  module union() children();\n  module difference() children();\n  module intersection() children();\n  module hull() children();\n\n  module children() {}\n\n  // module for(i=undef) children();\n\n  module import(file, convexity=undef, $fn, $fa, $fs) {}\n`;","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport * as monaco from 'monaco-editor/esm/vs/editor/editor.api';\n\nconst builtInFunctionNames = [\n  'abs',\n    'acos', 'asin', 'atan', 'atan2', 'ceil',\n    'len', 'let', 'ln', 'log',\n    'lookup', 'max', 'min', 'sqrt', 'tan', 'rands',\n    'search', 'sign', 'sin', 'str', 'norm', 'pow', \n    'concat', 'cos', 'cross', 'floor', 'exp', \n    'chr',\n];\nconst builtInModuleNames = [\n  'children',\n  'circle', 'color', 'cube', 'cylinder',\n  'diameter', 'difference', 'echo', 'extrude', \n  'for', 'function', 'hull', 'if', 'include',\n  'intersection_for', 'intersection',  'linear',  'minkowski', 'mirror', 'module', 'multmatrix',\n  'offset', 'polyhedron', 'projection', 'radius', \n  'render', 'resize', 'rotate', 'round', 'scale', \n  'sphere', 'square', 'surface', 'translate', \n  'union', 'use', 'value', 'version', \n];\nconst builtInVarNames = [\n  'false', 'true', 'PI', 'undef', '$children',\n  '$fa', '$fn', '$fs', '$t', '$vpd', '$vpr', '$vpt',\n]\n\nvar conf: monaco.languages.LanguageConfiguration = {\n\n  colorizedBracketPairs: [['{', '}'], ['(', ')'], ['[', ']']], \n  \n  wordPattern: /(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)/g,\n  comments: {\n    lineComment: \"//\",\n    blockComment: [\"/*\", \"*/\"]\n  },\n  brackets: [\n    [\"{\", \"}\"],\n    [\"[\", \"]\"],\n    [\"(\", \")\"]\n  ],\n  onEnterRules: [\n    {\n      beforeText: /^\\s*\\/\\*\\*(?!\\/)([^\\*]|\\*(?!\\/))*$/,\n      afterText: /^\\s*\\*\\/$/,\n      action: {\n        indentAction: monaco.languages.IndentAction.IndentOutdent,\n        appendText: \" * \"\n      }\n    },\n    {\n      beforeText: /^\\s*\\/\\*\\*(?!\\/)([^\\*]|\\*(?!\\/))*$/,\n      action: {\n        indentAction: monaco.languages.IndentAction.None,\n        appendText: \" * \"\n      }\n    },\n    {\n      beforeText: /^(\\t|(\\ \\ ))*\\ \\*(\\ ([^\\*]|\\*(?!\\/))*)?$/,\n      action: {\n        indentAction: monaco.languages.IndentAction.None,\n        appendText: \"* \"\n      }\n    },\n    {\n      beforeText: /^(\\t|(\\ \\ ))*\\ \\*\\/\\s*$/,\n      action: {\n        indentAction: monaco.languages.IndentAction.None,\n        removeText: 1\n      }\n    }\n  ],\n  autoClosingPairs: [\n    { open: \"{\", close: \"}\" },\n    { open: \"[\", close: \"]\" },\n    { open: \"(\", close: \")\" },\n    { open: '\"', close: '\"', notIn: [\"string\"] },\n    { open: \"'\", close: \"'\", notIn: [\"string\", \"comment\"] },\n    { open: \"`\", close: \"`\", notIn: [\"string\", \"comment\"] },\n    { open: \"/**\", close: \" */\", notIn: [\"string\"] }\n  ],\n  folding: {\n    markers: {\n      start: new RegExp(\"^\\\\s*//\\\\s*#?region\\\\b\"),\n      end: new RegExp(\"^\\\\s*//\\\\s*#?endregion\\\\b\")\n    }\n  }\n};\n\nvar language: monaco.languages.IMonarchLanguage = {\n  defaultToken: \"invalid\",\n  tokenPostfix: \".js\",\n  keywords: [...builtInFunctionNames, ...builtInModuleNames, ...builtInVarNames, 'each'],\n  typeKeywords: [],\n  operators: [\n    \"<=\",\n    \">=\",\n    \"==\",\n    \"!=\",\n    \"=>\",\n    \"+\",\n    \"-\",\n    \"*\",\n    \"/\",\n    \"%\",\n    \"<<\",\n    \">>\",\n    \">>>\",\n    \"&\",\n    \"|\",\n    \"^\",\n    \"!\",\n    \"&&\",\n    \"||\",\n    \"?\",\n    \":\",\n    \"=\",\n  ],\n  symbols: /[=><!~?:&|+\\-*\\/\\^%]+/,\n  escapes: /\\\\[abfnrtv\\\\\"']/,\n  digits: /\\d+/,\n  tokenizer: {\n    root: [[/[{}]/, \"delimiter.bracket\"], { include: \"common\" }],\n    common: [\n      [\n        /[a-z_$][\\w$]*/,\n        {\n          cases: {\n            \"@keywords\": \"keyword\",\n            \"@default\": \"identifier\"\n          }\n        }\n      ],\n      [/[A-Z][\\w\\$]*/, \"type.identifier\"],\n      { include: \"@whitespace\" },\n      [/[()\\[\\]]/, \"@brackets\"],\n      [/[<>](?!@symbols)/, \"@brackets\"],\n      [/!(?=([^=]|$))/, \"delimiter\"],\n      [\n        /@symbols/,\n        {\n          cases: {\n            \"@operators\": \"delimiter\",\n            \"@default\": \"\"\n          }\n        }\n      ],\n      [/(@digits)[eE]([\\-+]?(@digits))?/, \"number.float\"],\n      [/(@digits)\\.(@digits)([eE][\\-+]?(@digits))?/, \"number.float\"],\n      [/(@digits)n?/, \"number\"],\n      [/[;,.]/, \"delimiter\"],\n      [/\"([^\"\\\\]|\\\\.)*$/, \"string.invalid\"],\n      [/'([^'\\\\]|\\\\.)*$/, \"string.invalid\"],\n      [/\"/, \"string\", \"@string_double\"],\n    ],\n    whitespace: [\n      [/[ \\t\\r\\n]+/, \"\"],\n      [/\\/\\*/, \"comment\", \"@comment\"],\n      [/\\/\\/.*$/, \"comment\"]\n    ],\n    comment: [\n      [/[^\\/*]+/, \"comment\"],\n      [/\\*\\//, \"comment\", \"@pop\"],\n      [/[\\/*]/, \"comment\"]\n    ],\n    string_double: [\n      [/[^\\\\\"]+/, \"string\"],\n      [/@escapes/, \"string.escape\"],\n      [/\\\\./, \"string.escape.invalid\"],\n      [/\"/, \"string\", \"@pop\"]\n    ],\n    bracketCounting: [\n      [/\\{/, \"delimiter.bracket\", \"@bracketCounting\"],\n      [/\\}/, \"delimiter.bracket\", \"@pop\"],\n      { include: \"common\" }\n    ]\n  }\n};\n\nexport default {\n  conf,\n  language,\n}\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport * as monaco from 'monaco-editor/esm/vs/editor/editor.api';\nimport { join, Symlinks } from '../fs/filesystem';\nimport { ParsedFile, ParsedFunctionoidDef, parseOpenSCAD, stripComments } from './openscad-pseudoparser';\nimport builtinSignatures from './openscad-builtins'\nimport { mapObject } from '../utils';\nimport { ZipArchives } from '../fs/zip-archives';\nimport openscadLanguage from './openscad-language';\n\nfunction makeFunctionoidSuggestion(name: string, mod: ParsedFunctionoidDef) {\n  const argSnippets: string[] = [];\n  const namedArgs: string[] = [];\n  let collectingPosArgs = true;\n  let i = 0;\n  for (const param of mod.params ?? []) {\n    if (collectingPosArgs) {\n      if (param.defaultValue != null) {\n        collectingPosArgs = false;\n      } else {\n        //argSnippets.push(`${param.name}=${'${' + (i + 1) + ':' + param.name + '}'}`);\n        argSnippets.push(`${param.name.replaceAll('$', '\\\\$')}=${'${' + (++i) + ':' + param.name + '}'}`);\n        continue;\n      }\n    }\n    namedArgs.push(param.name);\n  }\n  if (namedArgs.length) {\n    argSnippets.push(`${'${' + (++i) + ':' + namedArgs.join('|') + '=}'}`);\n  }\n  let insertText = `${name.replaceAll('$', '\\\\$')}(${argSnippets.join(', ')})`;\n  if (mod.referencesChildren !== null) {\n    insertText += mod.referencesChildren ? ' ${' + (++i) + ':children}' : ';';\n  }\n  return {\n    label: mod.signature,//`${name}(${(mod.params ?? []).join(', ')})`,\n    kind: monaco.languages.CompletionItemKind.Function,\n    insertText,\n    insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet\n  };\n}\n\nconst builtinCompletions = [\n  ...[true, false].map(v => ({\n    label: `${v}`,\n    kind: monaco.languages.CompletionItemKind.Value,\n    insertText: `${v}`,\n    insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet\n  })),\n  ...openscadLanguage.language.keywords.map((v: string) => ({\n    label: v,\n    kind: monaco.languages.CompletionItemKind.Function,\n    insertText: v,\n    insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet\n  }))\n];\n\nconst keywordSnippets = [\n  'for(${1:variable}=[${2:start}:${3:end}) ${4:body}',\n  'for(${1:variable}=[${2:start}:${3:increment}:${4:end}) ${5:body}',\n  'if (${1:condition}) {\\n\\t$0\\n} else {\\n\\t\\n}'\n];\n\nfunction cleanupVariables(snippet: string) {\n  return snippet\n    .replaceAll(/\\$\\{\\d+:([$\\w]+)\\}/g, '$1')\n    .replaceAll(/\\$\\d+/g, '')\n    .replaceAll(/\\s+/g, ' ')\n    .trim();\n}\n\n// https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-custom-languages\nexport async function buildOpenSCADCompletionItemProvider(fs: FS, workingDir: string, zipArchives: ZipArchives) {\n\n  const parsedFiles: {[path: string]: Promise<ParsedFile>} = {};\n  const toAbsolutePath = (path: string) => path.startsWith('/') ? path : `${workingDir}/${path}`;\n  \n  const allSymlinks: Symlinks = {};\n  for (const [n, {deployed, symlinks}] of Object.entries(zipArchives)) {\n    if (n == 'fonts') {\n      continue;\n    }\n    if (deployed === false) {\n      continue;\n    }\n    for (const s in symlinks) {\n      allSymlinks[s] = `${n}/${symlinks[s]}`;\n    }\n  }\n  async function readFile(path: string) {\n    if (path in allSymlinks) {\n      path = allSymlinks[path];\n    }\n    path = toAbsolutePath(path);\n    try {\n      const bytes = await fs.readFileSync(path);\n      const src = new TextDecoder(\"utf-8\").decode(bytes as any);\n      return src;\n    } catch (e) {\n      throw e;\n    }\n  }\n  const builtinsPath = '<builtins>';\n  let builtinsDefs: ParsedFile;\n\n  function getParsed(path: string, src: string, {skipPrivates, addBuiltins}: {skipPrivates: boolean, addBuiltins: boolean}) {\n    return parsedFiles[path] ??= new Promise(async (res, rej) => {\n      if (src == null) {\n        src = await readFile(path);\n      }\n      const result: ParsedFile = {\n        functions: {},\n        modules: {},\n        vars: [],\n        includes: [],\n        uses: [],\n      }\n\n      const mergeDefinitions = (isUse: boolean, defs: ParsedFile) => {\n        result.functions = {...result.functions, ...defs.functions }\n        result.modules = {...result.modules, ...defs.modules }\n        if (!isUse) {\n          result.vars = [...result.vars, ...defs.vars]\n        }\n      };\n      const dir = (path.split('/').slice(0, -1).join('/') || '.') + '/';\n\n      const handleInclude = async (isUse: boolean, otherPath: string) => {\n        let found = false;\n        for (const option of [`/libraries/${otherPath}`, `${dir}/${otherPath}`, otherPath]) {\n          try {\n            const otherSrc = await readFile(option);\n            const sub = await getParsed(otherPath, otherSrc, {skipPrivates: true, addBuiltins: false});\n            mergeDefinitions(isUse, sub);\n            found = true;\n            break;\n          } catch (e) {\n            console.warn(`Failed to read file option ${option} for ${otherPath} ${isUse ? 'used' : 'included'} by ${path}`, e);\n          }\n        }\n        if (!found) {\n          console.error('Failed to find ', otherPath, '(context imported in ', path, ')');\n        }\n      };\n\n      if (addBuiltins && path != builtinsPath) {\n        mergeDefinitions(false, builtinsDefs);\n      }\n\n      const ownDefs = parseOpenSCAD(path, src, skipPrivates);\n      \n      await Promise.all(\n        [\n          ...(ownDefs.uses ?? []).map(p => [p, true] as [string, boolean]),\n          ...(ownDefs.includes ?? []).map(p => [p, false] as [string, boolean])\n        ].map(([otherPath, isUse]) => handleInclude(isUse, otherPath)));\n\n      mergeDefinitions(false, ownDefs);\n\n      res(result);\n    });\n  }\n\n  builtinsDefs = await getParsed(builtinsPath, builtinSignatures, {skipPrivates: false, addBuiltins: false});\n\n  return {\n    triggerCharacters: [\"<\", \"/\"], //, \"\\n\"],\n    //provideCompletionItems: (async (model, position, context, token) => {\n    provideCompletionItems: ((async (model: monaco.editor.ITextModel, position: monaco.Position, context: monaco.languages.CompletionContext, token: monaco.CancellationToken) => {\n      try {\n        const {word} = model.getWordUntilPosition(position);\n        const offset = model.getOffsetAt(position);\n        const text = model.getValue();\n        let previous = text.substring(0, offset);\n        let i = previous.lastIndexOf('\\n');\n        previous = previous.substring(i + 1);\n\n        const includeMatch = /\\b(include|use)\\s*<([^<>\\n\"]*)$/.exec(previous);\n        if (includeMatch) {\n          const prefix = includeMatch[2];\n          let folder, filePrefix, folderPrefix;\n          const i = prefix.lastIndexOf('/');\n          if (i < 0) {\n            folderPrefix = '';\n            filePrefix = prefix;\n          } else {\n            folderPrefix = prefix.substring(0, i);\n            filePrefix = prefix.substring(i + 1);\n          }\n          const folderName = (folderPrefix == '' ? '' : '/' + folderPrefix);\n          let files: string[] | null = null\n          for (const folder of [join('/libraries', folderName), join(workingDir, folderName)]) {\n            files = folderPrefix == '' ? [...Object.keys(allSymlinks)] : [];\n            try {\n              files = [...(fs.readdirSync(folder) ?? []), ...files];\n              // files = [...(await readDirAsArray(fs, folder) ?? []), ...files];\n              // console.log('readDir', folder, files);\n              break;\n            } catch (e) {\n              //console.error(e);\n            }\n          }\n          const suggestions = [];\n          if (!files) {\n            console.warn('Failed to find folder named ' + folderName);\n          } else {\n            for (const file of files) {\n              if (filePrefix != '' && !file.startsWith(filePrefix)) {\n                continue;\n              }\n              if (/^(LICENSE.*|fonts)$/.test(file)) {\n                continue;\n              }\n              if (folderPrefix == '' && (file in zipArchives) && zipArchives[file].symlinks) {\n                continue;\n              }\n              const isFolder = !file.endsWith('.scad');\n              const completion = file + (isFolder ? '' : '>\\n'); // don't append '/' as it's a useful trigger char\n\n              // console.log(JSON.stringify({\n              //   prefix,\n              //   folder,\n              //   filePrefix,\n              //   folderPrefix,\n              //   // files,\n              //   completion,\n              //   file,\n              // }, null, 2));\n\n              suggestions.push({\n                label: file,\n                kind: isFolder ? monaco.languages.CompletionItemKind.Folder : monaco.languages.CompletionItemKind.File,\n                insertText: completion\n              });\n            }\n          }\n          suggestions.sort();\n\n          return { suggestions };\n        }\n\n        const inputFile = join(workingDir, 'foo.scad');\n        delete parsedFiles[inputFile];\n        const parsed = await getParsed(inputFile, text, {skipPrivates: false, addBuiltins: true});\n        console.log(\"PARSED\", JSON.stringify(parsed, null, 2));\n        \n        type CompletionItem = monaco.languages.CompletionItem & {\n          range?: monaco.IRange\n        }\n        \n        const previousWithoutComments = stripComments(previous);\n        // console.log('previousWithoutComments', previousWithoutComments);\n        const statementMatch = /(^|.*?[{});]|>\\s*\\n)\\s*([$\\w]*)$/m.exec(previousWithoutComments);\n        if (statementMatch) {\n          const start = statementMatch[1];\n          const suggestions: CompletionItem[] = [\n            ...builtinCompletions,\n            ...mapObject(\n              parsed.modules ?? {},\n              (name, mod) => makeFunctionoidSuggestion(name, mod),\n              name => name.indexOf(word) >= 0),\n            ...((parsed.vars ?? []).filter(name => name.indexOf(word) >= 0).map(name => ({\n              label: name,\n              kind: monaco.languages.CompletionItemKind.Variable,\n              insertText: name.replaceAll('$', '\\\\$'),\n              insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet\n            }))),\n            ...keywordSnippets.map(snippet => ({\n              label: cleanupVariables(snippet).replaceAll(/ body/g, ''),\n              kind: monaco.languages.CompletionItemKind.Keyword,\n              insertText: snippet,\n              insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet\n            })),\n            // ...getStatementSuggestions().filter(s => start == '' || s.insertText.indexOf(start) >= 0)\n          ];\n          suggestions.sort((a, b) => a.insertText.indexOf(start) - b.insertText.indexOf(start));\n          return { suggestions };\n        }\n\n        const allWithoutComments = stripComments(text);\n        \n        const named: [string, CompletionItem][] = [\n          ...mapObject(parsed.functions ?? {},\n            (name, mod) => [name, makeFunctionoidSuggestion(name, mod)],\n            name => name.indexOf(word) >= 0)\n        ];\n        named.sort(([a], [b]) => a.indexOf(word) - b.indexOf(word));\n        // const suggestions = names.map(name => ({\n        //   label: name,\n        //   kind: monaco.languages.CompletionItemKind.Constant,\n        //   insertText: name\n        // }));\n\n        const suggestions = named.map(([n, s]) => s as any as monaco.languages.CompletionItem);\n        return { suggestions };\n        \n      } catch (e) {\n        console.error(e);//, (e as any).stackTrace);\n        return { suggestions: [] };\n      }\n    }) as any),\n  } as monaco.languages.CompletionItemProvider;\n}\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport loader from '@monaco-editor/loader';\nimport { ZipArchives } from '../fs/zip-archives';\nimport { buildOpenSCADCompletionItemProvider } from './openscad-completions';\nimport openscadLanguage from './openscad-language';\n\n// https://microsoft.github.io/monaco-editor/playground.html#extending-language-services-custom-languages\nexport async function registerOpenSCADLanguage(fs: any, workingDir: string, zipArchives: ZipArchives) {\n  const monaco = await loader.init();\n  \n  monaco.languages.register({\n    id: 'openscad',\n    extensions: ['.scad'],\n    mimetypes: [\"text/openscad\"],\n  });\n\n  const { conf, language } = openscadLanguage;\n  monaco.languages.setLanguageConfiguration('openscad', conf);\n  monaco.languages.setMonarchTokensProvider('openscad', language);\n\n  monaco.languages.registerCompletionItemProvider('openscad',\n      await buildOpenSCADCompletionItemProvider(fs, workingDir, zipArchives));\n}\n","import { useEffect, useState } from 'react';\nimport { Model } from '../state/model';\nimport { State, StatePersister } from '../state/app-state';\nimport { createEditorFS } from '../fs/filesystem';\nimport { registerOpenSCADLanguage } from '../language/openscad-register-language';\nimport { zipArchives } from '../fs/zip-archives';\nimport { registerCustomAppHeightCSSProperty } from '../utils';\n\nexport interface UseOpenSCADConfig {\n  initialState: State;\n  statePersister?: StatePersister;\n}\n\nexport interface UseOpenSCADReturn {\n  model: Model | null;\n  fs: FS | null;\n  isReady: boolean;\n  error: Error | null;\n}\n\nexport function useOpenSCAD(config: UseOpenSCADConfig): UseOpenSCADReturn {\n  const [model, setModel] = useState<Model | null>(null);\n  const [fs, setFs] = useState<FS | null>(null);\n  const [isReady, setIsReady] = useState(false);\n  const [error, setError] = useState<Error | null>(null);\n  const [state, setState] = useState<State>(config.initialState);\n\n  useEffect(() => {\n    let mounted = true;\n\n    const init = async () => {\n      try {\n        // Register custom app height CSS property for mobile compatibility\n        registerCustomAppHeightCSSProperty();\n\n        // Create filesystem - libraries are mounted at /libraries/\n        const filesystem = await createEditorFS({ prefix: '/libraries/', allowPersistence: false }); // TODO: Support standalone mode\n\n        if (!mounted) return;\n\n        // Register OpenSCAD language for Monaco editor\n        await registerOpenSCADLanguage(filesystem, '/', zipArchives);\n\n        if (!mounted) return;\n\n        // Create model\n        const modelInstance = new Model(\n          filesystem,\n          config.initialState,\n          setState,\n          config.statePersister\n        );\n\n        // Initialize model\n        await modelInstance.init();\n\n        if (!mounted) return;\n\n        setFs(filesystem);\n        setModel(modelInstance);\n        setIsReady(true);\n      } catch (err) {\n        if (!mounted) return;\n        setError(err as Error);\n        console.error('Failed to initialize OpenSCAD:', err);\n      }\n    };\n\n    init();\n\n    return () => {\n      mounted = false;\n    };\n  }, []);\n\n  return { model, fs, isReady, error };\n}\n","// Portions of this file are Copyright 2021 Google LLC, and licensed under GPL2+. See COPYING.\n\nimport React from 'react';\nimport { State, StatePersister } from './state/app-state';\nimport { App } from './components/App';\nimport { useOpenSCAD } from './hooks/useOpenSCAD';\nimport { createInitialState } from './state/initial-state';\nimport './index.css';\nimport { CustomizerValues, CustomizerValuesInput, Parameter } from './state/customizer-types';\n\nexport interface LibraryConfig {\n  name: string;\n  url: string;\n}\n\nexport interface OpenSCADPlaygroundProps {\n  // WASM & Worker URLs (optional for now, will be used for custom loading)\n  wasmUrl?: string;\n  workerUrl?: string;\n\n  // Libraries\n  libraries?: LibraryConfig[];\n\n  // Initial state\n  initialState?: Partial<State>;\n  initialFiles?: Record<string, string>;\n\n  // State management\n  onStateChange?: (state: State) => void;\n  statePersister?: StatePersister;\n\n  // Layout\n  layout?: 'single' | 'multi';\n  defaultFocus?: 'editor' | 'viewer' | 'customizer';\n\n  // Theme\n  theme?: 'light' | 'dark' | 'auto';\n\n  // Feature flags\n  features?: {\n    filePicker?: boolean;\n    export?: boolean;\n    syntaxCheck?: boolean;\n    customizer?: boolean;\n  };\n\n  // Customizer bindings\n  customizerValues?: CustomizerValuesInput;\n  onCustomizerValuesChange?: (values: CustomizerValues) => void;\n  onParametersChange?: (parameters: Parameter[]) => void;\n\n  // Callbacks\n  onRender?: (output: any) => void;\n  onExport?: (file: Blob, format: string) => void;\n  onError?: (error: Error) => void;\n\n  // Style\n  className?: string;\n  style?: React.CSSProperties;\n}\n\nexport function OpenSCADPlayground(props: OpenSCADPlaygroundProps) {\n  // Merge initial state with defaults\n  const initialState: State = {\n    ...createInitialState(null),\n    ...props.initialState\n  };\n\n  // Handle initial files\n  if (props.initialFiles) {\n    const sources = Object.entries(props.initialFiles).map(([path, content]) => ({\n      path,\n      content\n    }));\n\n    if (sources.length > 0) {\n      initialState.params.sources = sources;\n      initialState.params.activePath = sources[0].path;\n    }\n  }\n\n  if (props.customizerValues) {\n    initialState.params.vars = {\n      ...(initialState.params.vars ?? {}),\n      ...props.customizerValues\n    };\n  }\n\n  // Apply layout preference\n  if (props.layout) {\n    initialState.view.layout.mode = props.layout;\n  }\n\n  if (props.defaultFocus && initialState.view.layout.mode === 'single') {\n    initialState.view.layout.focus = props.defaultFocus;\n  }\n\n  // Create state persister wrapper\n  const statePersister: StatePersister | undefined = props.statePersister || (props.onStateChange ? {\n    set: async (state: State) => {\n      if (props.onStateChange) {\n        props.onStateChange(state);\n      }\n    }\n  } : undefined);\n\n  // Initialize OpenSCAD\n  const { model, fs, isReady, error } = useOpenSCAD({\n    initialState,\n    statePersister\n  });\n\n  // Handle errors\n  React.useEffect(() => {\n    if (error && props.onError) {\n      props.onError(error);\n    }\n  }, [error, props.onError]);\n\n  // Loading state\n  if (!isReady || !model || !fs) {\n    return (\n      <div\n        className={props.className}\n        style={{\n          display: 'flex',\n          alignItems: 'center',\n          justifyContent: 'center',\n          height: '100%',\n          ...props.style\n        }}\n      >\n        {error ? (\n          <div style={{ color: 'red', textAlign: 'center' }}>\n            <h3>Failed to initialize OpenSCAD</h3>\n            <p>{error.message}</p>\n          </div>\n        ) : (\n          <div style={{ textAlign: 'center' }}>\n            <div>Loading OpenSCAD Playground...</div>\n          </div>\n        )}\n      </div>\n    );\n  }\n\n  // Render the app\n  return (\n    <div\n      className={props.className}\n      style={{\n        display: 'flex',\n        flexDirection: 'column',\n        flex: 1,\n        width: '100%',\n        height: '100%',\n        overflow: 'hidden',\n        ...props.style\n      }}\n    >\n      <App\n        initialState={initialState}\n        statePersister={statePersister!}\n        fs={fs}\n        customizerValues={props.customizerValues}\n        onCustomizerValuesChange={props.onCustomizerValuesChange}\n        onParametersChange={props.onParametersChange}\n      />\n    </div>\n  );\n}\n"],"names":["spawnOpenSCAD","invocation","streamsCallback","worker","terminate","AbortablePromise","resolve","reject","e","tail","array","n","tail2","arr","equals","one","other","itemEquals","a","b","i","len","removeFastWithoutKeepingOrder","index","last","binarySearch","key","comparator","binarySearch2","length","compareToKey","low","high","mid","comp","groupAdjacentBy","items","shouldBeGrouped","currentGroup","item","forEachAdjacent","f","forEachWithNeighbors","coalesce","coalesceInPlace","to","isFalsyOrEmpty","obj","isNonEmptyArray","distinct","keyFn","value","seen","element","firstOrDefault","notFoundValue","range","arg","from","result","arrayInsert","target","insertIndex","insertArr","before","after","pushToStart","pushToEnd","pushMany","insertInto","start","newItems","startIdx","getActualStartIndex","originalLength","newItemsLength","splice","deleteCount","CompareResult","isLessThan","isLessThanOrEqual","isGreaterThan","isNeitherLessOrGreaterThan","compareBy","selector","tieBreakComparators","comparators","item1","item2","numberComparator","booleanComparator","reverseOrder","ArrayQueue","predicate","endIdx","count","CallbackIterable","_callback","iterate","cb","mapFn","first","isString","str","isObject","isTypedArray","TypedArray","isNumber","isIterable","isBoolean","isUndefined","isDefined","isUndefinedOrNull","assertType","condition","type","assertIsDefined","isFunction","validateConstraints","args","constraints","validateConstraint","constraint","deepClone","deepFreeze","stack","_hasOwnProperty","prop","cloneAndChange","changer","_cloneAndChange","changed","r1","r2","i2","oneKeys","otherKeys","getAllPropertyNames","res","getAllMethodNames","methods","createProxyObject","methodNames","invoke","createProxyMethod","method","methodName","getNLSMessages","getNLSLanguage","isPseudo","_format","message","match","rest","localize","data","lookupMessage","fallback","LANGUAGE_DEFAULT","_isWindows","_isMacintosh","_isLinux","_isNative","_isWeb","_isIOS","_isMobile","_locale","_language","_platformLocale","_translationsConfigFile","_userAgent","$globalThis","nodeProcess","isElectronProcess","isElectronRenderer","rawNlsConfig","nlsConfig","nls.getNLSLanguage","isWindows","isMacintosh","isLinux","isNative","isWeb","isWebWorker","webWorkerOrigin","isIOS","isMobile","userAgent","setTimeout0IsFaster","setTimeout0","pending","candidate","lastId","callback","myId","OS","_isLittleEndian","_isLittleEndianComputed","isLittleEndian","test","isChrome","isFirefox","isSafari","isEdge","isAndroid","EDITOR_MODEL_DEFAULTS","Iterable","is","thing","_empty","empty","single","wrap","iterableOrElement","iterable","reverse","isEmpty","some","find","filter","map","fn","flatMap","concat","iterables","reduce","reducer","initialValue","slice","consume","atMost","consumed","iterator","next","asyncToArray","Node$3","Node","LinkedList","node","atTheEnd","newNode","oldLast","oldFirst","didRemove","anchor","USUAL_WORD_SEPARATORS","createWordRegExp","allowInWords","source","sep","DEFAULT_WORD_REGEXP","ensureValidWordDefinition","wordDefinition","flags","_defaultConfig","getWordAtText","column","text","textOffset","config","t1","pos","prevRegexIndex","regexIndex","thisMatch","_findRegexMatchEnclosingPosition","stopPos","matchIndex","MINIMAP_GUTTER_WIDTH","ConfigurationChangedEvent","values","id","ComputeOptionsMemory","BaseEditorOption","name","defaultValue","schema","update","applyUpdate","env","options","ApplyUpdateResult","newValue","didChange","arrayEquals","arrays.equals","ComputedEditorOption","input","SimpleEditorOption","boolean","EditorBooleanOption","clampedInt","minimum","maximum","r","EditorIntOption","clampedFloat","EditorFloatOption","min","max","validationFn","EditorStringOption","stringSet","allowedValues","renamedValues","EditorStringEnumOption","EditorEnumOption","defaultStringValue","convert","_autoIndentFromString","autoIndent","EditorAccessibilitySupport","nls.localize","EditorComments","defaults","_input","_cursorBlinkingStyleFromString","cursorBlinkingStyle","TextEditorCursorStyle","_cursorStyleFromString","cursorStyle","EditorClassName","_","classNames","EditorEmptySelectionClipboard","EditorFind","platform.isMacintosh","EditorFontLigatures","EditorFontVariations","EditorFontInfo","EditorFontSize","EDITOR_FONT_DEFAULTS","EditorFontWeight","EditorGoToLocation","jsonSubset","alternativeCommandOptions","EditorHover","EditorLayoutInfoComputer","typicalViewportLineCount","extraLinesBeforeFirstLine","extraLinesBeyondLastLine","desiredRatio","minimapLineCount","memory","outerWidth","outerHeight","pixelRatio","stableMinimapLayoutInput","couldUseMemory","lineHeight","typicalHalfwidthCharacterWidth","scrollBeyondLastLine","minimapRenderCharacters","minimapScale","minimapMaxColumn","minimapSize","minimapSide","verticalScrollbarWidth","viewLineCount","remainingWidth","isViewportWrapping","baseCharHeight","minimapCanvasInnerHeight","minimapCanvasOuterHeight","minimapHeightIsEditorHeight","minimapIsSampling","minimapLineHeight","minimapCharWidth","minimapWidthMultiplier","fitBecomesFill","maxMinimapScale","effectiveMinimapHeight","configuredMinimapScale","minimapMaxWidth","minimapWidth","minimapCanvasInnerWidth","minimapCanvasOuterWidth","renderMinimap","minimapLeft","lineNumbersDigitCount","maxDigitWidth","wordWrapOverride2","wordWrapOverride1","wordWrap","wordWrapColumn","isDominatedByLongLines","showGlyphMargin","showLineNumbers","lineNumbersMinChars","padding","minimap","scrollbar","verticalScrollbarHasArrows","scrollbarArrowSize","horizontalScrollbarHeight","folding","showFoldingDecoration","lineDecorationsWidth","lineNumbersWidth","digitCount","glyphMarginWidth","glyphMarginLeft","lineNumbersLeft","decorationsLeft","contentLeft","isWordWrapMinified","wrappingColumn","minimapLayout","contentWidth","viewportColumn","verticalArrowSize","WrappingStrategy","ShowLightbulbIconMode","EditorLightbulb","EditorStickyScroll","EditorInlayHints","EditorLineDecorationsWidth","EditorLineHeight","x","EditorMinimap","_multiCursorModifierFromString","multiCursorModifier","EditorPadding","EditorParameterHints","EditorPixelRatio","PlaceholderOption","EditorQuickSuggestions","types","comments","strings","validatedOther","validatedComments","validatedStrings","EditorRenderLineNumbersOption","lineNumbers","renderType","renderFn","filterValidationDecorations","renderValidationDecorations","EditorRulers","columnSchema","rulers","_element","ReadonlyMessage","_scrollbarVisibilityFromString","visibility","horizontalScrollbarSize","verticalScrollbarSize","inUntrustedWorkspace","unicodeHighlightConfigKeys","UnicodeHighlight","objects.equals","primitiveSet","InlineEditorSuggest","InlineEditorEdit","BracketPairColorization","GuideOptions","idx","EditorSuggest","SmartSelect","WordSegmenterLocales","validLocales","locale","WrappingIndentOption","EditorWrappingInfoComputer","layoutInfo","EditorDropIntoEditor","EditorPasteAs","DEFAULT_WINDOWS_FONT_FAMILY","DEFAULT_MAC_FONT_FAMILY","DEFAULT_LINUX_FONT_FAMILY","platform.isLinux","editorOptionsRegistry","register","option","EditorOptions","EditorScrollbar","ErrorHandler","ErrorNoTelemetry","listener","errorHandler","onUnexpectedError","isCancellationError","onUnexpectedExternalError","transformErrorForSerialization","error","canceledName","CancellationError","canceled","illegalArgument","illegalState","NotSupportedError","msg","err","BugIndicatingError","createSingleCallFunction","fnDidRunCallback","_this","didCall","isDisposable","dispose","errors","d","combinedDisposable","disposables","toDisposable","DisposableStore","o","Disposable","MutableDisposable","ImmortalReference","object","DisposableMap","skipDisposeOnOverwrite","hasPerformanceNow","StopWatch","highResolution","Event","defer","event","disposable","debounce","once","thisArgs","didFire","onceIf","snapshot","forEach","each","signal","any","events","addAndReturnDisposable","merge","initial","output","emitter","Emitter","store","delay","leading","flushOnListenerRemove","leakWarningThreshold","subscription","handle","numDebouncedCalls","doFire","cur","_output","accumulate","latch","firstCall","cache","shouldEmit","split","isT","buffer","flushAfterTimeout","_buffer","flush","chain","sythensize","cs","ChainableSynthesis","HaltChainable","v","step","fromNodeEventEmitter","eventName","onFirstListenerAdd","onLastListenerRemove","fromDOMEventEmitter","toPromise","fromPromise","promise","forward","runAndSubscribe","handler","EmitterObserver","_observable","_change","fromObservable","obs","fromObservableLight","observable","observer","EventProfiling","listenerCount","elapsed","_globalLeakWarningThreshold","LeakageMonitor","_errorHandler","threshold","topStack","topCount","ListenerLeakError","Stacktrace","ListenerRefusalError","UniqueContainer","compactionThreshold","tuple","contained","removeMonitor","EventDeliveryQueuePrivate","listeners","adjustDeliveryQueue","dq","createEventDeliveryQueue","end","PauseableEmitter","DebounceEmitter","MicrotaskEmitter","EventMultiplexer","EventBufferer","reduceData","Relay","shortcutEvent","context","CancellationToken","isCancellationToken","MutableToken","CancellationTokenSource","parent","cancel","KeyCodeStrMap","keyCode","uiMap","userSettingsUSMap","userSettingsGeneralMap","EVENT_KEY_CODE_MAP","scanCodeStrToInt","scanCodeLowerCaseStrToInt","IMMUTABLE_CODE_TO_KEY_CODE","mappings","seenKeyCode","seenScanCode","mapping","immutable","scanCode","scanCodeStr","keyCodeStr","eventKeyCode","vkey","usUserSettingsLabel","generalUserSettingsLabel","KeyCodeUtils","toString","fromString","toUserSettingsUS","toUserSettingsGeneral","fromUserSettings","toElectronAccelerator","KeyChord","firstPart","secondPart","chordPart","safeProcess","vscodeGlobal","sandboxProcess","cwd","platform","CHAR_UPPERCASE_A","CHAR_LOWERCASE_A","CHAR_UPPERCASE_Z","CHAR_LOWERCASE_Z","CHAR_DOT","CHAR_FORWARD_SLASH","CHAR_BACKWARD_SLASH","CHAR_COLON","CHAR_QUESTION_MARK","ErrorInvalidArgType","expected","actual","determiner","validateObject","pathObject","validateString","platformIsWin32","process.platform","isPathSeparator","code","isPosixPathSeparator","isWindowsDeviceRoot","normalizeString","path","allowAboveRoot","separator","lastSegmentLength","lastSlash","dots","lastSlashIndex","formatExt","ext","dir","base","win32","pathSegments","resolvedDevice","resolvedTail","resolvedAbsolute","process.cwd","process.env","rootEnd","device","isAbsolute","j","paths","joined","needsReplace","slashCount","firstLen","fromOrig","toOrig","fromStart","fromEnd","fromLen","toStart","toEnd","toLen","lastCommonSep","fromCode","out","resolvedPath","offset","matchedSlash","suffix","extIdx","firstNonSlashEnd","startDot","startPart","preDotState","ret","posixCwd","regexp","posix","trailingSeparator","hasRoot","normalize","join","relative","dirname","basename","extname","_schemePattern","_singleSlashStart","_doubleSlashStart","_validateUri","_strict","_schemeFix","scheme","_referenceResolution","_slash","_regexp","URI","schemeOrData","authority","query","fragment","uriToFsPath","change","Uri","percentDecode","components","strict","uri","pathFragment","newPath","paths.win32","paths.posix","skipEncoding","_asFormatted","_pathSepMarker","encodeTable","encodeURIComponentFast","uriComponent","isPath","isAuthority","nativeEncodePos","escaped","encodeURIComponentMinimal","keepDriveLetterCasing","encoder","userinfo","decodeURIComponentGraceful","_rEncodedAsHex","Position","lineNumber","newLineNumber","newColumn","deltaLineNumber","deltaColumn","aLineNumber","bLineNumber","aColumn","bColumn","Range$1","Range","startLineNumber","startColumn","endLineNumber","endColumn","position","otherRange","resultStartLineNumber","resultStartColumn","resultEndLineNumber","resultEndColumn","otherStartLineNumber","otherStartColumn","otherEndLineNumber","otherEndColumn","lineCount","aStartLineNumber","bStartLineNumber","aStartColumn","bStartColumn","aEndLineNumber","bEndLineNumber","aEndColumn","bEndColumn","Selection","selectionStartLineNumber","selectionStartColumn","positionLineNumber","positionColumn","direction","sel","_codiconFontCharacters","fontCharacter","val","getCodiconFontCharacters","codiconsLibrary","codiconsDerived","Codicon","TokenizationRegistry$1","languageIds","languageId","support","factory","myData","TokenizationSupportFactoryData","tokenizationSupport","colorMap","_registry","_languageId","_factory","Token$1","language","TokenizationResult","tokens","endState","EncodedTokenizationResult","HoverVerbosityAction","CompletionItemKinds","byKind","toIcon","kind","codicon","InlineCompletionTriggerKind","SelectedSuggestionInfo","completionKind","isSnippetText","DocumentPasteTriggerKind","SignatureHelpTriggerKind","DocumentHighlightKind","SymbolKinds","icon","FoldingRangeKind","NewSymbolNameTag","NewSymbolNameTriggerKind","Command","InlayHintKind","LazyTokenizationSupport","createSupport","TokenizationRegistry","TokenizationRegistryImpl","TreeSitterTokenizationRegistry","InlineEditTriggerKind","AccessibilitySupport","CodeActionTriggerType","CompletionItemInsertTextRule","CompletionItemKind","CompletionItemTag","CompletionTriggerKind","ContentWidgetPositionPreference","CursorChangeReason","DefaultEndOfLine","EditorAutoIndentStrategy","EditorOption","EndOfLinePreference","EndOfLineSequence","GlyphMarginLane","IndentAction","InjectedTextCursorStops","KeyCode","MarkerSeverity","MarkerTag","MinimapPosition","MinimapSectionHeaderStyle","MouseTargetType","OverlayWidgetPositionPreference","OverviewRulerLane","PartialAcceptTriggerKind","PositionAffinity","RenderLineNumbersType","RenderMinimap","ScrollType","ScrollbarVisibility","SelectionDirection","SymbolKind","SymbolTag","TextEditorCursorBlinkingStyle","TrackedRangeStickiness","WrappingIndent","KeyMod$1","createMonacoBaseAPI","standaloneEnums.KeyCode","KeyMod","standaloneEnums.SelectionDirection","standaloneEnums.MarkerSeverity","standaloneEnums.MarkerTag","Token","ensureCodeWindow","targetWindow","fallbackWindowId","codeWindow","mainWindow","identity","t","LRUCachedFunction","arg1","arg2","CachedFunction","Lazy","executor","isFalsyOrWhitespace","_formatRegexp","format","group","htmlAttributeEncodeValue","ch","escape","html","escapeRegExpCharacters","ltrim","haystack","needle","needleLen","rtrim","haystackLen","convertSimple2RegExpPattern","pattern","createRegExp","searchString","isRegex","modifiers","regExpLeadsToEndlessLoop","splitLines","firstNonWhitespaceIndex","chCode","getLeadingWhitespace","lastNonWhitespaceIndex","startIndex","compare","compareSubstring","aStart","aEnd","bStart","bEnd","codeA","codeB","aLen","bLen","compareIgnoreCase","compareSubstringIgnoreCase","isLowerAsciiLetter","diff","isAsciiDigit","isUpperAsciiLetter","equalsIgnoreCase","startsWithIgnoreCase","candidateLength","commonPrefixLength","commonSuffixLength","aLastIndex","bLastIndex","isHighSurrogate","charCode","isLowSurrogate","computeCodePoint","highSurrogate","lowSurrogate","getNextCodePoint","nextCharCode","getPrevCodePoint","prevCharCode","CodePointIterator","codePoint","GraphemeIterator","graphemeBreakTree","GraphemeBreakTree","initialOffset","graphemeBreakType","nextGraphemeBreakType","breakBetweenGraphemeBreakType","prevGraphemeBreakType","nextCharLength","prevCharLength","getCharContainingOffset","endOffset","CONTAINS_RTL","makeContainsRtl","containsRTL","IS_BASIC_ASCII","isBasicASCII","UNUSUAL_LINE_TERMINATORS","containsUnusualLineTerminators","isFullWidthCharacter","isEmojiImprecise","UTF8_BOM_CHARACTER","startsWithUTF8BOM","singleLetterHash","breakTypeA","breakTypeB","getGraphemeBreakRawData","nodeCount","nodeIndex","getLeftDeleteOffset","emojiOffset","getOffsetBeforeLastEmojiComponent","isEmojiModifier","resultOffset","AmbiguousCharacters","locales","arrayToMap","mergeMaps","map1","map2","intersectMaps","filteredLocales","l","languageSpecificMap","commonMap","k","confusableDictionary","InvisibleCharacters","WindowManager","addMatchMediaChangeListener","getZoomFactor","isWebKit","isWebkitWebView","standalone","standaloneMatchMedia","fullScreenMatchMedia","matches","BrowserFeatures","platform.isNative","decodeKeybinding","keybinding","firstChord","secondChord","Keybinding","createSimpleKeybinding","chords","ctrlCmd","winCtrl","ctrlKey","shiftKey","altKey","metaKey","KeyCodeChord","ResolvedChord","keyLabel","keyAriaLabel","ResolvedKeybinding","extractKeyCode","char","browser.isFirefox","browser.isWebKit","ctrlKeyMod","altKeyMod","shiftKeyMod","metaKeyMod","StandardKeyboardEvent","sameOriginWindowChainCache","getParentWindowIfSameOrigin","w","location","parentLocation","IframeUtils","windowChainCache","childWindow","ancestorWindow","top","left","windowChain","windowChainEl","windowInChain","boundingRect","StandardMouseEvent","iframeOffsets","StandardWheelEvent","deltaX","deltaY","shouldFactorDPR","browser.isChrome","chromeVersionMatch","e1","e2","devicePixelRatio","ev","browser.isSafari","platform.isWindows","MicrotaskDelay","isThenable","createCancelablePromise","thenable","onfinally","Throttler","promiseFactory","onComplete","timeoutDeferred","timeout","scheduled","microtaskDeferred","Delayer","defaultDelay","task","ThrottledDelayer","millis","token","disposableTimeout","timer","TimeoutTimer","runner","IntervalTimer","interval","RunOnceScheduler","runWhenGlobalIdle","_runWhenIdle","_targetWindow","disposed","AbstractIdleValue","GlobalIdleValue","DeferredPromise","c","Promises","settled","promises","firstError","withAsyncBody","bodyFn","AsyncIterableObject","writer","p","onReturn","filterFn","entries","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","create","apply","construct","fun","thisValue","Func","arrayForEach","unapply","arrayPop","arrayPush","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","objectHasOwnProperty","regExpTest","typeErrorCreate","unconstruct","func","thisArg","_len","_key","_len2","_key2","addToSet","set","transformCaseFunc","lcElement","cleanArray","clone","newObject","property","lookupGetter","desc","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","svg","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","NODE_TYPE","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","ATTR_NAME","policyName","scriptUrl","createDOMPurify","window","DOMPurify","root","document","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Element","NodeFilter","NamedNodeMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","remove","getNextSibling","getChildNodes","getParentNode","template","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","tagName","parentTagName","_forceRemove","_removeAttribute","_initDocument","dirty","doc","leadingWhitespace","dirtyPayload","body","_createNodeIterator","_isClobbered","elm","_isNode","_executeHook","entryPoint","currentNode","hook","_sanitizeElements","content","_isBasicCustomElement","parentNode","childNodes","childCount","childClone","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","attributes","hookEvent","attr","namespaceURI","attrValue","_sanitizeShadowDOM","shadowNode","shadowIterator","importedNode","returnNode","nodeIterator","serializedHTML","tag","hookFunction","purify","sanitize","addHook","removeHook","Schemas","matchesScheme","matchesSomeScheme","schemes","connectionTokenQueryName","RemoteAuthoritiesImpl","errors.onUnexpectedError","host","port","connectionToken","platform.isWeb","RemoteAuthorities","VSCODE_AUTHORITY","FileAccessImpl","resourcePath","platform.webWorkerOrigin","uriOrModule","moduleIdToUrl","rootUriOrPath","modulePath","paths.join","FileAccess","COI","coiHeaders","coiSearchParamName","getHeadersFromQuery","url","params","addSearchParam","urlOrSearch","coop","coep","hash","doHash","hashVal","numberHash","arrayHash","objectHash","stringHash","booleanHash","initialHashVal","s","leftRotate","bits","totalBits","delta","mask","fill","dest","leftPad","toHexString","bufferOrValue","bitsize","StringSHA1","strLen","buff","buffLen","leftoverHighSurrogate","strings.isHighSurrogate","strings.isLowSurrogate","strings.computeCodePoint","ml","bigBlock32","temp","getWindow","getWindows","getWindowsCount","getWindowId","getWindowById","onDidRegisterWindow","onWillUnregisterWindow","onDidUnregisterWindow","windows","mainWindowRegistration","event.Emitter","windowId","fallbackToMain","registeredWindow","addDisposableListener","EventType","candidateNode","candidateEvent","clearNode","DomListener","useCaptureOrOptions","_wrapAsStandardMouseEvent","_wrapAsStandardKeyboardEvent","addStandardDisposableListener","useCapture","wrapHandler","runWhenWindowIdle","runAtThisOrScheduleAtNextAnimationFrame","scheduleAtNextAnimationFrame","WindowIntervalTimer","AnimationFrameQueueItem","priority","NEXT_QUEUE","CURRENT_QUEUE","animFrameRequested","inAnimationFrameRunner","animationFrameRunner","targetWindowId","currentQueue","nextQueue","getComputedStyle","el","getClientArea","elWindow","elDocument","Dimension","platform.isIOS","SizeUtils","cssPropertyName","jsPropertyName","computedStyle","width","height","getTopLeftOffset","offsetParent","isShadowRoot","getDomNodePagePosition","domNode","bb","getDomNodeZoomLevel","testElement","zoom","elementZoomLevel","getTotalWidth","margin","getContentWidth","border","getContentHeight","getTotalHeight","isAncestor","testChild","testAncestor","findParentWithClass","clazz","stopAtClazzOrNode","hasParentWithClass","isInShadowDOM","getShadowRoot","getActiveElement","getActiveDocument","isActiveElement","isAncestorOfActiveElement","ancestor","getActiveWindow","globalStylesheets","createStyleSheet","container","beforeAppend","disposableStore","style","globalStylesheetClones","cloneGlobalStyleSheet","globalStylesheet","rule","getDynamicStyleSheetRules","sharedMutationObserver","mutationObserversPerTarget","optionsHash","mutationObserverPerOptions","onDidMutate","mutations","resolvedMutationObserverPerOptions","_sharedStyleSheet","getSharedStyleSheet","createCSSRule","cssText","clonedGlobalStylesheet","isHTMLElement","isHTMLAnchorElement","isSVGElement","isMouseEvent","isKeyboardEvent","isEventLike","EventHelper","cancelBubble","saveParentsScrollTop","restoreParentsScrollTop","state","FocusTracker","shadowRoot","activeElement","hasFocus","loosingFocus","onFocus","onBlur","trackFocus","sibling","child","append","children","prepend","reset","SELECTOR_REGEX","Namespace","_$","namespace","description","attrs","$","show","elements","hide","computeScreenAwareSize","cssPx","screenPx","windowOpenNoOpener","animate","stepDisposable","asCSSUrl","asCSSPropertyValue","asCssValueWithDefault","cssPropertyValue","dflt","variableMatch","varArguments","hookDomPurifyHrefAndSrcSanitizer","allowedProtocols","allowDataImages","dompurify.addHook","dompurify.removeHook","basicMarkupHtmlTags","ModifierKeyEmitter","event.Event","DragAndDropObserver","callbacks","H_REGEX","h","className","cssKey","cssValue","camelCaseToHyphenCase","DevicePixelRatioMonitor","fireEvent","PixelRatioMonitorImpl","dprMonitor","ctx","dpr","bsr","PixelRatioMonitorFacade","pixelRatioMonitor","vscodeWindowId","PixelRatio","FastDomNode","_maxWidth","maxWidth","numberAsPixels","_width","_height","_top","_left","_bottom","bottom","_right","right","_paddingLeft","paddingLeft","fontFamily","fontWeight","_fontSize","fontSize","fontStyle","fontFeatureSettings","fontVariationSettings","textDecoration","_lineHeight","_letterSpacing","letterSpacing","shouldHaveIt","display","color","backgroundColor","layerHint","boxShadow","contain","createFastDomNode","applyFontInfo","fontInfo","CharWidthRequest","chr","DomCharWidthReader","bareFontInfo","requests","regularDomNode","boldDomNode","italicDomNode","testElements","request","htmlString","testString","readCharWidths","EditorZoom","zoomLevel","GOLDEN_LINE_HEIGHT_RATIO","MINIMUM_LINE_HEIGHT","BareFontInfo","ignoreEditorZoom","editorZoomLevelMultiplier","opts","fallbackFontFamily","SERIALIZED_FONT_INFO_VERSION","FontInfo","isTrusted","FontMeasurementsImpl","FontMeasurementsCache","somethingRemoved","readConfig","all","monospace","typicalHalfwidthCharacter","typicalFullwidthCharacter","space","digit0","digit1","digit2","digit3","digit4","digit5","digit6","digit7","digit8","digit9","rightwardsArrow","halfwidthRightwardsArrow","middot","wsmiddotWidth","monospaceTestChars","isMonospace","referenceWidth","canUseHalfwidthRightwardsArrow","itemId","FontMeasurements","_util","getServiceDependencies","ctor","IInstantiationService","createDecorator","storeServiceDependency","serviceId","ICodeEditorService","IModelService","ITextModelService","Action","label","cssClass","enabled","actionCallback","ActionRunner","action","Separator","actionLists","list","SubmenuAction","actions","EmptySubmenuAction","toAction","props","ThemeColor","isThemeColor","ThemeIcon","ThemeIconIdRegex","asClassNameArray","modifier","asClassName","asCSSSelector","isThemeIcon","_regexFromString","fromId","modify","tildeIndex","getModifier","isEqual","ti1","ti2","ICommandService","CommandsRegistry","idOrCommand","actualHandler","accessor","commands","removeFn","oldId","newId","command","hintDidYouMean","meant","hintDidYouForgetToOpenOrCloseQuote","hintDidYouForgetToEscapeSlash","Scanner","isTripleEq","additional","lexeme","errToken","keyword","inEscape","inCharacterClass","CONSTANT_VALUES","hasOwnProperty","defaultConfig","errorEmptyString","hintEmptyString","errorNoInAfterNot","errorClosingParenthesis","errorUnexpectedToken","hintUnexpectedToken","errorUnexpectedEOF","hintUnexpectedEOF","Parser$1","Parser","_config","peek","additionalInfo","ContextKeyExpr","ContextKeyFalseExpr","ContextKeyTrueExpr","ContextKeyNotExpr","regexLexeme","closingSlashIndex","ContextKeyRegexExpr","lexemeReconstruction","followingToken","parenBalance","serializedValue","regex","caseIgnoreFlag","ContextKeySmallerExpr","ContextKeySmallerEqualsExpr","ContextKeyGreaterExpr","ContextKeyGreaterEqualsExpr","got","ContextKeyDefinedExpr","ContextKeyEqualsExpr","ContextKeyNotEqualsExpr","ContextKeyInExpr","ContextKeyNotInExpr","ContextKeyAndExpr","ContextKeyOrExpr","serialized","expressionsAreEqualWithConstantSubstitution","aExpr","bExpr","cmp","negated","constantValue","cmp1","cmp2","trueValue","valueKey","falseValue","withFloatOrStr","_value","thisSource","otherSource","ContextKeyNotRegexExpr","_actual","eliminateConstantsInArray","newArr","newExpr","_expr","extraRedundantCheck","exprArr","hasTrue","lastElement","secondToLastElement","isFinished","resultElement","hasFalse","LEFT","RIGHT","getTerminals","RawContextKey","metaOrHide","IContextKeyService","key1","key2","value1","value2","implies","q","allElementsIncluded","pIndex","qIndex","ok","assertNever","softAssert","assertFn","checkAdjacentItems","RegistryImpl","Assert.ok","Types.isString","Types.isObject","Registry","KeybindingsRegistryImpl","kb","actualKb","kk","commandId","commandArgs","weight1","weight2","when","sorter","KeybindingsRegistry","Extensions","__decorate","decorators","__param","paramIndex","decorator","MenuItemAction_1","isIMenuItem","isISubmenuItem","MenuId","identifier","IMenuService","MenuRegistryChangeEvent","ids","MenuRegistry","rm","SubmenuItemAction","hideActions","MenuItemAction","alt","menuKeybinding","contextKeyService","_commandService","toggled","runArgs","ITelemetryService","ILogService","LogLevel","DEFAULT_LOG_LEVEL","AbstractLogger","level","ConsoleLogger","logLevel","useColors","MultiplexLogger","loggers","logger","LogLevelToString","kbOptsArr","kbOpts","kbWhen","MultiCommand","logService","impl","ProxyCommand","EditorCommand","controllerGetter","editor","controller","precondition","codeEditorService","editorAccessor","registerEditorCommand","editorCommand","EditorContributionRegistry","registerEditorContribution","instantiation","EditorExtensionsRegistry","getEditorCommand","getEditorActions","getEditorContributions","getSomeEditorContributions","getDiffEditorContributions","registerCommand","UndoCommand","RedoCommand","SelectAllCommand","DEFAULT_CHANNEL","INITIALIZE","webWorkerWarningLogged","logOnceWebWorkerWarning","RequestMessage","vsWorker","req","channel","ReplyMessage","seq","SubscribeEventMessage","EventMessage","UnsubscribeEventMessage","SimpleWorkerProtocol","workerId","sendMessageBarrier","propertyIsDynamicEvent","propertyIsEvent","myArgs","replyMessage","reply","requestMessage","transfer","SimpleWorkerClient","workerFactory","workerDescriptor","loaderConfiguration","globalRequire","channelName","strings.isUpperAsciiLetter","createTrustedTypesPolicy","policyOptions","monacoEnvironment","ttPolicy","getWorker","esmWorkerLocation","workerUrl","getWorkerBootstrapUrl","whenESMWorkerReady","workerScriptUrl","workerBaseUrl","blob","isPromiseLike","WebWorker","amdModuleId","onMessageCallback","onErrorCallback","workerOrPromise","WorkerDescriptor","DefaultWorkerFactory","createWebWorker","arg0","StandardAutoClosingPairConditional","standardToken","tokenIndex","standardTokenType","fromCharCode","toCharCode","character","AutoClosingPairs","autoClosingPairs","pair","appendEntry","CharacterPairSupport","docComment","forQuotes","createScopedLineTokens","tokenCount","desiredLanguageId","lastTokenIndex","firstTokenIndex","ScopedLineTokens","firstCharOffset","lastCharOffset","ignoreBracketsInToken","hasBuffer","textDecoder","VSBuffer","readUInt16LE","writeUInt16LE","destination","readUInt32BE","writeUInt32BE","readUInt8","writeUInt8","_utf16LE_TextDecoder","getUTF16LE_TextDecoder","_utf16BE_TextDecoder","getUTF16BE_TextDecoder","_platformTextDecoder","getPlatformTextDecoder","platform.isLittleEndian","decodeUTF16LE","view","compatDecodeUTF16LE","resultLen","buffer.readUInt16LE","StringBuilder","capacity","bufferString","remainingSpace","RichEditBracket","open","close","forwardRegex","reversedRegex","groupFuzzyBrackets","brackets","N","areOverlapping","aOpen","aClose","bOpen","bClose","mergeGroups","g1","g2","newG","oldG","g","currentOpen","currentClose","RichEditBrackets","_brackets","getRegexForBracketPair","getReversedRegexForBracketPair","getRegexForBrackets","getReversedRegexForBrackets","bracket","collectSuperstrings","currentIndex","lengthcmp","unique","pieces","createBracketOrRegExp","toReversedString","prepareBracketForRegExp","insertWordBoundaries","strings.escapeRegExpCharacters","regexStr","strings.createRegExp","stringBuilder.getPlatformTextDecoder","lastInput","lastOutput","BracketsUtils","reversedBracketRegex","reversedText","m","matchOffset","matchLength","absoluteMatchOffset","lineText","startOffset","reversedSubstr","bracketRegex","substr","BracketElectricCharacterSupport","richEditBrackets","lastChar","bracketText","textBeforeBracket","resetGlobalRegex","reg","IndentRulesSupport","indentationRules","OnEnterSupport","openRegExp","closeRegExp","previousLineText","beforeEnterText","afterEnterText","def","IConfigurationService","toValuesTree","properties","conflictReporter","addToValueTree","settingsTreeRoot","segments","curr","removeFromValueTree","valueTree","doRemoveFromValueTree","getConfigurationValue","settingPath","accessSetting","current","component","getLanguageTagSettingPlainKey","settingKey","ILanguageService","SyncDescriptor","staticArguments","supportsDelayedInstantiation","registerSingleton","ctorOrDescriptor","getSingletonServiceDescriptors","Mimes","normalizeId","JSONContributionRegistry","unresolvedSchemaContent","jsonContributionRegistry","platform.Registry","resourceLanguageSettingsSchemaId","contributionRegistry","JSONExtensions","ConfigurationRegistry","configuration","validate","configurations","configurationDefaults","bucket","overrideIdentifiers","overrides","configurationDefaultOverridesForKey","OVERRIDE_PROPERTY_REGEX","newDefaultOverride","overrideIdentifiersFromKey","overrideIdentifier","configurationValueObject","valueSource","existingDefaultOverride","propertyKey","propertyDefaultValue","types.isObject","types.isUndefined","objectKey","valuesSource","existingDefaultValue","extensionInfo","restrictedProperties","scope","types.isUndefinedOrNull","validateProperty","subNodes","overrideIdentifierProperty","resourceLanguagePropertiesSchema","configurationdefaultOverride","defaultSource","getDefaultValue","OVERRIDE_IDENTIFIER_PATTERN","OVERRIDE_IDENTIFIER_REGEX","OVERRIDE_PROPERTY_PATTERN","identifiers","configurationRegistry","EditorModesRegistry","ModesRegistry","PLAINTEXT_LANGUAGE_ID","PLAINTEXT_EXTENSION","ConfigurationExtensions","LanguageBracketsConfiguration","bracketPairs","filterValidBrackets","openingBracketInfos","closing","OpeningBracketKind","closingBracketInfos","opening","openingColorized","ClosingBracketKind","colorizedBracketPairs","BracketKindBase","openedBrackets","openingBrackets","openingColorizedBrackets","LanguageConfigurationServiceChangeEvent","ILanguageConfigurationService","LanguageConfigurationService","configurationService","languageService","LanguageConfigurationRegistry","languageConfigKeys","customizedLanguageConfigKeys","globalConfigChanged","localConfigChanged","overrideLangName","keys","computeConfig","registry","languageConfig","ResolvedLanguageConfiguration","customizedConfig","getCustomizedLanguageConfig","combineLanguageConfigurations","validateBracketPairs","getIndentationAtPosition","model","indentation","strings.getLeadingWhitespace","ComposedLanguageConfiguration","entry","LanguageConfigurationContribution","configs","order","LanguageConfigurationChangeEvent","underlyingConfig","conf","commentRule","blockStart","blockEnd","DiffChange","originalStart","modifiedStart","modifiedLength","StringDiffSequence","characters","stringDiff","original","modified","pretty","LcsDiff","Debug","MyArray","sourceArray","sourceIndex","destinationArray","destinationIndex","DiffChangeHelper","originalIndex","modifiedIndex","originalSequence","modifiedSequence","continueProcessingPredicate","originalStringElements","originalElementsOrHash","originalHasStrings","modifiedStringElements","modifiedElementsOrHash","modifiedHasStrings","sequence","hashes","newIndex","originalElement","modifiedElement","index1","index2","originalEnd","modifiedEnd","quitEarlyArr","changes","midOriginalArr","midModifiedArr","midOriginal","midModified","leftChanges","rightChanges","diagonalForwardBase","diagonalForwardStart","diagonalForwardEnd","diagonalForwardOffset","diagonalReverseBase","diagonalReverseStart","diagonalReverseEnd","diagonalReverseOffset","forwardPoints","reversePoints","deltaIsEven","forwardChanges","reverseChanges","changeHelper","diagonalMin","diagonalMax","diagonalRelative","lastOriginalIndex","historyIndex","diagonal","originalStartPoint","modifiedStartPoint","lastForwardChange","maxDifferences","numDiagonals","numDifferences","furthestOriginalIndex","furthestModifiedIndex","tempOriginalIndex","matchLengthOfLongest","originalStop","modifiedStop","checkOriginal","checkModified","startStrictEqual","mergedChangeArr","prevChange","bestDelta","bestScore","score","aChange","bChange","matchedLength","aOriginalStart","bOriginalEnd","abOriginalLength","aModifiedStart","bModifiedEnd","abModifiedLength","originalMatchStart","modifiedMatchStart","desiredLength","originalMax","modifiedMax","bestOriginalStart","bestModifiedStart","originalScore","modifiedScore","diagonalBaseIndex","diagonalsBelow","diagonalsAbove","diffEven","lowerBoundEven","upperBoundEven","toUint8","toUint32","CharacterClassifier","_defaultValue","asciiMap","Uint8Matrix","rows","cols","row","col","StateMachine","edges","maxCharCode","maxState","states","currentState","_stateMachine","getStateMachine","_classifier","getClassifier","FORCE_TERMINATION_CHARACTERS","CANNOT_END_WITH_CHARACTERS","LinkComputer","classifier","line","linkBeginIndex","linkEndIndex","lastIncludedCharIndex","charCodeBeforeLink","lastCharCodeInLink","stateMachine","linkBeginChCode","hasOpenParens","hasOpenSquareBracket","inSquareBrackets","hasOpenCurlyBracket","resetStateMachine","chClass","computeLinks","BasicInplaceReplace","range1","text1","range2","text2","up","numberResult","precision","n1","n2","valueSets","valueSet","EditorWorkerHost","workerServer","workerClient","_a","_b","ResourceMapEntry","isEntries","ResourceMap","resource","toKey","clb","LinkedMap","touch","callbackfn","newSize","currentSize","previous","Cache","limit","ratio","LRUCache","BidirectionalMap","SetMap","WordCharacterClassifier","wordSeparators","intlSegmenterLocales","segment","lineContent","wordClassifierCache","getMapForWordSeparators","TextModelResolvedOptions","src","newOpts","FindMatch","isITextSnapshot","ValidAnnotatedEditOperation","forceMoveMarkers","isAutoWhitespaceEdit","_isTracked","SearchData","simpleSearch","ApplyEditsResult","reverseEdits","trimAutoWhitespaceLineNumbers","shouldSynchronizeModel","LIMIT_FIND_COUNT","SearchParams","matchCase","multiline","isMultilineRegexSource","canUseSimpleSearch","nextChCode","createFindMatch","rawMatches","captureMatches","LineFeedCounter","lineFeedsOffsets","lineFeedsOffsetsLen","textLen","TextModelSearch","searchParams","searchRange","limitResultCount","searchData","Searcher","deltaOffset","lfCounter","match0","lineFeedCountBeforeMatch","lineFeedCountInMatch","startPosition","endPosition","searcher","counter","searchStringLen","textLength","lastMatchIndex","isValidMatch","searchStart","searchTextStart","lineIndex","fromColumn","bestResult","leftIsWordBounday","matchStartIndex","charBefore","firstCharInMatch","rightIsWordBounday","charAfter","lastCharInMatch","searchRegex","lastIndex","strings.getNextCodePoint","UnicodeTextModelHighlighter","startLine","endLine","codePointHighlighter","CodePointHighlighter","candidates","buildRegExpCharClassExpr","ranges","hasMore","ambiguousCharacterCount","invisibleCharacterCount","nonBasicAsciiCharacterCount","forLoop","lineLength","endIndex","charCodeBefore","word","highlightReason","primaryConfusable","notAmbiguousInLocales","strings.AmbiguousCharacters","codePoints","cp","strings.InvisibleCharacters","isAllowedInvisibleCharacter","wordContext","hasBasicASCIICharacters","hasNonConfusableNonBasicAsciiCharacter","strings.isBasicASCII","LinesDiff","moves","hitTimeout","MovedText","lineRangeMapping","OffsetRange","sortedRanges","endExclusive","OffsetRangeSet","intersection","prev","findLast","findLastIdx","fromIndex","findLastMonotonous","findLastIdxMonotonous","endIdxEx","findFirstMonotonous","findFirstIdxMonotonousOrArrLen","MonotonousArray","_array","findFirstMax","findLastMax","findFirstMin","findMaxIdx","maxIdx","LineRange$1","LineRange","lineRanges","LineRangeSet","endLineNumberExclusive","lineRange","_normalizedRanges","joinRangeStartIdx","joinRangeEndIdxExclusive","joinRange","rangeThatStartsBeforeEnd","i1","lineRange1","lineRange2","TextLength","position1","position2","columnCount","PositionOffsetTransformer","lineIdx","TextEdit","edits","lastEditEnd","edit","editRange","editStart","editEnd","rangeFromPositions","strText","StringText","newRanges","previousEditEndLineNumber","lineOffset","columnOffset","newRangeStart","newRange","SingleTextEdit","AbstractText","LineRangeMapping","originalLineCount","modifiedLineCount","lastOriginalEndLineNumber","lastModifiedEndLineNumber","originalRange","modifiedRange","origInclusiveRange","modInclusiveRange","RangeMapping","isValidLineNumber","normalizePosition","lines","DetailedLineRangeMapping","rangeMappings","innerChanges","newText","MINIMUM_MATCHING_CHARACTER_LENGTH","LegacyLinesDiffComputer","originalLines","modifiedLines","DiffComputer","lastChange","m1","m2","computeDiff","LineSequence$1","startColumns","endColumns","getFirstNonBlankColumn","getLastNonBlankColumn","shouldIgnoreTrimWhitespace","charCodes","columns","CharSequence","CharChange","originalStartLineNumber","originalStartColumn","originalEndLineNumber","originalEndColumn","modifiedStartLineNumber","modifiedStartColumn","modifiedEndLineNumber","modifiedEndColumn","diffChange","originalCharSequence","modifiedCharSequence","postProcessCharChanges","rawChanges","currChange","originalMatchingLength","modifiedMatchingLength","LineChange","charChanges","originalLineSequence","modifiedLineSequence","continueCharDiff","shouldComputeCharChanges","shouldPostProcessCharChanges","LineSequence","createContinueProcessingPredicate","diffResult","quitEarly","lineChanges","originalLineIndex","modifiedLineIndex","nextChange","originalLine","modifiedLine","originalChar","modifiedChar","originalMaxColumn","modifiedMaxColumn","originalLineNumber","modifiedLineNumber","txt","strings.firstNonWhitespaceIndex","strings.lastNonWhitespaceIndex","maximumRuntime","startTime","DiffAlgorithmResult","seq1","seq2","SequenceDiff","diffs","sequenceDiffs","doc1Length","OffsetPair","seq1Range","seq2Range","offset1","offset2","InfiniteTimeout","DateTimeout","Array2D","y","isSpace","LineRangeFragment","sumDifferences","maxLength","DynamicProgrammingDiffing","sequence1","sequence2","equalityScore","lcsLengths","directions","lengths","s1","s2","horizontalLen","verticalLen","extendedSeqScore","prevLen","lastAligningPosS1","lastAligningPosS2","reportDecreasingAligningPositions","MyersDiffAlgorithm","seqX","seqY","getXAfterSnake","V","FastInt32Array","FastArrayNegativeIndices","SnakePath","loop","lowerBound","upperBound","maxXofDLineTop","maxXofDLineLeft","newMaxX","lastPath","endX","endY","LinesSliceCharSequence","considerWhitespaceChanges","lineStartOffset","trimmedWsLength","trimmedStartLine","prevCategory","getCategory","nextCategory","getCategoryBoundaryScore","preference","pos1","pos2","isWordChar","category","computeMovedLines","hashedOriginalLines","hashedModifiedLines","excludedChanges","computeMovesFromSimpleDeletionsToSimpleInsertions","filteredChanges","unchangedMoves","computeUnchangedMoves","joinCloseConsecutiveMoves","countWhere","removeMovesInSameDiff","deletions","insertions","deletion","highestSimilarity","best","insertion","similarity","original3LineHashes","possibleMappings","lastMappings","currentModifiedRange","nextMappings","lastMapping","modifiedSet","originalSet","diffOrigToMod","modifiedSections","originalTranslatedSections","modifiedIntersectedSections","modifiedLineRange","originalLineRange","monotonousChanges","move","firstTouchingChangeOrig","firstTouchingChangeMod","linesAbove","lastTouchingChangeOrig","lastTouchingChangeMod","linesBelow","extendToTop","origLine","modLine","areLinesSimilar","extendToBottom","line1","line2","commonNonSpaceCharCount","inverted","countNonWsChars","longerLineLength","originalDist","modifiedDist","changesMonotonous","diffBeforeEndOfMoveOriginal","diffBeforeEndOfMoveModified","optimizeSequenceDiffs","joinSequenceDiffsByShifting","shiftSequenceDiffs","prevResult","result2","nextResult","prevDiff","nextDiff","seq1ValidRange","seq2ValidRange","shiftDiffToBetterPosition","deltaBefore","deltaAfter","seq2OffsetStart","seq2OffsetEndExclusive","seq1Offset","removeShortMatches","extendDiffsToEntireWordIfAppropriate","equalMappings","lastPoint","scanWord","equalMapping","w1","w2","equalPart","equalChars1","equalChars2","v1","v2","mergeSequenceDiffs","sequenceDiffs1","sequenceDiffs2","sd1","sd2","removeVeryShortMatchingLinesBetweenDiffs","_sequence2","shouldRepeat","shouldJoinDiffs","unchangedRange","lastResult","removeVeryShortMatchingTextBetweenLongDiffs","unchangedText","beforeLineCount1","beforeSeq1Length","beforeLineCount2","beforeSeq2Length","afterLineCount1","afterSeq1Length","afterLineCount2","afterSeq2Length","cap","newDiffs","newDiff","shouldMarkAsChanged","fullRange1","prefix","availableSpace","trimmedHash","indentationBefore","getIndentation","indentationAfter","DefaultLinesDiffComputer","perfectHashes","getOrCreateHash","originalLinesHashes","modifiedLinesHashes","lineAlignmentResult","lineAlignments","alignments","scanForWhitespaceChanges","equalLinesCount","seq1LastStart","seq2Offset","seq2LastStart","characterDiffs","lineRangeMappingFromRangeMappings","validatePosition","validateRange","ic","moveChanges","rangeMapping","toLineRangeMapping","slice1","slice2","dontAssertStartLine","getLineRangeMapping","a1","a2","lineStartDelta","lineEndDelta","sequenceDiff","linesDiffComputers","roundFloat","number","decimalPoints","decimal","RGBA","HSLA","rgba","chroma","hsla","HSVA","cmax","cmin","hsva","Color$1","Color","hex","R","G","B","luminance","another","lum1","lum2","factor","opaqueBackground","of","Format","CSS","formatRGB","formatRGBA","formatHSL","formatHSLA","_toTwoDigitHex","formatHex","formatHexA","compact","parseHex","_parseHexDigit","_parseCaptureGroups","captureGroups","captureGroup","parsedNumber","_toIColor","_findRange","_findHexColorInformation","hexValue","parsedHexColor","_findRGBColorInformation","isAlpha","parsedRegex","_findHSLColorInformation","colorEquivalent","_findMatches","computeColors","initialValidationMatches","initialMatch","initialCaptureGroups","colorScheme","colorParameters","colorInformation","regexParameters","computeDefaultDocumentColors","markRegex","trimDashesRegex","findSectionHeaders","headers","regionHeaders","collectRegionHeaders","markHeaders","collectMarkHeaders","sectionHeader","getHeaderText","addMarkHeaderIfFound","sectionHeaders","hasSeparatorLine","PrefixSumComputer","insertValues","oldValues","oldPrefixSum","insertValuesLen","maxCount","sum","midStop","midStart","PrefixSumIndexOfResult","ConstantTimePrefixSumComputer","viewLinesAbove","sumAbove","remainder","MirrorTextModel","eol","versionId","eolLength","linesLength","lineStartValues","insertText","insertLines","newLengths","STOP_SYNC_MODEL_DELTA_TIME_MS","WorkerTextModelSyncClient","proxy","modelService","keepIdleModels","modelUrl","resources","forceLargeModels","resourceStr","currentTime","toRemove","toDispose","WorkerTextModelSyncServer","MirrorModel","BaseMirrorModel","offsetToAdd","iteratorOverMatches","wordAtText","wordenize","wordRangesIdx","wordRanges","words","lineEnding","startLineIndex","endLineIndex","resultLines","hasChanged","maxCharacter","BaseEditorSimpleWorker","originalUrl","modifiedUrl","algorithm","EditorSimpleWorker","originalTextModel","modifiedTextModel","diffAlgorithm","identical","getLineChanges","lastEol","aRng","bRng","writeIndex","readIndex","editOffset","newEdit","modelUrls","leadingWord","wordDef","wordDefFlags","sw","wordDefRegExp","outer","selectionText","wordRange","_host","_foreignModuleFactory","moduleId","createData","foreignHostMethods","onModuleCallback","foreignModule","ITextResourceConfigurationService","ITextResourcePropertiesService","ILanguageFeaturesService","STOP_WORKER_DELTA_TIME_MS","canSyncModel","EditorWorkerService","_languageConfigurationService","languageFeaturesService","WorkerManager","links","WordBasedCompletionItemProvider","toLineRangeMappings","workerManager","languageConfigurationService","models","replace","insert","_workerDescriptor","EditorWorkerClient","SynchronousWorkerClient","instance","ColorScheme","isHighContrast","isDark","IThemeService","themeColorFromId","getThemeTypeSelector","ThemingRegistry","participant","themingRegistry","registerThemingParticipant","Themable","themeService","theme","AbstractCodeEditorService","_themeService","editorWithWidgetFocus","editors","provider","ed","sideBySide","StandaloneCodeEditorService","hasCodeEditor","activeCodeEditor","selection","ILayoutService","StandaloneLayoutService","dom.getClientArea","codeEditor","_codeEditorService","EditorScopedLayoutService","_container","Severity","_error","_warning","_warn","_info","_ignore","fromValue","strings.equalsIgnoreCase","severity","Severity$2","IDialogService","BaseSeverity","INotificationService","NoOpNotification","IUndoRedoService","ResourceEditStackSnapshot","UndoRedoGroup","UndoRedoSource","getResourceLabel","stackElementCounter","ResourceStackElement","resourceLabel","strResource","groupId","groupOrder","sourceId","sourceOrder","isValid","ResourceReasonPair","reason","RemovedResources","externalRemoval","noParallelUniverses","messages","WorkspaceStackElement","resourceLabels","strResources","ResourceEditStack","futureElement","snapshotLength","isOK","snapshotIndex","removePastAfter","removeFutureBefore","past","future","individualMap","EditStackSnapshot","editStacks","missingEditStack","UndoRedoService","_dialogService","_notificationService","uriComparisonKeyComputer","editStack","closestPastElement","ignoreResources","individualArr","matchedElement","matchedStrResource","resourceOrSource","editStackSnapshot","cleanup","continuation","releaseLocks","affectedEditStacks","WorkspaceVerificationError","checkInvalidatedResources","cannotUndoDueToResources","cannotLockDueToResources","undoConfirmed","verificationError","pastElement","secondPastElement","UndoChoice","verificationError1","verificationError2","cannotRedoDueToResources","returnValue","clamp","MovingAverage","SlidingWindowAverage","size","oldValue","IEnvironmentService","ILanguageFeatureDebounceService","IdentityHash","_hashes","pool","NullDebounceInformation","_default","_model","FeatureDebounceInformation","_logService","_name","_min","_max","avg","LanguageFeatureDebounceService","envService","feature","extra","info","TokenMetadata","metadata","foreground","countEOL","eolCount","firstLineLength","lastLineStart","SemanticTokensProviderStyling","_legend","_languageService","HashTable","tokenTypeIndex","tokenModifierSet","encodedLanguageId","tokenType","tokenModifiers","modifierSet","modifierIndex","tokenStyle","italicBit","boldBit","underlineBit","strikethroughBit","foregroundBits","previousResultId","resultId","editIndex","maxExpectedStart","HashTableEntry","oldElements","oldNext","ISemanticTokensStylingService","SemanticTokensStylingService","toSlashes","osPath","toPosixPath","getRoot","firstLetter","isWindowsDriveLetter","isEqualOrParent","parentCandidate","ignoreCase","sepOffset","char0","GLOBSTAR","GLOB_SPLIT","PATH_REGEX","NO_PATH_REGEX","ALL_FORWARD_SLASHES","starsToRegExp","starCount","isLastPattern","splitGlobAware","splitChar","inBraces","inBrackets","curVal","parseRegExp","regEx","previousSegmentWasGlobStar","braceVal","bracketVal","braceRegExp","choice","T1","T2","T3","T3_2","T4","T5","CACHE","FALSE","NULL","parsePattern","patternKey","parsedPattern","wrapRelativePattern","trivia1","trimForExclusions","trivia2","trivia3","trivia4and5","toRegExp","wrappedPattern","slashBase","backslashBase","basenames","parsedPatterns","aggregateBasenameMatches","patternsLength","withBasenames","allPaths","targetPath","matchPathEnds","usingPosixSep","nativePath","nativePathEnd","targetPathEnd","regExp","hasSibling","parse","isRelativePattern","resultPattern","parsedExpression","rp","expression","parseExpressionPattern","resultExpression","resultPromises","resultPromise","clausePattern","matched","basenamePatterns","patterns","aggregate","aggregatedPatterns","candidateUri","candidateLanguage","candidateIsSynchronized","candidateNotebookUri","candidateNotebookType","hasAccessToAllModels","notebookType","normalizedPattern","matchGlobPattern","isExclusive","MatchCandidate","notebookUri","recursive","LanguageFeatureRegistry","_notebookInfoResolver","lastBucket","lastBucketScore","notebookInfo","isBuiltinSelector","LanguageFeaturesService","asCssVariableName","colorIdent","asCssVariable","asCssVariableWithDefault","defaultCssValue","isColorDefaults","DEFAULT_COLOR_CONFIG_VALUE","ColorRegistry","needsTransparency","deprecationMessage","colorContribution","propertySchema","colorDesc","colorValue","resolveColorValue","cat1","cat2","colorRegistry","registerColor","executeTransform","transform","darken","lighten","transparent","oneOf","colorValues","ifDefinedThenElse","ifArg","thenArg","elseArg","lessProminent","backgroundColorValue","transparency","workbenchColorsSchemaId","schemaRegistry","delayer","iconForeground","focusBorder","contrastBorder","activeContrastBorder","textLinkForeground","badgeBackground","badgeForeground","scrollbarShadow","scrollbarSliderBackground","scrollbarSliderHoverBackground","scrollbarSliderActiveBackground","progressBarBackground","editorBackground","editorForeground","editorWidgetBackground","editorWidgetForeground","editorWidgetBorder","editorErrorForeground","editorWarningBackground","editorWarningForeground","editorWarningBorder","editorInfoForeground","editorInfoBorder","editorHintForeground","editorSelectionBackground","editorSelectionForeground","editorInactiveSelection","editorSelectionHighlight","editorFindMatchHighlight","editorFindMatchHighlightBorder","editorHoverBackground","editorHoverBorder","editorInlayHintForeground","editorInlayHintBackground","editorLightBulbForeground","defaultInsertColor","defaultRemoveColor","diffInserted","diffRemoved","diffOverviewRulerInserted","diffOverviewRulerRemoved","widgetShadow","widgetBorder","toolbarHoverBackground","breadcrumbsForeground","breadcrumbsBackground","breadcrumbsFocusForeground","breadcrumbsActiveSelectionForeground","headerTransparency","currentBaseColor","incomingBaseColor","commonBaseColor","contentTransparency","rulerTransparency","mergeCurrentHeaderBackground","mergeIncomingHeaderBackground","mergeCommonHeaderBackground","mergeBorder","problemsErrorIconForeground","problemsWarningIconForeground","problemsInfoIconForeground","minimapFindMatch","minimapSelection","minimapInfo","minimapWarning","minimapError","minimapBackground","minimapForegroundOpacity","inputBackground","inputForeground","inputBorder","inputActiveOptionBorder","inputActiveOptionHoverBackground","inputActiveOptionBackground","inputActiveOptionForeground","inputValidationInfoBackground","inputValidationInfoForeground","inputValidationInfoBorder","inputValidationWarningBackground","inputValidationWarningForeground","inputValidationWarningBorder","inputValidationErrorBackground","inputValidationErrorForeground","inputValidationErrorBorder","selectBackground","selectListBackground","selectForeground","selectBorder","buttonForeground","buttonSeparator","buttonBackground","buttonHoverBackground","buttonBorder","buttonSecondaryForeground","buttonSecondaryBackground","buttonSecondaryHoverBackground","radioActiveForeground","radioActiveBackground","radioActiveBorder","radioInactiveForeground","radioInactiveBackground","radioInactiveBorder","radioInactiveHoverBackground","checkboxBackground","checkboxForeground","checkboxBorder","keybindingLabelBackground","keybindingLabelForeground","keybindingLabelBorder","keybindingLabelBottomBorder","listFocusBackground","listFocusForeground","listFocusOutline","listFocusAndSelectionOutline","listActiveSelectionBackground","listActiveSelectionForeground","listActiveSelectionIconForeground","listInactiveSelectionBackground","listInactiveSelectionForeground","listInactiveSelectionIconForeground","listInactiveFocusBackground","listInactiveFocusOutline","listHoverBackground","listHoverForeground","listDropOverBackground","listDropBetweenBackground","listHighlightForeground","listFilterWidgetBackground","listFilterWidgetOutline","listFilterWidgetNoMatchesOutline","listFilterWidgetShadow","treeIndentGuidesStroke","treeInactiveIndentGuidesStroke","tableColumnsBorder","tableOddRowsBackgroundColor","menuBorder","menuForeground","menuBackground","menuSelectionForeground","menuSelectionBackground","menuSelectionBorder","menuSeparatorBackground","quickInputBackground","quickInputForeground","quickInputTitleBackground","pickerGroupForeground","pickerGroupBorder","_deprecatedQuickInputListFocusBackground","quickInputListFocusForeground","quickInputListFocusIconForeground","quickInputListFocusBackground","IHoverService","WorkbenchHoverDelegate","placement","instantHover","overrideOptions","hoverService","focus","targets","IContextViewService","IContextMenuService","IKeybindingService","GlobalPointerMoveMonitor","invokeStopCallback","browserEvent","onStopCallback","initialElement","pointerId","initialButtons","pointerMoveCallback","eventSource","dom.getWindow","dom.addDisposableListener","dom.EventType","memoize","_target","descriptor","fnKey","memoizeKey","Gesture","EventUtils","DomUtils.onDidRegisterWindow","DomUtils.addDisposableListener","timestamp","evt","activeTouchCount","holdTime","arrays.tail","finalX","finalY","deltaT","dispatchTo","initialTarget","setTapCount","ignoreTarget","depth","now","vX","dirX","vY","dirY","DomUtils.scheduleAtNextAnimationFrame","delta_pos_x","delta_pos_y","stopped","ARROW_IMG_SIZE","ScrollbarArrow","Widget","dom.addStandardDisposableListener","dom.WindowIntervalTimer","scheduleRepeater","pointerMoveData","ScrollbarVisibilityController","visibleClassName","invisibleClassName","rawShouldBeVisible","shouldBeVisible","isNeeded","withFadeAway","POINTER_DRAG_RESET_DISTANCE","AbstractScrollbar","arrow","visibleSize","elementScrollSize","elementScrollPosition","domTop","sliderStart","sliderStop","pointerPos","offsetX","offsetY","domNodePosition","dom.getDomNodePagePosition","initialPointerPosition","initialPointerOrthogonalPosition","initialScrollbarState","pointerOrthogonalPosition","pointerOrthogonalDelta","pointerDelta","_desiredScrollPosition","desiredScrollPosition","scrollbarSize","MINIMUM_SLIDER_SIZE","ScrollbarState","arrowSize","oppositeScrollbarSize","scrollSize","scrollPosition","iVisibleSize","iScrollSize","iScrollPosition","computedAvailableSize","computedRepresentableSize","computedIsNeeded","computedSliderSize","computedSliderRatio","computedSliderPosition","desiredSliderPosition","correctedOffset","HorizontalScrollbar","scrollable","scrollDimensions","arrowDelta","scrollbarDelta","sliderSize","sliderPosition","largeSize","smallSize","VerticalScrollbar","ScrollState","_forceIntegerValues","scrollWidth","scrollLeft","scrollHeight","scrollTop","useRawScrollPositions","inSmoothScrolling","widthChanged","scrollWidthChanged","scrollLeftChanged","heightChanged","scrollHeightChanged","scrollTopChanged","Scrollable","smoothScrollDuration","dimensions","newState","reuseAnimation","validTarget","newSmoothScrolling","SmoothScrollingOperation","oldState","SmoothScrollingUpdate","isDone","createEaseOutCubic","completion","easeOutCubic","createComposed","cut","duration","viewportSize","stop1","stop2","newScrollLeft","newScrollTop","easeInCubic","HIDE_TIMEOUT","SCROLL_WHEEL_SENSITIVITY","MouseWheelClassifierItem","MouseWheelClassifier","remainingInfluence","iteration","influence","pageZoomFactor","previousItem","absDeltaX","absDeltaY","absPreviousDeltaX","absPreviousDeltaY","minDeltaX","minDeltaY","maxDeltaX","maxDeltaY","AbstractScrollableElement","resolveOptions","scrollbarHost","mouseWheelEvent","newClassName","newOptions","shouldListen","onMouseWheel","didScroll","shiftConvert","futureScrollPosition","deltaScrollTop","desiredScrollTop","deltaScrollLeft","desiredScrollLeft","consumeMouseWheel","scrollState","enableTop","enableLeft","leftClassName","topClassName","topLeftClassName","ScrollableElement","dom.scheduleAtNextAnimationFrame","SmoothScrollableElement","DomScrollableElement","dom.$","HoverAction","actionOptions","keybindingLabel","dom.append","ClickAction","KeyDownAction","getHoverAccessibleViewHint","shouldHaveHint","run","keyCodes","IOpenerService","extractSelection","DomEmitter","renderText","createElement","renderFormattedText","formattedText","_renderFormattedText","parseFormattedText","StringStream","treeNode","actionHandler","renderCodeSegments","DOM.addStandardDisposableListener","nodeChild","parseCodeSegments","actionViewItemIndex","stream","isEscapedFormatType","formatTagType","isFormatTag","newCurrent","textCurrent","supportCodeSegments","labelWithIconsRegex","renderLabelWithIcons","textStart","textStop","renderIcon","or","wordToMatchAgainst","_matchesPrefix","matchesPrefix","strings.startsWithIgnoreCase","matchesContiguousSubString","matchesSubString","_matchesSubString","isLower","isUpper","isWhitespace","isAlphanumeric","head","nextAnchor","camelCaseWord","_matchesCamelCase","nextUpperIndex","analyzeCamelCaseWord","upper","lower","alpha","numeric","upperPercent","lowerPercent","alphaPercent","numericPercent","isUpperCaseWord","analysis","isCamelCaseWord","isCamelCasePattern","whitespace","matchesCamelCase","fuzzyContiguousFilter","fuzzySeparateFilter","fuzzyRegExpCache","matchesFuzzy","enableSeparateSubstringMatching","strings.convertSimple2RegExpPattern","matchesFuzzy2","fuzzyScore","createMatches","wordPos","_maxLen","initTable","table","initArr","maxLen","_minWordMatchPos","_maxWordMatchPos","_diag","_table","_arrows","isSeparatorAtPos","strings.isEmojiImprecise","isWhitespaceAtPos","isUpperCaseAtPos","wordLow","isPatternInWord","patternLow","patternPos","patternLen","wordLen","fillMinWordPosArr","FuzzyScore","isDefault","FuzzyScoreOptions","firstMatchCanBeWeak","boostFullMatch","patternStart","wordStart","_fillInMaxWordMatchPos","hasStrongFirstMatch","minWordMatchPos","maxWordMatchPos","nextMaxWordMatchPos","canComeDiag","_doScore","diagScore","canComeLeft","leftScore","canComeLeftLeft","leftLeftScore","backwardsDiagLength","maxMatchColumn","diagColumn","skippedCharsCount","newMatchStart","outFirstMatchStrong","isGapLocation","iconStartMarker","iconsRegex","escapeIconsRegex","escapeIcons","markdownEscapedIconsRegex","markdownEscapeEscapedIcons","stripIconsRegex","stripIcons","preWhitespace","postWhitespace","getCodiconAriaLabel","_match","codiconName","_parseIconsRegex","parseLabelWithIcons","iconOffsets","iconsOffset","chars","matchesFuzzyIconAware","wordToMatchAgainstWithoutIconsTrimmed","leadingWhitespaceOffset","iconOffset","originalFSPath","ExtUri","_ignorePathCasing","uri1","uri2","ignoreFragment","strCompare","extpath.isEqualOrParent","isEqualAuthority","paths.dirname","normalizedPath","paths.normalize","relativePath","paths.relative","extpath.toSlashes","fromPath","toPath","newURI","paths.resolve","extpath.toPosixPath","paths.sep","fsp","extpath.getRoot","hasTrailingPathSeparator","isRootSep","extUri","normalizePath","resolvePath","DataUri","parseMetaData","dataUri","mime","MarkdownString","isTrustedOrOptions","newlineStyle","escapeMarkdownSyntaxTokens","langId","appendEscapedMarkdownCodeBlockFence","title","isMarkdownString","markdownStringEqual","longestFenceLength","desiredFenceLength","escapeDoubleQuotes","removeMarkdownEscapes","parseHrefAndDimensions","href","splitted","parameters","heightFromParams","widthFromParams","widthIsFinite","heightIsFinite","IdGenerator","defaultGenerator","__marked_exports","define","deps","global","exports","_getDefaults","changeDefaults","newDefaults","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","getEscapeReplacement","escape$1","encode","caret","opt","valSource","cleanUrl","noopTest","splitCells","tableRow","cells","invert","suffLen","findClosingBracket","outputLink","link","raw","lexer","indentCodeCompensation","matchIndentToCode","indentToCode","matchIndentInNode","indentInNode","_Tokenizer","trimmed","inBlockquote","currentLines","currentRaw","currentText","lastToken","oldToken","newToken","bull","isordered","itemRegex","endsWithBlankLine","endEarly","itemContents","nextLine","blankLine","indent","nextBulletRegex","hrRegex","fencesBeginRegex","headingBeginRegex","rawLine","istask","ischecked","spacers","hasMultipleLineBreaks","aligns","align","cell","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","linkString","maskedSrc","prevChar","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","lastCharLength","hasNonSpaceChars","hasSpaceCharsOnBothEnds","prevCapZero","newline","blockCode","fences","hr","heading","bullet","lheading","_paragraph","blockText","_blockLabel","_tag","_comment","paragraph","blockNormal","gfmTable","blockGfm","blockPedantic","inlineCode","br","inlineText","_punctuation","punctuation","blockSkip","emStrongLDelim","emStrongRDelimAst","emStrongRDelimUnd","anyPunctuation","autolink","_inlineComment","_inlineLabel","reflink","nolink","reflinkSearch","inlineNormal","inlinePedantic","inlineGfm","inlineBreaks","block","inline","_Lexer","rules","lastParagraphClipped","tabs","cutSrc","extTokenizer","tempSrc","tempStart","getStartIndex","errMsg","keepPrevChar","_Renderer","lang","langString","ordered","startAttr","itemBody","checkbox","checked","header","cleanHref","_TextRenderer","_Parser","anyToken","genericToken","textToken","renderer","_Hooks","markdown","Marked","tableToken","listToken","childTokens","extensions","pack","prevRenderer","extLevel","rendererProp","rendererFunc","tokenizer","tokenizerProp","tokenizerFunc","prevTokenizer","hooksProp","hooksFunc","prevHook","walkTokens","packWalktokens","parser","origOpt","throwError","silent","async","markedInstance","marked","setOptions","use","parseInline","Renderer","stringify","replacer","revive","defaultMarkedRenderers","renderMarkdown","markedOptions","isDisposed","_uriMassage","part","_href","isDomUri","marked.Renderer","codeBlocks","syncCodeBlocks","postProcessCodeBlockLanguageId","_activateLink","resolveWithBaseUri","onClick","onAuxClick","mouseEvent","DOM.getWindow","DOM.addDisposableListener","keyboardEvent","renderedMarkdown","marked.defaults","marked.lexer","newTokens","fillInIncompleteTokens","marked.parser","marked.parse","markdownHtmlDoc","sanitizeRenderedMarkdown","img","DOM.$","resolvedHref","tuples","renderedElements","placeholderElements","placeholderElement","renderedElement","DOM.reset","parts","baseUri","selfClosingTags","allowedSchemes","getSanitizerOptions","addDompurifyHook","startTagText","endTagText","isSelfClosing","attrString","textNode","endTagTextNode","DOM.hookDomPurifyHrefAndSrcSanitizer","dompurify.sanitize","allowedMarkdownAttr","DOM.basicMarkupHtmlTags","renderStringAsPlaintext","string","renderMarkdownAsPlaintext","withCodeBlocks","plainTextRenderer","unescapeInfo","createRenderer","mergeRawTokenText","mergedTokenText","completeSingleLinePattern","subtoken","lastLine","completeCodespan","completeDoublestar","completeStar","completeDoubleUnderscore","completeUnderscore","hasLinkTextAndStartOfLinkTarget","hasStartOfLinkTargetAndNoLinkText","nextTwoSubTokens","completeLinkTargetArg","completeLinkTarget","completeLinkText","completeListItemPattern","lastListItem","lastListSubToken","previousListItemsText","lastListItemLead","newListItemText","newList","maxIncompleteTokensFixRounds","fillInIncompleteTokensOnce","completeTable","newListToken","newTokensList","completeWithString","closingString","mergedRawText","numCols","hasSeparatorRow","line1Matches","prefixText","line1EndsInPipe","newRawText","LineTokens","decoder","defaultMetadata","fullText","sliceFromTokenIndex","sliceTokenCount","SliceLineTokens","lineTextLength","desiredIndex","insertTokens","nextOriginalTokenIdx","nextInsertTokenIdx","originalEndOffset","nextOriginalTokenEndOffset","nextInsertToken","tokenEndOffset","adjustedTokenIndex","tokenStartOffset","NullState","nullTokenize","nullTokenizeEncoded","hasEOL","tokenizeToString","_tokenizeToString","tokenizeLineToHTML","viewLineTokens","tabSize","useNbsp","charIndex","tabsCharDelta","prevIsSpace","tokenEndIndex","partContent","insertSpacesCount","languageIdCodec","strings.splitLines","tokenizationResult","lenJ","strings.escape","MarkdownRenderer_1","MarkdownRenderer","_options","_openerService","rendered","languageAlias","openLinkFromMarkdown","openerService","toAllowCommandsOption","IAccessibilityService","CONTEXT_ACCESSIBILITY_MODE_ENABLED","MAX_MESSAGE_LENGTH","ariaContainer","alertContainer","alertContainer2","statusContainer","statusContainer2","setARIAContainer","createAlertContainer","createStatusContainer","alert","dom.clearNode","insertMessage","status","HoverWidget","_keybindingService","_configurationService","_instantiationService","_accessibilityService","ElementHoverTarget","BaseHoverWidget","rowElement","contentsElement","dom.isHTMLElement","mdRenderer","statusBarElement","actionsElement","hideOnHover","infoElement","mouseTrackerTargets","mouseTracker","CompositeMouseTracker","mouseTracker2Targets","firstContainerFocusElement","lastContainerFocusElement","beforeContainerFocusElement","dom.prepend","afterContainerFocusElement","parsedNode","recursivelyFoundElement","accessibleViewHint","getZoomAccountedBoundingClientRect","dom.getDomNodeZoomLevel","targetBounds","targetRect","hoverWidth","hoverPointerOffset","maxHeight","extraRightPadding","hoverHeight","pointerLeftPosition","pointerX","_elements","intersect","intersects","relativeComplement","second","isAnchor","LayoutAnchorMode","layout","viewSize","layoutAfterAnchorBoundary","layoutBeforeAnchorBoundary","ContextView","domPosition","DOM.hide","usedShadowDOM","SHADOW_ROOT_CSS","toDisposeOnSetContainer","delegate","DOM.clearNode","DOM.show","around","DOM.isHTMLElement","elementPosition","DOM.getDomNodePagePosition","DOM.getDomNodeZoomLevel","viewSizeWidth","DOM.getTotalWidth","viewSizeHeight","DOM.getTotalHeight","anchorPosition","anchorAlignment","anchorAxisAlignment","activeWindow","DOM.getActiveWindow","verticalAnchor","horizontalAnchor","containerPosition","onCapture","DOM.isAncestor","ContextViewHandler","layoutService","openContextView","ContextViewService","ManagedHoverWidget","hoverDelegate","fadeInAnimation","resolvedContent","oldHoverWidget","hoverOptions","HoverService","contextMenuService","_layoutService","skipLastFocusedUpdate","getHoverOptionsIdentity","trapFocus","hoverDisposables","hover","targetElement","HoverContextViewDelegate","focusedElement","focusedElementDocument","firstTargetElement","hideOnKeyDown","hoverPreparation","hoverWidget","hideHover","disposeWidget","disposePreparation","hadHover","triggerShowHover","isMouseDown","mouseDownEmitter","mouseUpEmitter","mouseLeaveEmitter","onMouseOver","onMouseMove","getHoverTargetElement","mouseOverDomEmitter","focusDomEmitter","newContent","_hover","_focus","stopElement","collector","hoverBorder","IBulkEditService","ResourceEdit","ResourceTextEdit","ResourceFileEdit","textEdit","oldResource","newResource","diffEditorDefaultOptions","editorConfigurationBaseNode","editorConfiguration","isConfigurationPropertySchema","editorOption","cachedEditorConfigurationKeys","getEditorConfigurationKeys","isEditorConfigurationKey","isDiffEditorConfigurationKey","EditOperation","objects.deepFreeze","ConfigurationModel","_contents","_keys","_overrides","rawConfigurationModels","ConfigurationModelParser","section","that","contents","overrideContents","overrideConfigurationModel","others","objects.deepClone","raws","otherOverride","override","arrays.distinct","contentsForKey","overrideContentsForKey","contentsForIdentifierOnly","mergeContents","contentsToMerge","add","restricted","hasExcludedProperties","configurationProperties","filtered","filterOverriddenProperties","overrideRaw","keyInOverrideRaw","ConfigurationInspectValue","defaultConfiguration","policyConfiguration","applicationConfiguration","userConfiguration","localUserConfiguration","remoteUserConfiguration","workspaceConfiguration","folderConfigurationModel","memoryConfigurationModel","inspectValue","Configuration","_defaultConfiguration","_policyConfiguration","_applicationConfiguration","_localUserConfiguration","_remoteUserConfiguration","_workspaceConfiguration","_folderConfigurations","_memoryConfiguration","_memoryConfigurationByResource","workspace","memoryConfiguration","consolidateConfigurationModel","configurationModel","consolidateConfiguration","memoryConfigurationForResource","folder","folderConsolidatedConfiguration","workspaceConsolidateConfiguration","folderConfiguration","folders","ConfigurationChangeEvent","currentConfiguraiton","currentWorkspace","IMEImpl","IME","NoMatchingKb","MoreChordsNeeded","KbFound","isBubble","KeybindingResolver","defaultKeybindings","log","defaultKeybinding","defaultKb","keypress","removals","commandRemovals","isRemoved","commandRemoval","conflicts","conflict","isShorterKbPrefix","currentChords","pressedChords","kbCandidates","lookupMap","prefixMatches","printWhenExplanation","printSourceExplanation","HIGH_FREQ_COMMANDS","AbstractKeybindingService","_contextKeyService","_telemetryService","KeybindingModifierSet","contextValue","chordLastInteractedTime","keypressLabel","fullKeypressLabel","singleModifier","userKeypress","isSingleModiferChord","shouldPreventDefault","userPressedChord","dispatchKeyname","resolveResult","currentChordsLabel","ResolvedKeybindingItem","resolvedKeybinding","extensionId","isBuiltinExtension","toEmptyArrayIfContainsNull","ModifierLabelProvider","mac","linux","keyLabelProvider","chord","_simpleAsString","UILabelProvider","AriaLabelProvider","ElectronAcceleratorLabelProvider","UserSettingsLabelProvider","labels","BaseResolvedKeybinding","os","USLayoutResolvedKeybinding","immutableKeyCode","ILabelService","IProgressService","IEditorProgressService","StringIterator","aCode","thisCode","ConfigKeysIterator","_caseSensitive","justSeps","PathIterator","_splitOnBackslash","UriIterator","_ignoreQueryAndFragment","TernarySearchTreeNode","tmp","TernarySearchTree","ignorePathCasing","ignoreQueryAndFragment","iter","oldElement","bf","d1","d2","superStr","newChild","allowValue","IWorkspaceContextService","WorkspaceFolder","WORKSPACE_EXTENSION","STANDALONE_EDITOR_WORKSPACE_ID","InspectTokensNLS","GoToLineNLS","QuickHelpNLS","QuickCommandNLS","QuickOutlineNLS","StandaloneCodeEditorNLS","ToggleHighContrastNLS","StandaloneServicesNLS","IWorkspaceTrustManagementService","registeredAssociations","nonUserRegisteredAssociations","userRegisteredAssociations","registerPlatformLanguageAssociation","association","warnOnOverwrite","_registerLanguageAssociation","userConfigured","associationItem","toLanguageAssociationItem","clearPlatformLanguageAssociations","getLanguageIds","firstLine","getAssociations","filename","configuredLanguage","getAssociationByPath","registeredLanguage","firstlineLanguage","getAssociationByFirstline","associations","filenameMatch","patternMatch","extensionMatch","NULL_LANGUAGE_ID","LanguageIdCodec","LanguagesRegistry","useModesRegistry","alias","mimetype","resolvedLanguage","primaryMime","extension","filenamePattern","firstLineRegexStr","firstLineRegex","langAliases","langAlias","containsAliases","bestName","languageName","languageNameLower","mimeType","strictEquals","itemsEquals","equalsIfDefined","equalsOrV1","DebugNameData","owner","debugNameSource","referenceFn","getDebugName","countPerName","cachedDebugName","cached","dbgName","computeDebugName","self","ownerStr","formatOwner","getFunctionName","findKey","countPerClassName","ownerId","getClassName","fnSrc","globalObservableLogger","getLogger","_recomputeInitiallyAndOnChange","_setRecomputeInitiallyAndOnChange","recomputeInitiallyAndOnChange","_keepObserved","_setKeepObserved","keepObserved","_derived","_setDerivedOpts","derived","ConvenientObservable","reader","fnOrOwner","fnOrUndefined","handleValue","BaseObservable","transaction","tx","TransactionImpl","_globalTransaction","globalTransaction","subtransaction","_fn","_getDebugName","updatingObservers","observableValue","nameOrOwner","debugNameData","ObservableValue","_debugNameData","_equalityComparator","_tx","disposableObservableValue","DisposableObservableValue","computeFnOrOwner","computeFn","Derived","derivedWithSetter","setter","DerivedWithSetter","derivedOpts","derivedWithStore","computeFnOrUndefined","derivedDisposable","_computeFn","createChangeSummary","_handleChange","_handleLastObserverRemoved","emptySet","hadValue","changeSummary","propagateBeginUpdate","observers","shouldReact","wasUpToDate","shouldCallBeginUpdate","shouldCallEndUpdate","handleChange","handleLastObserverRemoved","equalityComparator","autorun","AutorunObserver","autorunOpts","autorunHandleChanges","autorunWithStore","_runFn","constObservable","ConstObservable","observableFromEvent","getValue","FromEventObservable","_getValue","_getTransaction","batchEventsGlobally","didSet","observableSignalFromEvent","debugName","FromEventObservableSignal","observableSignal","debugNameOrOwner","ObservableSignal","_debugName","_owner","KeepAliveObserver","_forceRecompute","_handleValue","derivedObservableWithCache","lastValue","derivedConstOnceDefined","waitForState","isError","cancellationToken","isImmediateRun","shouldDispose","stateObs","LazyObservableValue","observableValueOpts","LanguageService","LanguageSelection","onDidChangeLanguages","DataTransfers","nullHoverDelegateFactory","hoverDelegateFactory","defaultHoverDelegateMouse","defaultHoverDelegateElement","setHoverDelegateFactory","hoverDelegateProvider","getDefaultHoverDelegate","createInstantHoverDelegate","baseHoverDelegate","setBaseLayerHoverDelegate","getBaseLayerHoverDelegate","CombinedSpliceable","spliceables","ListError","user","groupIntersect","groups","shift","much","consolidate","previousGroup","RangeMap","paddingTop","topPadding","middle","groupCount","newCount","RowCache","renderers","templateId","isStale","templateData","makeChanges","cachedRows","cachedRow","StaticDND","DefaultOptions","ElementsDragAndDropData","ExternalElementsDragAndDropData","NativeDragAndDropData","dataTransfer","file","equalsDragFeedback","f1","f2","ListViewAccessibilityProvider","accessibilityProvider","ListView","virtualDelegate","TouchEventType","scrollableOptions","lastRenderRange","previousRenderRange","deleteRange","removeRange","rowsToDispose","previousRestRange","previousRenderedRestRange","previousUnrenderedRestRanges","inserted","deleted","renderRange","renderedRestRange","updateRange","removeRanges","unrenderedRestRanges","insertRanges","renderTop","renderHeight","renderLeft","updateItemsInDOM","rangesToInsert","rangesToRemove","rangesToUpdate","role","referenceNode","sector","dragImage","feedback","dragOverEffectPosition","dragData","viewTop","upperLimit","targetIndex","relativePosition","scrollableElement","rawIndex","anchorElementIndex","anchorElementTopDelta","heightDiff","unrenderRanges","renderRanges","TraitRenderer","trait","renderedElementIndex","insertCount","indexes","Trait$1","_trait","sortedIndexes","numericSort","sortedResult","toRender","disjunction","Trait","SelectionTrait","setAriaSelected","TraitSpliceable","identityProvider","pastElementsWithTrait","pastElementsWithTraitSet","elementsWithTrait","isInputElement","isListElementDescendantOfClass","isMonacoEditor","isMonacoCustomToggle","isActionItem","isStickyScrollElement","isStickyScrollContainer","isButton","KeyboardController","optionsUpdate","TypeNavigationMode","TypeNavigationControllerState","DefaultKeyboardNavigationDelegate","TypeNavigationController","keyboardNavigationLabelProvider","keyboardNavigationEventFilter","typing","onChar","onClear","ariaLabel","labelStr","fuzzy","DOMFocusController","onKeyDown","focusedDomElement","tabIndexElement","isSelectionSingleChangeEvent","isSelectionRangeChangeEvent","isMouseRightClick","DefaultMultipleSelectionController","MouseController","rangeSelection","contiguousRange","getContiguousRangeContaining","newSelection","DefaultStyleController","styleElement","selectorSuffix","styles","focusAndSelectionOutline","inactiveFocusAndSelectionOutline","unthemedListStyles","PipelineRenderer","_templateId","AccessibiltyRenderer","ariaLevel","ListViewDragAndDrop","dnd","originalEvent","targetSector","List$2","didJustPressContextMenuKey","fromKeyDown","fromKeyUp","fromMouse","baseRenderers","viewOptions","lastPageIndex","currentlyFocusedElementIndex","lastGoodPageIndex","previousScrollTop","nextpageScrollTop","getPaddingTop","firstPageIndex","firstGoodPageIndex","relativeTop","elementTop","elementHeight","viewItemBottom","scrollBottom","List","SELECT_OPTION_ENTRY_TEMPLATE_ID","SelectListRenderer","detail","decoratorRight","isDisabled","_templateData","SelectBoxList","selected","contextViewProvider","selectBoxOptions","widthControlOuterDiv","widthControlInnerDiv","dom.createStyleSheet","dom.EventHelper","listIsVisibleOnTouchStart","showDropDown","focusable","background","listBackground","dom.asCssValueWithDefault","optionsBorder","disabled","focusSelect","preLayoutPosition","maxDetailsPaneHeight","_option","selectPosition","verticalPadding","maxSelectDropDownHeightBelow","maxSelectDropDownHeightAbove","selectWidth","selectMinWidth","selectOptimalWidth","listHeight","minRequiredDropDownHeight","maxVisibleOptionsBelow","maxVisibleOptionsAbove","elementWidth","longest","longestLength","detailLength","rightDecoratorLength","dom.getTotalWidth","onSelectDropDownKeyDown","dom.isAncestor","listRowElement","cleanRenderedMarkdown","selectedIndex","descriptionIsMarkdown","nextOptionDisabled","optionIndex","SelectBoxNative","eventType","showSelect","SelectBox","BaseActionViewItem","actionRunner","newContext","enableDragging","preserveFocus","ActionViewItem","types.assertType","kbLabel","SelectActionViewItem","BaseDropdown","labelRenderer","GestureEventType","cleanupFn","DropdownMenu","DropdownMenuActionViewItem","menuActionsOrProvider","contextMenuProvider","isActionsArray","visible","isICommandActionToggleInfo","StorageHint","StorageState","Storage","database","external","valueStr","updateRequest","InMemoryStorageDatabase","TARGET_KEY","IStorageService","WillSaveStateReason","loadKeyTargets","storage","keysRaw","AbstractStorageService","keyTargets","InMemoryStorageService","overrideStyles","defaultKeybindingLabelStyles","defaultButtonStyles","defaultProgressBarStyles","defaultToggleStyles","defaultInputBoxStyles","defaultFindWidgetStyles","defaultCountBadgeStyles","defaultListStyles","getListStyles","defaultSelectBoxStyles","defaultMenuStyles","createAndFillInContextMenuActions","menu","optionsOrTarget","targetOrPrimaryGroup","primaryGroupOrUndefined","primaryGroup","modifierKeyEmitter","useAlternativeActions","fillInActions","actionGroup","createAndFillInActionBarActions","primaryGroupOrShouldInlineSubmenu","shouldInlineSubmenuOrUseSeparatorsInPrimaryActions","useSeparatorsInPrimaryActionsOrUndefined","shouldInlineSubmenu","useSeparatorsInPrimaryActions","isPrimaryAction","primaryBucket","secondaryBucket","submenuInfo","newLen","submenuActions","MenuEntryActionViewItem","_contextMenuService","isMouseOver","updateAltState","wantsAltCommand","tooltip","altTooltip","altKeybinding","altKeybindingLabel","altTitleSection","iconClasses","SubmenuEntryActionViewItem","dropdownOptions","setBackgroundImage","DropdownWithDefaultActionViewItem","submenuAction","_menuService","_instaService","_storageService","defaultAction","defaultActionId","lastAction","defaultActionKeybinding","primaryContainer","dropdownContainer","fromRight","SubmenuEntrySelectActionViewItem","contextViewService","createActionViewItem","instaService","ActionBar","previousKeys","nextKeys","DOM.EventType","eventHandled","focusedItem","DOM.trackFocus","DOM.getActiveElement","firstEnabled","vi","elem","indexOrElement","types.isNumber","actionViewItemElement","viewItemOptions","DOM.EventHelper","selectFirst","forceLoop","forceFocus","preventScroll","actionViewItem","focusItem","types.isFunction","MENU_MNEMONIC_REGEX","MENU_ESCAPED_MNEMONIC_REGEX","HorizontalDirection","VerticalDirection","Menu","menuStyles","menuElement","parentData","SubmenuMenuActionViewItem","relatedTarget","lastFocusedItem","scrollElement","MenuSeparatorActionViewItem","getMenuWidgetCSS","fgColor","bgColor","borderRadius","shadow","menuActionViewItem","mnemonic","actionViewItems","menuItemOptions","BaseMenuActionViewItem","menuStyle","setSize","cleanLabel","cleanMnemonic","escMatch","replaceDoubleEscapes","strings.ltrim","strings.rtrim","isSelected","outline","outlineOffset","submenuOptions","force","windowDimensions","submenu","expandDirection","selectFirstItem","computedStyles","entryBox","entryBoxUpdated","viewBox","mnemonicInText","formatRule","isForShadowDom","scrollbarShadowColor","scrollbarSliderBackgroundColor","scrollbarSliderHoverBackgroundColor","scrollbarSliderActiveBackgroundColor","ContextMenuHandler","telemetryService","notificationService","keybindingService","shadowRootElement","menuDisposables","didCancel","logTelemetry","ContextMenuService","menuService","ContextMenuMenuDelegate","globalContextKeyService","menuId","menuActionOptions","EditorOpenSource","CommandOpener","EditorOpener","_editorService","OpenerService","editorService","commandService","dom.windowOpenNoOpener","opener","targetURI","validationTarget","validator","resolver","externalUri","preferredOpenerId","IEditorWorkerService","_displayStrings","fromSeverity","toSeverity","IMarkerData","makeKey","markerData","makeKeyOptionalMessage","useMessage","IMarkerService","editorLineHighlight","editorLineHighlightBorder","editorCursorForeground","editorCursorBackground","editorMultiCursorPrimaryForeground","editorMultiCursorPrimaryBackground","editorMultiCursorSecondaryForeground","editorMultiCursorSecondaryBackground","editorWhitespaces","editorLineNumbers","deprecatedEditorIndentGuides","deprecatedEditorActiveIndentGuides","editorIndentGuide1","editorIndentGuide2","editorIndentGuide3","editorIndentGuide4","editorIndentGuide5","editorIndentGuide6","editorActiveIndentGuide1","editorActiveIndentGuide2","editorActiveIndentGuide3","editorActiveIndentGuide4","editorActiveIndentGuide5","editorActiveIndentGuide6","deprecatedEditorActiveLineNumber","editorDimmedLineNumber","editorOverviewRulerBorder","editorOverviewRulerBackground","editorUnnecessaryCodeOpacity","rulerRangeDefault","overviewRulerError","overviewRulerWarning","overviewRulerInfo","editorBracketHighlightingForeground1","editorBracketHighlightingForeground2","editorBracketHighlightingForeground3","editorBracketHighlightingForeground4","editorBracketHighlightingForeground5","editorBracketHighlightingForeground6","editorBracketHighlightingUnexpectedBracketForeground","editorBracketPairGuideBackground1","editorBracketPairGuideBackground2","editorBracketPairGuideBackground3","editorBracketPairGuideBackground4","editorBracketPairGuideBackground5","editorBracketPairGuideBackground6","editorBracketPairGuideActiveBackground1","editorBracketPairGuideActiveBackground2","editorBracketPairGuideActiveBackground3","editorBracketPairGuideActiveBackground4","editorBracketPairGuideActiveBackground5","editorBracketPairGuideActiveBackground6","lineHighlight","imeBackground","diffSets","removed","added","setA","setB","MarkerDecorationsService","_markerService","decoration","markerDecorations","changedResources","MarkerDecorations","marker","markers","oldIds","newDecorations","removedMarker","rawMarker","maxColumn","minColumn","zIndex","inlineClassName","IMarkerDecorationsService","CursorColumns","visibleColumn","strings.isFullWidthCharacter","strings.GraphemeIterator","lineContentLength","beforeVisibleColumn","beforeColumn","afterVisibleColumn","afterColumn","beforeDelta","indentSize","_normalizeIndentationFromWhitespace","insertSpaces","spacesCnt","tabsCnt","normalizeIndentation","BracketInfo","nestingLevel","nestingLevelOfEqualBracketType","isInvalid","BracketPairInfo","openingBracketRange","closingBracketRange","bracketPairNode","BracketPairWithMinIndentationInfo","minVisibleColumnIndentation","lengthDiff","startLineCount","startColumnCount","endLineCount","endColumnCount","toLength","lengthZero","lengthIsZero","lengthToObj","lengthGetLineCount","lengthAdd","l1","l2","sumLengths","lengthFn","lengthEquals","length1","length2","lengthDiffNonNegative","lineCount1","lineCount2","colCount2","colCount1","lengthLessThan","lengthLessThanEqual","lengthGreaterThanEqual","positionToLength","lengthsToRange","lengthStart","lengthEnd","colCount","lengthOfString","TextEditInfo","newLength","BeforeEditPositionMapper","TextEditInfoCache","nextEdit","nextChangeOffset","oldOffsetObj","newOffset","offsetObj","nextEditEndOffsetInCur","nextEditEndOffsetInCurObj","nextEditEndOffsetBeforeInCurObj","lineDelta","previousColumnDelta","columnDelta","emptyArr","SmallImmutableSet","additionalItems","keyProvider","newItem","merged","identityKeyProvider","DenseKeyProvider","existing","BaseAstNode","PairAstNode","openingBracket","closingBracket","missingOpeningBracketIds","openBracketIds","textModel","ListAstNode","item3","missingBracketIds","Immutable23ListAstNode","TwoThreeListAstNode","ImmutableArrayListAstNode","_missingOpeningBracketIds","lastChild","mutable","firstChild","lastLength","unopenedBrackets","minIndentation","childOffset","_item1","_item2","_item3","ArrayListAstNode","_children","emptyArray","ImmutableLeafAstNode","TextAstNode","_openedBracketIds","firstNonWsColumn","BracketAstNode","bracketInfo","bracketIds","InvalidBracketAstNode","closingBrackets","openedBracketIds","bracketId","astNode","TextBufferTokenizer","bracketTokens","NonPeekableTextBufferTokenizer","startLineIdx","startLineCharOffset","lengthHeuristic","lineTokens","peekedBracketToken","tokenMetadata","isOther","containsBracketType","FastTokenizer","regExpStr","curLineCount","lastLineBreakOffset","lastTokenEndOffset","lastTokenEndLine","smallTextTokens0Line","smallTextTokens1Line","curOffset","BracketTokens","denseKeyProvider","getId","openingTextId","openingBracketIds","closingText","LanguageAgnosticBracketTokens","getLanguageConfiguration","singleLanguageBracketTokens","concat23Trees","readNode","concat23TreesOfSameHeight","createImmutableLists","node1","node2","nodeToAppend","curNode","parents","nodeToAppendOfCorrectHeight","nodeToPrependOfCorrectHeight","NodeReader","lastOrUndefined","curNodeOffset","nextChildIdx","getNextChildIdx","currentOffset","curIdx","parseDocument","oldNode","maxCacheableLength","cachedNode","nextToken","combineTextEditInfos","textEditInfoFirst","textEditInfoSecond","s0ToS1Map","toLengthMapping","s1ToS2Map","curItem","nextS0ToS1MapWithS1LengthOf","s1Length","remainingItem","LengthMapping","pushEdit","s0offset","s1ToS2","s0Length","s0EndOffset","s0startOffset","lengthBefore","lengthAfter","remainingLengthAfter","textEditInfos","lastOffset","textEditInfo","spaceLength","BracketPairsTree","wasUndefined","tokenChange","previousAst","previousAstClone","onlyColorizedBrackets","collectBrackets","includeMinIndentation","startLength","endLength","CollectBracketPairsContext","collectBracketPairs","getFirstBracketAfter","getFirstBracketBefore","nodeOffsetStart","nodeOffsetEnd","push","levelPerBracketType","parentPairIsIncomplete","whileLoop","colorize","levelPerBracket","shouldContinue","openingBracketEnd","BracketPairsTextModelPart","createDisposableRef","_bracket","_position","maxDuration","closingBracketInfo","bracketPair","bracketsSupport","stripBracketSearchCanceled","createTimeBasedContinueBracketSearchPredicate","continueSearchPredicate","modeBrackets","currentLanguageId","searchStartOffset","searchEndOffset","currentModeBrackets","foundBracket","foundBracketText","BracketSearchCanceled","prevTokenIndex","prevModeBrackets","isOpen","totalCallCount","searchPrevMatchingBracketInRange","hitText","prevSearchInToken","searchInToken","searchNextMatchingBracketInRange","bracketConfig","tokenLanguageId","savedCounts","counts","resetCounts","searchInRange","ColorizedBracketPairsDecorationProvider","ColorProvider","filterOutValidation","onlyMinimapDecorations","independentColorPoolPerBracketType","colors","colorProvider","escapeNewLine","TextChange","oldPosition","oldText","newPosition","buffer.writeUInt32BE","buffer.writeUInt16LE","buffer.readUInt32BE","compressConsecutiveTextChanges","prevEdits","currEdits","TextChangeCompressor","prevIndex","currIndex","prevEdit","currEdit","mergePrev","mergeCurr","prevDeltaOffset","currDeltaOffset","preText","postText","uriGetComparisonKey","SingleModelEditStackData","beforeCursorState","alternativeVersionId","getModelEOL","beforeVersionId","afterVersionId","beforeEOL","afterEOL","afterCursorState","textChanges","selections","necessarySize","buffer.writeUInt8","buffer.readUInt8","changeCount","SingleModelEditStackElement","MultiModelEditStackElement","editStackElement","editStackElements","isEditStackElement","EditStack","undoRedoService","newElement","editOperations","cursorStateComputer","inverseEditOperations","op","TextModelPart","computeIndentLevel","HorizontalGuidesState","IndentGuide","horizontalLine","forWrappedLinesAfterColumn","forWrappedLinesBeforeOrAtColumn","IndentGuideHorizontalLine","GuidesTextModelPart","minLineNumber","maxLineNumber","foldingRules","offSide","up_aboveContentLineIndex","up_aboveContentLineIndent","up_belowContentLineIndex","up_belowContentLineIndent","up_resolveIndents","down_aboveContentLineIndex","down_aboveContentLineIndent","down_belowContentLineIndex","down_belowContentLineIndent","down_resolveIndents","goUp","goDown","initialIndent","distance","upLineNumber","downLineNumber","upLineIndentLevel","currentIndent","downLineIndentLevel","activePosition","includeSingleLinePairs","activeBracketPairRange","bracketsContainingActivePosition","bp","BracketPairGuidesClassNames","isActive","horizontalGuides","endVisibleColumn","startVisibleColumn","guideVisibleColumn","renderHorizontalEndLineAtTheBottom","visibleGuideStartLineNumber","visibleGuideEndLineNumber","guides","aboveContentLineIndex","aboveContentLineIndent","belowContentLineIndex","belowContentLineIndent","resultIndex","SpacesDiffResult","spacesDiff","aLength","bLength","aCharCode","bCharCode","aSpacesCnt","aTabsCount","bSpacesCnt","bTabsCount","tabsDiff","guessIndentation","defaultTabSize","defaultInsertSpaces","linesCount","linesIndentedWithTabsCount","linesIndentedWithSpacesCount","previousLineIndentation","ALLOWED_TAB_SIZE_GUESSES","MAX_ALLOWED_TAB_SIZE_GUESS","spacesDiffCount","currentLineLength","currentLineText","useCurrentLineText","currentLineHasContent","currentLineIndentation","currentLineSpacesCount","currentLineTabsCount","currentSpacesDiff","tabSizeScore","possibleTabSize","possibleTabSizeScore","getNodeColor","setNodeColor","getNodeIsVisited","setNodeIsVisited","getNodeIsForValidation","setNodeIsForValidation","getNodeIsInGlyphMargin","setNodeIsInGlyphMargin","getNodeStickiness","_setNodeStickiness","stickiness","getCollapseOnReplaceEdit","setCollapseOnReplaceEdit","IntervalNode","absoluteStart","absoluteEnd","cachedVersionId","SENTINEL","IntervalTree","filterOwnerId","onlyMarginDecorations","intervalSearch","search","collectNodesFromOwner","collectNodesPostOrder","rbTreeInsert","rbTreeDelete","initialNode","nodeStart","nodeEnd","nodesOfInterest","searchForEditing","noOverlapReplace","nodeAcceptEdit","normalizeDelta","T","recomputeMaxEnd","adjustMarkerBeforeColumn","markerOffset","markerStickToPreviousCharacter","checkOffset","moveSemantics","nodeStickiness","startStickToPreviousCharacter","endStickToPreviousCharacter","deletingCnt","insertingCnt","commonLength","startDone","endDone","nodeMaxEnd","editDelta","include","intervalStart","intervalEnd","treeInsert","recomputeMaxEndWalkToRoot","rightRotate","z","zAbsoluteStart","zAbsoluteEnd","intervalCompare","leftest","resetSentinel","yWasRed","computeMaxEnd","maxEnd","leftMaxEnd","rightMaxEnd","TreeNode","piece","righttest","calculateSize","calculateLF","tree","rbDelete","recomputeTreeMetadata","newSizeLeft","newLFLeft","lf_delta","updateTreeMetadata","fixInsert","lineFeedCntDelta","AverageBufferSize","createUintArray","LineStarts","lineStarts","cr","lf","crlf","createLineStartsFast","readonly","createLineStarts","Piece","bufferIndex","lineFeedCnt","StringBuffer","PieceTreeSnapshot","BOM","PieceTreeSearchCache","nodePos","nodePosition","hasInvalidVal","PieceTreeBase","chunks","eolNormalized","lastNode","averageBufferSize","tempChunk","tempChunkLen","newEOL","leftLen","accumualtedValInCurrentIndex","lfCnt","originalOffset","currentLine","danglingCR","pieceLength","pieceStartLine","pieceEndLine","pieceStartOffset","matchingNode","targetOffset","startCursor","endCursor","startOffsetInBuffer","searchText","offsetInBuffer","retStartColumn","retEndColumn","lineBreakCnt","nextLineStartOffset","nodeStartOffset","insertPosInBuffer","nodesToDel","newRightPiece","newStart","previousPos","newPieces","tmpNode","cnt","startNode","endNode","startSplitPosInBuffer","endSplitPosInBuffer","secondNode","nPiece","previousCharOffset","cursor","nodes","splitText","endPos","newPiece","prevAccumulatedValue","accumulatedValue","lineCnt","realLineCnt","expectedLineStartIndex","originalLFCnt","newEnd","newEndOffset","newLineFeedCnt","size_delta","originalStartOffset","newStartOffset","originalStartPos","originalEndPos","oldLength","oldLFCnt","hitCRLF","prevStartOffset","oldLineFeedCnt","prevAccumualtedValue","nextNode","prevNewLength","prevNewLFCnt","leftRet","prevNode","PieceTreeTextBuffer","preserveBOM","eolOffsetCompensation","desiredEOL","actualEOL","fromLineNumber","toLineNumber","fromOffset","toOffset","rawOperations","recordTrimAutoWhitespace","computeUndoEdits","mightContainRTL","mightContainUnusualLineTerminators","mightContainNonBasicASCII","canReduceOperations","operations","validatedRange","textMightContainNonBasicASCII","strings.containsRTL","strings.containsUnusualLineTerminators","validText","lastLineLength","strEOL","bufferEOL","hasTouchingRanges","rangeEnd","nextRangeStart","reverseRanges","newTrimAutoWhitespaceCandidates","reverseRange","currentLineContent","reverseOperations","reverseRangeDeltaOffset","bufferText","reverseRangeOffset","contentChanges","prevContent","firstEditRange","lastEditRange","entireEditRange","lastEndLineNumber","lastEndColumn","operation","contentChangeRange","prevOpEndLineNumber","prevOpEndColumn","prevOp","resultRange","PieceTreeTextBufferFactory","_chunks","_bom","_cr","_lf","_crlf","_containsRTL","_containsUnusualLineTerminators","_isBasicASCII","_normalizeEOL","defaultEOL","totalEOLCount","totalCRCount","newLineStart","textBuffer","PieceTreeTextBufferBuilder","chunk","strings.startsWithUTF8BOM","strings.UTF8_BOM_CHARACTER","allowEmptyStrings","normalizeEOL","lastChunk","newLineStarts","FixedArray","arrayFill","deleteIndex","ContiguousMultilineTokens","ContiguousMultilineTokensBuilder","TokenizerWithStateStore","TrackingTokenizationStateStore","TokenizerWithStateStoreAndTextModel","_textModel","_languageIdCodec","builder","lineToTokenize","safeTokenize","lineStartState","curLineContent","newLineContent","firstInvalidLineNumber","nonWhitespaceColumn","likelyRelevantLines","initialState","newNonWhitespaceIndex","TokenizationStateStore","RangePriorityQueueImpl","newLineCount","startState","idxFirstMightBeIntersecting","idxFirstIsAfter","endEx","DefaultBackgroundTokenizer","_tokenizerWithStateStore","_backgroundTokenStore","deadline","endTime","execute","firstInvalidLine","AttachedViews","AttachedViewImpl","handleStateChange","visibleLines","stabilized","visibleLineRanges","AttachedViewHandler","_refreshTokens","AbstractTokens","getLanguageId","TreeSitterTokens","_treeSitterService","newLanguage","rawTokens","fireTokenChangeEvent","ITreeSitterParserService","EMPTY_LINE_TOKENS","ContiguousTokensEditing","toChIndex","fromChIndex","toUint32Array","tokensCount","fromTokenIndex","fromTokenStartOffset","fromTokenEndOffset","lastEnd","_otherTokens","myTokens","otherTokens","otherTokensCount","chIndex","ContiguousTokensStore","topLevelLanguageId","rawLineTokens","getDefaultMetadata","_tokens","hasDifferentLanguageId","arrays.arrayInsert","checkEquality","oldTokens","firstLineIndex","lastLineIndex","lastLineTokens","minChangedLineNumber","maxChangedLineNumber","hasChange","SparseTokensStore","isComplete","_range","_firstRange","_lastRange","insertPosition","aTokens","pieceIndex","bTokens","aIndex","lastEndOffset","emitToken","bIndex","bStartCharacter","bEndCharacter","bMetadata","bMask","aMask","aMergeIndex","firstCharCode","TokenizationTextModelPart_1","TokenizationTextModelPart","_bracketPairsTextModelPart","_attachedViews","GrammarTokens","useTreeSitter","needsReset","syntacticTokens","changedRange","rbStartOffset","rbEndOffset","rightBiasedWord","lbStartOffset","lbEndOffset","leftBiasedWord","wordAtPosition","attachedViews","initializeTokenization","firstInvalidEndStateLineNumber","heuristicTokens","changedTokens","backgroundResult","validatedPosition","ModelRawFlush","LineInjectedText","injectedTexts","lastOriginalOffset","injectedText","decorations","ModelRawLineChanged","ModelRawLinesDeleted","ModelRawLinesInserted","ModelRawEOLChanged","ModelRawContentChangedEvent","isUndoing","isRedoing","ModelInjectedTextChangedEvent","InternalModelContentChangeEvent","rawContentChangedEvent","contentChangedEvent","isFlush","isEolChange","TextModel_1","createTextBufferFactory","createTextBufferFactoryFromSnapshot","createTextBuffer","model.isITextSnapshot","MODEL_ID","LONG_LINE_BOUNDARY","TextModelSnapshot","resultCnt","resultLength","invalidFunc","TextModel","guessedIndentation","model.TextModelResolvedOptions","languageIdOrSelection","creationOptions","associatedResource","_undoRedoService","instantiationService","DidChangeDecorationsEmitter","affectedInjectedTextLines","DidChangeContentEmitter","bufferLineCount","bufferTextLength","strings.singleLetterHash","DecorationsTrees","emptyDisposedTextBuffer","rawChange","rangeOffset","rangeLength","textBufferDisposable","oldFullModelRange","oldModelValueLength","allDecorations","smallLineCharCount","longLineCharCount","_newOpts","trimAutoWhitespace","bracketPairColorizationOptions","strings.UNUSUAL_LINE_TERMINATORS","rawPosition","rawOffset","newAlternativeVersionId","newInitialUndoRedoSnapshot","fullModelRange","fullModelValue","rawRange","initialStartLineNumber","initialStartColumn","initialEndLineNumber","initialEndColumn","validationType","_lineNumber","_column","charCodeBeforeStart","charCodeBeforeEnd","startInsideSurrogatePair","endInsideSurrogatePair","rawSearchScope","searchRanges","searchScope","uniqueSearchRanges","matchMapper","rawSearchStart","rawOperation","model.ValidAnnotatedEditOperation","incomingEdits","editsAreNearCursors","foundEditNearSel","selIsAbove","selIsBelow","trimLineNumber","maxLineColumn","allowTrimLine","editText","trimRange","resultingAlternativeVersionId","resultingSelection","rangeStart","oldLineCount","rawContentChanges","deletingLinesCnt","insertingLinesCnt","editingLinesCnt","changeLineCountDelta","currentEditStartLineNumber","firstEditLineNumber","lastInsertedLineNumber","decorationsWithInjectedTextInEditedRange","injectedTextInEditedRange","injectedTextInEditedRangeQueue","editLineNumber","currentEditLineNumber","decorationsInCurrentLine","spliceStartLineNumber","spliceLineNumber","newLines","lineChangeEvents","changeAccessor","_normalizeOptions","oldDecorations","newStickiness","TRACKED_RANGE_OPTIONS","decorationId","_startLineNumber","_endLineNumber","filterRange","oldRange","nodeWasInOverviewRuler","nodeIsInOverviewRuler","nodeRange","movedInOverviewRuler","changedWhetherInjectedText","isOptionsInjectedText","isNodeInjectedText","oldDecorationsIds","suppressEvents","oldDecorationsLen","oldDecorationIndex","newDecorationsLen","newDecorationIndex","internalDecorationId","newDecoration","affinity","indentOfLine","isNodeInOverviewRuler","r0","overviewRulerOnly","cleanClassName","DecorationOptions","ModelDecorationOverviewRulerOptions","model.OverviewRulerLane","ModelDecorationGlyphMarginOptions","model.GlyphMarginLane","ModelDecorationMinimapOptions","ModelDecorationInjectedTextOptions","ModelDecorationOptions","strings.htmlAttributeEncodeValue","handleBeforeFire","ModelService_1","ModelData$1","onWillDispose","onDidChangeLanguage","DEFAULT_EOL","DisposedModelInfo","initialUndoRedoSnapshot","time","sharesUndoRedoStack","heapSize","sha1","ModelService","_resourcePropertiesService","isForSimpleWidget","parsedTabSize","parsedIndentSize","newDefaultEOL","detectIndentation","largeFileOptimizations","platform.OS","oldOptionsByLanguageAndResource","modelId","modelData","oldOptions","currentOptions","disposedModelData","maxModelsHeapSize","disposedModels","disposedModel","sha1Computer","sha1IsEqual","ModelData","languageSelection","maintainUndoRedoStack","maxMemory","oldLanguageId","newLanguageId","DefaultModelSHA1Computer","shaComputer","DefaultQuickAccessFilterValue","QuickAccessRegistry","providerA","providerB","NO_KEY_MODS","QuickInputHideReason","ItemActivation","QuickPickFocus","QuickInputButtonLocation","IQuickInputService","QuickAccessController","quickInputService","pick","visibleQuickAccess","visibleDescriptor","newValueCandidateWithoutPrefix","defaultFilterValue","visibleSelection","visibleValue","picker","pickPromise","cts","valueSelection","providerForValue","enabledProviderPrefixes","providerDescriptor","Toggle","classes","newIsChecked","LinkedText","LINK_REGEX","parseLinkedText","iconPathToClass","iconClassGenerator","getIconClass","iconPath","iconClass","dom.createCSSRule","dom.asCSSUrl","quickInputButtonToAction","button","cssClasses","renderQuickInputDescription","dom.reset","parsed","tabIndex","handleOpen","dom.isEventLike","onKeydown","onSpaceOrEnter","onTap","inQuickInputContextKeyValue","InQuickInputContextKey","inQuickInputContext","quickInputTypeContextKeyValue","QuickInputTypeContextKey","endOfQuickInputBoxContextKeyValue","EndOfQuickInputBoxContextKey","endOfQuickInputBoxContext","backButton","QuickInput","ui","totalSteps","contextKey","busy","ignoreFocusOut","shouldUpdate","buttons","toggles","validationMessage","leftButtons","rightButtons","inlineButtons","concreteToggles","QuickPick","quickNavigate","skipUpdate","placeholder","canSelectMany","canAcceptInBackground","matchOnDescription","matchOnDetail","matchOnLabel","matchOnLabelMode","sortByLabel","keepScrollPosition","itemActivation","activeItems","selectedItems","showCustomButton","showOkButton","hideInput","focusedItems","dom.isMouseEvent","checkedItems","inBackground","veto","scrollTopBefore","hasDescription","visibilities","password","QuickInputHoverDelegate","showHoverHint","labelElement","sanitized","CountBadge","titleFormat","CSS_DONE","CSS_ACTIVE","CSS_INFINITE","CSS_INFINITE_LONG_RUNNING","CSS_DISCRETE","ProgressBar","delayed","NLS_CASE_SENSITIVE_TOGGLE_LABEL","NLS_WHOLE_WORD_TOGGLE_LABEL","NLS_REGEX_TOGGLE_LABEL","CaseSensitiveToggle","WholeWordsToggle","RegexToggle","ArrayNavigator","HistoryNavigator","history","currentElement","InputBox","wrapper","onSelectionChange","onAnchoredSelectionChange","placeHolder","dom.getTotalHeight","dom.isActiveElement","selectionStart","selectionEnd","paddingRight","errorMsg","div","renderOptions","spanElement","alertText","aria.alert","previousHeight","inputElement","HistoryInputBox","NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX_NO_PARENS","NLS_PLACEHOLDER_HISTORY_HINT_SUFFIX_IN_PARENS","addSuffix","suffixedPlaceholder","mutationList","mutation","resetPlaceholder","historyHint","revertedPlaceholder","always","aria.status","currentValue","NLS_DEFAULT_LABEL","FindInput","appendCaseSensitiveLabel","appendWholeWordsLabel","appendRegexLabel","flexibleHeight","flexibleWidth","flexibleMaxHeight","viaKeyboard","toggle","currentToggle","controlsHidden","QuickInputBox","inputBoxStyles","toggleStyles","PagedRenderer","modelProvider","PagedAccessibilityProvider","fromPagedListOptions","PagedList","pagedRenderers","DEBUG","OrthogonalEdge","globalSize","onDidChangeGlobalSize","globalHoverDelay","onDidChangeHoverDelay","MouseEventFactory","GestureEventFactory","OrthogonalPointerEventFactory","PointerEventsDisabledCssClass","Sash","sash","onChange","layoutProvider","onMouseDown","onMouseDoubleClick","onMouseEnter","onMouseLeave","onTouchStart","doubleTapTimeout","pointerEventFactory","isMultisashResize","orthogonalSash","iframes","iframe","startX","startY","startEvent","updateStyle","onPointerMove","onPointerUp","fromLinkedSash","verticalProvider","horizontalProvider","defaultStyles","ViewItem","layoutContext","VerticalViewItem","HorizontalViewItem","State","Sizing","Split","Auto","Invisible","cachedVisibleSize","SplitView","sashItem","startSnappingEnabled","endSnappingEnabled","onDidScrollViewContainer","viewDescriptor","sizing","skipLayout","previousSize","total","proportion","lowPriorityIndexes","highPriorityIndexes","resetSashDragState","sizes","minDelta","maxDelta","viewItem","snapBefore","snapAfter","upIndexes","downIndexes","minDeltaUp","maxDeltaUp","maxDeltaDown","minDeltaDown","snapBeforeIndex","snapAfterIndex","halfSize","newDelta","isLastSash","newSizes","viewItemIndex","newMinDelta","newMaxDelta","resizeIndex","flexibleViewItems","flexibleSize","onChangeDisposable","containerDisposable","sashEventMapper","onStartDisposable","onEndDisposable","onDidResetDisposable","contentSize","overloadMinDelta","overloadMaxDelta","upItems","upSizes","downItems","downSizes","snapped","snapView","deltaUp","viewDelta","deltaDown","lowPriorityIndex","emptyDelta","collapsesDown","expandsDown","reverseViews","collapsesUp","expandsUp","snappedBefore","snappedAfter","TableListRenderer","getColumnSize","rendererMap","rowContainer","cellContainers","cellTemplateData","cellContainer","asListVirtualDelegate","ColumnHeader","Table","totalWeight","ObjectTreeElementCollapseState","TreeMouseEventTarget","TreeError","WeakMapper","isFilterResult","getVisibleState","isCollapsibleStateUpdate","IndexTreeModel","rootElement","toInsert","toInsertIterable","recurseLevels","locationPrefix","recurseSplice","fromOriginal","fromModified","lastStartO","lastStartM","onDidCreateNode","onDidDeleteNode","diffIdentityProvider","listIndex","revealed","treeListElementsToInsert","nodesToInsertIterator","visibleChildStartIndex","nodesToInsert","insertedVisibleChildrenCount","renderNodeCount","deletedNodes","deletedVisibleChildrenCount","visibleDeleteCount","visit","collapsible","collapsed","onlyVisibleChildIndex","previousRenderNodeCount","deep","treeElement","parentVisibility","treeListElements","childElements","childRevealed","visibleChildrenCount","resultStartLength","hasVisibleDescendants","visibleChildIndex","indexTreeNode","TreeElementsDragAndDropData","asTreeDragAndDropData","TreeNodeListDragAndDrop","targetNode","didChangeAutoExpandNode","ref","accept","effect","parentRef","parentIndex","asListOptions","ComposedTreeDelegate","RenderIndentGuides","EventCollection","onDidChange","TreeRenderer","onDidChangeCollapseState","activeNodes","renderedIndentGuides","shouldRenderIndentGuides","twistie","twistieRendered","guide","FindFilter","_filter","TreeFindMatchType","TreeFindMode","FindController","mode","matchType","noMatches","stickyScrollNodeStateEquals","stickyScrollNodeEquals","StickyScrollState","stickyNodes","lastStickyNode","secondLastStickyNode","previousState","previousLastStickyNode","DefaultStickyScrollDelegate","stickyScrollMaxItemCount","maxWidgetHeight","stickyNode","StickyScrollController","treeDelegate","stickyScrollOptions","StickyScrollWidget","firstVisibleNode","stickyState","firstVisibleNodeUnderWidget","stickyNodesHeight","nextStickyNode","contrainedStickyNodes","previousStickyNode","stickyPosition","currentStickyNodesHeight","previousAncestor","currentAncestor","parentOfcurrentAncestor","lastDescendantIndex","stickyRowPositionTop","stickyNodeHeight","lastChildRelativeTop","nodeHeight","nextNodeRelativeTop","lastChildNode","lastChildHeight","bottomOfLastChild","maximumStickyWidgetHeight","constrainedStickyNodes","lastConstrainedStickyNode","nodeLocation","renderCount","ancestors","widgetHeight","validatedOptions","treeRenderers","StickyScrollFocus","wasVisible","isVisible","stickyIndex","stickyNodesTotal","stickyElement","accessibilityDisposable","nodeTemplateId","nodeCopy","nodeIndexToFocus","previousIndex","newFocusedIndex","elementScrollTop","elementTargetViewTop","newFocusIndex","oldIndex","focused","asTreeMouseEvent","asTreeContextMenuEvent","isStickyScroll","dfs","getFirstViewElementWithTrait","insertedNodes","deletedNodesIdSet","deletedNodesVisitor","insertedNodesMap","insertedNodesVisitor","insertedNode","TreeNodeListMouseController","stickyScrollProvider","onTwistie","isStickyElement","expandOnlyOnTwistieClick","stickyScrollController","TreeNodeList","focusTrait","selectionTrait","anchorTrait","additionalFocus","additionalSelection","fromAPI","AbstractTree","findMode","findFuzzy","_user","onDidChangeCollapseStateRelay","onDidChangeActiveNodes","onDidModelSplice","activeNodesEmitter","activeNodesDebounce","stickyScrollBackground","parentListIndex","focusedIndex","firstChildIndex","ObjectTreeModel","insertedElements","insertedElementIds","tnode","noCompress","incompressible","compress","childrenIterator","_decompress","decompress","wrapIdentityProvider","CompressedObjectTreeModel","compressedChildren","compressedNode","compressedParentNode","decompressedElement","splicedElement","recompressedElement","elementComparator","parentChildren","rootChildren","decompressedRootChildren","recompressedRootChildren","DefaultElementMapper","CompressedTreeNodeWrapper","unwrapper","mapList","nodeMapper","mapOptions","compressedNodeUnwrapper","otherNode","CompressibleObjectTreeModel","ObjectTree","CompressibleRenderer","_compressedTreeNodeProvider","stickyScrollDelegate","compressedTreeNode","twistieElement","CompressibleStickyScrollDelegate","stickyNodeBottom","uncompressedStickyNodes","overflowingStickyNodes","compressedStickyNode","compressionModel","compressedElement","stickyTreeNode","asObjectTreeOptions","compressedTreeNodeProvider","CompressibleObjectTree","compressibleRenderers","createAsyncDataTreeNode","descendant","AsyncDataTreeNodeWrapper","AsyncDataTreeRenderer","onDidChangeTwistieState","asTreeEvent","AsyncDataTreeElementsDragAndDropData","asAsyncDataTreeDragAndDropData","AsyncDataTreeNodeListDragAndDrop","AsyncDataTree","dataSource","objectTreeDelegate","objectTreeRenderers","objectTreeOptions","viewState","viewStateContext","rerender","dataNode","refreshPromise","refreshNode","done","childrenToRefresh","childrenPromise","slowTimeout","childrenElementsIterable","childrenElements","nodesToForget","childrenTreeNodesById","hasChildren","asyncDataTreeNode","childAsyncDataTreeNode","CompressibleAsyncDataTreeNodeWrapper","CompressibleAsyncDataTreeRenderer","compressibleNodeMapperProvider","asCompressibleObjectTreeOptions","els","CompressibleAsyncDataTree","compressionDelegate","getUncompressedIds","oldSelection","oldFocus","didChangeSelection","didChangeFocus","getVisibility","filterResult","DataTree","InputFocusedContextKey","InputFocusedContext","IListService","ListService","widget","extraContextKeys","registeredList","RawWorkbenchListScrollAtBoundaryContextKey","RawWorkbenchListFocusContextKey","WorkbenchTreeStickyScrollFocused","WorkbenchListSupportsMultiSelectContextKey","WorkbenchListHasSelectionOrFocus","WorkbenchListDoubleSelection","WorkbenchListMultiSelection","WorkbenchListSelectionNavigation","WorkbenchListSupportsFind","WorkbenchTreeElementCanCollapse","WorkbenchTreeElementHasParent","WorkbenchTreeElementCanExpand","WorkbenchTreeElementHasChild","WorkbenchTreeFindOpen","WorkbenchListTypeNavigationModeKey","WorkbenchListAutomaticKeyboardNavigationLegacyKey","createScopedContextKeyService","createScrollObserver","listScrollAt","atTop","atBottom","multiSelectModifierSettingKey","openModeSettingKey","horizontalScrollingKey","defaultFindModeSettingKey","typeNavigationModeSettingKey","keyboardNavigationSettingKey","scrollByPageKey","defaultFindMatchTypeSettingKey","treeIndentKey","treeRenderIndentGuidesKey","listSmoothScrolling","mouseWheelScrollSensitivityKey","fastScrollSensitivityKey","treeExpandMode","treeStickyScroll","treeStickyScrollMaxElements","useAltAsMultipleSelectionModifier","MultipleSelectionController","toWorkbenchListOptions","createKeyboardNavigationEventFilter","WorkbenchList","listService","horizontalScrolling","workbenchListOptions","workbenchListOptionsDisposable","scrollByPage","smoothScrolling","mouseWheelScrollSensitivity","fastScrollSensitivity","ListResourceNavigator","WorkbenchPagedList","WorkbenchTable","TableResourceNavigator","ResourceNavigator","selectionKeyboardEvent","pinned","isMiddleClick","TreeResourceNavigator","inMultiChord","WorkbenchObjectTree","treeOptions","getTypeNavigationMode","workbenchTreeDataPreamble","WorkbenchTreeInternals","WorkbenchCompressibleObjectTree","WorkbenchDataTree","WorkbenchAsyncDataTree","WorkbenchCompressibleAsyncDataTree","getDefaultTreeFindMode","deprecatedValue","getDefaultTreeFindMatchType","modeString","configString","paddingBottom","renderIndentGuides","updateCollapseContextKeys","interestingContextKeys","defaultFindMode","typeNavigationMode","defaultFindMatchType","enableStickyScroll","HighlightedLabel","highlights","escapeNewLines","highlight","substring","FastLabelNode","IconLabel","LabelWithHighlights","Label","labelClasses","containerClasses","existingIconNode","iconNode","descriptionNode","suffixNode","htmlElement","previousCustomHover","hoverDisposable","suffixContainer","dom.after","descriptionContainer","splitMatches","labelStart","labelRange","supportIcons","KeybindingLabel","labelForeground","modifierLabels","extraClass","keyElement","intlFileNameCollatorBaseNumeric","collator","compareFileNames","caseSensitive","compareAnything","lookFor","elementAName","elementBName","prefixCompare","compareByPrefix","elementASuffixMatch","elementBSuffixMatch","elementAPrefixMatch","elementBPrefixMatch","QuickPickItemElementRenderer_1","BaseQuickPickItemElement","hasCheckbox","mainItem","saneLabel","saneSortLabel","saneAriaLabel","QuickPickItemElement","fireButtonTriggered","_onChecked","_separator","QuickPickSeparatorFocusReason","QuickPickSeparatorElement","fireSeparatorButtonTriggered","QuickInputItemDelegate","QuickPickItemElementRenderer","QuickPickSeparatorElementRenderer","QuickInputAccessibilityProvider","BaseQuickInputListRenderer","row1","row2","keybindingContainer","detailContainer","_index","labelHighlights","descriptionHighlights","detailHighlights","iconUrl","descriptionTitle","frequency","QuickInputTree","linkOpenerDelegate","accessibilityService","otherElement","normalizedSearchValue","compareEntries","visibleCount","dom.isHTMLAnchorElement","elementsWithoutSeparators","inputElements","currentSeparatorElement","qpi","nextSibling","what","isSecondItem","prevFocus","currentFocus","foundSeparatorAsItem","focusElement","foundSeparator","queryWithWhitespace","currentSeparator","matchesContiguousIconAware","allChecked","treeElements","whenNoneVisible","checkedCount","matchesContiguous","elementA","elementB","labelHighlightsA","labelHighlightsB","defaultCommandAndKeybindingRule","registerQuickPickCommandAndKeybindingRule","getSecondary","primary","secondary","focusHandler","focusOnQuickNatigate","currentQuickPick","nextSeparatorFallbackDesc","prevSeparatorFallbackDesc","QuickInputController_1","QuickInputController","dom.onDidRegisterWindow","dom.onWillUnregisterWindow","showInActiveContainer","styleSheet","titleBar","leftActionBar","rightActionBar","headerContainer","checkAll","inputBox","description2","inputContainer","filterContainer","visibleCountContainer","countContainer","inlineActionBar","okContainer","Button","customButtonContainer","customButton","progressBar","description1","listId","focusTracker","dom.trackFocus","selectors","stops","picks","doResolve","activeItem","keepScrollPositionBefore","_activeItem","oldController","backKeybindingLabel","focusChanged","dom.isAncestorOfActiveElement","dimension","titleBarOffset","newStyles","QuickInputService","defaultOptions","EditorScopedQuickInputService","contribution","QuickInputEditorContribution","StandaloneQuickInputService","newQuickInputService","QuickInputEditorWidget","ParsedTokenThemeRule","parseTokenTheme","resolveParsedTokenThemeRules","parsedThemeRules","customTokenColors","strcmp","defaultFontStyle","defaultForeground","defaultBackground","incomingDefaults","ColorMap","foregroundColorId","backgroundColorId","ThemeTrieElementRule","ThemeTrieElement","TokenTheme","colorRegExp","toStandardTokenType","STANDARD_TOKEN_TYPE_REGEXP","mainRule","dotIndex","generateTokensCSSForColorMap","vs","vs_dark","hc_black","hc_light","IconContribution","getDefinition","definition","iconRegistry","IconFontDefinition","toJSONObject","iconFont","fromJSONObject","json","stringOrUndef","IconRegistry","enumIndex","iconContribution","reference","contributions","registerIcon","getIconRegistry","initialize","codiconFontCharacters","iconsSchemaId","getIconsStyleSheet","onDidChangeEmmiter","productIconTheme","UnthemedProductIconTheme","usedFontIds","rootAttribs","fontContribution","fontFamilyVar","contentVar","VS_LIGHT_THEME_NAME","VS_DARK_THEME_NAME","HC_BLACK_THEME_NAME","HC_LIGHT_THEME_NAME","ThemingExtensions","StandaloneTheme","standaloneThemeData","isBuiltinTheme","baseData","getBuiltinRules","colorId","useDefault","encodedTokensColors","modelLanguage","themeName","builtinTheme","newBuiltInTheme","themeData","StandaloneThemeService","iconsStyleSheet","dom.isInShadowDOM","colorMapOverride","desiredTheme","wantsHighContrast","newThemeName","autoDetectHighContrast","cssRules","hasRule","ruleCollector","colorVariables","IStandaloneThemeService","AccessibilityService","updateContextKey","reduceMotionMatcher","updateRootClasses","linkUnderlinesEnabled","updateLinkUnderlineClasses","underlineLinks","PersistedMenuHideState_1","MenuInfo_1","MenuService","storageService","PersistedMenuHideState","MenuImpl","hidden","hiddenByDefault","menus","MenuInfoSnapshot","_id","_collectContextKeysForSubmenus","menuItems","groupName","toggledExpression","exp","MenuInfo","_hiddenStates","activeActions","isMenuItem","menuHide","createMenuHide","createConfigureKeybindingAction","aGroup","bGroup","aPrio","bPrio","aStr","bStr","hiddenStates","rebuildMenuSoon","lazyListener","isStructuralChange","isEnablementChange","isToggleChange","startLazyListener","whenValue","BrowserClipboardService_1","vscodeResourcesMime","BrowserClipboardService","currentWritePromise","activeDocument","textArea","resourcesStateHash","clipboardText","IClipboardService","KEYBINDING_CONTEXT_ATTR","Context","NullContext","ConfigAwareContextValuesContainer","allKeys","ArrayContextKeyChangeEvent","changedKeys","configKey","cachedItems","configValue","ContextKey","service","SimpleContextKeyChangeEvent","CompositeContextKeyChangeEvent","allEventKeysInContext","AbstractContextKeyService","myContextId","ScopedContextKeyService","myContext","findContextAttr","ContextKeyService","contextId","parentContextId","extraInfo","thisContextValues","setContext","stringifyURIs","Node$2","Graph$1","_hashFn","fromNode","toNode","outgoing","ServiceCollection","instanceOrDescriptor","_enableAllTracing","CyclicDependencyError","graph","InstantiationService","_services","_parent","_enableTracing","Graph","services","_trace","Trace","_done","serviceDependencies","serviceArgs","dependency","firstServiceArgPos","instanceOrDesc","cycleCount","roots","disposeBucket","earlyListeners","idle","printWarning","dur","causedCreation","printChild","trace","nested","unsupportedSchemas","DoubleResourceMap","ownerMap","resourceMap","removedA","removedB","MarkerStats","oldStats","newStats","MarkerService","relatedInformation","tags","severities","take","DefaultConfiguration","configurationDefaultsOverrides","defaultOverrideValue","IAccessibilitySignalService","Sound","fileName","SoundSource","randomOneOf","AccessibilitySignal","sound","legacySoundSettingsKey","settingsKey","legacyAnnouncementSettingsKey","announcementMessage","soundSource","LogService","primaryLogger","otherLoggers","editorFeatures","getEditorFeatures","StandaloneTreeSitterParserService","SimpleModel","StandaloneTextModelService","StandaloneEditorProgressService","StandaloneProgressService","onDidCancel","StandaloneEnvironmentService","StandaloneDialogService","confirmation","messageText","prompt","promptButtons","StandaloneNotificationService","notification","choices","StandaloneCommandService","StandaloneKeybindingService","addContainer","keyEvent","DomNodeListeners","removeContainer","domNodeListeners","addCodeEditor","removeCodeEditor","addDiffEditor","diffEditor","removeDiffEditor","resolvedKeybindings","isConfigurationOverrides","StandaloneConfigurationService","configurationChangeEvent","arg3","arg4","StandaloneResourceConfigurationService","Pos","StandaloneResourcePropertiesService","StandaloneTelemetryService","StandaloneWorkspaceContextService","updateConfigurationService","isDiffEditor","toUpdate","StandaloneBulkEditService","_modelService","editsIn","textEdits","totalEdits","totalFiles","strings.format","StandaloneUriLabelService","StandaloneContextViewService","StandaloneWorkspaceTrustManagementService","StandaloneLanguageService","StandaloneLogService","StandaloneContextMenuService","standaloneEditorWorkerDescriptor","StandaloneEditorWorkerService","StandaloneAccessbilitySignalService","cue","StandaloneServices","serviceCollection","get","initialized","onDidInitialize","serviceIdentifier","withServices","MonacoWebWorkerImpl","foreignMethods","proxyMethodRequest","foreignProxy","foreignMethod","EditorType","LineDecoration","dec","lineDecorations","minLineColumn","ORDER","typeCmp","DecorationSegment","Stack","maxStopOffset","nextStartOffset","stopOffset","LineDecorationsNormalizer","currentStartOffset","currentEndOffset","LinePart","otherLineRange","RenderLineInput","useMonospaceOptimizations","continuesWithWrappedLine","fauxIndentLength","spaceWidth","middotWidth","stopRenderingLineAfter","renderWhitespace","renderControlCharacters","fontLigatures","selectionsOnLine","wsmiddotDiff","middotDiff","otherSelections","DomPosition","partIndex","CharacterMapping","partData","partCount","horizontalOffset","charOffset","partLength","searchEntry","midEntry","minEntry","maxEntry","minPartIndex","minCharIndex","maxPartIndex","maxCharIndex","minEntryDistance","maxEntryDistance","RenderLineOutput","characterMapping","containsForeignElements","renderViewLine","sb","beforeCount","afterCount","lineDecoration","_renderLine","resolveRenderLineInput","RenderLineOutput2","renderViewLine2","ResolvedRenderLineInput","fontIsMonospace","isOverflowing","overflowingCharCount","renderSpaceCharCode","transformAndRemoveOverflowing","extractControlCharacters","_applyRenderWhitespace","_applyInlineDecorations","splitLargeTokens","lineContainsRTL","tokensLen","tokenContainsRTL","onlyAtSpaces","lastTokenEndIndex","lastSpaceOffset","currTokenStart","piecesCount","pieceEndIndex","isControlCharacter","lastLinePart","onlyBoundary","onlyTrailing","generateLinePartForEachWhitespace","tokensLength","lineIsEmptyOrWhitespace","wasInWhitespace","currentSelectionIndex","currentSelection","tmpIndent","isInWhitespace","lastEndIndex","generateWhitespace","lastCharCode","_lineDecorations","lineDecorationsLen","lineDecorationIndex","lastResultEndIndex","lastCharacterMappingDefined","charOffsetInPart","charHorizontalOffset","partDisplacement","partEndIndex","partType","partContainsRTL","partRendersWhitespace","partRendersWhitespaceWithWidth","partIsEmptyAndHasPseudoAfter","partWidth","_charIndex","_visibleColumn","charWidth","producedCharacters","to4CharHex","renderOverflowingCharCount","Viewport","MinimapLinesRenderingData","ViewLineData","inlineDecorations","ViewLineRenderingData","InlineDecoration","SingleLineInlineDecoration","inlineClassNameAffectsLetterSpacing","ViewModelDecoration","OverviewRulerDecorationsGroup","isFuzzyActionArr","isFuzzyAction","isIAction","fixCase","createError","substituteMatches","re","stateMatches","full","sub","dollar","ofs","substituteMatchesRe","findRules","inState","stateExists","MonarchTokenizer_1","CACHE_STACK_DEPTH","MonarchStackElementFactory","maxCacheDepth","MonarchStackElement","stackElementId","EmbeddedLanguageData","MonarchLineStateFactory","embeddedLanguageData","MonarchLineState","MonarchClassicTokensCollector","languages.Token","embeddedLanguageLine","offsetDelta","nestedLanguageId","embeddedModeState","nestedLanguageTokenizationSupport","languages.TokenizationRegistry","nestedResult","languages.TokenizationResult","MonarchModernTokensCollector","cLen","languages.EncodedTokenizationResult","MonarchTokenizer","standaloneThemeService","emitting","isOneOfMyEmbeddedModes","nestedModeStatus","rootState","lineState","tokensCollector","endLineState","monarchCommon.findRules","monarchCommon.createError","popOffset","hasEmbeddedPopRule","monarchCommon.isIAction","regexSource","nestedEndState","nestedLanguageLine","restOfTheLine","lineWithoutLF","lineWithoutLFLength","groupMatching","forceEvaluation","pos0","stackLen0","groupLen0","enteringEmbeddedLanguage","groupEntry","restOfLine","monarchCommon.isFuzzyAction","monarchCommon.substituteMatches","nextState","monarchCommon.log","computeNewStateForEmbeddedLanguage","totalLen","monarchCommon.isString","findBracket","monarchCommon.sanitize","monarchCommon.fixCase","Colorizer","render","trustedhtml","_fakeColorize","_colorize","inflatedTokens","_actualColorize","renderResult","tokenizeResult","MarkerDecorationsContribution","_editor","_markerDecorationsService","ElementSizeObserver","referenceDomElement","observedDimenstion","observeNow","shouldObserve","alreadyObservedThisAnimationFrame","emitEvent","observedWidth","observedHeight","EditorSettingMigration","migrate","read","write","firstDotIndex","firstSegment","registerEditorSettingMigration","registerSimpleEditorSettingMigration","migrateOptions","migration","suggestFilteredTypesMapping","toBeModified","TabFocusImpl","tabFocusMode","TabFocus","EditorConfiguration","isSimpleWidget","contextMenuId","deepCloneAndMigrateOptions","EditorOptionsUtil","changeEvent","partialEnv","getExtraEditorClassName","_newOptions","modelLineCount","reservedHeight","decorationLaneCount","browser.isWebkitWebView","ValidatedEditorOptions","ComputedEditorOptions","somethingChanged","inputLatency","totalKeydownTime","totalInputTime","totalRenderTime","totalInputLatencyTime","measurementsCount","recordIfFinished","markKeyDownEnd","onBeforeInput","scheduleRecordIfFinishedTask","onInput","markInputEnd","onKeyUp","onRenderStart","markRenderEnd","addMeasure","entryName","cumulativeMeasurement","getAndClearMeasurements","cumulativeToFinalMeasurement","clearCumulativeMeasurement","cumulative","PageCoordinates","ClientCoordinates","clientX","clientY","EditorPagePosition","CoordinatesRelativeToEditor","createEditorPagePosition","editorViewDomNode","editorPos","createCoordinatesRelativeToEditor","editorPagePosition","scaleX","scaleY","relativeX","relativeY","EditorMouseEvent","isFromPointerCapture","EditorMouseEventFactory","EditorPointerEventFactory","GlobalEditorPointerMoveMonitor","ViewEventHandler","shouldRender","ViewPart","PartFingerprints","partId","stopAt","RestrictedRenderingContext","viewLayout","viewportData","vInfo","absoluteTop","includeViewZones","RenderingContext","viewLines","includeNewLines","LineVisibleRanges","outsideRenderedLine","continuesOnNextLine","HorizontalRange","FloatHorizontalRange","HorizontalPosition","VisibleRanges","RangeUtil","startElement","endElement","clientRects","clientRectDeltaLeft","clientRectScale","clientRect","startChildIndex","endChildIndex","canUseFastRenderedViewLine","monospaceAssumptionsAreValid","ViewLineOptions","themeType","ViewLine","deltaTop","lineData","actualInlineDecorations","renderLineInput","renderedViewLine","FastRenderedViewLine","createRenderedLine","horizontalRanges","spanNode","keyColumnCount","expectedWidth","actualWidth","keyColumnOrdinal","keyColumn","keyColumnPixelOffset","keyColumnHorizontalOffset","myDomNode","getColumnOfNodeOffset","RenderedViewLine","pixelOffset","readingTarget","cachedPixelOffset","expectedResult","startDomPosition","endDomPosition","WebKitRenderedViewLine","endPixelOffset","lastRange","createWebKitRenderedLine","createNormalRenderedLine","spanNodeTextContentLength","spanIndex","AtomicTabMoveOperations","prevTabStopPosition","prevTabStopVisibleColumn","currentVisibleColumn","targetVisibleColumn","UnknownHitTestResult","hitTarget","ContentHitTestResult","HitTestResult","createFromDOMInfo","PointerHandlerLastRenderData","lastViewCursorsRenderData","lastTextareaPosition","MouseTarget","EditorRange","mouseColumn","outsidePosition","outsideDistance","ElementPath","HitTestContext","viewHelper","lastRenderData","mouseVerticalOffset","viewZoneWhitespace","viewZoneMiddle","positionBefore","positionAfter","BareHitTestRequest","relativePos","MouseTargetFactory","HitTestRequest","eventTarget","hasEventTarget","EMPTY_CONTENT_AFTER_LINES","createEmptyContentDataInLines","horizontalDistanceToText","resolvedRequest","widgetId","mouseContentHorizontalOffset","cursorVerticalOffset","viewZoneData","mouseTargetType","modelCoordinate","lanes","lineWidth","hitTestResult","possibleLineNumber","visibleRange","columnHorizontalOffset","points","lineMaxColumn","mouseCoordinates","spanNodeClientRect","mouseIsOverSpanNode","rng","prevDelta","nextDelta","lineStartVerticalOffset","lineEndVerticalOffset","lineCenteredVerticalOffset","adjustedPageY","adjustedPage","coords","dom.getShadowRoot","shadowCaretRangeFromPoint","startContainer","parent1","parent2","parent3","hitResult","parent1ClassName","parent2ClassName","tokenSpan","viewModel","normalizedPosition","rect","fontVariant","font","pixelCursor","charWidthReader","CharWidthReader","cacheKey","MouseHandler","viewController","MouseDownOperation","testEventTarget","mouseEvents","capturePointerId","prevMouseWheelTime","gestureStartZoomLevel","gestureHasZoomModifiers","gestureAccumulatedDelta","hasMouseWheelZoomModifiers","targetIsContent","targetIsGutter","targetIsLineNumbers","selectOnLineNumbers","targetIsViewZone","targetIsWidget","shouldHandle","_context","_viewController","_viewHelper","_mouseTargetFactory","createMouseTarget","getMouseColumn","TopBottomDragScrolling","inSelectionMode","revealType","MouseDownState","targetType","dom.isKeyboardEvent","editorContent","verticalOffset","aboveLineNumber","belowLineNumber","positionOutsideEditor","_dispatchMouse","TopBottomDragScrollingOperation","viewportInLines","outsideDistanceInLines","scrollSpeedInLines","scrollInPixels","scrollValue","edgeLineNumber","mouseTarget","startedOnLineNumbers","setMouseDownCount","newMouseDownPosition","TextAreaState","newlineCountBeforeSelection","valueBeforeSelectionStart","previousValueBeforeSelectionStart","select","str1","str2","deltaText","signum","lastLineFeedIndex","couldBeEmojiInput","prefixLength","strings.commonPrefixLength","suffixLength","strings.commonSuffixLength","previousSelectionStart","previousSelectionEnd","currentSelectionStart","currentSelectionEnd","replacePreviousCharacters","previousValue","PagedScreenReaderStrategy","linesPerPage","page","trimLongText","selectionStartPage","selectionStartPageRange","selectionEndPage","selectionEndPageRange","pretextRange","pretextStart","pretext","lastLineMaxColumn","posttextRange","posttextEnd","posttext","selectionRange1","selectionRange2","TextAreaSyntethicEvents","InMemoryClipboardMetadataManager","lastCopiedValue","pastedText","CompositionContext","typeInput","TextAreaInput","_textArea","_OS","_browser","lastKeyDown","_e","currentComposition","ClipboardEventUtils","hadFocus","previousSelectionChangeEventTime","delta1","delta2","newSelectionStart","newSelectionEnd","_newSelectionStartPosition","newSelectionStartPosition","_newSelectionEndPosition","newSelectionEndPosition","newHasFocus","textAreaState","dataToCopy","storedMetadata","clipboardData","rawmetadata","TextAreaWrapper","dom.getActiveElement","currentIsFocused","dom.saveParentsScrollTop","dom.restoreParentsScrollTop","PointerEventHandler","pointerType","pointerEvents","TouchHandler","PointerHandler","platform.isAndroid","platform.isMobile","DynamicViewOverlay","LineNumbersOverlay","primaryViewPosition","viewLineNumber","modelPosition","modelLineNumber","finalLineNumber","lineHeightClassName","visibleStartLineNumber","visibleEndLineNumber","lineNoDecorations","decorationStartIndex","renderLineNumber","extraClassNames","editorLineNumbersColor","editorDimmedLineNumberColor","Margin","adjustedScrollTop","MOUSE_CURSOR_TEXT_CSS_CLASS_NAME","VisibleTextAreaData","distanceToModelLineStart","widthOfHiddenLineTextBefore","distanceToModelLineEnd","visibleRangeProvider","startModelPosition","endModelPosition","tokenPresentation","canUseZeroSizeTextarea","TextAreaHandler","simpleModel","textAreaInputHost","rawTextToCopy","newLineCharacter","isFromEmptySelection","multicursorText","richText","textBefore","placeholderText","browser.isAndroid","positionOffsetInWord","viewAnchorPosition","textAreaWrapper","pasteOnNewLine","modelSelection","ta","widthOfHiddenTextBefore","textBeforeSelection","lineFeedOffset1","lineTextBeforeSelection","tabOffset1","desiredVisibleBeforeCharCount","visibleBeforeCharCount","hiddenLineTextBefore","measureText","textAfterSelection","lineFeedOffset2","lineTextAfterSelection","tabOffset2","desiredVisibleAfterCharCount","visibleAfterCharCount","ANDROID_WORD_SEPARATORS","goingLeft","goingRight","toggleKeybindingLabel","runCommandKeybindingLabel","keybindingEditorKeybindingLabel","editorNotAccessibleMessage","accessibilityPageSize","visibleStart","visibleEnd","viewLineData","startTokenIndex","endTokenIndex","textareaSpansSingleToken","presentation","renderData","tac","targetDocument","autoCloseAlways","autoCloseNever","autoCloseBeforeWhitespace","CursorConfiguration","modelOptions","surroundingPairs","commentsConfiguration","electricChars","scopedLineTokens","electricCharacterSupport","autoCloseConfig","autoCloseBeforeSet","CursorState","modelState","PartialModelCursorState","PartialViewCursorState","SingleCursorState","modelSelections","selectionStartKind","selectionStartLeftoverVisibleColumns","leftoverVisibleColumns","EditOperationResult","isQuote","ColumnSelection","fromVisibleColumn","toVisibleColumn","reversed","isRTL","isLTR","visibleStartColumn","visibleEndColumn","prevColumnSelectData","toViewVisualColumn","maxVisualViewColumn","minViewLineNumber","maxViewLineNumber","lineMaxViewColumn","lineMaxVisualViewColumn","isPaged","toViewLineNumber","ReplaceCommand","insertsAutoWhitespace","helper","srcRange","ReplaceCommandWithoutChangingPosition","ReplaceCommandWithOffsetCursorState","lineNumberDeltaOffset","columnDeltaOffset","ReplaceCommandThatPreservesSelection","initialSelection","CursorPosition","MoveOperations","strings.prevCharLength","noOfColumns","normalizedPos","strings.nextCharLength","allowMoveOnEdgeLine","normalizationAffinity","wasOnFirstPosition","wasOnLastPosition","wasAtEdgePosition","allowMoveOnLastLine","allowMoveOnFirstLine","firstNonBlankColumn","sticky","lastLineNumber","lastColumn","DeleteOperations","prevEditOperationType","shouldPushStackElementBefore","deleteSelection","rightOfPosition","autoClosingDelete","autoClosingBrackets","autoClosingQuotes","autoClosingPairsOpen","autoClosedCharacters","autoClosingPairCandidates","afterCharacter","foundAutoClosingPair","autoClosingPairCandidate","found","autoClosedCharacter","lastIndentationColumn","toColumn","strings.getLeftDeleteOffset","newLine","lastCutRange","WordOperations","wordType","nextCharClass","intlWord","previousIntlWord","nextIntlWord","wordNavigationType","hasMulticursor","prevWordOnLine","strings.isLowerAsciiLetter","strings.isAsciiDigit","rightRight","movedDown","nextWordOnLine","lastNonWhitespace","whitespaceHeuristics","leftIndex","rightIndex","touchesWord","createRangeWithPosition","deleteWordAndAdjacentWhitespace","expandedToTheRight","toPosition","firstNonWhitespace","_wordSeparators","_intlSegmenterLocales","prevWord","nextWord","possiblePosition","CursorMoveCommands","cursors","useLogicalLine","currentViewStateColumn","currentModelStateColumn","isFirstLineOfWrappedLine","currentViewStatelineNumber","viewStatePosition","viewModelMaxColumn","isEndOfViewLine","modelStatePosition","modelMaxColumn","isEndLineOfWrappedLine","_viewPosition","viewPosition","selectToLineNumber","selectToColumn","enteringLineNumber","selectToViewLineNumber","selectToViewColumn","endPositionOfSelectionStart","unit","visibleViewRange","visibleModelRange","modelColumn","newViewLineNumber","halfLine","toViewColumn","toModelLineNumber","toModelColumn","viewColumn","CursorMove","isCursorMoveArgs","cursorMoveArg","types.isString","types.isBoolean","ProcessedIndentRulesSupport","indentRulesSupport","IndentationLineProcessor","newIndentation","processedLine","IndentationContextProcessor","beforeRangeProcessedTokens","afterRangeProcessedTokens","previousLineProcessedTokens","slicedTokens","isLanguageDifferentFromLineStart","columnIndexWithinScope","firstCharacterOffset","lastCharacterOffset","columnWithinLine","getScopedLineTokensAtEndColumnOfLine","endColumnOfLine","emptyTokens","previousLineNumber","scopedLineTokensAtEndColumnOfPreviousLine","previousSlicedLineTokens","replaceIndentation","currentIndentation","shouldRemoveBracketsFromTokenType","bracketsRegExp","textAndMetadata","doesScopeStartAtOffsetZero","isScopedLanguageEqualToFirstLanguageOnLine","getEnterAction","richEditSupport","processedContextTokens","enterResult","indentAction","appendText","removeText","ShiftCommand_1","repeatCache","cachedStringRepeat","ShiftCommand","contentStartVisibleColumn","indentCount","shouldIndentEmptyLines","previousLineExtraSpaces","extraSpaces","indentationEndIndex","enterAction","desiredIndent","oneIndent","lastOp","SurroundSelectionCommand","charBeforeSelection","charAfterSelection","firstOperationRange","secondOperationRange","CompositionSurroundSelectionCommand","_text","_charAfter","opRange","getPrecedingValidLine","processedIndentRulesSupport","resultLineNumber","getInheritIndentForLine","honorIntentialIndent","priorLineNumber","precedingUnIgnoredLine","precedingUnIgnoredLineContent","previousLine","previousLineIndentMetadata","stopLine","getIndentForEnter","indentConverter","afterEnterProcessedTokens","beforeEnterProcessedTokens","beforeEnterIndent","virtualModel","createVirtualModelWithModifiedTokensAtLine","languageIsDifferentFromLineStart","currentLineIndent","afterEnterAction","beforeEnter","afterEnterIndent","getIndentActionForType","cursorConfig","beforeRangeText","afterRangeText","textAroundRange","textAroundRangeWithCharacter","inheritedIndentation","actualCurrentIndentation","inferredIndentationEqualsActual","textAroundRangeContainsOnlyWhitespace","isChFirstNonWhitespaceCharacterAndInAutoClosingPair","modifiedTokens","AutoIndentOperation","isDoingComposition","indentationForSelections","autoClosingPairClose","AutoClosingOpenCharTypeOperation","actualIndentation","shiftIndent","unshiftIndent","indentationEdit","TypeWithIndentationAndAutoClosingCommand","typeCommand","editOptions","includeChInEdit","firstNonWhitespaceColumn","AutoClosingOvertypeOperation","isAutoClosingOvertype","typeSelection","shouldPushStackElementBetween","AutoClosingOvertypeWithInterceptorsOperation","chIsAlreadyTyped","TypeWithAutoClosingCommand","positions","shouldAutoCloseBefore","containedPair","containedPairClose","isContainedPairPresent","lineBefore","lineAfter","characterAfter","characterBefore","neutralCharacter","candidateIsMatch","nextChar","potentialStartingBraces","potentialClosingBraces","isBeforeStartingBrace","isBeforeClosingBrace","SurroundSelectionOperation","closeCharacter","shouldSurroundChar","isTypingAQuoteCharacter","selectionContainsOnlyWhitespace","selectedText","InterceptorElectricCharOperation","electricAction","matchLine","matchLineIndentation","lineFirstNonBlankColumn","typeText","getTypingOperation","SimpleCharacterTypeOperation","opType","EnterOperation","keepPosition","normalIndent","increasedIndent","ir","oldEndViewColumn","oldEndColumn","PasteOperation","distributedPaste","CompositionOperation","replacePrevCharCnt","replaceNextCharCnt","positionDelta","TypeWithoutInterceptorsOperation","TabOperation","goodIndent","possibleTypeText","expectedIndentAction","expectedEnterAction","visibleColumnFromColumn","BaseTypeWithAutoClosingCommand","openCharacter","insertOpenCharacter","autoIndentationEdit","typedText","previousTypingOperation","typingOperation","isTypingOperation","normalizeOperationType","chIsQuote","TypeOperations","compositions","insertedText","composition","hasDeletion","autoClosingOvertypeEdits","autoClosingOpenCharEdits","enterEdits","autoIndentEdits","autoClosingOverTypeEdits","surroundSelectionEdits","interceptorElectricCharOperation","CompositionOutcome","deletedText","deletedSelectionStart","deletedSelectionEnd","insertedSelectionStart","insertedSelectionEnd","EditorContextKeys","CORE_WEIGHT","CoreEditorCommand","EditorScroll_","isEditorScrollArgs","scrollArg","revealCursor","RevealLine_","isRevealLineArgs","reveaLineArg","EditorOrNativeTextInputCommand","focusedEditor","activeEditor","CoreNavigationCommands","BaseMoveToCommand","ColumnSelectCommand","validatedViewPosition","fromViewLineNumber","fromViewVisualColumn","ColumnSelectUpCommand","ColumnSelectDownCommand","CursorMoveImpl","CursorMove_","CursorMoveBasedCommand","dynamicArgs","newModelPosition","newViewPosition","lastAddedCursorIndex","newStates","HomeCommand","LineStartCommand","EndCommand","LineEndCommand","TopCommand","BottomCommand","EditorScrollImpl","horizontalUnits","verticalUnits","horizontalDirections","verticalDirections","runEditorScroll","desiredVisibleViewRange","futureViewport","desiredTopModelLineNumber","noOfLines","deltaLines","deltaColumns","WordCommand","lastAddedState","LineCommand","LastCursorLineCommand","revealLineArg","lineNumberArg","revealAt","viewRange","columnSelectionCondition","registerColumnSelection","CoreEditingCommands","CoreEditingCommand","EditorHandlerCommand","handlerId","registerOverwritableCommand","ViewController","userInputEvents","commandDelegate","selectionClipboardIsOn","columnSelection","doColumnSelect","wholeLine","RenderedLinesCollection","_lineFactory","rendLineNumberStart","deleteFromLineNumber","deleteToLineNumber","deleteCnt","deleteStartIndex","deleteAboveCount","changeFromLineNumber","changeToLineNumber","someoneNotified","changedLineNumber","insertFromLineNumber","insertToLineNumber","insertCnt","beforeLines","afterLines","deletedLines","notifiedSomeone","VisibleLinesCollection","inp","ViewLayerRenderer","resCtx","_domNode","_viewportData","inContext","stopLineNumber","removeCnt","deltaLN","newLinesLen","removeCount","removeIndex","domNodeIsEmpty","newLinesHTML","wasNew","currChild","invalidLinesHTML","wasInvalid","hugeDomNode","lineDomNode","hadNewLine","hadInvalidLine","ViewOverlays","ViewOverlayLine","overlay","dynamicOverlay","dynamicOverlays","ContentViewOverlays","MarginViewOverlays","ViewUserInputEvents","coordinatesConverter","BlockDecorations","newContentWidth","newContentLeft","ViewContentWidgets","viewDomNode","_widget","myWidget","primaryAnchor","secondaryAnchor","PositionPair","getValidPositionPair","validModelPosition","aboveLineTop","heightAvailableAboveLine","underLineTop","heightAvailableUnderLine","aboveTop","fitsAbove","belowTop","fitsBelow","windowSize","MIN_LIMIT","MAX_LIMIT","absoluteLeft","absoluteAboveTop","absoluteBelowTop","absoluteAboveLeft","TOP_PADDING","BOTTOM_PADDING","topLeft","Coordinate","getCoordinates","secondaryViewPosition","horizontalPosition","AnchorCoordinate","preferredDimensions","safeInvoke","pass","pref","AbstractLineHighlightOverlay","cursorsLineNumbers","selectionIsEmpty","renderedLineWrapped","cursorLineNumber","firstViewLineNumber","lastViewLineNumber","renderedLineExact","CurrentLineHighlightOverlay","exact","CurrentLineMarginHighlightOverlay","lineHighlightBorder","DecorationsOverlay","_decorations","decorationsLen","aClassName","bClassName","lenI","decorationOutput","prevClassName","prevShowIfCollapsed","prevRange","prevShouldFillLineOnLineBreak","showIfCollapsed","shouldFillLineOnLineBreak","linesVisibleRanges","lineVisibleRanges","singleVisibleRange","center","lenK","expandToLeft","linesContent","overflowGuardDomNode","scrollPredominantAxis","scrollbarOptions","onBrowserDesperateReveal","lookAtScrollTop","lookAtScrollLeft","newScrollPosition","deltaLeft","DecorationToRender","LineDecorationToRender","VisibleLineDecorationsToRender","DedupOverlay","prevEndLineIndex","GlyphMarginWidgets","glyphMarginClassName","lane","laneIndex","DecorationBasedGlyphRenderRequest","widgetLineNumber","WidgetBasedGlyphRenderRequest","decorationGlyphsToRender","requestsAtLocation","winner","combinedClassName","DecorationBasedGlyph","IndentGuidesOverlay","wrappingInfo","activeCursorPosition","indents","leftOffset","bracketGuides","indentGuides","activeIndentStartLineNumber","activeIndentEndLineNumber","activeIndentLevel","activeIndentInfo","lineGuides","bracketGuidesInLine","bracketGuidesInLineQueue","indentGuidesInLine","indentLvl","indentGuide","peeked","transparentToUndefined","indentColors","bracketColor","guideColor","guideColorActive","effectiveGuideColor","effectiveGuideColorActive","indentColorValues","indentColor","indentColorActive","effectiveIndentColor","effectiveIndentColorActive","DomReadingContext","LastRenderedData","currentVisibleRange","HorizontalRevealRangeRequest","minimalReveal","startScrollTop","stopScrollTop","scrollType","HorizontalRevealSelectionsRequest","ViewLines","newViewLineOptions","rendStartLineNumber","rendEndLineNumber","viewLineDomNode","visibleRanges","visibleRangesLen","domReadingContext","nextLineModelLineNumber","continuesInNextLine","visibleRangesForLine","currentLineModelLineNumber","fast","localMaxLineWidth","allWidthsComputed","visibleLine","longestLineNumber","longestWidth","horizontalRevealRequest","iLineWidth","viewport","verticalType","viewportStartY","viewportHeight","viewportEndY","boxIsSingleRange","boxStartY","boxEndY","shouldIgnoreScrollOff","maxLinesInViewport","surroundingLines","desiredGapAbove","minScrollTop","boxMiddleY","viewportStartX","viewportEndX","boxStartX","boxEndX","viewportStart","viewportEnd","boxStart","boxEnd","revealAtStart","revealAtEnd","viewportLength","LinesDecorationsOverlay","rLen","linesDecorationsClassName","firstLineDecorationClassName","common","lineOutput","addition","MarginViewLineDecorationsOverlay","marginClassName","RGBA8","MinimapTokensColorTracker","backgroundLuminosity","allCharCodes","getCharIndex","fontScale","MinimapCharRenderer","charData","scale","dx","dy","foregroundAlpha","backgroundAlpha","useLighterFont","force1pxHeight","charHeight","destWidth","backgroundR","backgroundG","backgroundB","deltaR","deltaG","deltaB","destAlpha","sourceOffset","colorR","colorG","colorB","charTable","decodeData","prebakedMiniMaps","MinimapCharRendererFactory","canvas","destOffset","brightest","sourceY1","sourceY2","sourceX1","sourceX2","samples","sy","sourceRow","yBalance","sx","xBalance","weight","final","pixelsPerCharacter","adjust","DEFAULT_FONT_FAMILY","GUTTER_DECORATION_WIDTH","MinimapOptions","tokensColorTracker","minimapOpts","defaultBackgroundColor","themeColor","defaultForegroundColor","MinimapLayout","sliderNeeded","_computedSliderRatio","sliderTop","sliderHeight","topPaddingLineCount","pageY","viewportStartLineNumber","viewportEndLineNumber","viewportStartLineNumberVerticalOffset","viewportContainsWhitespaceGaps","realLineCount","previousLayout","minimapLinesFitting","logicalScrollHeight","maxMinimapSliderTop","maxLinesFitting","viewportLineCount","expectedViewportLineCount","extraLinesAtTheTop","extraLinesAtTheBottom","consideringStartLineNumber","partialLine","sliderTopAligned","MinimapLine","RenderData","renderedLayout","imageData","MinimapBuffers","WIDTH","HEIGHT","backgroundA","MinimapSamplingState","oldSamplingState","halfRatio","oldMinimapLines","oldDeltaLineCount","MAX_EVENT_COUNT","lastEvent","oldMinimapLineNumber","selectedViewLineNumber","samplingRatio","minimapLines","fromLineIndex","toLineIndex","sampledLineNumber","minimapLineStart","minimapLineEnd","deletedLineCount","changeStartIndex","changeEndIndex","insertedLineCount","Minimap","samplingState","InnerMinimap","minimapLineRange","minimapCtx","wasSampling","needed","minimapStartLineNumber","minimapEndLineNumber","headerHeightInMinimapLines","modelStartLineNumber","modelEndLineNumber","fitWidth","headerText","cachedText","fittedText","initialPosY","internalOffsetY","initialSliderState","initialPosX","handlePointerMove","posy","posx","minimapPosition","class_","renderingCtx","canvasInnerWidth","canvasInnerHeight","canvasContext","highlightedLines","ContiguousLineMap","lineOffsetMap","y1","y2","yy1","yy2","highlightColors","minimapOptions","decorationColor","highlightColor","characterWidth","decorationRange","x1","x2","lineIndexToXOffset","prevx","sectionHeaderFontSize","sectionHeaderLetterSpacing","backgroundFillHeight","backgroundFill","foregroundColor","foregroundFill","separatorStroke","backgroundFillY","separatorY","ellipsis","ellipsisWidth","averageCharWidth","maxCharCount","halfCharCount","textY","_lastData","_dirtyY1","_dirtyY2","lineInfo","charRenderer","renderMinimapLineHeight","innerLinePadding","renderBackground","renderedLines","dirtyY1","dirtyHeight","lastTargetData","lastStartLineNumber","lastLines","lastLinesLength","targetData","maxDestPixel","dirtyPixel1","dirtyPixel2","copySourceStart","copySourceEnd","copyDestStart","copyDestEnd","dest_dy","source_dy","sourceStart","sourceEnd","destStart","destEnd","dirtyY2","colorTracker","minimapCharRenderer","maxDx","tokenColorId","tokenColor","ViewOverlayWidgets","widgetData","maxMinWidth","widgetMinWidthInPx","stackCoordinates","maxRight","editorBoundingBox","Settings","borderColor","cursorColorSingle","cursorColorPrimary","cursorColorSecondary","minimapEnabled","canvasLeftOffset","canvasWidth","laneCount","leftWidth","rightWidth","centerWidth","centerOffset","rightOffset","DecorationsOverviewRuler","renderNow","newSettings","editorCtx","canvasHeight","heightRatio","minDecorationHeight","halfMinDecorationHeight","canvasCtx","decorationGroup","decorationGroupData","prevLane","prevY1","prevY2","yCenter","cursorHeight","halfCursorHeight","cursorX","cursorW","prevColor","ColorZone","OverviewRulerZone","heightInLines","colorZone","OverviewZoneManager","getVerticalOffsetForLine","newZones","colorZonesInvalid","totalHeight","halfMinimumHeight","allColorZones","zone","ycenter","halfHeight","OverviewRuler","cssClassName","zones","colorZones","id2Color","currentColorId","currentFrom","currentTo","zoneColorId","zoneFrom","zoneTo","Rulers","currentCount","desiredCount","rulerWidth","addCount","ruler","ScrollDecorationViewPart","newShouldShow","HorizontalRangeWithStyle","LineVisibleRangesWithStyle","toStyledRange","toStyled","SelectionsOverlay","previousFrame","epsilon","previousFrameTop","previousFrameBottom","topLineNumber","bottomLineNumber","curLineRange","curLeft","curRight","startStyle","endStyle","prevLeft","prevRight","abs","nextLeft","nextRight","output2","hasMultipleSelections","visibleRangesHaveStyle","firstLineNumber","innerCornerOutput","restOfSelectionOutput","thisFrameVisibleRangesWithStyle","visibleRangesWithStyle","internalCorners","restOfSelection","editorSelectionForegroundColor","ViewCursorRenderData","textContent","textContentClassName","CursorPlurality","ViewCursor","plurality","pauseAnimation","strings.getCharContainingOffset","nextGrapheme","dom.computeScreenAwareSize","visibleRangeForCharacter","firstVisibleRangeForCharacter","ViewCursors","secondaryPositions","addCnt","newCursor","secondaryCursor","blinkingStyle","isHidden","isSolid","renderDataLen","primaryRenderData","secondaryRenderData","cursorThemes","cursorTheme","caretBackground","ViewZones","whitespaces","oldWhitespaces","hadAChange","whitespaceAccessor","oldWhitespace","zoneAfterModelPosition","validAfterLineNumber","zoneBeforeModelPosition","zonesHaveChanged","safeInvoke1Arg","myZone","visibleWhitespaces","visibleZones","hasVisibleZone","visibleWhitespace","newTop","newHeight","newDisplay","WhitespaceOverlay","WhitespaceOptions","USE_SVG","maxLeft","prevChCode","strokeWidth","p1","p2","p3","p4","p5","p6","p7","p8","p9","p10","experimentalWhitespaceRendering","ViewportData","partialData","whitespaceViewportData","EditorTheme","ViewContext","eventHandler","View","colorTheme","overflowWidgetsDomNode","decorationsOverviewRuler","scrollDecoration","contentViewOverlays","marginViewOverlays","blockOutline","overviewRulerData","laneModel","glyphs","glyph","viewZoneId","viewPart","rendering","EditorRenderingCoordinator","viewParts","safeInvokeNoArg","viewPartsToRender","partialViewportData","everything","newPreference","renderingIndex","dom.runAtThisOrScheduleAtNextAnimationFrame","coordinatedRenderings","datas","ModelLineProjectionData","injectionOffsets","injectionOptions","breakOffsets","breakOffsetsVisibleColumn","wrappedTextIndentLength","outputLineIndex","outputOffset","offsetInInput","inputOffset","inputOffsetInInputWithInjection","offsetInInputWithInjections","OutputPosition","normalizedOffsetInUnwrappedLine","maxOutputLineIndex","hasRightCursorStop","hasLeftCursorStop","totalInjectedTextLengthBefore","injectedTextStartOffsetInInputWithInjections","injectedTextEndOffsetInInputWithInjections","cursorStop","baseLineNumber","DOMLineBreaksComputerFactory","wrappingIndent","wordBreak","previousLineBreakData","createLineBreaks","firstLineBreakColumn","injectedTextsPerLine","createEmptyLineBreakWithPossiblyInjectedText","requestIdx","overallWidth","additionalIndentSize","additionalIndentLength","containerDomNode","firstNonWhitespaceIndices","wrappedTextIndentLengths","renderLineContents","allCharOffsets","allVisibleColumns","indentWidth","renderLineContent","renderLine","lineDomNodes","readLineBreaks","visibleColumns","curInjectedTexts","initialVisibleColumn","wrappingIndentLength","hangingOffset","charOffsets","spans","discoverBreaks","lowRects","highRects","readClientRect","midRects","CodeEditorContributions","contributionsState","contribs","contrib","InternalEditorAction","_precondition","_run","MonospaceLineBreaksComputerFactory","breakBeforeChars","breakAfterChars","WrappingCharacterClassifier","previousBreakingData","columnsForFullWidthChar","createLineBreaksFromPreviousLineBreaks","arrPool1","arrPool2","BREAK_BEFORE","BREAK_AFTER","isKeepAll","prevBreakingOffsets","prevBreakingOffsetsVisibleColumn","computeWrappedTextIndentLength","wrappedLineBreakColumn","breakingOffsets","breakingOffsetsVisibleColumn","breakingOffsetsCount","lastBreakingOffset","lastBreakingOffsetVisibleColumn","breakingColumn","bestDistance","prevBreakOffset","prevBreakOffsetVisibleColumn","breakOffset","breakOffsetVisibleColumn","forcedBreakOffset","forcedBreakOffsetVisibleColumn","prevCharCodeClass","entireLineFits","charStartOffset","charCodeClass","computeCharWidth","canBreak","hitATabCharacter","prevCharWidth","remainingWidthOfNextLine","charCodeAtForcedBreakOffset","_lineText","tabCharacterWidth","numberOfAdditionalTabs","Cursor","cacheInput","cacheOutput","sStartPosition","sEndPosition","validPosition","validSStartPosition","validSEndPosition","viewSelectionStart","viewSelectionStart1","viewSelectionStart2","CursorCollection","secondaryStates","secondaryCursorsLength","secondaryStatesLength","createCnt","sortedCursors","sortedCursorIndex","nextSelection","shouldMergeCursors","winnerSortedCursorIndex","looserSortedCursorIndex","looserIndex","winnerIndex","looserSelection","winnerSelection","resultingRange","looserSelectionIsLTR","winnerSelectionIsLTR","resultingSelectionIsLTR","resultingState","sortedCursor","CursorContext","ViewCompositionStartEvent","ViewCompositionEndEvent","ViewConfigurationChangedEvent","ViewCursorStateChangedEvent","ViewDecorationsChangedEvent","ViewFlushedEvent","ViewFocusChangedEvent","isFocused","ViewLanguageConfigurationEvent","ViewLineMappingChangedEvent","ViewLinesChangedEvent","ViewLinesDeletedEvent","ViewLinesInsertedEvent","ViewRevealRangeRequestEvent","revealHorizontal","ViewScrollChangedEvent","ViewThemeChangedEvent","ViewTokensChangedEvent","ViewTokensColorsChangedEvent","ViewZonesChangedEvent$1","ViewModelEventDispatcher","mergeResult","ViewModelEventsCollector","outgoingEvents","viewEvents","outgoingEvent","eventHandlers","ContentSizeChangedEvent","oldContentWidth","oldContentHeight","contentHeight","FocusChangedEvent","oldHasFocus","ScrollChangedEvent","oldScrollWidth","oldScrollLeft","oldScrollHeight","oldScrollTop","ViewZonesChangedEvent","HiddenAreasChangedEvent","CursorStateChangedEvent","oldSelections","oldModelVersionId","modelVersionId","reachedMaxCursorCount","ReadOnlyEditAttemptEvent","ModelDecorationsChangedEvent","ModelLanguageChangedEvent","ModelLanguageConfigurationChangedEvent","ModelContentChangedEvent","ModelOptionsChangedEvent","ModelTokensChangedEvent","CursorsController","eventsCollector","autoClosedAction","multiCursorLimit","CursorModelState","columnSelectData","viewPositions","revealViewRange","revealViewSelections","desiredSelections","hadFlushEvent","cursorState","selectionsFromMarkers","primaryCursor","autoClosedCharactersRanges","autoClosedEnclosingRanges","autoClosedCharactersDeltaDecorations","autoClosedEnclosingDeltaDecorations","autoClosedCharactersDecorations","autoClosedEnclosingDecorations","AutoClosedAction","opResult","CommandExecutor","viewSelections","newCursorState","indices","closeChar","autoClosingPairsCandidates","openChar","closeCharIndex","openCharIndex","autoClosingIndices","undoEdits","openCharInnerIndex","closeCharInnerIndex","undoEdit","cursorChangeReason","CompositionState","compositionOutcome","charLength","newSelections","autoClosedActions","enclosingRanges","selectionsBefore","commandsData","loserCursorsMap","filteredOperations","selectionsAfter","groupedInverseEditOperations","minorBasedSorter","cursorSelections","losingCursors","losingCursorIndex","losingCursor","hadTrackedEditOperation","majorIdentifier","operationMinor","addEditOperation","editOperationBuilder","_selection","trackPreviousOnEmpty","previousOp","currentOp","loserMajor","CompositionLineState","startSelection","endSelection","commonPrefix","commonSuffix","PendingChanges","linesLayout","inserts","removes","EditorWhitespace","afterLineNumber","ordinal","minWidth","LinesLayout$1","LinesLayout","heightInPx","newAfterLineNumber","toChange","applyRemoveAndChange","linesHeight","whitespacesHeight","lastWhitespaceBeforeLineNumber","halfDelta","firstWhitespaceAfterLineNumber","previousLinesHeight","previousWhitespacesHeight","midLineNumber","midLineNumberVerticalOffset","verticalOffset1","verticalOffset2","startLineNumberVerticalOffset","whitespaceIndex","whitespaceCount","currentWhitespaceHeight","currentWhitespaceAfterLineNumber","currentVerticalOffset","currentLineRelativeOffset","STEP_SIZE","bigNumbersDelta","linesOffsets","verticalCenter","centeredLineNumber","currentLineTop","currentLineBottom","endLineNumberVerticalOffset","completelyVisibleStartLineNumber","completelyVisibleEndLineNumber","minWhitespaceIndex","maxWhitespaceIndex","maxWhitespaceVerticalOffset","maxWhitespaceHeight","midWhitespaceIndex","midWhitespaceVerticalOffset","midWhitespaceHeight","candidateIndex","candidateTop","candidateHeight","candidateId","candidateAfterLineNumber","SMOOTH_SCROLLING_TIME","EditorScrollDimensions","EditorScrollable","oldDimensions","contentWidthChanged","contentHeightChanged","ViewLayout","currentScrollPosition","maxLineWidth","extraHorizontalSpace","whitespaceMinWidth","firstLineNumberInViewport","whitespaceAboveFirstLine","visibleBox","ViewModelDecorations","editorId","linesCollection","modelDecoration","modelRange","cacheIsValid","modelDecorations","decorationsInViewport","decorationsInViewportLen","decorationOptions","isModelDecorationVisible","viewModelDecoration","inlineDecoration","intersectedStartLineNumber","intersectedEndLineNumber","isModelDecorationInComment","isModelDecorationInString","testTokensInRange","isFirstLine","isEndLine","tokenIdx","createModelLineProjection","lineBreakData","IdentityModelLineProjection","HiddenModelLineProjection","ModelLineProjection","startOffsetInInputWithInjections","endOffsetInInputWithInjections","spaces","_modelLineNumber","outputLineIdx","globalStartIndex","inlineDecorationsPerOutputLine","currentInjectedOffset","lineStartOffsetInInputWithInjections","lineEndOffsetInInputWithInjections","lineWithInjections","globalIndex","deltaStartIndex","outputColumn","inputColumn","outputPosition","baseViewLineNumber","_outputLineIndex","_fromOuputLineIndex","_toOutputLineIndex","_inputColumn","_outputColumn","_globalStartIndex","_needed","_result","_deltaLineNumber","_spaces","_makeSpaces","ViewModelLinesFromProjectedModel","domLineBreaksComputerFactory","monospaceLineBreaksComputerFactory","wrappingStrategy","CoordinatesConverter","resetHiddenAreas","previousLineBreaks","injectedTextDecorations","lineBreaksComputer","injectedTextQueue","arrays.ArrayQueue","lineInjectedText","linesBreaks","hiddenAreas","areaId","hiddenAreaStart","hiddenAreaEnd","hiddenAreaIdx","nextLineNumberToUpdateHiddenArea","isInHiddenArea","decId","_ranges","validatedRanges","normalizeLineRanges","oldRanges","hasDifference","hasVisibleLine","lineChanged","newOutputLineCount","_modelColumn","newTabSize","equalFontInfo","equalWrappingStrategy","equalWrappingColumn","equalWrappingIndent","equalWordBreak","onlyWrappingColumnChanged","outputFromLineNumber","outputToLineNumber","viewEvents.ViewLinesDeletedEvent","_toLineNumber","lineBreaks","totalOutputLineCount","insertPrefixSumValues","outputLineCount","viewEvents.ViewLinesInsertedEvent","oldOutputLineCount","lineMappingChanged","changeFrom","changeTo","insertFrom","insertTo","deleteFrom","deleteTo","viewLinesChangedEvent","viewEvents.ViewLinesChangedEvent","viewLinesInsertedEvent","viewLinesDeletedEvent","modelMinPosition","modelMaxPosition","viewStartPosition","viewEndPosition","ViewLineInfo","viewLineInfo","minViewColumn","maxViewColumn","viewStartLineNumber","viewEndLineNumber","startViewLine","endViewLine","lastVisibleModelPos","curModelLine","lastVisibleModelPos2","ViewLineInfoGroupedByModelRange","activeViewPosition","modelActivePosition","resultPerViewLine","modelRangeStartLineNumber","bracketGuidesPerModelLine","modelStart","modelEnd","resultRepeatCount","resultRepeatOption","modelStartLineIndex","modelEndLineIndex","reqStart","modelLineIndex","viewLineStartIndex","viewLineEndIndex","viewIndents","blockAtIndex","startModelLineIndex","startRemainder","fromViewLineIndex","remainingViewLineCount","expectedModelPosition","computedModelColumn","expectedModelRange","validViewStart","validViewEnd","allowZeroLineNumber","belowHiddenRanges","inputLineNumber","lineIndexChanged","finalResult","finalResultLen","prevDecId","currentRangeStart","currentRangeEnd","modelLineWrappedLineIdx","allowZero","ViewModelLinesFromModelAsIs","IdentityCoordinatesConverter","_newTabSize","_fontInfo","_wrappingStrategy","_wrappingColumn","_wrappingIndent","_versionId","_minLineNumber","_maxLineNumber","_viewRange","MAX_LANE","GlyphMarginLanesModel","maxLine","bytes","persist","bit","_attachedView","_transactionalTarget","HiddenAreasModel","ViewportStart","viewEvents.ViewScrollChangedEvent","viewEvents.ViewTokensColorsChangedEvent","viewEvents.ViewThemeChangedEvent","linesViewportData","viewVisibleRange","modelVisibleRanges","viewEvents.ViewFocusChangedEvent","viewEvents.ViewCompositionStartEvent","viewEvents.ViewCompositionEndEvent","previousViewportStartViewPosition","previousViewportStartModelPosition","StableViewport","stableViewport","viewEvents.ViewFlushedEvent","viewEvents.ViewLineMappingChangedEvent","viewEvents.ViewDecorationsChangedEvent","viewEvents.ViewConfigurationChangedEvent","hadOtherModelChange","hadModelLineChangeThatChangedLineMapping","textModelEvents.InternalModelContentChangeEvent","lineBreakQueue","linesDeletedEvent","insertedLineBreaks","linesInsertedEvent","changedLineBreakData","linesChangedEvent","viewportStartWasValid","viewPositionTop","viewRanges","viewEvents.ViewTokensChangedEvent","viewEvents.ViewLanguageConfigurationEvent","mergedRanges","firstModelLineInViewPort","linesAround","startViewLineNumber","endViewLineNumber","hiddenStartLineNumber","hiddenEndLineNumber","compatViewState","firstPosition","firstPositionDeltaTop","OverviewRulerDecorations","resultModelPosition","modelAnchor","modelRanges","emptySelectionClipboard","forceCRLF","hasEmptyRange","hasNonEmptyRange","modelLineNumbers","prevModelLineNumber","useDefaultFontFamily","viewEvents.ViewRevealRangeRequestEvent","viewEvents.ViewZonesChangedEvent","viewportStartLineTrackedRange","_viewLineNumber","_isValid","_modelTrackedRange","_startLineDelta","viewportStartLineTop","prevGroup","prevData","prevEndLineNumber","rangeArraysEqual","mergeLineRangeArray","arr1","arr2","viewportStartModelPosition","startLineDelta","CodeEditorWidget_1","CodeEditorWidget","domElement","codeEditorWidgetOptions","InteractionEmitter","BooleanEventEmitter","EDITOR_ID","EditorContextKeysManager","EditorModeContext","CodeEditorWidgetFocusTracker","internalAction","isDropIntoEnabled","dom.DragAndDropObserver","editorCommon.EditorType","eolPreference","hasTextFocus","detachedModel","decorationType","subTypes","subType","maxCol","validatedModelRange","something","isSelection","isRange","revealVerticalInCenter","codeEditorState","reducedState","payload","clipboardEvent","endCursorState","EditorDecorationsCollection","decorationIds","decorationTypeKey","postponeRendering","forceRedraw","domNodeHeight","listenersToRemove","attachedView","ViewModel","hasRealView","viewUserInputEvents","removeDomNode","_emitterOptions","_contributions","deliveryQueue","_languageFeaturesService","newDecorationIds","squigglyStart","squigglyEnd","getSquigglySVGData","dotdotdotStart","dotdotdotEnd","getDotDotDotSVGData","errorForeground","warningForeground","infoForeground","hintForeground","unnecessaryForeground","StableEditorScrollState","visiblePosition","visiblePositionScrollDelta","visiblePositionScrollTop","_initialScrollTop","_initialContentHeight","_visiblePosition","_visiblePositionScrollDelta","_cursorPosition","currentCursorPosition","joinCombine","keySelector","combine","val1","val2","applyObservableDecorations","decorationsCollection","appendRemoveOnDispose","prependRemoveOnDispose","ObservableElementSizeObserver","automaticLayout","animatedObservable","targetVal","startVal","animationStartMs","durationMs","animationFrame","passedMs","easeOutExpo","ViewZoneOverlayWidget","viewZone","ManagedOverlayWidget","applyStyle","PlaceholderViewZone","_afterLineNumber","_domElement","applyViewZones","viewZones","setIsUpdating","zoneIds","lastViewZoneIds","curViewZones","viewZonIdsPerViewZone","viewZoneIdPerOnChangeObservable","vz","translatePosition","posInOriginal","innerMapping","lengthBetweenPositions","filterWithPrevious","RefCounted","debugOwner","BaseRefCounted","_disposable","_debugOwner","ClonedRefCounted","_base","accessibleDiffViewerInsertIcon","accessibleDiffViewerRemoveIcon","accessibleDiffViewerCloseIcon","AccessibleDiffViewer","_parentNode","_visible","_setVisible","_canClose","_diffs","_models","canClose","_accessibilitySignalService","computeViewElementGroups","nextGroup","currentViewItem","LineType","curElem","viewElementGroupLineMargin","viewElements","HeaderViewElement","origFullRange","modifiedFullRange","origRange","origLineNumber","UnchangedLineViewElement","DeletedLineViewElement","AddedLineViewElement","ViewElementGroup","actionBarContainer","originalOptions","modifiedOptions","originalModel","modifiedModel","originalModelOpts","modifiedModelOpts","diffIndex","diffsLength","getAriaLines","originalChangedLinesCntAria","modifiedChangedLinesCntAria","isSelectedObs","originalLayoutInfo","originalLineNumbersWidth","modifiedLayoutInfo","modifiedLineNumbersWidth","rowClassName","lineNumbersExtraClassName","spacerClassName","spacerIcon","spacer","spacerCodicon","AccessibleDiffViewerModelFromEditors","diffInsertIcon","diffRemoveIcon","diffLineAddDecorationBackgroundWithIndicator","diffLineDeleteDecorationBackgroundWithIndicator","diffLineAddDecorationBackground","diffLineDeleteDecorationBackground","diffAddDecoration","diffWholeLineAddDecoration","diffAddDecorationEmpty","diffDeleteDecoration","diffWholeLineDeleteDecoration","diffDeleteDecorationEmpty","WorkerBasedDocumentDiffProvider_1","IDiffProviderFactoryService","WorkerBasedDiffProviderFactoryService","WorkerBasedDocumentDiffProvider","editorWorkerService","uriKey","timeMs","isHotReloadEnabled","registerHotReloadHandler","handlers","registerGlobalHotReloadHandler","hotReloadHandlers","args2","results","newExports","oldExports","newSrc","exportedItem","oldExportedItem","oldDescriptor","readHotReloadableExport","observeHotReloadableExports","_newExports","DiffEditorViewModel","movedText","_diffProviderFactoryService","diffProvider","onChangeSignal","contentChangedSignal","debouncer","lastUnchangedRegions","lastUnchangedRegionsOrigRanges","lastUnchangedRegionsModRanges","updatedLastUnchangedRegions","UnchangedRegion","touching","sumLineCount","originalDecorationIds","modifiedDecorationIds","updateUnchangedRegions","newUnchangedRegions","visibleRegions","hiddenRegions","newUnchangedRegions2","intersecting","documentDiffProvider","originalTextEditInfos","modifiedTextEditInfos","normalizeDocumentDiff","DiffState","currentSyncedMovedText","unchangedRegions","regions","normalizeRangeMapping","DiffMapping","movedTexts","minHiddenLineCount","minContext","inversedMappings","origStart","modStart","atStart","atEnd","visibleLineCountTop","visibleLineCountBottom","visibleLineCountTop2","visibleLineCountBottom2","hiddenModified","modifiedEndLineNumberEx","isLast","newR","maxVisibleLineCountTop","maxVisibleLineCountBottom","InlineDiffDeletedCodeMargin","_visibility","_getViewZoneId","_marginDomNode","_modifiedEditor","_diff","_viewLineCounts","_originalTextModel","_clipboardService","currentLineNumberOffset","useShadowDOM","showContextMenu","isDeletion","originalText","pad","marginDomNode","lineNumberOffset","acc","renderLines","hasCharChanges","maxCharsPerLine","renderedLineCount","viewLineCounts","actualDecorations","lastBreakOffset","renderOriginalLine","minWidthInPx","LineSource","RenderOptions","modifiedEditorOptions","disableMonospaceOptimizations","scrollBeyondLastColumn","viewLineIdx","DiffEditorViewZones","_editors","_diffModel","_diffEditorWidget","_canIgnoreViewZoneUpdateEvent","_origViewZonesToIgnore","_modViewZonesToIgnore","updateImmediately","_args","originalModelTokenizationCompleted","diffModel","innerHunkAlignment","computeRangeAlignment","alignmentsSyncedMovedText","syncedMovedText","createFakeLinesDiv","alignmentViewZonesDisposables","alignmentsVal","origViewZones","modViewZones","modifiedTopPaddingVal","originalTopPaddingVal","renderSideBySide","deletedCodeLineBreaksComputer","lineBreakDataIdx","modLineHeight","allowsTrueInlineDiffRendering","deletedCodeDomNode","marginElement","zoneId","createViewZoneMarginArrow","ignoreChange","newScrollTopModified","newScrollTopOriginal","deltaOrigToMod","trueTopOriginal","originalEditor","modifiedEditor","originalEditorAlignmentViewZones","modifiedEditorAlignmentViewZones","originalLineHeightOverrides","getAdditionalLineHeights","modifiedLineHeightOverrides","origLineHeight","lastOriginalLineNumber","lastModifiedLineNumber","handleAlignmentsOutsideOfDiffs","untilOriginalLineNumberExclusive","untilModifiedLineNumberExclusive","origNext","modNext","distOrig","distNext","emitAlignment","origLineNumberExclusive","modLineNumberExclusive","forceAlignment","lastOrigLineNumber","lastModLineNumber","originalAdditionalHeight","modifiedAdditionalHeight","viewZonesToIgnore","viewZoneHeights","wrappingZoneHeights","hasWrapping","editorLineHeight","rangeIsSingleLine","MovedBlocksLinesFeature","_rootElement","_originalEditorLayoutInfo","_modifiedEditorLayoutInfo","infoOrig","infoMod","computeLineStart","t2","lineAreaLeft","lineAreaWidth","track","verticalY","arrowHeight","arrowWidth","rectWidth","rectHeight","arrowRight","info2","movedBlockViewZones","blocks","MovedBlockOverlayWidget","originalHasFocus","modifiedHasFocus","lastChangedEditor","summary","originalPos","modifiedPos","setsPerTrack","trackPerLineIdx","trackIdx","_trackCount","_viewZone","_move","_kind","editorLayout","actionBar","caption","actionCompare","DiffEditorDecorations","movedTextToCompare","renderIndicators","showEmptyDecorations","originalDecorations","modifiedDecorations","useInlineDiff","fullRangeOriginal","fullRangeModified","activeMovedText","SashLayout","midPoint","sashLeft","MINIMUM_EDITOR_WIDTH","DiffEditorSash","_dimensions","_enabled","_boundarySashes","_resetSash","_sash","sashes","EditorGutter","itemProvider","unusedIds","visibleRange2","gutterItems","gutterItem","gutterItemObs","itemView","ManagedGutterItemView","gutterItemView","ActionRunnerWithContext","_getContext","TextModelText","lastLineLen","ToolBar","ToggleMenuAction","primaryActions","secondaryActions","primaryActionsToSet","toggleDropdownMenu","WorkbenchToolBar","telemetrySource","_primary","_secondary","menuIds","toggleActions","toggleActionsCheckedCount","extraSecondary","someAreHidden","exemptedIds","maxItems","supportsKeybindings","noHide","MenuWorkbenchToolBar","updateToolbar","DiffEditorGutter","diffEditorRoot","_sashLayout","cursorPosition","selectedLineNumbers","DiffGutterItem","currentDiff","DiffToolBar","showAlways","rangeOverride","originalUri","modifiedUri","_item","gutter","itemRange","itemHeight","middleHeight","effectiveCheckboxTop","preferredViewPortRange","preferredParentRange","observableCodeEditor","ObservableCodeEditor","overlayWidgetId","HideUnchangedRegionsFeature_1","HideUnchangedRegionsFeature","startRange","modifiedOutlineSource","compactMode","curUnchangedRegions","origVz","CompactCollapsedCodeOverlayWidget","modViewZone","CollapsedCodeOverlayWidget","unchangedLinesDecoration","unchangedLinesDecorationShow","region","_unchangedRegion","_hide","linesHiddenText","_unchangedRegionRange","_modifiedOutlineSource","_revealModifiedHiddenLine","isFullyRevealed","isDragged","startTop","didMove","mouseMoveListener","newVal","mouseUpListener","top2","span","divItem","OverviewRulerFeature_1","OverviewRulerFeature","_rootWidth","_rootHeight","currentColorTheme","currentColors","insertColor","removeColor","viewportDomElement","diffOverviewRoot","originalOverviewRuler","modifiedOverviewRuler","origViewZonesChanged","modViewZonesChanged","origHiddenRangesChanged","modHiddenRangesChanged","createZones","vm","originalZones","modifiedZones","freeSpace","scrollBarOptions","RevertButtonsFeature","glyphWidgetsModified","selectedDiffs","selectedDiffsSet","btn","RevertButton","_revertSelection","bindContextKey","computeValue","boundKey","DiffEditorEditors","originalEditorElement","modifiedEditorElement","_argCodeEditorWidgetOptions","_createInnerEditor","leftHandSideOptions","rightHandSideOptions","editorWidgetOptions","_reader","changedOptions","clonedOptions","ariaNavigationTip","DelegatingEditor","DiffEditorOptions","isSimpleDiff","optionsCopy","validateDiffEditorOptions","newDiffEditorOptions","supportsTrueDiffRendering","isInsertion","validateBooleanOption","validateStringSetOption","DiffEditorWidget","_parentContextKeyService","_parentInstantiationService","_editorProgressService","fullWidth","fullHeight","gutterWidth","overviewRulerPartWidth","originalLeft","originalWidth","modifiedLeft","modifiedWidth","gutterLeft","movedBlocksLinesWidth","shouldHideOriginalLineNumbers","o2","showSash","unchangedRangesFeature","origViewZoneIdsToIgnore","modViewZoneIdsToIgnore","isUpdatingViewZones","viewZoneManager","originalViewZones","orig","orig2","modifiedViewZones","mod","mod2","isUpdatingOrigViewZones","isUpdatingModViewZones","isInitializingDiff","originalViewState","modifiedViewState","diffEditorState","currentModel","prevValueRef","diffState","toLineChanges","curLineNumber","isModifiedFocus","destinationSelection","sourceSelection","newRange1","newRange2","isModifiedEditor","LAST_GENERATED_COMMAND_ID","ariaDomNodeCreated","createAriaDomNode","aria.setARIAContainer","StandaloneCodeEditor","enableInstantHover","whenExpression","_descriptor","keybindings","keybindingsWhen","contextMenuGroupId","contextMenuOrder","_accessor","uniqueId","menuItem","StandaloneEditor","themeDomRegistration","createTextModel","StandaloneDiffEditor2","editorProgressService","clipboardService","accessibilitySignalService","firstLF","doCreateModel","TemplateData","deltaScrollVertical","DiffEditorItemTemplate","_overflowWidgetsDomNode","_workbenchUIElementFactory","scroll1","scroll2","updateOptions","isRenamed","isDeleted","isAdded","flag","verticalRange","editorScroll","viewPort","ObjectPool","_create","MultiDiffEditorWidgetImpl","_dimension","_viewModel","_d","viewModels","VirtualizedViewItem","ctxAllCollapsed","allCollapsed","viewItems","maxScroll","contentScrollOffsetToScrollOffset","itemHeightSumBefore","itemContentHeightSumBefore","viewPortHeight","contentViewPort","itemContentHeight","itemContentRange","scroll","_objectPool","_scrollLeft","_deltaScrollVertical","verticalSpace","MultiDiffEditorWidget","onDidCreateEditor","onDidCreateDiffEditor","getEditors","getDiffEditors","createDiffEditor","createMultiFileDiffEditor","addCommand","addEditorAction","addKeybindingRule","addKeybindingRules","createModel","setModelLanguage","mimeTypeOrLanguageId","setModelMarkers","removeAllMarkers","getModelMarkers","onDidChangeMarkers","getModel","getModels","onDidCreateModel","onWillDisposeModel","onDidChangeModelLanguage","actualCreateWebWorker","colorizeElement","colorizeModelLine","getSafeTokenizationSupport","tokenize","defineTheme","setTheme","remeasureFonts","registerLinkOpener","registerEditorOpener","selectionOrPosition","createMonacoEditorAPI","standaloneEnums.AccessibilitySupport","standaloneEnums.ContentWidgetPositionPreference","standaloneEnums.CursorChangeReason","standaloneEnums.DefaultEndOfLine","standaloneEnums.EditorAutoIndentStrategy","standaloneEnums.EditorOption","standaloneEnums.EndOfLinePreference","standaloneEnums.EndOfLineSequence","standaloneEnums.MinimapPosition","standaloneEnums.MinimapSectionHeaderStyle","standaloneEnums.MouseTargetType","standaloneEnums.OverlayWidgetPositionPreference","standaloneEnums.OverviewRulerLane","standaloneEnums.GlyphMarginLane","standaloneEnums.RenderLineNumbersType","standaloneEnums.RenderMinimap","standaloneEnums.ScrollbarVisibility","standaloneEnums.ScrollType","standaloneEnums.TextEditorCursorBlinkingStyle","standaloneEnums.TextEditorCursorStyle","standaloneEnums.TrackedRangeStickiness","standaloneEnums.WrappingIndent","standaloneEnums.InjectedTextCursorStops","standaloneEnums.PositionAffinity","standaloneEnums.ShowLightbulbIconMode","isArrayOf","elemType","bool","defValue","arrayToHash","createKeywordMatcher","caseInsensitive","compileRegExp","handleSn","hadExpansion","monarchCommon.empty","lastState","lastRegEx","monarchCommon.substituteMatchesRe","selectScrutinee","num","createGuard","ruleName","tkey","scrut","oppat","pat","tester","inWords","patx","eos","patexp","scrutinee","compileAction","newAction","monarchCommon.stateExists","cases","_case","Rule","sregex","act","compile","lexerMin","addRules","newrules","newrule","rule1","getLanguages","getEncodedLanguageId","onLanguage","encounteredLanguageId","onLanguageEncountered","setLanguageConfiguration","EncodedTokenizationSupportAdapter","TokenizationSupportAdapter","_standaloneThemeService","previousStartIndex","actualResult","tokenTheme","isATokensProvider","isEncodedTokensProvider","setColorMap","createTokenizationSupportAdapter","registerTokensProviderFactory","adaptedFactory","languages.LazyTokenizationSupport","setTokensProvider","setMonarchTokensProvider","languageDef","registerReferenceProvider","languageSelector","registerRenameProvider","registerNewSymbolNameProvider","registerSignatureHelpProvider","registerHoverProvider","registerDocumentSymbolProvider","registerDocumentHighlightProvider","registerLinkedEditingRangeProvider","registerDefinitionProvider","registerImplementationProvider","registerTypeDefinitionProvider","registerCodeLensProvider","registerCodeActionProvider","registerDocumentFormattingEditProvider","registerDocumentRangeFormattingEditProvider","registerOnTypeFormattingEditProvider","registerLinkProvider","registerCompletionItemProvider","registerColorProvider","registerFoldingRangeProvider","registerDeclarationProvider","registerSelectionRangeProvider","registerDocumentSemanticTokensProvider","registerDocumentRangeSemanticTokensProvider","registerInlineCompletionsProvider","registerInlineEditProvider","registerInlayHintsProvider","createMonacoLanguagesAPI","standaloneEnums.DocumentHighlightKind","standaloneEnums.CompletionItemKind","standaloneEnums.CompletionItemTag","standaloneEnums.CompletionItemInsertTextRule","standaloneEnums.SymbolKind","standaloneEnums.SymbolTag","standaloneEnums.IndentAction","standaloneEnums.CompletionTriggerKind","standaloneEnums.SignatureHelpTriggerKind","standaloneEnums.InlayHintKind","standaloneEnums.InlineCompletionTriggerKind","standaloneEnums.InlineEditTriggerKind","standaloneEnums.CodeActionTriggerType","standaloneEnums.NewSymbolNameTag","standaloneEnums.NewSymbolNameTriggerKind","standaloneEnums.PartialAcceptTriggerKind","standaloneEnums.HoverVerbosityAction","languages.FoldingRangeKind","languages.SelectedSuggestionInfo","IEditorCancellationTokens","ctxCancellableOperation","ExtensionIdentifier","ExtensionIdentifierSet","getRealAndSyntheticDocumentFormattersOrdered","documentFormattingEditProvider","documentRangeFormattingEditProvider","docFormatter","formatter","rangeFormatter","FormattingConflicts","getDocumentRangeFormattingEditsUntilResult","workerService","providers","rawEdits","getDocumentFormattingEditsUntilResult","getOnTypeFormattingEdits","resolverService","api","languages","ignoredLogs","processMergedOutputs","outputs","joinMergedOutputs","parseMergedOutputs","mergedOutputs","allLines","stderr","stdout","unmatchedLines","warningCount","errorCount","addError","monaco.MarkerSeverity","shiftSourceName","getLine","lineStr","warning","syntaxDelay","checkSyntax","turnIntoDelayableExecution","sargs","activePath","sources","outFile","job","streams","rej","parameterSet","renderDelay","formatValue","renderArgs","scadPath","isPreview","mountArchives","vars","features","extraArgs","renderFormat","prefixLines","actualRenderFormat","logText","filePath","filePathFragments","bubbleUpDeepMutations","mutate","allOriginalEntries","collectObjectEntriesDeeply","bubbleChangesUp","originalEntries","originalName","originalValue","newName","module","u","require","A","O","I","S","C","E","D","U","P","L","Z","W","M","H","K","Y","F","X","J","is2DFormatExtension","DEFAULT_FACE_COLOR","parseOff","numVertices","numFaces","vertices","faces","numVerts","colorKey","colorIndex","EventDispatcher","listenerArray","GraphEdge","_child","_attributes","parentSet","edge","childSet","_extends","RefList","refs","RefSet","RefMap","$attributes","$immutableKeys","GraphNode","defaultAttributes","prevValue","nextValue","attribute","refAttributes","prevRef","refMap","VERSION","GLB_BUFFER","PropertyType","VertexLayout","BufferViewUsage$1","BufferViewUsage","TextureChannel","ComponentTypeToTypedArray","BufferUtils","dataURI","byteString","ia","isBase64","arrays","totalByteLength","byteOffset","srcArray","paddingByte","paddedLength","dstArray","byteLength","JPEGImageUtils","validateJPEGBuffer","PNGImageUtils","ImageUtils","uncompressedBytes","channels","resolution","FileUtils","ARRAY_TYPE","transformMat4","vec","stride","getBounds","resultBounds","createBounds","mesh","meshBounds","getMeshBounds","expandBounds","worldMatrix","prim","localPos","worldPos","il","point","NULL_DOMAIN","HTTPUtils","isPlainObject","prot","_Logger","Verbosity","Logger","verbosity","determinant","a00","a01","a02","a03","a10","a11","a12","a13","a20","a21","a22","a23","a30","a31","a32","a33","b00","b01","b02","b03","b04","b05","b06","b07","b08","b09","b10","b11","multiply","b0","b1","b2","b3","getScaling","mat","m11","m12","m13","m21","m22","m23","m31","m32","m33","getRotation","scaling","is1","is2","is3","sm11","sm12","sm13","sm21","sm22","sm23","sm31","sm32","sm33","MathUtils","tolerance","componentType","srcMat","dstTranslation","dstRotation","dstScale","sz","_m1","invSX","invSY","invSZ","srcTranslation","srcRotation","srcScale","dstMat","te","z2","xx","xy","xz","yy","yz","zz","wx","wy","wz","equalsRef","refA","refB","equalsRefSet","refSetA","refSetB","refValuesA","refValuesB","equalsRefMap","refMapA","refMapB","keysA","keysB","equalsArray","equalsObject","numKeysA","numKeysB","valueA","valueB","isArray","ALPHABET","UNIQUE_RETRIES","ID_LENGTH","previousIDs","generateOne","rtn","uuid","retries","COPY_IDENTITY","EMPTY_SET","Property","extras","PropertyClass","otherValue","subkey","skip","ExtensibleProperty","extensionProperty","Accessor","normalized","elementSize","sparse","arrayToComponentType","Animation","sampler","AnimationChannel","AnimationSampler","interpolation","Buffer$1","Camera","znear","zfar","aspectRatio","yfov","xmag","ymag","ExtensionProperty","TextureInfo","texCoord","magFilter","minFilter","wrapS","wrapT","Material","doubleSided","baseColorFactor","alphaMode","alphaCutoff","texture","emissiveFactor","strength","Mesh","primitive","weights","translation","rotation","matrix","camera","skin","Primitive","semantic","material","PrimitiveTarget","Scene","Skin","skeleton","inverseBindMatrices","joint","Texture","image","Root","extensionName","otherExtension","defaultScene","Document","_other","transforms","Extension","_event","required","_dependency","_readerContext","_propertyType","_writerContext","ReaderContext","jsonDoc","textureInfo","textureInfoDef","textureDef","samplerDef","DEFAULT_OPTIONS","SUPPORTED_PREREAD_TYPES","GLTFReader","assetDef","asset","extensionsUsed","extensionsRequired","unsupportedHooks","bufferDefs","bufferDef","bufferViewDefs","bufferViewDef","accessorDefs","accessorDef","getAccessorArray","imageDefs","textureDefs","imageDef","bufferData","materialDefs","materialDef","pbrDef","meshDefs","meshDef","primitiveDef","targetNames","targetDef","targetName","accessorIndex","cameraDefs","cameraDef","perspectiveDef","orthoDef","nodeDefs","nodeDef","skinDefs","skinDef","childIndex","animationDefs","animationDef","animation","samplers","channelDef","sceneDefs","sceneDef","scene","hasSparseValues","isZeroFilled","getSparseArray","getInterleavedArray","bufferView","componentSize","accessorByteOffset","byteStride","elementStride","sparseDef","indicesDef","valuesDef","BufferViewTarget","WriterContext","_doc","numBuffers","numImages","UniqueURIGenerator","getSlot","samplerKey","textureKey","throwOnConflict","conflictMessage","cachedUsage","usage","prevUsage","multiple","UNSIGNED_INT","UNSIGNED_SHORT","UNSIGNED_BYTE","SUPPORTED_PREWRITE_TYPES","GLTFWriter","extensionsRegistered","concatAccessors","accessors","bufferByteOffset","bufferViewTarget","buffers","accessorArray","bufferViewData","interleaveAccessors","vertexCount","vertexByteOffset","viewByteOffset","concatSparseAccessors","sparseData","maxIndex","needSparseWarning","ValueArray","IndexArray","IndexComponentType","indicesBufferViewDef","indicesBufferViewIndex","valuesBufferViewDef","valuesBufferViewIndex","textureIndex","groupByParent","accessorParents","uniqueParents","parentToIndex","accessorGroups","bufferByteLength","groupAccessors","_buffer2","_buffer3","_buffer4","_buffer5","imagePadding","samplerIndexMap","samplerIndex","clean","unused","ChunkType","PlatformIO","dependencies","isGLB","glb","isExternalBuffer","isExternalImage","jsonText","jsonChunkData","jsonChunkHeader","jsonChunk","binBuffer","binChunkData","binChunkHeader","binChunk","images","pendingResources","resolveResource","resourceUUID","jsonByteOffset","jsonByteLength","binByteOffset","binByteLength","jsonDocument","NodeIO","_fetch","_fetchConfig","fs","allow","response","jsonContent","batch","listBatches","resourceURI","batchSize","batches","KHR_SUPERCOMPRESSION_NONE","KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT","KHR_DF_VENDORID_KHRONOS","KHR_DF_VERSION","KHR_DF_MODEL_UNSPECIFIED","KHR_DF_MODEL_ETC1S","KHR_DF_MODEL_UASTC","KHR_DF_FLAG_ALPHA_STRAIGHT","KHR_DF_TRANSFER_SRGB","KHR_DF_PRIMARIES_BT709","KHR_DF_SAMPLE_DATATYPE_SIGNED","VK_FORMAT_UNDEFINED","createDefaultContainer","BufferReader","littleEndian","maxByteLength","term","KTX2_ID","decodeText","headerByteLength","headerReader","dfdByteOffset","dfdByteLength","kvdByteOffset","kvdByteLength","sgdByteOffset","sgdByteLength","levelByteLength","levelReader","dfdReader","vendorId","descriptorType","versionNumber","descriptorBlockSize","colorModel","colorPrimaries","transferFunction","texelBlockDimension","bytesPlane","dfd","numSamples","sample","kvdReader","keyValueByteLength","keyData","kvPadding","sgdReader","endpointCount","selectorCount","endpointsByteLength","selectorsByteLength","tablesByteLength","extendedByteLength","imageDescs","endpointsByteOffset","selectorsByteOffset","tablesByteOffset","extendedByteOffset","endpointsData","selectorsData","tablesData","extendedData","EXT_MESH_GPU_INSTANCING","EXT_MESHOPT_COMPRESSION","EXT_TEXTURE_WEBP","EXT_TEXTURE_AVIF","KHR_DRACO_MESH_COMPRESSION","KHR_LIGHTS_PUNCTUAL","KHR_MATERIALS_ANISOTROPY","KHR_MATERIALS_CLEARCOAT","KHR_MATERIALS_DIFFUSE_TRANSMISSION","KHR_MATERIALS_DISPERSION","KHR_MATERIALS_EMISSIVE_STRENGTH","KHR_MATERIALS_IOR","KHR_MATERIALS_IRIDESCENCE","KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS","KHR_MATERIALS_SHEEN","KHR_MATERIALS_SPECULAR","KHR_MATERIALS_TRANSMISSION","KHR_MATERIALS_UNLIT","KHR_MATERIALS_VOLUME","KHR_MATERIALS_VARIANTS","KHR_MESH_QUANTIZATION","KHR_TEXTURE_BASISU","KHR_TEXTURE_TRANSFORM","KHR_XMP_JSON_LD","INSTANCE_ATTRIBUTE","InstancedMesh","EXTMeshGPUInstancing","instancedMeshDef","instancedMesh","EncoderMethod$1","EncoderMethod","MeshoptMode","MeshoptFilter","isFallbackBuffer","BYTE","SHORT","FLOAT","encodeNormalizedInt","decodeNormalizedInt","prepareAccessor","filterOptions","decodeNormalizedIntArray","padNormals","padArrayElements","elementCount","getMeshoptMode","getMeshoptFilter","refName","refKey","isDelta","getTargetPath","DEFAULT_ENCODER_OPTIONS$1","EXTMeshoptCompression","propertyType","viewDef","meshoptDef","fallbackBuffer","fallbackBufferDef","fallbackBufferIndex","nextID","parentToID","getParentID","parentID","preparedAccessor","bufferViewAccessors","otherBufferViews","compressedData","fallbackBufferByteOffset","bufferViewIndex","finalBufferViewDef","compressedByteOffset","bufferViewExtensionDef","AVIFImageUtils","box","unbox","EXTTextureAVIF","imageIndex","WEBPImageUtils","RIFF","WEBP","chunkId","chunkByteLength","EXTTextureWebP","decoderModule","COMPONENT_ARRAY","DATA_TYPE","decodeGeometry","dracoMesh","decodeIndex","numIndices","ptr","decodeAttribute","dataType","ArrayCtor","numComponents","numValues","initDecoderModule","_decoderModule","encoderModule","AttributeEnum","DEFAULT_QUANTIZATION_BITS","DEFAULT_ENCODER_OPTIONS","initEncoderModule","_encoderModule","encodeGeometry","attributeIDs","dracoBuffer","hasMorphTargets","hasSparseAttributes","attributeEnum","getAttributeEnum","attributeID","addAttribute","quantizationVolume","EncodingError","itemSize","KHRDracoMeshCompression","dracoMeshes","primDef","dracoDef","dracoAttribute","attributeArray","primitiveHashMap","listDracoPrimitives","primitiveEncodingMap","primHash","encodedPrim","attributeDef","dracoContext","included","excluded","nonIndexed","nonTriangles","accessorIndices","includedAccessors","includedHashKeys","primToHashKey","hashKey","createHashKey","dstIndices","dstAttribute","parentTypes","indexMap","hashElements","Light","intensity","angle","KHRLightsPunctual","lights","lightDef","_lightDef$spot","_lightDef$spot2","light","lightNodeDef","lightDefs","lightIndexMap","R$7","G$7","B$5","Anisotropy","KHRMaterialsAnisotropy","materialIndex","anisotropy","anisotropyDef","R$6","G$6","B$4","Clearcoat","KHRMaterialsClearcoat","clearcoat","clearcoatDef","R$5","G$5","B$3","A$3","DiffuseTransmission","KHRMaterialsDiffuseTransmission","transmission","transmissionDef","Dispersion","dispersion","KHRMaterialsDispersion","dispersionDef","EmissiveStrength","KHRMaterialsEmissiveStrength","emissiveStrength","emissiveStrengthDef","IOR","ior","KHRMaterialsIOR","iorDef","R$4","G$4","Iridescence","thickness","KHRMaterialsIridescence","iridescence","iridescenceDef","R$3","G$3","B$2","A$2","PBRSpecularGlossiness","KHRMaterialsPBRSpecularGlossiness","specGloss","specGlossDef","R$2","G$2","B$1","A$1","Sheen","KHRMaterialsSheen","sheen","sheenDef","R$1","G$1","Specular","KHRMaterialsSpecular","specular","specularDef","Transmission","KHRMaterialsTransmission","Unlit","KHRMaterialsUnlit","Mapping","variant","MappingList","Variant","KHRMaterialsVariants","variants","variantDef","meshIndex","primIndex","mappingList","variantPrimDef","mappingDef","variantIndex","variantDefs","variantIndexMap","mappingDefs","Volume","KHRMaterialsVolume","volume","volumeDef","KHRMeshQuantization","KTX2ImageUtils","hasAlpha","levelWidth","levelHeight","blockSize","KHRTextureBasisu","basisuDef","Transform","KHRTextureTransform","transformDef","textureInfoEntries","eq","PARENT_TYPES","Packet","copyJSON","jsonld","KHRXMP","_context$jsonDoc$json","extensionDef","packets","packetDef","defLists","propertyLists","defs","xmpDef","packetDefs","packet","parentDef","createPrimitive","getGeom","addedVertices","verticesAdded","addVertex","vertex","face","createBuildPlateGrid","buildPlateMesh","gridSize","half","planeVertices","planeIndices","baseMaterial","basePrimitive","gridSpacing","gridLines","lineVertices","lineIndices","vertexIndex","gridMaterial","gridPrimitive","buildPlateNode","exportGlb","defaultColor","includeBuildPlate","lightExt","LightDef","facesByColor","minZ","maxX","minX","maxY","minY","centerX","centerY","modelNode","UZIP","buf","onlyNames","rUs","rUi","eocd","cnu","csize","coffs","usize","nl","cl","roff","cmpr","nlen","elen","off","crc","noCmpr","tot","wUi","wUs","zpd","cpr","fof","ioff","tab","eend","ns","strl","ci","opos","lvl","goodIndex","putsE","cvrd","dlen","lits","strt","li","lc","bs","ebits","nc","ii","mch","dst","lgi","dgi","nice","pi","dif","tl","td","dlim","maxd","ei","curd","oi","BFINAL","o0","l0","putsF","ML","MD","MH","numl","numd","numh","lset","dset","cstSize","fxdSize","dynSize","BTYPE","ltree","dtree","si","qb","qc","hst","rst","rsl","nxt","nnxt","prv","lz","zc","MAXL","hl","lit","i0","maxl","dps","bCost","dbt","od","u8","bitsF","bitsE","decodeTiny","makeCodes","codes2map","get17","noBuf","HLIT","HDIST","HCLEN","lmap","dmap","mx0","mx1","ebs","dcode","dlit","dbs","bl","nbuf","LL","ll","ni","mx","MAX_BITS","max_code","bl_count","next_code","r15","p0","imb","dt","u16","u32","pushV","tgt","sv","byteToHex","unsafeStringify","getRandomValues","rnds8","randomUUID","native","_v4","rnds","v4","clip_rgb","rgb","classToType","unpack","keyOrder","PI","rnd2","rnd3","TWOPI","PITHIRD","DEG2RAD","RAD2DEG","reverse3","me","autodetect","chk","version","w3cx11","RE_HEX","RE_HEXA","hex2rgb","round","rgb2hex","hxa","labConstants","ILLUMINANTS","setLabWhitePoint","ill","getLabWhitePoint","lab2rgb","lab2xyz","b_","xyz2rgb","kE","kK","kKE","Xn","Yn","Zn","LAB_CONSTANTS","fy","fx","fz","fx3","fz3","xr","yr","zr","compand","linear","sign","MtxAdaptMa","MtxAdaptMaI","MtxXYZ2RGB","RefWhiteRGB","As","Bs","Cs","Ad","Bd","Cd","X1","Y1","Z1","X2","Y2","Z2","rgb2lab","rgb2xyz","xyz2lab","gammaAdjustSRGB","companded","MtxRGB2XYZ","lab","amount","mc","pow","EPS","MAX_ITER","lum","cur_lum","max_iter","lm","rgb2luminance","luminance_x","index$1","mix","col1","col2","interpolator","sin","cos","lch2lab","lch2rgb","hcl2rgb","hcl","sqrt","atan2","lab2lch","rgb2lch","lch","xyz0","xyz1","lrgb","z1","interpolate_hsx","hue0","hue1","sat0","sat1","lbv0","lbv1","sat","hue","lbv","dh","num2rgb","rgb2num","c1","c2","floor","hcg2rgb","_g","_c","rgb2hcg","minRgb","maxRgb","hcg","hsi2rgb","acos","rgb2hsi","min_","hsi","hsl2rgb","t3","h_","rgb2hsl","hsl","hsv2rgb","max_","rgb2hsv","hsv","multiplyMatrices","B_cols","product","oklab2rgb","OKLab_to_XYZ","OKLab","LMStoXYZ","OKLabtoLMS","LMSnl","rgb2oklab","xyz","XYZ_to_OKLab","XYZ","XYZtoLMS","LMStoOKLab","LMS","oklab","oklch","average","_average_lrgb","xyz2","_mode","_nacol","_spread","_positions","_domain","_pos","_padding","_classes","_colors","_out","_correctLightness","_colorCache","_useCache","_gamma","setColors","resetCache","getClass","tMapLightness","tMapDomain","getColor","bypassMap","domain","tOut","tBreaks","_m","_o","L0","L1","pol","L_actual","L_ideal","L_diff","t0","numColors","dm","dd","__range__","asc","inclusive","ascending","binom_row","newrow","bezier","lab0","lab1","lab2","lab3","labs","bezier$1","rnd","blend","blend_f","c0","normal","screen","burn","dodge","cubehelix","rotations","gamma","lightness","dl","fract","amp","cos_a","sin_a","digits","random","random$1","analyze","limits","min_log","max_log","pb","pr","cluster","assignments","clusterSizes","repeat","nb_iters","centroids","mindist","dist","newCentroids","kClusters","tmpKMeansBreaks","contrast","W_offset","P_in","P_out","R_scale","B_threshold","B_exp","contrastAPCA","bg","l_text","l_bg","Y_text","Y_bg","S_norm","S_rev","deltaE","Kl","Kc","Kh","rad2deg","rad","deg2rad","deg","L2","avgL","C1","C2","avgC","a1p","a2p","C1p","C2p","avgCp","arctan1","arctan2","h1p","h2p","avgHp","deltaHp","deltaL","deltaCp","sl","sc","sh","deltaTheta","Rt","sum_sq","valid","scales","colorbrewer","colorbrewerTypes","typeMap","colorbrewerProxy","cmyk2rgb","rgb2cmyk","cmyk","hsl2css","lab2css","laba","lch2css","lcha","oklab2css","rgb2oklch","oklch2css","rgb2css","prevWhitePoint","cssColor","oklch2rgb","INT_OR_PCT","FLOAT_OR_PCT","PCT","RE_S","SEP","COMMA","ANLGE","ALPHA","RE_RGB","RE_RGB_LEGACY","RE_RGBA_LEGACY","RE_HSL","RE_HSL_LEGACY","RE_HSLA_LEGACY","RE_LAB","RE_LCH","RE_OKLAB","RE_OKLCH","roundRGB","percentToAbsolute","pct","signed","noneToValue","noneValue","css2rgb","css","wp","gl","temperature2rgb","kelvin","rgb2temperature","minTemp","maxTemp","eps","brewer","getColorMapping","projectedColors","projectedLabs","targetColor","targetLab","closestIndex","projectedLab","deltaA","PAINT_COLOR_MAP","export3MF","extruderColors","objectUuid","uuidv4","buildUuid","dataColors","extruderIndexByColorIndex","extruderIndex","paintColorByColorIndex","archive","paintColor","githubRx","valuesEqual","buildCustomizerValues","parameter","Model","setStateCallback","statePersister","mutated","exportFormat2D","exportFormat3D","currentVars","updatedVars","readSource","activePathContent","fetchSource","checkerRun","ps","normalPassThrough","glbPassThrough","downloadUrl","exportFormat","exportedData","elapsedMillis","outFileURL","formatMillis","formatBytes","contentBytes","zip","JSZip","retryInOtherDim","setRendering","is2D","loaderPath","displayFile","readFileAsDataURL","offData","displayFileURL","is3D","pipe","_arrayLikeToArray","_arrayWithHoles","_defineProperty","_toPropertyKey","_iterableToArrayLimit","_nonIterableRest","ownKeys","_objectSpread2","_objectWithoutProperties","_objectWithoutPropertiesLoose","_slicedToArray","_unsupportedIterableToArray","_toPrimitive","enumerableOnly","symbols","sym","compose","fns","curry","curried","_len3","nextArgs","_key3","validateChanges","field","validateSelector","validateHandler","_handler","validateInitial","errorMessages","validators","didUpdate","didStateUpdate","updateState","getChanges","extractChanges","getState","setState","causedChanges","_handler$field","validateConfig","informAboutDeprecation","CANCELATION_MESSAGE","makeCancelable","hasCanceled_","wrappedPromise","_excluded","_state$create","config$1","_state$create2","globalConfig","_validators$config","monaco","init","_ref","isInitialized","wrapperPromise","storeMonacoInstance","injectScripts","getMonacoLoaderScript","configureLoader","script","createScript","_ref2","loaderScript","_ref3","loaded","__getMonacoInstance","_ref4","loader","le","ae","Me","Ee","ee","ye","Ce","xe","he","Re","ge","De","be","Oe","Se","oe","ne","ke","ie","Te","He","ve","Ue","se","Ve","ue","Q","Ne","pe","We","fe","de","ze","Ft","openscadEditorOptions","red","purple","blue","lightBlue","green","orange","grey","formatMuiErrorMessage","THEME_ID","sheetForTag","createStyleElement","StyleSheet","_proto","sheet","_tag$parentNode","MS","MOZ","WEBKIT","COMMENT","RULESET","DECLARATION","IMPORT","KEYFRAMES","LAYER","assign","charat","trim","replacement","indexof","begin","strlen","sizeof","copy","alloc","dealloc","delimit","delimiter","escaping","commenter","rulesets","pseudo","declarations","atrule","variable","scanning","ampersand","comment","declaration","ruleset","post","serialize","middleware","collection","rulesheet","identifierWithPointTracking","toRules","getRules","fixedElements","compat","isImplicitRule","parentRules","removeLabel","prefixer","defaultStylisPlugins","createCache","ssrStyles","dataEmotionAttribute","stylisPlugins","nodesToHydrate","attrib","_insert","omnipresentPlugins","currentSheet","finalizingPlugins","serializer","stylis","shouldCache","reactIs_production_min","hasSymbol","REACT_ELEMENT_TYPE","REACT_PORTAL_TYPE","REACT_FRAGMENT_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_PROVIDER_TYPE","REACT_CONTEXT_TYPE","REACT_ASYNC_MODE_TYPE","REACT_CONCURRENT_MODE_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","REACT_BLOCK_TYPE","REACT_FUNDAMENTAL_TYPE","REACT_RESPONDER_TYPE","REACT_SCOPE_TYPE","isValidElementType","typeOf","$$typeof","$$typeofType","AsyncMode","ConcurrentMode","ContextConsumer","ContextProvider","ForwardRef","Fragment","Memo","Portal","Profiler","StrictMode","Suspense","hasWarnedAboutDeprecatedIsAsyncMode","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isPortal","isProfiler","isStrictMode","isSuspense","reactIs_development","reactIsModule","require$$0","require$$1","reactIs","REACT_STATICS","KNOWN_STATICS","FORWARD_REF_STATICS","MEMO_STATICS","TYPE_STATICS","getStatics","defineProperty","getOwnPropertyNames","getOwnPropertySymbols","objectPrototype","hoistNonReactStatics","targetComponent","sourceComponent","blacklist","inheritedComponent","targetStatics","sourceStatics","hoistNonReactStatics_cjs","isBrowser","getRegisteredStyles","registered","registeredStyles","rawClassName","registerStyles","isStringTag","insertStyles","murmur2","unitlessKeys","hyphenateRegex","animationRegex","isCustomProperty","isProcessableValue","processStyleName","styleName","processStyleValue","unitless","handleInterpolation","mergedProps","componentSelector","keyframes","serializedStyles","createStringFromObject","previousCursor","asString","_i","interpolated","labelPattern","serializeStyles","stringMode","asTemplateStringsArr","templateStringsArr","identifierName","hashString","syncFallback","useInsertionEffect","React","useInsertionEffectAlwaysWithSyncFallback","useInsertionEffectWithLayoutFallback","EmotionCacheContext","withEmotionCache","forwardRef","useContext","ThemeContext","hasOwn","typePropName","createEmotionProps","newProps","Insertion","Emotion","cssProp","WrappedComponent","Emotion$1","jsx","argsLength","createElementArgArray","_jsx","JSX","Global","sheetRef","rehydrating","sheetRefCurrent","insertable","reactPropsRegex","isPropValid","testOmitPropsOnStringTag","testOmitPropsOnComponent","getDefaultShouldForwardProp","composeShouldForwardProps","isReal","shouldForwardProp","optionsShouldForwardProp","propName","createStyled","baseTag","targetClassName","defaultShouldForwardProp","shouldUseAs","Styled","FinalTag","classInterpolations","finalShouldForwardProp","nextTag","nextOptions","newStyled","styled","propIsEnumerable","toObject","shouldUseNative","test1","test2","order2","test3","letter","objectAssign","ReactPropTypesSecret","ReactPropTypesSecret_1","has","loggedTypeFailures","checkPropTypes","typeSpecs","componentName","getStack","typeSpecName","ex","checkPropTypes_1","ReactIs","require$$2","require$$3","require$$4","emptyFunctionThatReturnsNull","factoryWithTypeCheckers","isValidElement","throwOnDirectAccess","ITERATOR_SYMBOL","FAUX_ITERATOR_SYMBOL","getIteratorFn","maybeIterable","iteratorFn","ANONYMOUS","ReactPropTypes","createPrimitiveTypeChecker","createAnyTypeChecker","createArrayOfTypeChecker","createElementTypeChecker","createElementTypeTypeChecker","createInstanceTypeChecker","createNodeChecker","createObjectOfTypeChecker","createEnumTypeChecker","createUnionTypeChecker","createShapeTypeChecker","createStrictShapeTypeChecker","PropTypeError","createChainableTypeChecker","manualPropTypeCallCache","manualPropTypeWarningCount","checkType","isRequired","propFullName","secret","chainedCheckType","expectedType","propValue","propType","getPropType","preciseType","getPreciseType","typeChecker","expectedClass","expectedClassName","actualClassName","expectedValues","valuesString","arrayOfTypeCheckers","checker","getPostfixForTypeWarning","expectedTypes","checkerResult","expectedTypesMessage","isNode","invalidValidatorError","shapeTypes","isSymbol","emptyFunction","emptyFunctionWithReset","factoryWithThrowingShims","shim","getShim","propTypesModule","GlobalStyles","defaultTheme","globalStyles","themeInput","PropTypes","stylesFactory","emStyled","internal_mutateStyles","processor","internal_serializeStyles","emSerializeStyles","REACT_CONSUMER_TYPE","REACT_VIEW_TRANSITION_TYPE","REACT_CLIENT_REFERENCE","reactIs_production","prototype","deepmerge","sortBreakpointsValues","breakpointsAsArray","breakpoint1","breakpoint2","createBreakpoints","breakpoints","sortedValues","down","between","only","not","keyIndex","sortContainerQueries","sorted","isCqShorthand","breakpointKeys","getContainerQuery","shorthand","_formatErrorMessage","containerQuery","containerName","cssContainerQueries","toContainerQuery","mediaQuery","attachCq","containerQueries","shape","responsivePropType","defaultBreakpoints","defaultContainerQueries","handleBreakpoints","styleFromPropValue","themeBreakpoints","breakpoint","containerKey","mediaKey","createEmptyBreakpointObject","breakpointsInput","breakpointStyleKey","removeUnusedBreakpoints","breakpointOutput","capitalize","getPath","checkVars","getStyleValue","themeMapping","propValueFinal","userValue","cssProperty","themeKey","aliases","getCssProperties","marginKeys","paddingKeys","spacingKeys","createUnaryUnit","themeSpacing","transformed","createUnarySpacing","transformer","getStyleFromPropValue","cssProperties","resolveCssProperty","createSpacing","spacingInput","spacing","argsInput","argument","borderTransform","createBorderStyle","borderTop","borderRight","borderBottom","borderLeft","borderTopColor","borderRightColor","borderBottomColor","borderLeftColor","outlineColor","gap","columnGap","rowGap","gridColumn","gridRow","gridAutoFlow","gridAutoColumns","gridAutoRows","gridTemplateColumns","gridTemplateRows","gridTemplateAreas","gridArea","paletteTransform","bgcolor","sizingTransform","breakpointsValues","minHeight","boxSizing","defaultSxConfig","objectsHaveSameKeys","objects","union","callIfFn","maybeFn","unstable_createStyleFunctionSx","getThemeValue","styleFunctionSx","traverse","sxInput","sxObject","emptyBreakpoints","breakpointsKeys","styleKey","applyStyles","createTheme","paletteInput","shapeInput","muiTheme","isObjectEmpty","useTheme","contextTheme","systemDefaultTheme","useThemeWithoutDefault","wrapGlobalLayer","themeId","upperTheme","resolvedTheme","styleArg","MuiGlobalStyles","splitProps","extendSxProp","inSx","systemProps","otherProps","finalSx","createClassNameGenerator","generate","generator","ClassNameGenerator","clsx","createBox","defaultClassName","generateClassName","BoxRoot","inProps","globalStateClasses","generateUtilityClass","slot","globalStatePrefix","globalStateClass","generateUtilityClasses","slots","getFunctionComponentName","Component","getWrappedName","outerType","innerType","wrapperName","functionName","getDisplayName","preprocessStyles","shallowLayer","layerName","defaultOverridesResolver","_props","attachTheme","processStyle","resolvedStyle","subStyle","rootStyle","otherStyles","processStyleVariants","mergedState","variantLoop","rootShouldForwardProp","slotShouldForwardProp","styleAttachTheme","inputOptions","mutateStyles","componentSlot","inputSkipVariantsResolver","inputSkipSx","overridesResolver","lowercaseFirstLetter","skipVariantsResolver","skipSx","shouldForwardPropOption","defaultStyledResolver","styledEngineStyled","generateStyledLabel","transformStyle","muiStyledResolver","expressionsInput","expressionsHead","expressionsBody","expressionsTail","styleOverrides","resolvedStyleOverrides","slotKey","themeVariants","inputStrings","placeholdersHead","placeholdersTail","outputStrings","expressions","generateDisplayName","resolveProps","defaultProps","mergeClassNameAndStyle","defaultSlotProps","slotProps","slotPropName","useEnhancedEffect","clampWrapper","hexToRgb","decomposeColor","colorSpace","colorChannel","decomposedColor","private_safeColorChannel","recomposeColor","hslToRgb","getLuminance","getContrastRatio","lumA","lumB","private_safeAlpha","coefficient","private_safeDarken","private_safeLighten","emphasize","private_safeEmphasize","specialProperty","exactProp","propTypes","unsupportedProps","mergeOuterLocalTheme","outerTheme","localTheme","mergedTheme","ThemeProvider","RtlContext","RtlProvider","useRtl","PropsContext","DefaultPropsProvider","getThemeProps","useDefaultProps","globalId","useGlobalId","idOverride","defaultId","setDefaultId","safeReact","maybeReactUseId","useId","reactId","useLayerOrder","modularCssLayers","layerOrder","EMPTY_THEME","useThemeScoping","isPrivate","upperPrivateTheme","usePrivateTheme","engineTheme","privateTheme","rtlValue","MuiThemeProvider","StyledEngineThemeContext","_jsxs","unstable_memoTheme","styleFn","lastTheme","DEFAULT_MODE_STORAGE_KEY","DEFAULT_COLOR_SCHEME_STORAGE_KEY","DEFAULT_ATTRIBUTE","InitColorSchemeScript","defaultMode","defaultLightColorScheme","defaultDarkColorScheme","modeStorageKey","colorSchemeStorageKey","initialAttribute","colorSchemeNode","nonce","noop","localStorageManager","storageWindow","getSystemMode","processState","getColorScheme","useCurrentColorScheme","supportedColorSchemes","storageManager","noSsr","joinedColorSchemes","isMultiSchemes","modeStorage","lightStorage","darkStorage","initialMode","lightColorScheme","darkColorScheme","isClient","setIsClient","setMode","newMode","setColorScheme","newLightColorScheme","newDarkColorScheme","handleMediaQuery","systemMode","mediaListener","media","unsubscribeMode","unsubscribeLight","unsubscribeDark","DISABLE_CSS_TRANSITION","createCssVarsProvider","defaultModeStorageKey","defaultColorSchemeStorageKey","designSystemTransitionOnChange","defaultColorScheme","resolveTheme","defaultContext","ColorSchemeContext","useColorScheme","defaultColorSchemes","defaultComponents","CssVarsProvider","themeProp","disableTransitionOnChange","documentNode","disableNestedContext","disableStyleSheetGeneration","forceThemeRerender","hasMounted","muiUseTheme","initialTheme","scopedTheme","restThemeProp","colorSchemes","cssVarPrefix","allColorSchemes","stateMode","stateColorScheme","calculatedColorScheme","memoTheme","themeVars","schemeKey","colorSchemeSelector","shouldGenerateStyleSheet","createGetCssVar","appendVar","fallbacks","assignNestedKeys","arrayKeys","walkObjectDeep","shouldSkipPaths","recurse","parentKeys","getCssValue","cssVarsParser","shouldSkipGeneratingVar","varsWithDefaults","cssVar","resolvedValue","prepareCssVars","parserConfig","getSelector","defaultGetSelector","disableCssColorScheme","enableContrastVars","otherTheme","rootVars","rootCss","rootVarsWithDefaults","colorSchemesMap","defaultScheme","otherColorSchemes","cssObject","schemeVars","stylesheets","insertStyleSheet","defaultSchemeVal","cssColorSheme","finalCss","createGetColorSchemeSelector","composeClasses","getUtilityClass","slotName","isMuiElement","muiNames","getLight","getDark","dark","addLightOrDark","intent","shade","tonalOffset","tonalOffsetLight","tonalOffsetDark","mixLightOrDark","getDefaultPrimary","getDefaultSecondary","getDefaultError","getDefaultInfo","getDefaultSuccess","getDefaultWarning","contrastColor","createPalette","palette","contrastThreshold","success","getContrastText","contrastText","augmentColor","mainShade","lightShade","darkShade","modeHydrated","prepareTypographyVars","typography","createMixins","mixins","caseAllCaps","defaultFontFamily","createTypography","fontWeightLight","fontWeightRegular","fontWeightMedium","fontWeightBold","htmlFontSize","allVariants","pxToRem2","coef","pxToRem","buildVariant","casing","shadowKeyUmbraOpacity","shadowKeyPenumbraOpacity","shadowAmbientShadowOpacity","createShadow","px","shadows","easing","formatMs","milliseconds","getAutoHeightDuration","constant","createTransitions","inputTransitions","mergedEasing","mergedDuration","durationOption","easingOption","animatedProp","isSerializable","stringifyTheme","baseTheme","serializableTheme","serializeTheme","coefficientToPercentage","parseAddition","numbers","attachColorManipulators","systemAlpha","systemLighten","systemDarken","createThemeNoVars","mixinsInput","transitionsInput","typographyInput","systemTheme","systemCreateTheme","stateClasses","stateClass","getOverlayAlpha","elevation","alphaValue","defaultDarkOverlays","getOpacity","getOverlays","createColorScheme","opacity","overlays","excludeVariablesFromRoot","excludedVariables","assignNode","setColor","toRgb","setColorChannel","safeColorChannel","getSpacingVal","systemCreateGetCssVar","attachColorScheme","restTheme","createThemeWithVars","colorSchemesInput","defaultColorSchemeInput","nativeColor","defaultShouldSkipGeneratingVar","rootSelector","firstColorScheme","getCssVar","defaultSchemeInput","builtInLight","builtInDark","customColorSchemes","setCssVarColor","colorToken","colorMix","mixer","safeAlpha","safeDarken","safeLighten","snackbarContentBackground","safeEmphasize","generateThemeVars","generateStyleSheets","cssVariables","initialColorSchemes","initialDefaultColorScheme","paletteOptions","useThemeSystem","ThemeProviderNoVars","SystemThemeProvider","InternalCssVarsProvider","newTheme","noVarsTheme","createChainedFunction","funcs","SystemGlobalStyles","globalCss","internal_createExtendSxProp","useSystemDefaultProps","getSvgIconUtilityClass","useUtilityClasses","ownerState","SvgIconRoot","SvgIcon","htmlColor","inheritViewBox","titleAccess","hasSvgAsChild","more","createSvgIcon","displayName","wait","debounced","later","ownerDocument","ownerWindow","setRef","unsupportedProp","propFullNameSafe","useControlled","controlled","defaultProp","isControlled","valueState","setValue","setValueIfUncontrolled","useEventCallback","useForkRef","cleanupRef","refEffect","cleanups","refCallback","refCleanup","isEventHandler","thirdCharCode","mergeSlotProps","externalSlotProps","extractHandlers","externalSlotPropsValue","defaultSlotPropsValue","typedDefaultSlotProps","chainPropTypes","propType1","propType2","_setPrototypeOf","_inheritsLoose","timeoutsShape","TransitionGroupContext","forceReflow","UNMOUNTED","EXITED","ENTERING","ENTERED","EXITING","Transition","_React$Component","parentGroup","appear","initialStatus","prevState","nextIn","prevProps","nextStatus","exit","enter","mounting","ReactDOM","_this2","appearing","maybeNode","maybeAppearing","timeouts","enterTimeout","_this3","_this4","active","doesNotHaveTimeoutOrListener","maybeNextCallback","_this$props","childProps","pt","_assertThisInitialized","getChildMapping","mapper","Children","mergeChildMappings","getValueForKey","nextKeysPending","pendingKeys","prevKey","childMapping","nextKey","pendingNextKey","getProp","getInitialChildMapping","onExited","cloneElement","getNextChildMapping","nextProps","prevChildMapping","nextChildMapping","hasPrev","hasNext","prevChild","isLeaving","TransitionGroup","handleExited","firstRender","currentChildMapping","childFactory","UNINITIALIZED","useLazyRef","initArg","EMPTY","useOnMount","Timeout","useTimeout","isClassComponent","elementType","elementTypeAcceptingRef","safePropName","warningHint","elementTypeAcceptingRef$1","reflow","getTransitionProps","isHostComponent","appendOwnerState","resolveComponentProps","componentProps","slotState","extractEventHandlers","excludeKeys","omitEventHandlers","getSlotProps","additionalProps","externalForwardedProps","joinedClasses","mergedStyle","componentsPropsWithoutEventHandlers","otherPropsWithoutEventHandlers","internalSlotProps","useSlot","initialElementType","internalForwardedProps","shouldForwardComponentProp","useSlotPropsParams","rootComponent","resolvedComponentsProps","slotComponent","internalRef","LeafComponent","getCollapseUtilityClass","orientation","CollapseRoot","CollapseWrapper","CollapseWrapperInner","Collapse","addEndListener","collapsedSizeProp","inProp","onEnter","onEntered","onEntering","onExit","onExiting","TransitionComponent","wrapperRef","autoTransitionDuration","collapsedSize","isHorizontal","nodeRef","handleRef","normalizedTransitionCallback","maybeIsAppearing","getWrapperSize","handleEnter","isAppearing","handleEntering","wrapperSize","transitionDuration","transitionTimingFunction","duration2","handleEntered","handleExit","handleExiting","handleAddEndListener","RootSlot","rootSlotProps","WrapperSlot","wrapperSlotProps","WrapperInnerSlot","wrapperInnerSlotProps","incomingOwnerState","restChildProps","stateOwnerState","getTypeByValue","valueType","requiredInteger","validatorNoop","integerPropType","getPaperUtilityClass","square","PaperRoot","Paper","AccordionContext","getAccordionUtilityClass","accordionClasses","expanded","disableGutters","AccordionRoot","transition","AccordionHeading","AccordionRegion","Accordion","childrenProp","defaultExpanded","expandedProp","TransitionComponentProp","TransitionPropsProp","setExpandedState","backwardCompatibleSlots","backwardCompatibleSlotProps","rootProps","AccordionHeadingSlot","accordionProps","TransitionSlot","transitionProps","AccordionRegionSlot","accordionRegionProps","getAccordionDetailsUtilityClass","AccordionDetailsRoot","AccordionDetails","refType","isFocusVisible","LazyRipple","ripple","shouldMount","setShouldMount","createControlledPromise","useLazyRipple","resolveFn","rejectFn","Ripple","pulsate","rippleX","rippleY","rippleSize","leaving","setLeaving","rippleClassName","rippleStyles","childClassName","timeoutId","touchRippleClasses","DURATION","DELAY_RIPPLE","enterKeyframe","exitKeyframe","pulsateKeyframe","TouchRippleRoot","TouchRippleRipple","TouchRipple","centerProp","ripples","setRipples","rippleCallback","ignoringMouseDown","startTimer","startTimerCommit","startCommit","oldRipples","fakeElement","sizeX","sizeY","stop","getButtonBaseUtilityClass","buttonBaseClasses","focusVisible","focusVisibleClassName","composedClasses","ButtonBaseRoot","ButtonBase","centerRipple","disableRipple","disableTouchRipple","focusRipple","LinkComponent","onContextMenu","onDragLeave","onFocusVisible","onMouseUp","onTouchEnd","onTouchMove","TouchRippleProps","touchRippleRef","buttonRef","handleRippleRef","setFocusVisible","enableTouchRipple","handleMouseDown","useRippleHandler","handleContextMenu","handleDragLeave","handleMouseUp","handleMouseLeave","handleTouchStart","handleTouchEnd","handleTouchMove","handleBlur","handleFocus","isNonNativeButton","handleKeyDown","handleKeyUp","ComponentProp","buttonProps","rippleAction","eventCallback","skipRippleAction","getAccordionSummaryUtilityClass","accordionSummaryClasses","AccordionSummaryRoot","AccordionSummaryContent","AccordionSummaryExpandIconWrapper","AccordionSummary","expandIcon","ContentSlot","contentSlotProps","ExpandIconWrapperSlot","expandIconWrapperSlotProps","hasCorrectMainProperty","checkSimplePaletteColorValues","additionalPropertiesToCheck","createSimplePaletteValueFilter","getCircularProgressUtilityClass","SIZE","circularRotateKeyframe","circularDashKeyframe","rotateAnimation","dashAnimation","disableShrink","CircularProgressRoot","CircularProgressSVG","CircularProgressCircle","CircularProgressTrack","CircularProgress","enableTrackSlot","circleStyle","circumference","getIconButtonUtilityClass","iconButtonClasses","loading","IconButtonRoot","IconButtonLoadingIndicator","IconButton","disableFocusRipple","idProp","loadingIndicatorProp","loadingId","loadingIndicator","getTypographyUtilityClass","v6Colors","gutterBottom","noWrap","TypographyRoot","defaultVariantMapping","Typography","themeProps","isSxColor","variantMapping","usePreviousProps","HTMLElementType","useSlotProps","skipResolvingSlotProps","getReactElementRef","getContainer","forwardedRef","disablePortal","mountNode","setMountNode","TextareaAutosize","maxRows","minRows","textareaRef","heightRef","hiddenTextareaRef","calculateTextareaStyles","textarea","hiddenTextarea","innerHeight","singleRowHeight","outerHeightStyle","overflowing","didHeightChange","textareaStyles","syncHeight","frameRef","debouncedHandleResize","containerWindow","resizeObserver","countOfCharacters","isLastCharacterNewLine","isEndOfTheLine","formControlState","muiFormControl","FormControlContext","useFormControl","hasValue","isFilled","SSR","isAdornedStart","getInputBaseUtilityClass","inputBaseClasses","_InputGlobalStyles","rootOverridesResolver","inputOverridesResolver","endAdornment","formControl","hiddenLabel","readOnly","startAdornment","InputBaseRoot","InputBaseInput","placeholderHidden","placeholderVisible","InputGlobalStyles","InputBase","ariaDescribedby","autoComplete","autoFocus","componentsProps","disableInjectingGlobalStyles","inputComponent","inputPropsProp","inputRefProp","renderSuffix","valueProp","inputRef","handleInputRefWarning","handleInputRef","setFocused","fcs","onFilled","onEmpty","checkDirty","handleClick","InputComponent","inputProps","handleAutoFill","Input","getInputUtilityClass","inputClasses","getOutlinedInputUtilityClass","outlinedInputClasses","getFilledInputUtilityClass","filledInputClasses","ArrowDropDownIcon$1","acceptingRef","elementAcceptingRef","Fade","defaultTimeout","getBackdropUtilityClass","invisible","BackdropRoot","Backdrop","useBadge","badgeContentProp","invisibleProp","maxProp","showZero","badgeContent","displayValue","getBadgeUtilityClass","badgeClasses","RADIUS_STANDARD","RADIUS_DOT","anchorOrigin","overlap","BadgeRoot","BadgeBadge","getAnchorOrigin","Badge","anchorOriginProp","classesProp","overlapProp","colorProp","variantProp","invisibleFromHook","displayValueFromHook","anchorOriginPropProp","BadgeSlot","badgeProps","boxClasses","Box","getButtonUtilityClass","buttonClasses","ButtonGroupContext","ButtonGroupButtonContext","disableElevation","loadingPosition","commonIconStyles","ButtonRoot","inheritContainedBackgroundColor","inheritContainedHoverBackgroundColor","ButtonStartIcon","ButtonEndIcon","ButtonLoadingIndicator","ButtonLoadingIconPlaceholder","contextProps","buttonGroupButtonContextPositionClassName","resolvedProps","endIconProp","startIconProp","startIcon","endIcon","positionClassName","getValidReactChildren","getButtonGroupUtilityClass","buttonGroupClasses","ButtonGroupRoot","ButtonGroup","validChildren","childrenCount","getButtonPositionClassName","isFirstButton","isLastButton","getSwitchBaseUtilityClass","SwitchBaseRoot","SwitchBaseInput","SwitchBase","checkedProp","checkedIcon","defaultChecked","disabledProp","setCheckedState","handleInputChange","newChecked","hasLabelFor","InputSlot","inputSlotProps","CheckBoxOutlineBlankIcon","CheckBoxIcon","IndeterminateCheckBoxIcon","getCheckboxUtilityClass","checkboxClasses","indeterminate","CheckboxRoot","defaultCheckedIcon","defaultIcon","defaultIndeterminateIcon","Checkbox","iconProp","indeterminateIconProp","indeterminateIcon","externalInputProps","mapEventPropToEvent","eventProp","clickedRootScrollbar","ClickAwayListener","disableReactTree","onClickAway","touchEvent","movedRef","activatedRef","syntheticEventRef","handleClickAway","insideReactTree","insideDOM","createHandleSynthetic","handlerName","childrenPropsHandler","childrenProps","mappedTouchEvent","mappedMouseEvent","isDynamicSupport","enableColorScheme","colorSchemeStyles","themeOverrides","SELECTOR","staticStyles","baseStyles","CssBaseline","getScrollbarSize","win","documentWidth","ariaHidden","getPaddingRight","isAriaHiddenForbiddenOnElement","isForbiddenTagName","isInputHidden","ariaHiddenSiblings","mountElement","elementsToExclude","isNotExcludedElement","isNotForbiddenElement","findIndexOf","handleContainer","containerInfo","restoreStyle","scrollContainer","getHiddenSiblings","hiddenSiblings","ModalManager","modal","modalIndex","containerIndex","ariaHiddenState","nextTop","candidatesSelector","getTabIndex","tabindexAttr","isNonTabbableRadio","getRadio","roving","isNodeMatchingSelectorFocusable","defaultGetTabbable","regularTabNodes","orderedTabNodes","nodeTabIndex","defaultIsEnabled","FocusTrap","disableAutoFocus","disableEnforceFocus","disableRestoreFocus","getTabbable","isEnabled","ignoreNextEnforceFocus","sentinelStart","sentinelEnd","nodeToRestore","reactFocusEventTarget","activated","rootRef","lastKeydown","loopFocus","nativeEvent","tabbable","isShiftTab","focusNext","focusPrevious","handleFocusSentinel","getHasTransition","manager","useModal","disableEscapeKeyDown","disableScrollLock","closeAfterTransition","onTransitionEnter","onTransitionExited","onClose","mountNodeRef","modalRef","exited","setExited","hasTransition","ariaHiddenProp","getDoc","getModal","handleMounted","resolvedContainer","isTopModal","handlePortalRef","handleClose","createHandleKeyDown","otherHandlers","createHandleBackdropClick","propsEventHandlers","externalEventHandlers","getModalUtilityClass","ModalRoot","ModalBackdrop","Modal","BackdropComponent","BackdropProps","hideBackdrop","keepMounted","propsWithDefaults","getRootProps","getBackdropProps","portalRef","BackdropSlot","backdropProps","getDialogUtilityClass","dialogClasses","DialogContext","DialogBackdrop","fullScreen","DialogRoot","DialogContainer","DialogPaper","Dialog","defaultTransitionDuration","ariaLabelledbyProp","ariaModal","PaperComponent","PaperProps","TransitionProps","backdropClick","handleBackdropClick","ariaLabelledby","dialogContextValue","backdropSlotProps","PaperSlot","paperSlotProps","ContainerSlot","containerSlotProps","transitionSlotProps","getDialogActionsUtilityClass","disableSpacing","DialogActionsRoot","DialogActions","getDialogContentUtilityClass","getDialogTitleUtilityClass","dialogTitleClasses","dividers","DialogContentRoot","DialogContent","getDialogContentTextUtilityClass","DialogContentTextRoot","DialogContentText","DialogTitleRoot","DialogTitle","titleId","getDividerUtilityClass","dividerClasses","absolute","flexItem","textAlign","DividerRoot","DividerWrapper","Divider","disableUnderline","FilledInputRoot","inputBaseRootOverridesResolver","bottomLineColor","hoverBackground","disabledBackground","FilledInputInput","inputBaseInputOverridesResolver","FilledInput","componentsPropsProp","filledInputComponentsProps","getFormControlUtilityClasses","FormControlRoot","FormControl","visuallyFocused","adornedStart","setAdornedStart","initialAdornedStart","filled","setFilled","initialFilled","focusedState","registerEffect","registeredInput","childContext","getFormControlLabelUtilityClasses","formControlLabelClasses","labelPlacement","FormControlLabelRoot","AsteriskComponent","FormControlLabel","control","disableTypography","labelProp","requiredProp","controlProps","TypographySlot","typographySlotProps","getFormHelperTextUtilityClasses","formHelperTextClasses","_span","FormHelperTextRoot","FormHelperText","getFormLabelUtilityClasses","formLabelClasses","FormLabelRoot","FormLabel","getScale","isWebKit154","Grow","autoTimeout","InputRoot","InputInput","inputComponentsProps","getInputLabelUtilityClasses","shrink","disableAnimation","InputLabelRoot","InputLabel","shrinkProp","getLinearProgressUtilityClass","TRANSITION_DURATION","indeterminate1Keyframe","indeterminate1Animation","indeterminate2Keyframe","indeterminate2Animation","bufferKeyframe","bufferAnimation","getColorShade","LinearProgressRoot","LinearProgressDashed","LinearProgressBar1","LinearProgressBar2","LinearProgress","valueBuffer","isRtl","inlineStyles","ListContext","getListUtilityClass","disablePadding","dense","subheader","ListRoot","listItemIconClasses","listItemTextClasses","nextItem","disableListWrap","textCriteriaMatches","nextFocus","textCriteria","moveFocus","disabledItemsFocusable","traversalFunction","wrappedOnce","nextFocusDisabled","MenuList","autoFocusItem","listRef","textCriteriaRef","containerElement","noExplicitWidth","criteria","lowerKey","currTime","keepFocusOnCurrent","activeItemIndex","newChildProps","getPopoverUtilityClass","getOffsetTop","vertical","getOffsetLeft","horizontal","getTransformOriginValue","transformOrigin","resolveAnchorEl","anchorEl","PopoverRoot","PopoverPaper","PaperBase","Popover","anchorReference","containerProp","marginThreshold","PaperPropsProp","transitionDurationProp","paperRef","getAnchorOffset","resolvedAnchorEl","anchorElement","anchorRect","getTransformOrigin","elemRect","getPositioningStyle","elemTransformOrigin","anchorOffset","heightThreshold","widthThreshold","isPositioned","setIsPositioned","setPositioningStyles","positioning","handleResize","rootSlotsProp","rootSlotPropsProp","paperProps","getMenuUtilityClass","RTL_ORIGIN","LTR_ORIGIN","MenuRoot","MenuPaper","MenuMenuList","disableAutoFocusItem","MenuListProps","PopoverClasses","menuListActionsRef","handleListKeyDown","ListSlot","listSlotProps","resolvedTransitionProps","getMenuItemUtilityClass","menuItemClasses","divider","MenuItemRoot","MenuItem","tabIndexProp","menuItemRef","getNativeSelectUtilityClasses","nativeSelectClasses","StyledSelectSelect","NativeSelectSelect","StyledSelectIcon","NativeSelectIcon","NativeSelectInput","IconComponent","NotchedOutlineRoot","NotchedOutlineLegend","NotchedOutline","notched","withLabel","OutlinedInputRoot","OutlinedInputInput","OutlinedInput","NotchedSlot","notchedProps","visuallyHidden","getSelectUtilityClasses","selectClasses","SelectSelect","SelectIcon","SelectNativeInput","areEqualValues","SelectInput","autoWidth","defaultOpen","displayEmpty","labelId","MenuProps","onOpen","openProp","renderValue","SelectDisplayProps","setValueState","openState","setOpenState","displayRef","displayNode","setDisplayNode","isOpenControlled","menuMinWidthState","setMenuMinWidthState","handleDisplayRef","childrenArray","childItem","handleItemClick","itemIndex","clonedEvent","displaySingle","displayMultiple","computeDisplay","foundMatch","menuMinWidth","buttonId","listProps","listboxId","styledRootConfig","StyledInput","StyledOutlinedInput","StyledFilledInput","Select","ArrowDropDownIcon","restOfClasses","inputComponentRef","areArraysEqual","array1","array2","itemComparer","INTENTIONAL_DRAG_COUNT_THRESHOLD","getNewValue","findClosest","trackFinger","touchId","valueToPercent","percentToValue","percent","getDecimalPrecision","matissaDecimalPart","decimalPart","roundValueToStep","nearest","setValueIndex","focusThumb","sliderRef","activeIndex","setActive","areValuesEqual","axisProps","Identity","cachedSupportsTouchActionNone","doesSupportTouchActionNone","useSlider","disableSwap","marksProp","onChangeCommitted","shiftStep","setOpen","dragging","setDragging","moveCount","lastChangedValue","valueDerived","thumbIndex","marks","marksValues","mark","focusedThumbIndex","setFocusedThumbIndex","createHandleHiddenInputFocus","createHandleHiddenInputBlur","changeValue","valueInput","marksIndex","maxMarksValue","createHandleHiddenInputKeyDown","stepSize","currentMarkIndex","decrementKeys","incrementKeys","createHandleHiddenInputChange","axis","getFingerNewValue","finger","slider","stopListening","createHandleMouseDown","trackOffset","trackLeap","externalProps","externalHandlers","ownEventHandlers","mergedEventHandlers","createHandleMouseOver","createHandleMouseLeave","getThumbProps","getThumbStyle","cssWritingMode","shouldSpreadAdditionalProps","Slot","getSliderUtilityClass","sliderClasses","useValueLabelClasses","SliderValueLabel","SliderRoot","SliderRail","SliderTrack","SliderThumb","BaseSliderValueLabel","SliderMark","markActive","SliderMarkLabel","Forward","Slider","ariaValuetext","getAriaLabel","getAriaValueText","valueLabelDisplay","valueLabelFormat","getHiddenInputProps","RailSlot","TrackSlot","ThumbSlot","ValueLabelSlot","MarkSlot","MarkLabelSlot","railSlotProps","trackSlotProps","thumbSlotProps","valueLabelSlotProps","markSlotProps","markLabelSlotProps","railProps","trackProps","thumbProps","valueLabelProps","markProps","markLabelProps","inputSliderProps","ValueLabelComponent","useSnackbar","autoHideDuration","disableWindowBlurListener","resumeHideDuration","timerAutoHide","setAutoHideTimer","autoHideDurationParam","handlePause","handleResume","createHandleBlur","onBlurCallback","createHandleFocus","onFocusCallback","createMouseEnter","onMouseEnterCallback","createMouseLeave","onMouseLeaveCallback","getSnackbarContentUtilityClass","SnackbarContentRoot","emphasis","SnackbarContentMessage","SnackbarContentAction","SnackbarContent","getSnackbarUtilityClass","SnackbarRoot","Snackbar","ClickAwayListenerPropsProp","ContentPropsProp","ClickAwaySlot","clickAwayOwnerStateProp","clickAwayListenerProps","getTabUtilityClass","tabClasses","textColor","wrapped","TabRoot","iconPosition","Tab","indicator","selectionFollowsFocus","KeyboardArrowLeft","KeyboardArrowRight","easeInOutSin","ease","cancelled","ScrollbarSize","scrollbarHeight","setMeasurements","prevHeight","getTabScrollButtonUtilityClass","tabScrollButtonClasses","TabScrollButtonRoot","TabScrollButton","StartButtonIcon","EndButtonIcon","startButtonIconProps","endButtonIconProps","getTabsUtilityClass","tabsClasses","fixed","hideScrollbar","scrollableX","scrollableY","centered","scrollButtonsHideMobile","TabsRoot","TabsScroller","TabsIndicator","TabsScrollbarSize","defaultIndicatorStyle","warnedOnceTabPresent","Tabs","ariaLabelledBy","allowScrollButtonsMobile","indicatorColor","ScrollButtonComponent","scrollButtons","TabIndicatorProps","TabScrollButtonProps","visibleScrollbar","scrollStart","clientSize","startScrollButtonIconProps","endScrollButtonIconProps","mounted","setMounted","indicatorStyle","setIndicatorStyle","displayStartScroll","setDisplayStartScroll","displayEndScroll","setDisplayEndScroll","updateScrollObserver","setUpdateScrollObserver","scrollerStyle","setScrollerStyle","valueToIndex","tabsRef","tabListRef","getTabsMeta","tabsNode","tabsMeta","tabMeta","updateIndicatorState","startValue","startIndicator","newIndicatorStyle","dStart","dSize","moveTabsScroll","getScrollSize","containerSize","totalSize","handleStartScrollClick","handleEndScrollClick","ScrollbarSlot","scrollbarOnChange","scrollbarSlotProps","handleScrollbarSizeChange","scrollbarWidth","ScrollButtonsSlot","scrollButtonSlotProps","getConditionalElements","conditionalElements","showScrollButtons","scrollSelectedIntoView","nextScrollStart","updateScrollButtonState","handleMutation","records","record","mutationObserver","tabListChildren","firstTab","lastTab","observerOptions","handleScrollButtonStart","firstObserver","handleScrollButtonEnd","lastObserver","IndicatorSlot","indicatorSlotProps","childValue","previousItemKey","nextItemKey","ScrollerSlot","scrollerSlotProps","getTextFieldUtilityClass","variantComponent","TextFieldRoot","TextField","FormHelperTextPropsProp","helperText","InputLabelPropsProp","InputPropsProp","SelectPropsProp","helperTextId","inputLabelId","inputAdditionalProps","inputLabelSlotProps","InputLabelSlot","inputLabelProps","HtmlInputSlot","htmlInputProps","FormHelperTextSlot","formHelperTextProps","SelectSlot","selectProps","InputElement","getToggleButtonUtilityClass","toggleButtonClasses","ToggleButtonGroupContext","ToggleButtonGroupButtonContext","isValueSelected","ToggleButtonRoot","ToggleButton","toggleButtonGroupButtonContextPositionClassName","getToggleButtonGroupUtilityClass","toggleButtonGroupClasses","ToggleButtonGroupRoot","ToggleButtonGroup","exclusive","buttonValue","handleExclusiveChange","AddIcon","ChevronLeftIcon","DeleteIcon","DownloadIcon","EditIcon","ExpandMoreIcon","FlashOnIcon","FormatAlignLeftIcon","HelpIcon","MoreIcon","RefreshIcon","SettingsIcon","TuneIcon","ViewIcon","defaultScad","defaultSourcePath","defaultModelColor","defaultBlurhash","createInitialState","blurhash","getBlankProjectState","buildUrlForStateParams","encodeStateParamsAsFragment","compressString","FSContext","ModelContext","biasedCompare","listFilesAsNodes","files","dirs","childPath","isDirectory","zipArchives","repoUrl","FilePicker","fsItems","getParentDir","flattenNodes","flatItems","isMonacoSupported","ua","monacoInstance","mi","EditorPanel","menuAnchorEl","setMenuAnchorEl","useState","menuOpen","setEditor","editorModel","onMount","monaco.KeyMod","monaco.KeyCode","jsxs","Editor","thumbHashToRGBA","header24","header16","l_dc","p_dc","q_dc","l_scale","p_scale","q_scale","isLandscape","lx","ly","a_dc","a_scale","ac_start","ac_index","decodeChannel","nx","ny","ac","cy","cx","l_ac","p_ac","q_ac","a_ac","thumbHashToApproximateAspectRatio","fy2","loadImage","imageToBlurhash","imageUrl","getImageThumbnail","encodeBlurHash","blurHashToImage","pixels","decodeBlurHash","thumbHashToImage","maxSize","opaque","resizedWidth","resizedHeight","PREDEFINED_ORBITS","spherePoint","theta","phi","euclideanDist","dz","radDist","getClosestPredefinedOrbitIndex","distances","radDistances","ptheta","pphi","originalOrbit","ViewerPanel","interactionPrompt","setInteractionPrompt","modelViewerRef","useRef","axesViewerRef","snackbarOpen","setSnackbarOpen","snackbarMessage","setSnackbarMessage","loadedUri","setLoadedUri","cachedImageHash","setCachedImageHash","modelUri","onLoad","useCallback","preview","useEffect","otherRef","handleCameraChange","cameraOrbit","mouseDownSpherePoint","getSpherePoint","orbit","axesOrbit","modelOrbit","HelpMenu","setAnchorEl","openLink","ExportButton","dropdownModel","selectedItem","SettingsMenu","confirmOpen","setConfirmOpen","handleClearStorage","confirmClearStorage","isInStandaloneMode","MultimaterialColorsDialog","tempExtruderColors","setTempExtruderColors","addColor","cancelExtruderPicker","canAddColor","newColor","wasExporting","Footer","getBadgeContent","infoCount","maxMarkerSeverity","PanelSwitcher","iconMap","singleTargets","multiTargets","CustomizerPanel","groupedParameters","param","collapsedTabSet","setTabOpen","ParameterInput","newArray","App","customizerValues","onCustomizerValuesChange","onParametersChange","externalValuesSignatureRef","lastCustomizerValuesSignatureRef","lastParametersRef","signature","serializeSimpleMap","serializeCustomizerValues","isMultiLayout","getPanelFlex","panelId","getPanelDisplay","stripComments","parseOpenSCAD","skipPrivates","withoutComments","functions","modules","includes","uses","paramsStr","optBody","paramStr","am","paramName","builtinSignatures","builtInFunctionNames","builtInModuleNames","builtInVarNames","monaco.languages","openscadLanguage","makeFunctionoidSuggestion","argSnippets","namedArgs","collectingPosArgs","builtinCompletions","keywordSnippets","cleanupVariables","snippet","buildOpenSCADCompletionItemProvider","workingDir","parsedFiles","toAbsolutePath","allSymlinks","deployed","symlinks","readFile","builtinsPath","builtinsDefs","getParsed","addBuiltins","mergeDefinitions","isUse","handleInclude","otherPath","otherSrc","ownDefs","includeMatch","filePrefix","folderPrefix","folderName","suggestions","isFolder","inputFile","previousWithoutComments","statementMatch","mapObject","allWithoutComments","named","registerOpenSCADLanguage","useOpenSCAD","setModel","setFs","isReady","setIsReady","setError","registerCustomAppHeightCSSProperty","filesystem","createEditorFS","modelInstance","OpenSCADPlayground"],"mappings":"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BAAiB,CACf,SAAU,SACd,EACE,QAAS,CACP,SAAU,UACV,UAAWA,EACf,EACE,aAAc,CACZ,SAAU,SACd,EACE,aAAc,CACZ,SAAU,qBACV,MAAOlrO,EACX,EAEE,MAAO,CACL,SAAU,UACV,UAAWysO,EACf,EACE,QAAS,CACP,SAAU,UACV,YAAa,kBACb,UAAWA,EACf,EACE,gBAAiB,CACf,SAAU,UACV,UAAWA,EACf,EAEE,EAAG,CACD,MAAO/zX,EACX,EACE,GAAI,CACF,MAAOA,EACX,EACE,GAAI,CACF,MAAOA,EACX,EACE,GAAI,CACF,MAAOA,EACX,EACE,GAAI,CACF,MAAOA,EACX,EACE,GAAI,CACF,MAAOA,EACX,EACE,GAAI,CACF,MAAOA,EACX,EACE,QAAS,CACP,MAAOA,EACX,EACE,WAAY,CACV,MAAOA,EACX,EACE,aAAc,CACZ,MAAOA,EACX,EACE,cAAe,CACb,MAAOA,EACX,EACE,YAAa,CACX,MAAOA,EACX,EACE,SAAU,CACR,MAAOA,EACX,EACE,SAAU,CACR,MAAOA,EACX,EACE,cAAe,CACb,MAAOA,EACX,EACE,mBAAoB,CAClB,MAAOA,EACX,EACE,iBAAkB,CAChB,MAAOA,EACX,EACE,aAAc,CACZ,MAAOA,EACX,EACE,kBAAmB,CACjB,MAAOA,EACX,EACE,gBAAiB,CACf,MAAOA,EACX,EACE,EAAG,CACD,MAAO2kC,EACX,EACE,GAAI,CACF,MAAOA,EACX,EACE,GAAI,CACF,MAAOA,EACX,EACE,GAAI,CACF,MAAOA,EACX,EACE,GAAI,CACF,MAAOA,EACX,EACE,GAAI,CACF,MAAOA,EACX,EACE,GAAI,CACF,MAAOA,EACX,EACE,OAAQ,CACN,MAAOA,EACX,EACE,UAAW,CACT,MAAOA,EACX,EACE,YAAa,CACX,MAAOA,EACX,EACE,aAAc,CACZ,MAAOA,EACX,EACE,WAAY,CACV,MAAOA,EACX,EACE,QAAS,CACP,MAAOA,EACX,EACE,QAAS,CACP,MAAOA,EACX,EACE,aAAc,CACZ,MAAOA,EACX,EACE,kBAAmB,CACjB,MAAOA,EACX,EA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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,524,528,529,530,531,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,642,643,644,645,646,647,648,649,650,651,652,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,1000,1001]}